API reference · Webhooks
Add-on request created (not yet available)
order.addition_request.createdNot yet available. Order additions are switched off in production and in the sandbox, so Snapcaster does not send this event yet; the changelog announces when additions open.
Snapcaster sends this event when a buyer asks to add cards to an order that has not shipped. The request reserves no stock and quotes no price. The seller answers it from your integration: send a priced offer naming it in requestRef with POST /orders/{orderId}/addition-offers, or decline it with POST /orders/{orderId}/addition-requests/{requestRef}/decline. An order has at most one pending request at a time.
data is the request as GET /orders/{orderId}/addition-requests returns it, plus order_id and seller_id. If you miss an event, read that list: every change to a request also brings the order back into the GET /orders poll.
The envelope, signing and retries match order.created; see https://developers.snapcaster.ca/guide/webhook-signing and https://developers.snapcaster.ca/guide/path-b#delivery-semantics. Subscriptions orders and both receive it; an inventory subscription never does. Deduplicate by event_id. Events can arrive out of order, so compare created_at.
Example
{
"event_id": "evt_sandbox_01K4AA1C7M3V9Q2D5H8T0B6N4R",
"type": "order.addition_request.created",
"created_at": "2026-09-04T19:01:12.000Z",
"data": {
"request_ref": "oar_5c1e9a7f3b2d48e6a0f4c8d1b7e3a925",
"status": "pending",
"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": null,
"resolved_at": null,
"resolution_note": null,
"order_id": "ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VW",
"seller_id": 42
},
"api_version": "2026-10"
}Signature headers
Snapcaster sends a POST to your webhook endpoint with these headers. Webhook signing shows how to verify them.
X-Snapcaster-Timestampstring requiredUnix seconds when the request was signed; reject if outside a ±5 minute window.
X-Snapcaster-Signaturestring requiredsha256=+ lowercase hex of HMAC_SHA256(signingSecret, timestamp ‖ raw request body).
Delivery payload
The signed order.addition_request.created event.
Payload type: Order
Envelope fields
event_idstring requiredA globally unique event id that stays the same across retries. Use it to deduplicate deliveries (STABLE).
Example
evt_sandbox_01K4AA1C7M3V9Q2D5H8T0B6N4Rtypestring requiredThe event type (STABLE).
Constraints: allowed values:
order.addition_request.createdExampleorder.addition_request.createdcreated_atstring requiredISO-8601 UTC instant of the change the event reports; unchanged across retries (STABLE).
Example
2026-09-04T19:01:12.000ZdataOrderrequiredAddition Request Event Data The operation or event payload.
api_versionstring requiredThe dated API version used for this payload, frozen when Snapcaster queued the delivery. Changing the platform pin does not change queued events or retries; they keep the same version. See https://developers.snapcaster.ca/guide/api-versioning (STABLE).
Constraints: allowed values:
2026-10Example2026-10
Payload 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,offeredExamplependingdata.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,nullExamplenulldata.string or null requiredresolved_at Example
nulldata.string or null requiredresolution_note The seller’s short reason on a decline, shown to the buyer beside the ending.
Example
nulldata.string requiredorder_id The order the add-on is for (STABLE).
Example
ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VWdata.integer requiredseller_id The seller that owns the order. Use this id to route the event to the right store (STABLE).
Example
42
Receiver response
200 - Return any 2xx after verifying the event and durably accepting it. This event moves no stock, so its 2xx acknowledges no sale and leaves every stock hold as it was.