API reference · Orders
Decline an add-on request (not yet available)
/orders/{orderId}/addition-requests/{requestRef}/declineNot yet available. Order additions are switched off in production and in the sandbox, so no buyer can ask for added cards and no offer can be sent: the lists answer eligibility.eligible: false with the reason feature_disabled, and sendOrderAdditionOffer answers 422 ORDER_ADDITION_NOT_ELIGIBLE. Do not build against this operation yet; the changelog announces when additions open. The example request shows the shape only and cannot succeed in the sandbox: sending an offer answers 422 ORDER_ADDITION_NOT_ELIGIBLE, and declining a request or withdrawing an offer answers 404 because none can exist. Decline a buyer's pending add-on request, with an optional note the buyer reads. Nothing else on the order changes: it ships as bought, and the buyer may ask again. Snapcaster sends order.addition_request.resolved with status: declined. To answer the request with priced cards instead, send an offer naming it in requestRef. Returns the declined request.
Example
These examples send requests to the sandbox.
Replace the example orderId and requestRef in the URL with your own.
curl --request POST \
--url 'https://api-sandbox.snapcaster.ca/api/v1/marketplace/orders/ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VW/addition-requests/oar_5c1e9a7f3b2d48e6a0f4c8d1b7e3a925/decline' \
--header "Authorization: Bearer $MARKETPLACE_API_KEY" \
--header "Idempotency-Key: $(uuidgen)" \
--header 'Content-Type: application/json' \
--data '{}'$(uuidgen) makes a new Idempotency-Key each time you run the command. To retry a command after a lost response, send the key from the first attempt.
{
"success": true,
"data": {
"request_ref": "oar_5c1e9a7f3b2d48e6a0f4c8d1b7e3a925",
"status": "declined",
"lines": [
{
"sku_id": 14602,
"product_id": 86,
"quantity": 2,
"name": "Abyssal Nightstalker",
"set_name": "Portal Second Age",
"condition": "Near Mint",
"category_name": "Magic: The Gathering",
"language": "English",
"finish": "Normal",
"collector_number": null,
"rarity": "Uncommon"
}
],
"note": "Two more for my sideboard, please",
"support_case_id": null,
"created_at": "2026-09-04T19:01:12.000Z",
"resolved_by_party": "seller",
"resolved_at": "2026-09-04T19:20:41.000Z",
"resolution_note": "Sold out of that printing"
}
}Endpoint
| Environment | URL |
|---|---|
| Sandbox | https://api-sandbox.snapcaster.ca/api/v1/marketplace |
| Production | https://api.snapcaster.ca/api/v1/marketplace |
marketplaceApiKey-http bearer. Send the seller's marketplace API key asAuthorization: Bearer mp_{sellerCode}_{hex}. Themp_{sellerCode}_prefix identifies the seller; the trailing hex is the secret. The seller generates the key and supplies it to your platform.
Request
Path parameters
orderIdstring requiredThe opaque public order id (the webhook/poll
order_id).Constraints: minimum length: 1 Example
ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VWrequestRefstring requiredThe add-on request id (
oar_…) from the list or a webhook.Constraints: pattern:
^oar_[0-9a-f]{32}$Exampleoar_5c1e9a7f3b2d48e6a0f4c8d1b7e3a925
Headers
Idempotency-Keystring requiredKeep this UUID when retrying the same order operation and body. Keys remain valid for the lifetime of the order. Changed contents return 409 IDEMPOTENCY_CONFLICT; a concurrent attempt returns 409 REQUEST_IN_PROGRESS with Retry-After.
Constraints: format: uuid Example
f04e4a96-3c99-44dc-abce-5b6862c589c9X-Snapcaster-Api-VersionstringOverride the platform pin for this request only. Webhook versions and the platform pin do not change.
Constraints: allowed values:
2026-10Example2026-10
Request body
Request body (application/json): Decline
notestringA short reason the buyer reads beside the decline.
Constraints: minimum length: 1; maximum length: 1000
Response
200
The request, now declined.
Response body: Order
successboolean requiredWhether the operation completed as requested.
Constraints: allowed values:
trueExampletruedataOrderrequiredAddition Request The operation or event payload.
Show child fieldsHide child fields
data.string requiredrequest_ref The opaque public request id (
oar_…) - the{requestRef}of the withdraw and decline paths.Example
oar_5c1e9a7f3b2d48e6a0f4c8d1b7e3a925data.string requiredstatus pendingis the one open state.withdrawnis the buyer taking their own ask back;declinedis the seller’s answer;offeredmeans the seller ANSWERED it with a payable offer, whose own lifecycle carries on underaddition-offersand which names this request. All three endings are one-way and change nothing else about the order.Constraints: allowed values:
pending,withdrawn,declined,offeredExampledeclineddata.lines OrderrequiredAddition Request Line[] The cards asked for, with enough canonical catalog identity frozen at the ask to say which PRINTING was meant - condition, finish, language, collector number - so a later catalog correction cannot change what was understood.
Show child fieldsHide child fields
data.integer requiredlines[]. sku_id The exact printing asked for. This is the identity; everything beside it is frozen from it.
Example
14602data.integer requiredlines[]. product_id See Canonical catalog in Core concepts.
Example
86data.integer requiredlines[]. quantity The number of units.
Example
2data.string or null requiredlines[]. name Example
Abyssal Nightstalkerdata.string or null requiredlines[]. set_name Example
Portal Second Agedata.string or null requiredlines[]. condition The normalized condition assigned to the card.
Example
Near Mintdata.string or null requiredlines[]. category_name Example
Magic: The Gatheringdata.string or null requiredlines[]. language The language of the card printing.
Example
Englishdata.string or null requiredlines[]. finish The catalog’s printing, under the name the order line snapshot uses.
Example
Normaldata.string or null requiredlines[]. collector_number Example
nulldata.string or null requiredlines[]. rarity The rarity assigned to the card printing.
Example
Uncommon
data.string or null requirednote The buyer’s own words beside the ask; null when none was given.
Example
Two more for my sideboard, pleasedata.integer or null requiredsupport_case_id The support conversation the ask came out of, when there was one; null otherwise.
Example
nulldata.string requiredcreated_at Example
2026-09-04T19:01:12.000Zdata.string or null requiredresolved_by_party Who ended the ask -
buyeron a withdrawal,selleron a decline. Null while pending.Constraints: allowed values:
buyer,seller,operator,system,nullExamplesellerdata.string or null requiredresolved_at Example
2026-09-04T19:20:41.000Zdata.string or null requiredresolution_note The seller’s short reason on a decline, shown to the buyer beside the ending.
Example
Sold out of that printing
Errors
Errors return a Marketplace body, except HTTP 413, 500 (Api). Error codes explains both error bodies and lists every code.
400
INVALID_REQUESTIDEMPOTENCY_KEY_REQUIREDUNSUPPORTED_API_VERSIONInvalid command body or missing/invalid UUID Idempotency-Key. Unknown or retired API-version override (
UNSUPPORTED_API_VERSION).Do this: Correct the request fields and supply a UUID Idempotency-Key. Keep the same key when retrying the same command. For UNSUPPORTED_API_VERSION, choose a supported version from the API versioning guide.
401
UNAUTHORIZEDMissing or invalid marketplace API key (
UNAUTHORIZED).Do this: Send the marketplace API key for this seller as a Bearer token, then retry.
403
SUBSCRIPTION_EXCLUDES_ORDERSThe platform's subscription is
inventory, which does not include orders (SUBSCRIPTION_EXCLUDES_ORDERS). Onlyordersandbothsubscriptions read and act on orders.Do this: Do not retry. Ask Snapcaster to change the platform subscription to
ordersorbothif the platform should handle orders.404
ORDER_NOT_FOUNDORDER_ADDITION_REQUEST_NOT_FOUNDOrder additions are not yet available. No order matches this id for the authenticated seller (
ORDER_NOT_FOUND), or no add-on request with this id is on the order (ORDER_ADDITION_REQUEST_NOT_FOUND). Another seller's order also returns 404.Do this: Read GET /orders/{orderId}/addition-requests for the request ids on the order.
409
IDEMPOTENCY_CONFLICTREQUEST_IN_PROGRESSORDER_ADDITION_REQUEST_NOT_PENDINGOrder additions are not yet available. IDEMPOTENCY_CONFLICT or REQUEST_IN_PROGRESS. Retry an in-progress command with the same key after Retry-After seconds.
ORDER_ADDITION_REQUEST_NOT_PENDING: the request was already withdrawn, declined or answered with an offer;details.statussays which.Do this: For REQUEST_IN_PROGRESS, wait Retry-After seconds and retry the same key and body. For IDEMPOTENCY_CONFLICT, reuse the original body or create a new UUID for a different operation. For ORDER_ADDITION_REQUEST_NOT_PENDING, read GET /orders/{orderId}/addition-requests; a request that is no longer pending needs no answer.
413
PAYLOAD_TOO_LARGEThe body is larger than this route accepts (
PAYLOAD_TOO_LARGE).Do this: Send a smaller body and retry.
500
INTERNAL_ERRORAn unexpected failure (
INTERNAL_ERROR).Do this: Retry with bounded retries and jitter. If the failure persists, contact Snapcaster with the X-Correlation-ID response header.