SeoclerksDevelopers

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

NameWhereDescription
cursorquerymeta.next_cursor from the previous page. Up to 1024 characters.
limitqueryPage size. Above 100 is treated as 100. At least 1. Default 25.
minequery1: your own, in any state. One of 0, 1. Default 0.
category_idqueryAt least 1.
qqueryMatches the title. 2 to 120 characters.
statusqueryNeeds mine=1. One of 0, 1, 2, 3, 4.
If-None-MatchheaderAn 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.

FieldTypeDescription
idinteger
member_idinteger
titlestring
descriptionstring
category_idinteger
budgetmoney
delivery_daysinteger
created_attimestamp or null
statusinteger1 live, 4 draft; the others are the owner's own inactive states.
cancelledbooleanClosed to new bids.
tagsstring
skillsstring
requirementsstringOn wtb.
offeringstringOn wtt.
imageslist of object
images[].idstringPass back in images to keep it on an edit.
images[].urlstring
{
    "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

NameWhereDescription
Idempotency-Key requiredheaderMakes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
title requiredstringUp to 500 characters.
description requiredstringUp to 65000 characters.
requirements requiredstringUp to 65000 characters.
category_id requiredinteger1 to 2147483647.
budget requiredintegerWhole dollars. 0 to 999999.
delivery_days requiredinteger0 to 100000.
bidding_days requiredinteger1 to 120.
level_requiredinteger0 to 4.
skills requiredstringUp to 250 characters.
imageslist of stringIds 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.
draftbooleanCreate 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

FieldTypeDescription
idinteger
statusinteger
{
    "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

NameWhereDescription
id requiredpathAt least 1.
If-None-MatchheaderAn ETag from an earlier response.

Example request

curl "https://www.seoclerk.com/api/v1/wtb/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY"

Response 200

FieldTypeDescription
idinteger
member_idinteger
titlestring
descriptionstring
category_idinteger
budgetmoney
delivery_daysinteger
created_attimestamp or null
statusinteger1 live, 4 draft; the others are the owner's own inactive states.
cancelledbooleanClosed to new bids.
tagsstring
skillsstring
requirementsstringOn wtb.
offeringstringOn wtt.
imageslist of object
images[].idstringPass back in images to keep it on an edit.
images[].urlstring
{
    "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

PATCH /wtb/{id}

Edit your job, or publish a draft

Scope: requests:write, or the broad write. The owner. Idempotency-Key is optional.

Parameters

NameWhereDescription
id requiredpathAt least 1.
Idempotency-KeyheaderMakes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
titlestringUp to 500 characters.
descriptionstringUp to 65000 characters.
requirementsstringUp to 65000 characters.
category_idinteger1 to 2147483647.
budgetintegerWhole dollars. 0 to 999999.
delivery_daysinteger0 to 100000.
bidding_daysinteger1 to 120.
level_requiredinteger0 to 4.
skillsstringUp to 250 characters.
imageslist of stringIds 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.
publishbooleanPublish 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

FieldTypeDescription
idinteger
statusinteger
{
    "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

NameWhereDescription
id requiredpathAt least 1.
Idempotency-KeyheaderMakes 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

NameWhereDescription
id requiredpathAt least 1.
Idempotency-Key requiredheaderMakes 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

FieldTypeDescription
idinteger
cancelledboolean
{
    "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

NameWhereDescription
id requiredpathAt least 1.
cursorquerymeta.next_cursor from the previous page. Up to 1024 characters.
limitqueryPage size. Above 100 is treated as 100. At least 1. Default 25.
If-None-MatchheaderAn 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.

FieldTypeDescription
idinteger
parent_idinteger or null
member_idinteger
textstring
created_attimestamp or null
updated_attimestamp 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

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

NameWhereDescription
id requiredpathAt least 1.
Idempotency-Key requiredheaderMakes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
text requiredstringUp to 5000 characters.
parent_idinteger or nullReply 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

FieldTypeDescription
idinteger
request_idinteger
{
    "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

NameWhereDescription
id requiredpathAt least 1.
comment_id requiredpathAt least 1.
Idempotency-KeyheaderMakes a retry safe. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
text requiredstringUp 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

FieldTypeDescription
idinteger
request_idinteger
{
    "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

NameWhereDescription
id requiredpathAt least 1.
comment_id requiredpathAt least 1.
Idempotency-KeyheaderMakes 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

NameWhereDescription
id requiredpathAt least 1.
Idempotency-Key requiredheaderMakes 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

FieldTypeDescription
idinteger
cancelledboolean
{
    "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

NameWhereDescription
id requiredpathAt least 1.
cursorquerymeta.next_cursor from the previous page. Up to 1024 characters.
limitqueryPage size. Above 100 is treated as 100. At least 1. Default 25.
If-None-MatchheaderAn 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.

FieldTypeDescription
idinteger
member_idinteger
service_idinteger or null
titlestring
textstring
price_publicboolean
pricemoney or null
multiple_quantityboolean
created_attimestamp 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

POST /wtb/{id}/responses

Bid on a job

Scope: requests:write, or the broad write. Idempotency-Key is required.

Parameters

NameWhereDescription
id requiredpathAt least 1.
Idempotency-Key requiredheaderMakes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
title requiredstringUp to 250 characters.
text requiredstringUp to 350 characters.
price requiredintegerWhole dollars. 1 to 999999.
price_publicboolean
multiple_quantityboolean

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

FieldTypeDescription
idinteger
request_idinteger
{
    "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

NameWhereDescription
id requiredpathAt least 1.
response_id requiredpathAt least 1.
Idempotency-KeyheaderMakes 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

NameWhereDescription
id requiredpathAt least 1.
response_id requiredpathAt least 1.
Idempotency-Key requiredheaderMakes a retry safe. Required on every POST. Must match ^[A-Za-z0-9_.-]{1,64}$.

Request body

FieldTypeDescription
quantityintegerAbove 1 only when the bid allows multiples. 1 to 999.
expected_total requiredstringMust 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

FieldTypeDescription
idinteger
service_idinteger
buyer_idinteger
seller_idinteger
titlestring
statusinteger
unit_pricemoney
quantityinteger
totalmoney
paid_fromstring
request_idintegerWhen a bid was bought.
response_idintegerWhen 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"
    }
}

Errors