Account
The authenticated member.
GET /me
The authenticated account and the key in use
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
username | string | |
verified | boolean | |
member_since | timestamp or null | |
key | object | The key this request was made with. |
key.name | string | |
key.prefix | string | The public lookup prefix; never the secret. |
key.scopes | list of string |
{
"data": {
"id": 1024,
"username": "example",
"verified": true,
"member_since": "2026-10-10T14:03:22Z",
"key": {
"name": "Example",
"prefix": "string",
"scopes": [
"string"
]
}
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/blocked-members
Members you have blocked
Scope: messages:read, or the broad read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
cursor | query | meta.next_cursor from the previous page. Up to 1024 characters. |
limit | query | Page size. Above 100 is treated as 100. At least 1. Default 25. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/blocked-members" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
A page of these in data, with meta.limit and meta.next_cursor.
| Field | Type | Description |
|---|---|---|
id | integer | |
member_id | integer |
{
"data": [
{
"id": 1024,
"member_id": 1024
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | bad_cursor invalid_id invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
POST /me/blocked-members
Block a member
Scope: messages:write, or the broad write. Idempotency-Key is required.
A blocked member cannot message you or order from you. Not a member you have an active order with. Already blocked: 200.
Parameters
| Name | Where | Description |
|---|---|---|
Idempotency-Key required | header | Makes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
member_id required | integer | The member to block. Not yourself. 1 to 4294967295. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/me/blocked-members" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: blockmember-1" \
-H "Content-Type: application/json" \
-d '{"member_id":1024}'
Response 201
| Field | Type | Description |
|---|---|---|
member_id | integer |
{
"data": {
"member_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Response 200
| Field | Type | Description |
|---|---|---|
member_id | integer |
{
"data": {
"member_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
DELETE /me/blocked-members/{member_id}
Unblock a member
Scope: messages:write, or the broad write. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
member_id required | path | At least 1. |
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Example request
curl -X DELETE "https://www.seoclerk.com/api/v1/me/blocked-members/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 204
No body.
Errors
GET /me/bump-balance
Boost credits
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/bump-balance" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
free | integer | |
paid | integer |
{
"data": {
"free": 1,
"paid": 1
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/bumps
Boost credit history
Scope: read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
cursor | query | meta.next_cursor from the previous page. Up to 1024 characters. |
limit | query | Page size. Above 100 is treated as 100. At least 1. Default 25. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/bumps" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
A page of these in data, with meta.limit and meta.next_cursor.
| Field | Type | Description |
|---|---|---|
id | integer | |
type | string | |
reason | string | |
amount | integer | Credits added (positive) or spent (negative). |
order_id | integer | 0 when no order is involved. |
created_at | timestamp or null |
{
"data": [
{
"id": 1024,
"type": "string",
"reason": "string",
"amount": 1,
"order_id": 1024,
"created_at": "2026-10-10T14:03:22Z"
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | bad_cursor invalid_id invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/levels
Buyer and seller levels
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/levels" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
seller_level | integer | |
seller_label | string | |
buyer_level | integer | |
rating | number | |
rating_count | integer | |
community_contributions | integer |
{
"data": {
"seller_level": 1,
"seller_label": "string",
"buyer_level": 1,
"rating": 4.8,
"rating_count": 1,
"community_contributions": 1
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/notification-preferences
Notification preferences
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/notification-preferences" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
receive_pm | boolean | |
receive_email | boolean | |
receive_admin_email | boolean | |
receive_wtbskill_email | boolean | |
receive_follower_email | boolean | |
receive_following_email | boolean | |
receive_faq_email | boolean | |
faq_autoscribe | boolean | |
receive_device_alerts | boolean | |
phone_deals | boolean | |
address_deals | boolean |
{
"data": {
"receive_pm": true,
"receive_email": true,
"receive_admin_email": true,
"receive_wtbskill_email": true,
"receive_follower_email": true,
"receive_following_email": true,
"receive_faq_email": true,
"faq_autoscribe": true,
"receive_device_alerts": true,
"phone_deals": true,
"address_deals": true
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
PATCH /me/notification-preferences
Update notification preferences
Scope: account:write, or the broad write. Idempotency-Key is optional.
Any non-empty subset of the fields. Returns the section as GET would. The website's own settings rules apply.
Parameters
| Name | Where | Description |
|---|---|---|
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
receive_pm | boolean | |
receive_email | boolean | |
receive_admin_email | boolean | |
receive_wtbskill_email | boolean | |
receive_follower_email | boolean | |
receive_following_email | boolean | |
receive_faq_email | boolean | |
faq_autoscribe | boolean | |
receive_device_alerts | boolean | |
phone_deals | boolean | |
address_deals | boolean |
Example request
curl -X PATCH "https://www.seoclerk.com/api/v1/me/notification-preferences" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"receive_pm":true}'
Response 200
| Field | Type | Description |
|---|---|---|
receive_pm | boolean | |
receive_email | boolean | |
receive_admin_email | boolean | |
receive_wtbskill_email | boolean | |
receive_follower_email | boolean | |
receive_following_email | boolean | |
receive_faq_email | boolean | |
faq_autoscribe | boolean | |
receive_device_alerts | boolean | |
phone_deals | boolean | |
address_deals | boolean |
{
"data": {
"receive_pm": true,
"receive_email": true,
"receive_admin_email": true,
"receive_wtbskill_email": true,
"receive_follower_email": true,
"receive_following_email": true,
"receive_faq_email": true,
"faq_autoscribe": true,
"receive_device_alerts": true,
"phone_deals": true,
"address_deals": true
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
GET /me/profile
Public profile
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/profile" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
username | string | |
full_name | string | |
description | string | |
skills | string | |
avatar_url | string | |
member_since | timestamp or null | |
headline | string | |
tagline | string |
{
"data": {
"id": 1024,
"username": "example",
"full_name": "string",
"description": "A short description.",
"skills": "string",
"avatar_url": "https://www.seoclerk.com/example",
"member_since": "2026-10-10T14:03:22Z",
"headline": "string",
"tagline": "string"
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
PATCH /me/profile
Update public profile
Scope: account:write, or the broad write. Idempotency-Key is optional.
Any non-empty subset of the fields. Returns the section as GET would. The website's own settings rules apply.
Parameters
| Name | Where | Description |
|---|---|---|
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
full_name | string | A first and last name. Can be set once; a name already set cannot be changed. Up to 100 characters. |
description | string | Up to 300 characters. |
skills | string | Up to 350 characters. |
headline | string | Up to 255 characters. |
tagline | string | Up to 255 characters. |
Example request
curl -X PATCH "https://www.seoclerk.com/api/v1/me/profile" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"full_name":"string"}'
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
username | string | |
full_name | string | |
description | string | |
skills | string | |
avatar_url | string | |
member_since | timestamp or null | |
headline | string | |
tagline | string |
{
"data": {
"id": 1024,
"username": "example",
"full_name": "string",
"description": "A short description.",
"skills": "string",
"avatar_url": "https://www.seoclerk.com/example",
"member_since": "2026-10-10T14:03:22Z",
"headline": "string",
"tagline": "string"
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
GET /me/ratings
Ratings received
Scope: read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
cursor | query | meta.next_cursor from the previous page. Up to 1024 characters. |
limit | query | Page size. Above 100 is treated as 100. At least 1. Default 25. |
role | query | Ratings received as a seller or as a buyer. One of seller, buyer. Default seller. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/ratings" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
A page of these in data, with meta.limit and meta.next_cursor.
| Field | Type | Description |
|---|---|---|
id | integer | |
member_id | integer | The member rated. |
rater_id | integer | |
service_id | integer | |
positive | boolean | |
negative | boolean | |
comment | string | |
created_at | timestamp or null | |
edited_at | timestamp or null | |
reply | string | The seller's reply. Only on ratings of a seller, and only when there is one. |
{
"data": [
{
"id": 1024,
"member_id": 1024,
"rater_id": 1024,
"service_id": 1024,
"positive": true,
"negative": true,
"comment": "Great work.",
"created_at": "2026-10-10T14:03:22Z",
"edited_at": "2026-10-10T14:03:22Z",
"reply": "string"
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | bad_cursor invalid_id invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/recommendations
Published recommendations received
Scope: read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
cursor | query | meta.next_cursor from the previous page. Up to 1024 characters. |
limit | query | Page size. Above 100 is treated as 100. At least 1. Default 25. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/recommendations" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
A page of these in data, with meta.limit and meta.next_cursor.
| Field | Type | Description |
|---|---|---|
id | integer | |
author_id | integer | |
text | string | |
created_at | timestamp or null | |
updated_at | timestamp or null |
{
"data": [
{
"id": 1024,
"author_id": 1024,
"text": "Hello.",
"created_at": "2026-10-10T14:03:22Z",
"updated_at": "2026-10-10T14:03:22Z"
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | bad_cursor invalid_id invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/response-time
Published response-time average
Scope: read.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/response-time" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
average_seconds | integer | |
refresh_pending | boolean | A recalculation is due; reading never triggers it. |
window_days | integer |
{
"data": {
"average_seconds": 1,
"refresh_pending": true,
"window_days": 1
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
GET /me/settings
Account settings
Scope: read.
No credentials, security settings or payout destinations.
Parameters
| Name | Where | Description |
|---|---|---|
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/me/settings" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
email | string | Read only. Changed on the website. |
timezone | string | IANA identifier. |
show_freelancer | boolean | |
allow_custom | boolean | |
allow_portfolio | boolean | |
email_verified | boolean | |
phone_verified | boolean | |
address_verified | boolean | |
identity_verified | boolean | |
out_of_office | boolean | |
work_from | string or null | |
work_to | string or null | |
support_email | string or null | Read only. Changed on the website. |
support_url | string or null | |
skype | string or null | |
discord | string or null | |
whatsapp | string or null | |
support_phone | string or null | |
other_contact_support | string or null |
{
"data": {
"email": "[email protected]",
"timezone": "America/New_York",
"show_freelancer": true,
"allow_custom": true,
"allow_portfolio": true,
"email_verified": true,
"phone_verified": true,
"address_verified": true,
"identity_verified": true,
"out_of_office": true,
"work_from": "string",
"work_to": "string",
"support_email": "string",
"support_url": "string",
"skype": "string",
"discord": "string",
"whatsapp": "string",
"support_phone": "string",
"other_contact_support": "string"
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
| Status | Codes |
|---|---|
| 400 | https_required key_in_query |
| 401 | account_unavailable invalid_credentials key_expired key_revoked |
| 403 | missing_scope |
| 404 | not_found |
| 405 | method_not_allowed |
| 422 | invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
PATCH /me/settings
Update account settings
Scope: account:write, or the broad write. Idempotency-Key is optional.
Any non-empty subset of the fields. Returns the section as GET would. The website's own settings rules apply. Email, password, security and payout fields are website-only and are refused as unknown fields.
Parameters
| Name | Where | Description |
|---|---|---|
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
timezone | string | IANA identifier. Up to 35 characters. |
show_freelancer | boolean | |
allow_custom | boolean | |
allow_portfolio | boolean | |
out_of_office | boolean | |
work_from | string or null | A 12-hour time, as the settings page takes it. Up to 32 characters. |
work_to | string or null | Up to 32 characters. |
support_url | string or null | http or https. Checked for spam and phishing. Up to 500 characters. |
skype | string or null | Up to 128 characters. |
discord | string or null | Up to 128 characters. |
whatsapp | string or null | A valid phone number. Up to 64 characters. |
support_phone | string or null | A valid phone number. Up to 64 characters. |
other_contact_support | string or null | Up to 500 characters. |
Example request
curl -X PATCH "https://www.seoclerk.com/api/v1/me/settings" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"timezone":"America/New_York"}'
Response 200
| Field | Type | Description |
|---|---|---|
email | string | Read only. Changed on the website. |
timezone | string | IANA identifier. |
show_freelancer | boolean | |
allow_custom | boolean | |
allow_portfolio | boolean | |
email_verified | boolean | |
phone_verified | boolean | |
address_verified | boolean | |
identity_verified | boolean | |
out_of_office | boolean | |
work_from | string or null | |
work_to | string or null | |
support_email | string or null | Read only. Changed on the website. |
support_url | string or null | |
skype | string or null | |
discord | string or null | |
whatsapp | string or null | |
support_phone | string or null | |
other_contact_support | string or null |
{
"data": {
"email": "[email protected]",
"timezone": "America/New_York",
"show_freelancer": true,
"allow_custom": true,
"allow_portfolio": true,
"email_verified": true,
"phone_verified": true,
"address_verified": true,
"identity_verified": true,
"out_of_office": true,
"work_from": "string",
"work_to": "string",
"support_email": "string",
"support_url": "string",
"skype": "string",
"discord": "string",
"whatsapp": "string",
"support_phone": "string",
"other_contact_support": "string"
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}