Jobs (Want To Buy)
Jobs buyers post, and the bids on them.
GET /wtb
Search jobs, or list your own
Scope: listings: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. |
mine | query | 1: your own, in any state. One of 0, 1. Default 0. |
category_id | query | At least 1. |
q | query | Matches the title. 2 to 120 characters. |
status | query | Needs mine=1. One of 0, 1, 2, 3, 4. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/wtb" \
-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 | |
title | string | |
description | string | |
category_id | integer | |
budget | money | |
delivery_days | integer | |
created_at | timestamp or null | |
status | integer | 1 live, 4 draft; the others are the owner's own inactive states. |
cancelled | boolean | Closed to new bids. |
tags | string | |
skills | string | |
requirements | string | On wtb. |
offering | string | On wtt. |
images | list of object | |
images[].id | string | Pass back in images to keep it on an edit. |
images[].url | string |
{
"data": [
{
"id": 1024,
"member_id": 1024,
"title": "Logo design",
"description": "A short description.",
"category_id": 1024,
"budget": {
"amount": "12.50",
"currency": "USD"
},
"delivery_days": 1,
"created_at": "2026-10-10T14:03:22Z",
"status": 1,
"cancelled": true,
"tags": "string",
"skills": "string",
"requirements": "string",
"offering": "string",
"images": [
{}
]
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
POST /wtb
Post a job, or a draft of one
Scope: requests:write, or the broad write. Idempotency-Key is required.
The website's job form rules apply, including five jobs per 15 minutes (429 rate_limited). Images are optional.
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 |
|---|---|---|
title required | string | Up to 500 characters. |
description required | string | Up to 65000 characters. |
requirements required | string | Up to 65000 characters. |
category_id required | integer | 1 to 2147483647. |
budget required | integer | Whole dollars. 0 to 999999. |
delivery_days required | integer | 0 to 100000. |
bidding_days required | integer | 1 to 120. |
level_required | integer | 0 to 4. |
skills required | string | Up to 250 characters. |
images | list of string | Ids from POST images, or on an edit the job's own image ids as its read lists them. Replaces the job's images; an empty list removes them; left out, they stay. Up to 3 items. |
draft | boolean | Create as a draft; publish it later with an edit. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: createjob-1" \
-H "Content-Type: application/json" \
-d '{"title":"Logo design","description":"A short description.","requirements":"string","category_id":1024,"budget":1,"delivery_days":1,"bidding_days":1,"skills":"string"}'
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
status | integer |
{
"data": {
"id": 1024,
"status": 1
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
GET /wtb/{id}
A job
Scope: listings:read, or the broad read. Live requests, or your own in any state.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
If-None-Match | header | An ETag from an earlier response. |
Example request
curl "https://www.seoclerk.com/api/v1/wtb/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
member_id | integer | |
title | string | |
description | string | |
category_id | integer | |
budget | money | |
delivery_days | integer | |
created_at | timestamp or null | |
status | integer | 1 live, 4 draft; the others are the owner's own inactive states. |
cancelled | boolean | Closed to new bids. |
tags | string | |
skills | string | |
requirements | string | On wtb. |
offering | string | On wtt. |
images | list of object | |
images[].id | string | Pass back in images to keep it on an edit. |
images[].url | string |
{
"data": {
"id": 1024,
"member_id": 1024,
"title": "Logo design",
"description": "A short description.",
"category_id": 1024,
"budget": {
"amount": "12.50",
"currency": "USD"
},
"delivery_days": 1,
"created_at": "2026-10-10T14:03:22Z",
"status": 1,
"cancelled": true,
"tags": "string",
"skills": "string",
"requirements": "string",
"offering": "string",
"images": [
{
"id": "string",
"url": "https://www.seoclerk.com/example"
}
]
},
"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_id invalid_parameter |
| 429 | rate_limited |
| 500 | internal_error |
PATCH /wtb/{id}
Edit your job, or publish a draft
Scope: requests:write, or the broad write. The owner. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
title | string | Up to 500 characters. |
description | string | Up to 65000 characters. |
requirements | string | Up to 65000 characters. |
category_id | integer | 1 to 2147483647. |
budget | integer | Whole dollars. 0 to 999999. |
delivery_days | integer | 0 to 100000. |
bidding_days | integer | 1 to 120. |
level_required | integer | 0 to 4. |
skills | string | Up to 250 characters. |
images | list of string | Ids from POST images, or on an edit the job's own image ids as its read lists them. Replaces the job's images; an empty list removes them; left out, they stay. Up to 3 items. |
publish | boolean | Publish a draft. |
Example request
curl -X PATCH "https://www.seoclerk.com/api/v1/wtb/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Logo design"}'
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
status | integer |
{
"data": {
"id": 1024,
"status": 1
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
DELETE /wtb/{id}
Delete your job
Scope: requests:write, or the broad write. The owner. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
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/wtb/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 204
No body.
Errors
POST /wtb/{id}/close
Close your job to new bids
Scope: requests:write, or the broad write. The owner. Idempotency-Key is required.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
Idempotency-Key required | header | Makes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb/1024/close" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: closejob-1"
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
cancelled | boolean |
{
"data": {
"id": 1024,
"cancelled": true
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
GET /wtb/{id}/comments
Comments on a job
Scope: listings:read, or the broad read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
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/wtb/1024/comments" \
-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 | |
parent_id | integer or null | |
member_id | integer | |
text | string | |
created_at | timestamp or null | |
updated_at | timestamp or null |
{
"data": [
{
"id": 1024,
"parent_id": 1024,
"member_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 |
POST /wtb/{id}/comments
Comment on a job, or reply to a comment
Scope: requests:write, or the broad write. Idempotency-Key is required.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
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 |
|---|---|---|
text required | string | Up to 5000 characters. |
parent_id | integer or null | Reply to this comment. 1 to 2147483647. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb/1024/comments" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: createjobcomment-1" \
-H "Content-Type: application/json" \
-d '{"text":"Hello."}'
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
request_id | integer |
{
"data": {
"id": 1024,
"request_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
PATCH /wtb/{id}/comments/{comment_id}
Edit your comment
Scope: requests:write, or the broad write. The comment's author. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
comment_id required | path | At least 1. |
Idempotency-Key | header | Makes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Request body
| Field | Type | Description |
|---|---|---|
text required | string | Up to 5000 characters. |
Example request
curl -X PATCH "https://www.seoclerk.com/api/v1/wtb/1024/comments/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello."}'
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
request_id | integer |
{
"data": {
"id": 1024,
"request_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
DELETE /wtb/{id}/comments/{comment_id}
Delete your comment, or one on your job
Scope: requests:write, or the broad write. The comment's author or the job's owner. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
comment_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/wtb/1024/comments/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 204
No body.
Errors
POST /wtb/{id}/reopen
Reopen your job
Scope: requests:write, or the broad write. The owner. Idempotency-Key is required.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
Idempotency-Key required | header | Makes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb/1024/reopen" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: reopenjob-1"
Response 200
| Field | Type | Description |
|---|---|---|
id | integer | |
cancelled | boolean |
{
"data": {
"id": 1024,
"cancelled": true
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
GET /wtb/{id}/responses
Bids on a job
Scope: listings:read, or the broad read. Newest first, by id.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
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/wtb/1024/responses" \
-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 | |
service_id | integer or null | |
title | string | |
text | string | |
price_public | boolean | |
price | money or null | |
multiple_quantity | boolean | |
created_at | timestamp or null |
{
"data": [
{
"id": 1024,
"member_id": 1024,
"service_id": 1024,
"title": "Logo design",
"text": "Hello.",
"price_public": true,
"price": {
"amount": "12.50",
"currency": "USD"
},
"multiple_quantity": true,
"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 |
POST /wtb/{id}/responses
Bid on a job
Scope: requests:write, or the broad write. Idempotency-Key is required.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
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 |
|---|---|---|
title required | string | Up to 250 characters. |
text required | string | Up to 350 characters. |
price required | integer | Whole dollars. 1 to 999999. |
price_public | boolean | |
multiple_quantity | boolean |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb/1024/responses" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: createbid-1" \
-H "Content-Type: application/json" \
-d '{"title":"Logo design","text":"Hello.","price":1}'
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
request_id | integer |
{
"data": {
"id": 1024,
"request_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}
Errors
DELETE /wtb/{id}/responses/{response_id}
Withdraw your bid
Scope: requests:write, or the broad write. The bidder. Idempotency-Key is optional.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
response_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/wtb/1024/responses/1024" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY"
Response 204
No body.
Errors
POST /wtb/{id}/responses/{response_id}/order
Buy a bid with the balance
Scope: checkout:write. The broad write grant does not include it. The job's owner, or anyone when the bid's price is public. Never the bidder. Idempotency-Key is required.
The same purchase as POST orders, at the bid's price. A closed job's owner can still buy a bid.
Parameters
| Name | Where | Description |
|---|---|---|
id required | path | At least 1. |
response_id required | path | At least 1. |
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 |
|---|---|---|
quantity | integer | Above 1 only when the bid allows multiples. 1 to 999. |
expected_total required | string | Must match ^[0-9]{1,7}(\.[0-9]{1,2})?$. |
Example request
curl -X POST "https://www.seoclerk.com/api/v1/wtb/1024/responses/1024/order" \
-H "Authorization: Bearer $SEOCLERKS_API_KEY" \
-H "Idempotency-Key: orderbid-1" \
-H "Content-Type: application/json" \
-d '{"expected_total":"25.00"}'
Response 201
| Field | Type | Description |
|---|---|---|
id | integer | |
service_id | integer | |
buyer_id | integer | |
seller_id | integer | |
title | string | |
status | integer | |
unit_price | money | |
quantity | integer | |
total | money | |
paid_from | string | |
request_id | integer | When a bid was bought. |
response_id | integer | When a bid was bought. |
{
"data": {
"id": 1024,
"service_id": 1024,
"buyer_id": 1024,
"seller_id": 1024,
"title": "Logo design",
"status": 1,
"unit_price": {
"amount": "12.50",
"currency": "USD"
},
"quantity": 1,
"total": {
"amount": "12.50",
"currency": "USD"
},
"paid_from": "balance",
"request_id": 1024,
"response_id": 1024
},
"meta": {
"request_id": "9f2c4e1ab07d3351"
}
}