SeoclerksDevelopers

Orders

Buying, and everything the order page does.

GET /orders

Orders bought or sold

Scope: orders: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.
rolequeryseller lists sales. One of buyer, seller. Default buyer.
statusqueryA numeric order status. Must match ^[0-9]{1,2}$.
activequery1: only orders whose status is not final (GET order-statuses). One of 0, 1.
If-None-MatchheaderAn ETag from an earlier response.

Example request

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

Response 200

A page of these in data, with meta.limit and meta.next_cursor.

FieldTypeDescription
idinteger
service_idinteger
buyer_idinteger
seller_idinteger
titlestring
statusintegerThe order's state; GET order-statuses names each value.
unit_pricemoney
quantityinteger
delivery_daysinteger
created_attimestamp or null
started_attimestamp or null
completed_attimestamp or null
sitestring
unreadbooleanThe caller's own flag.
importantbooleanThe caller's own flag.
notestring or nullThe seller's private note. Always null for the buyer.
{
    "data": [
        {
            "id": 481220,
            "service_id": 9012,
            "buyer_id": 1501,
            "seller_id": 77,
            "title": "Logo design",
            "status": 1,
            "unit_price": {
                "amount": "25.00",
                "currency": "USD"
            },
            "quantity": 1,
            "delivery_days": 3,
            "created_at": "2026-10-09T18:22:05Z",
            "started_at": "2026-10-09T18:22:05Z",
            "completed_at": null,
            "site": "SEOClerks",
            "unread": true,
            "important": false,
            "note": null
        }
    ],
    "meta": {
        "limit": 25,
        "next_cursor": null,
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders

Buy a listing with the balance

Scope: checkout:write. The broad write grant does not include it. Idempotency-Key is required.

One ordinary listing by another member, paid from the balance; there is no card path. The debit, the order and its payment commit together. When the balance is short and the key also holds deposits:write (and the site allows it), the member's own Auto Reload runs once and the purchase is tried again.

Parameters

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

Request body

FieldTypeDescription
listing_id requiredinteger1 to 2147483647.
quantityintegerDefault 1. Above 1 only where the listing allows multiples. 1 to 999.
tierintegerA tier id from the service detail. 1 to 999.
tier_quick_deliverybooleanNeeds tier.
extraslist of stringExtra ids, as services/{id}/extras lists them. Up to 20 items.
couponstringUp to 64 characters.
expected_total requiredstringWhat the caller expects to pay. A different total is refused with price_changed, never charged. Must match ^[0-9]{1,7}(\.[0-9]{1,2})?$.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: createorder-1" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":9012,"tier":2,"extras":["1"],"expected_total":"45.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": 481221,
        "service_id": 9012,
        "buyer_id": 1501,
        "seller_id": 77,
        "title": "Logo design",
        "status": 0,
        "unit_price": {
            "amount": "45.00",
            "currency": "USD"
        },
        "quantity": 1,
        "total": {
            "amount": "45.00",
            "currency": "USD"
        },
        "paid_from": "balance"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/quote

Price an order without placing it

Scope: checkout:write. The broad write grant does not include it.

The same body as POST orders, priced without writing anything. shortfall is what the balance lacks; deposit_amount is the whole-dollar link that would cover it; duplicate_of names a recent purchase of the same listing at the same total. It takes no Idempotency-Key and places no order.

Request body

FieldTypeDescription
listing_id requiredinteger1 to 2147483647.
quantityintegerDefault 1. Above 1 only where the listing allows multiples. 1 to 999.
tierintegerA tier id from the service detail. 1 to 999.
tier_quick_deliverybooleanNeeds tier.
extraslist of stringExtra ids, as services/{id}/extras lists them. Up to 20 items.
couponstringUp to 64 characters.
expected_total requiredstringWhat the caller expects to pay. A different total is refused with price_changed, never charged. Must match ^[0-9]{1,7}(\.[0-9]{1,2})?$.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders/quote" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":1024,"expected_total":"12.50"}'

Response 200

FieldTypeDescription
listing_idinteger
titlestring
seller_idinteger
quantityinteger
unit_pricemoney
totalmoney
paid_fromstring
balance_availablemoney
shortfallmoney or null
order_pagestring
duplicate_ofobject or null
duplicate_of.order_idinteger
duplicate_of.created_attimestamp
duplicate_window_hoursinteger
spend_limitobject or null
spend_limit.limitmoney
spend_limit.window_daysinteger
spend_limit.spentmoney
spend_limit.remainingmoney
auto_reloadobject
auto_reload.onboolean
auto_reload.setup_urlstring
deposit_amountinteger or null
{
    "data": {
        "listing_id": 1024,
        "title": "Logo design",
        "seller_id": 1024,
        "quantity": 1,
        "unit_price": {
            "amount": "12.50",
            "currency": "USD"
        },
        "total": {
            "amount": "12.50",
            "currency": "USD"
        },
        "paid_from": "balance",
        "balance_available": {
            "amount": "12.50",
            "currency": "USD"
        },
        "shortfall": {
            "amount": "12.50",
            "currency": "USD"
        },
        "order_page": "https://www.seoclerk.com/example",
        "duplicate_of": {
            "order_id": 1024,
            "created_at": "2026-10-10T14:03:22Z"
        },
        "duplicate_window_hours": 1,
        "spend_limit": {
            "limit": {
                "amount": "12.50",
                "currency": "USD"
            },
            "window_days": 1,
            "spent": {
                "amount": "12.50",
                "currency": "USD"
            },
            "remaining": {
                "amount": "12.50",
                "currency": "USD"
            }
        },
        "auto_reload": {
            "on": true,
            "setup_url": "https://www.seoclerk.com/example"
        },
        "deposit_amount": 1
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

GET /orders/{id}

An order

Scope: orders:read, or the broad read. The order's recorded buyer or seller; anyone else gets 404.

Parameters

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

Example request

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

Response 200

FieldTypeDescription
idinteger
service_idinteger
buyer_idinteger
seller_idinteger
titlestring
statusintegerThe order's state; GET order-statuses names each value.
unit_pricemoney
quantityinteger
delivery_daysinteger
created_attimestamp or null
started_attimestamp or null
completed_attimestamp or null
sitestring
unreadbooleanThe caller's own flag.
importantbooleanThe caller's own flag.
notestring or nullThe seller's private note. Always null for the buyer.
{
    "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,
        "delivery_days": 1,
        "created_at": "2026-10-10T14:03:22Z",
        "started_at": "2026-10-10T14:03:22Z",
        "completed_at": "2026-10-10T14:03:22Z",
        "site": "SEOClerks",
        "unread": true,
        "important": true,
        "note": "string"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}

Set your flags on an order, and the seller's note

Scope: orders:write, or the broad write. Idempotency-Key is optional.

Unread and important are your own side's flags, as on the order page. Only the seller writes a note; the buyer gets 403 wrong_role. An order whose stored data cannot take a note answers 409 invalid_request.

Parameters

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

Request body

FieldTypeDescription
unreadbooleanYour own flag.
importantbooleanYour own flag.
notestringThe seller only: a private note, at most 300 characters, stored and given back exactly as sent. An empty string clears it. Up to 300 characters.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"unread":true}'

Response 200

FieldTypeDescription
idinteger
unreadboolean
importantboolean
notestring or nullThe seller's private note. Always null for the buyer.
{
    "data": {
        "id": 1024,
        "unread": true,
        "important": true,
        "note": "string"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/{id}/buyer-ratings

Rate the buyer

Scope: orders:write, or the broad write. The seller. 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
rating requiredstringOne of positive, negative.
comment requiredstringUp to 500 characters.
endorsebooleanAlso publish a recommendation. On POST only.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders/1024/buyer-ratings" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: ratebuyer-1" \
  -H "Content-Type: application/json" \
  -d '{"rating":"positive","comment":"Great work."}'

Response 200

FieldTypeDescription
order_idinteger
rating_idinteger
{
    "data": {
        "order_id": 1024,
        "rating_id": 1024
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}/buyer-ratings/{rating_id}

Edit your rating of the buyer

Scope: orders:write, or the broad write. The seller. Idempotency-Key is optional.

Parameters

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

Request body

FieldTypeDescription
rating requiredstringOne of positive, negative.
comment requiredstringUp to 500 characters.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024/buyer-ratings/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"rating":"positive","comment":"Great work."}'

Response 200

FieldTypeDescription
order_idinteger
rating_idinteger
{
    "data": {
        "order_id": 1024,
        "rating_id": 1024
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}/cancellation-requests/{message_id}

Answer or take back a cancellation request

Scope: orders:write, or the broad write. The order's recorded buyer or seller; anyone else gets 404. Idempotency-Key is optional.

Parameters

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

Request body

FieldTypeDescription
status requiredstringaccepted and declined are the other party's answer; aborted is the requester taking it back. One of accepted, declined, aborted.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024/cancellation-requests/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"accepted"}'

Response 200

FieldTypeDescription
order_idinteger
message_idinteger
statusstring
{
    "data": {
        "order_id": 1024,
        "message_id": 1024,
        "status": "string"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/{id}/completion

Complete an order and rate the seller

Scope: orders:write, or the broad write. The buyer. 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
rating requiredstringOne of positive, negative.
comment requiredstringUp to 500 characters.
endorsebooleanAlso publish a recommendation. On POST only.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders/1024/completion" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: completeorder-1" \
  -H "Content-Type: application/json" \
  -d '{"rating":"positive","comment":"Great work."}'

Response 200

FieldTypeDescription
order_idinteger
rating_idinteger
statusintegerAlways 5 (completed).
{
    "data": {
        "order_id": 1024,
        "rating_id": 1024,
        "status": 1
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}/deliveries/{message_id}

Withdraw a delivery

Scope: orders:write, or the broad write. The seller who sent it. Idempotency-Key is optional.

Parameters

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

Request body

FieldTypeDescription
withdrawn requiredbooleanMust be true. Always true.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024/deliveries/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"withdrawn":true}'

Response 200

FieldTypeDescription
order_idinteger
message_idinteger
withdrawnboolean
{
    "data": {
        "order_id": 1024,
        "message_id": 1024,
        "withdrawn": true
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}/extension-requests/{message_id}

Answer or take back an extension request

Scope: orders:write, or the broad write. The order's recorded buyer or seller; anyone else gets 404. Idempotency-Key is optional.

Parameters

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

Request body

FieldTypeDescription
status requiredstringaccepted and declined are the other party's answer; aborted is the requester taking it back. One of accepted, declined, aborted.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024/extension-requests/1024" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"accepted"}'

Response 200

FieldTypeDescription
order_idinteger
message_idinteger
statusstring
{
    "data": {
        "order_id": 1024,
        "message_id": 1024,
        "status": "string"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/{id}/guarantee

Invoke the order's guarantee

Scope: orders:write, or the broad write. The buyer. 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
reason requiredstringUp to 65535 characters.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders/1024/guarantee" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: invokeguarantee-1" \
  -H "Content-Type: application/json" \
  -d '{"reason":"string"}'

Response 200

FieldTypeDescription
order_idinteger
statusinteger
returnedmoney
{
    "data": {
        "order_id": 1024,
        "status": 1,
        "returned": {
            "amount": "12.50",
            "currency": "USD"
        }
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/{id}/invoice

Email the order's invoice to yourself

Scope: orders:write, or the broad write. The buyer; anyone else gets 404. Idempotency-Key is required.

The invoice the order page's button sends, to your account's email whatever your email preferences. Once per order in each half hour; sooner answers 429 rate_limited. The mail leaves after the request is stored.

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/orders/1024/invoice" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: emailorderinvoice-1"

Response 202

FieldTypeDescription
order_idinteger
emailstringWhere it is being sent: your account's email.
{
    "data": {
        "order_id": 1024,
        "email": "[email protected]"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

GET /orders/{id}/messages

An order's messages

Scope: orders:read, or the broad read. The order's recorded buyer or seller; anyone else gets 404. 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/orders/1024/messages" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY"

Response 200

A page of these in data, with meta.limit and meta.next_cursor.

FieldTypeDescription
idinteger
sender_idinteger
recipient_idinteger
textstringStored content, not trusted HTML.
created_attimestamp or null
attachment_idinteger or nullDownload with GET attachments/{id}.
actionstringOrder messages only: what the message did (a delivery, a cancellation request and so on).
{
    "data": [
        {
            "id": 1024,
            "sender_id": 1024,
            "recipient_id": 1024,
            "text": "Hello.",
            "created_at": "2026-10-10T14:03:22Z",
            "attachment_id": 1024,
            "action": "string"
        }
    ],
    "meta": {
        "limit": 1,
        "next_cursor": "string",
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

POST /orders/{id}/messages

Send an order message, delivery or request

Scope: orders:write, or the broad write. The order's recorded buyer or seller; anyone else gets 404. Idempotency-Key is required.

No attachment can be sent with an order message yet.

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
message requiredstringUp to 65535 characters.
actionstringDefault message. The others are what the order page's buttons do; who may send each, and when, is decided by the website's own order rules. One of message, delivery, revision, seller_cancellation, seller_cancellation_direct, cancellation_request, extension_request. Default message.
daysintegerRequired with extension_request, and only then. 1 to 365.

Example request

curl -X POST "https://www.seoclerk.com/api/v1/orders/1024/messages" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Idempotency-Key: createordermessage-1" \
  -H "Content-Type: application/json" \
  -d '{"message":"Here is the finished logo.","action":"delivery"}'

Response 201

FieldTypeDescription
order_idinteger
message_idinteger
actionstring
{
    "data": {
        "order_id": 481220,
        "message_id": 2204518,
        "action": "delivery"
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors

PATCH /orders/{id}/verification

Accept or reject an order awaiting verification

Scope: orders:write, or the broad write. The seller. 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
status requiredstringOne of accepted, rejected.

Example request

curl -X PATCH "https://www.seoclerk.com/api/v1/orders/1024/verification" \
  -H "Authorization: Bearer $SEOCLERKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"accepted"}'

Response 200

FieldTypeDescription
order_idinteger
statusinteger
{
    "data": {
        "order_id": 1024,
        "status": 1
    },
    "meta": {
        "request_id": "9f2c4e1ab07d3351"
    }
}

Errors