API reference · Webhooks
Change request resolved
order.change_request.resolvedSnapcaster sends this event when a pending change request ends, whoever ended it. outcome is the request's new status. accepted: the change ran; an address change also sends order.updated with reason: address_corrected, and a removal sends the order.cancelled or order.refunded that ran it. declined: nothing changed. withdrawn: the party who raised it took it back. voided: the order shipped, was cancelled or refunded, its address was corrected, or Snapcaster closed the support conversation the request belonged to, before anyone answered. removed_instead and order_cancelled: the buyer answered a fulfillment report by removing every affected line or ending the order, and the matching order.cancelled or order.refunded follows.
data is the request as GET /orders/{orderId}/change-requests returns it, plus 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_01K4A9P8V3W6Y1C4E7G2J5M9QR",
"type": "order.change_request.resolved",
"created_at": "2026-09-04T19:20:41.000Z",
"data": {
"id": 381,
"order_id": "ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VW",
"kind": "address_change",
"status": "accepted",
"proposed_by_party": "buyer",
"created_at": "2026-09-04T19:01:12.000Z",
"resolved_at": "2026-09-04T19:20:41.000Z",
"lines": null,
"amount_cents": null,
"note": null,
"credits": null,
"address": {
"line1": "99 Elm Ave",
"line2": "Unit 4",
"city": "Ottawa",
"province": "ON",
"postal_code": "K1P 5G4",
"country": "CA"
},
"previous_address": {
"line1": "123 Main St",
"line2": null,
"city": "Toronto",
"province": "ON",
"postal_code": "M5V 2T6",
"country": "CA"
},
"seller_id": 42,
"outcome": "accepted"
},
"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.change_request.resolved event.
Payload type: Change
Envelope fields
event_idstring requiredA globally unique event id that stays the same across retries. Use it to deduplicate deliveries (STABLE).
Example
evt_sandbox_01K4A9P8V3W6Y1C4E7G2J5M9QRtypestring requiredThe event type (STABLE).
Constraints: allowed values:
order.change_request.resolvedExampleorder.change_request.resolvedcreated_atstring requiredISO-8601 UTC instant of the change the event reports; unchanged across retries (STABLE).
Example
2026-09-04T19:20:41.000ZdataChangerequiredRequest Resolved 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.integer requiredid The change request id, stable for the life of the request and the
{requestId}of its answers (STABLE).Constraints: exclusive minimum: 0 Example
381data.string requiredorder_id The order the request is about (STABLE).
Example
ord_sandbox_01K4A8Y6D4QJH2N3P5R7S9T0VWdata.string requiredkind address_change: the buyer asks to ship toaddressinstead ofprevious_address.cancel_lines: the buyer asks to removelines, or every remaining line to end the order.fulfillment_report: the seller reports thatlinescannot ship as sold, and the buyer answers it (STABLE).Constraints: allowed values:
cancel_lines,fulfillment_report,address_changeExampleaddress_changedata.string requiredstatus pendinguntil it is answered; a request has no deadline.accepted: the change ran.declined: the answering party refused it and nothing changed.withdrawn: the party who raised it took it back.voided: the order shipped, was cancelled or refunded, its address was corrected, or Snapcaster closed the support conversation the request belonged to, before anyone answered.removed_insteadandorder_cancelledare the buyer answers to afulfillment_reportthat remove every affected line or end the order.expiredappears only on requests from before requests stopped lapsing (STABLE).Constraints: allowed values:
pending,accepted,removed_instead,order_cancelled,declined,withdrawn,voided,expiredExampleaccepteddata.string requiredproposed_by_party Who raised it. The seller answers a
buyerrequest by accepting or declining it; the buyer answers asellerrequest (STABLE).Constraints: allowed values:
buyer,seller,operator,systemExamplebuyerdata.string requiredcreated_at When the request was raised (STABLE).
Constraints: format: date-time Example
2026-09-04T19:01:12.000Zdata.string or null requiredresolved_at When the request left
pending; null while it is pending (STABLE).Constraints: format: date-time Example
2026-09-04T19:20:41.000Zdata.lines Changeor null requiredRequest Line[] The lines a
cancel_linesorfulfillment_reportrequest names; null on anaddress_change(STABLE).Show child fieldsHide child fields
data.string requiredlines[]. line_ref The purchase line the request names, the same
line_refthe order carries (STABLE).data.string requiredlines[]. name The line title, or
SKU <sku_id>when the catalog had none (STABLE).data.integer requiredlines[]. quantity How many units of the line the request covers (STABLE).
Constraints: exclusive minimum: 0
data.integer requiredlines[]. sku_id The SKU the line was sold as (STABLE).
data.integer or null requiredlines[]. product_id The product that SKU belongs to; null on a request recorded before it was kept (STABLE).
data.object requiredlines[]. ordered The card the buyer ordered, as the request recorded it. A fact the request never recorded is null (STABLE).
Show child fieldsHide child fields
data.string or null requiredlines[]. ordered. name The card title (STABLE).
data.string or null requiredlines[]. ordered. set The set the printing belongs to; null when it was never recorded (STABLE).
data.string or null requiredlines[]. ordered. language The printing language; null when it was never recorded (STABLE).
data.string or null requiredlines[]. ordered. finish The printing or finish, such as
Foil; null when never recorded (STABLE).data.string or null requiredlines[]. ordered. rarity The rarity; null when it was never recorded (STABLE).
data.string or null requiredlines[]. ordered. condition The condition grade; null when it was never recorded (STABLE).
data.string or null requiredlines[]. ordered. collector_number The collector number as the catalog states it, such as
161/302; null when never recorded (STABLE).
data.string requiredlines[]. action removeon everycancel_linesline and on a report line that removes units.substituteon a report line that ships a replacement named insubstituteat a per-unitcredit_cents.spliton a report line whose units go several ways, listed indispositions(STABLE).Constraints: allowed values:
remove,substitute,splitdata.lines[]. substitute Changeor null requiredRequest Substitute The replacement on a
substituteline; null on every other line (STABLE).Show child fieldsHide child fields
data.integer requiredlines[]. substitute. listing_id Snapcaster's id for the seller listing offered in place of the line (STABLE).
data.integer requiredlines[]. substitute. sku_id The SKU the line ships as once the report is accepted (STABLE).
data.integer requiredlines[]. substitute. product_id The product, the same one the replaced line belongs to (STABLE).
data.string or null requiredlines[]. substitute. external_ref Your platform's reference on that listing when the report was filed; null when none was sent (STABLE).
data.string or null requiredlines[]. substitute. name The card title (STABLE).
data.string or null requiredlines[]. substitute. set The set the printing belongs to; null when it was never recorded (STABLE).
data.string or null requiredlines[]. substitute. language The printing language; null when it was never recorded (STABLE).
data.string or null requiredlines[]. substitute. finish The printing or finish, such as
Foil; null when never recorded (STABLE).data.string or null requiredlines[]. substitute. rarity The rarity; null when it was never recorded (STABLE).
data.string or null requiredlines[]. substitute. condition The condition grade; null when it was never recorded (STABLE).
data.string or null requiredlines[]. substitute. collector_number The collector number as the catalog states it, such as
161/302; null when never recorded (STABLE).data.string or null requiredlines[]. substitute. printing The same fact as
finish, under the catalog name (STABLE).
data.integer or null requiredlines[]. credit_cents The credit per unit on a
substituteline, in cents; null on every other line (STABLE).data.array of object or null requiredlines[]. dispositions On a
splitline, each portion in the order the seller listed them; null on every other line (STABLE).Show child fieldsHide child fields
data.string requiredlines[]. dispositions[]. action What happens to this portion (STABLE).
Constraints: allowed values:
remove,substitutedata.integer requiredlines[]. dispositions[]. quantity How many of the line units go this way (STABLE).
Constraints: exclusive minimum: 0
data.lines[]. dispositions[]. substitute Changeor null requiredRequest Substitute The replacement on a
substituteline; null on every other line (STABLE).Show child fieldsHide child fields
data.integer requiredlines[]. dispositions[]. substitute. listing_id Snapcaster's id for the seller listing offered in place of the line (STABLE).
data.integer requiredlines[]. dispositions[]. substitute. sku_id The SKU the line ships as once the report is accepted (STABLE).
data.integer requiredlines[]. dispositions[]. substitute. product_id The product, the same one the replaced line belongs to (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. external_ref Your platform's reference on that listing when the report was filed; null when none was sent (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. name The card title (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. set The set the printing belongs to; null when it was never recorded (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. language The printing language; null when it was never recorded (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. finish The printing or finish, such as
Foil; null when never recorded (STABLE).data.string or null requiredlines[]. dispositions[]. substitute. rarity The rarity; null when it was never recorded (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. condition The condition grade; null when it was never recorded (STABLE).
data.string or null requiredlines[]. dispositions[]. substitute. collector_number The collector number as the catalog states it, such as
161/302; null when never recorded (STABLE).data.string or null requiredlines[]. dispositions[]. substitute. printing The same fact as
finish, under the catalog name (STABLE).
data.integer or null requiredlines[]. dispositions[]. credit_cents The credit per unit for a
substituteportion; null for a removal (STABLE).
data.integer or null requiredamount_cents The refund, tax included, that accepting a
cancel_linesrequest returns to the buyer, or the refund afulfillment_reportreturns when the buyer accepts it. Fixed when the request was raised. Null on anaddress_changeand on an order with no payment (STABLE).Example
nulldata.string or null requirednote The seller's note to the buyer on a
fulfillment_report; null when none was given and on every other kind (STABLE).Example
nulldata.object or null requiredcredits The refund behind each buyer answer to a
fulfillment_report, fixed when it was raised; null on every other kind and on an order with no payment (STABLE).Show child fieldsHide child fields
data.integer requiredcredits. accept_cents The refund if the buyer accepts the report; repeats
amount_cents(STABLE).data.integer requiredcredits. remove_instead_cents The refund if the buyer has every affected line removed instead (STABLE).
data.integer requiredcredits. cancel_order_cents The refund if the buyer ends the whole order instead (STABLE).
data.address Orderor null requiredWebhook Shipping Address The shipping address an
address_changeasks for. Set only on anaddress_change; null on every other kind (STABLE).Show child fieldsHide child fields
data.string requiredaddress. line1 The street address.
Example
99 Elm Avedata.string or null requiredaddress. line2 The unit, suite, or second address line, if supplied.
Example
Unit 4data.string requiredaddress. city The city in the shipping address.
Example
Ottawadata.string requiredaddress. province The Canadian province or territory in the delivery address.
Example
ONdata.string requiredaddress. postal_code The Canadian postal code in the delivery address.
Example
K1P 5G4data.string requiredaddress. country ISO 3166-1 alpha-2 country code.
Example
CA
data.previous_address Orderor null requiredWebhook Shipping Address The shipping address the order had when the
address_changewas raised. Set only on anaddress_change; null on every other kind (STABLE).Show child fieldsHide child fields
data.string requiredprevious_address. line1 The street address.
Example
123 Main Stdata.string or null requiredprevious_address. line2 The unit, suite, or second address line, if supplied.
Example
nulldata.string requiredprevious_address. city The city in the shipping address.
Example
Torontodata.string requiredprevious_address. province The Canadian province or territory in the delivery address.
Example
ONdata.string requiredprevious_address. postal_code The Canadian postal code in the delivery address.
Example
M5V 2T6data.string requiredprevious_address. country ISO 3166-1 alpha-2 country code.
Example
CA
data.integer requiredseller_id The seller that owns the order. Use this id to route the event to the right store (STABLE).
Example
42data.string requiredoutcome How the request ended, the same value as
status.acceptedon anaddress_changecomes withorder.updated(reason: address_corrected); on a removal it comes with theorder.cancelledororder.refundedthat ran it (STABLE).Constraints: allowed values:
accepted,removed_instead,order_cancelled,declined,withdrawn,voidedExampleaccepted
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.