Skip to content
msMarketSDK

all endpoints

// api reference

Webhooks

GET /v1/webhook_endpoints

List webhook endpoints

secret key only

GET /v1/webhook_endpointsrequest
curl https://api.marketsdk.com/v1/webhook_endpoints \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, webhook endpoint list
{
  "object": "list",
  "data": [
    {
      "object": "webhook_endpoint",
      "id": "whe_034XtPDs7UJ0TXzTsdaHZa",
      "url": "string",
      "description": null,
      "enabled_events": [
        "string"
      ],
      "status": "enabled",
      "disabled_reason": null,
      "failing_since": null,
      "last_success_at": null,
      "secret": "string",
      "metadata": {},
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

parameters

Parameters
fieldtypeabout
limitinteger, in querymin 1, max 100, default 20
starting_afterstring, in queryThe next_cursor of the previous page.

returns 200, webhook endpoint list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of webhook endpoint
data[].objectrequiredone of: webhook_endpoint
data[].idrequiredstring
data[].urlrequiredstring
data[].descriptionrequiredstring or null
data[].enabled_eventsrequiredarray of string
data[].statusrequiredone of: enabled, disabled
data[].disabled_reasonrequiredstring or nullWhy it was turned off, when MarketSDK turned it off.
data[].failing_sincerequiredtimestamp or nullEvery delivery has failed since this time.
data[].last_success_atrequiredtimestamp or null
data[].secretstringThe signing secret. Returned only when the endpoint is created or its secret rotated.
data[].metadatarequiredobject of strings
data[].created_atrequiredtimestamp
has_morerequiredbooleanWhether another page follows.
next_cursorrequiredstring or nullPass as starting_after (or cursor for search) to get the next page.

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 429Rate limited. See Retry-After.

POST /v1/webhook_endpoints

Register a webhook endpoint

Returns the signing secret, once. Every delivery carries MarketSDK-Signature: t=<time>,v1=<HMAC-SHA256 of "<time>.<body>">.

secret key only

POST /v1/webhook_endpointsrequest
curl -X POST https://api.marketsdk.com/v1/webhook_endpoints \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"url":"https://shop.example/marketsdk/webhooks","enabled_events":["*"]}'
201 example response, webhook endpoint
{
  "object": "webhook_endpoint",
  "id": "whe_034XtPDs7UJ0TXzTsdaHZa",
  "url": "string",
  "description": null,
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "disabled_reason": null,
  "failing_since": null,
  "last_success_at": null,
  "secret": "string",
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z"
}

body, create webhook endpoint

Request body
fieldtypeabout
urlrequiredstringAn HTTPS URL on the public internet.
enabled_eventsrequiredarray of one of: *, seller.created, seller.updated, seller.erased, seller.suspended, seller.unsuspended, seller.verification_updated, seller.payouts_updated, buyer.created, buyer.updated, buyer.erased, category.created, category.updated, listing.created, listing.updated, listing.published, listing.unpublished, listing.sold, listing.expired, listing.removed, media.ready, media.deleted, order.created, order.committed, order.claimed, order.cancellation_proposed, order.cancellation_declined, order.cancelled, order.expired, order.completed, order.disputed, payment.created, payment.succeeded, payment.failed, payment.canceled, payment.refunded, payment.released, payment.release_failed, refund.created, refund.updated, verification.created, verification.updated, review.created, review.visible, review.removed, reputation_event.created, reputation_event.voided, dispute.created, dispute.evidence_added, dispute.updated, dispute.decision_overdue, dispute.decided, card_dispute.created, card_dispute.updated, flag.created, flag.resolved, moderation_action.createdEvent types to send, or * for all.
descriptionstringup to 200 characters
metadataobject of strings

returns 201, webhook endpoint

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_endpoint
idrequiredstring
urlrequiredstring
descriptionrequiredstring or null
enabled_eventsrequiredarray of string
statusrequiredone of: enabled, disabled
disabled_reasonrequiredstring or nullWhy it was turned off, when MarketSDK turned it off.
failing_sincerequiredtimestamp or nullEvery delivery has failed since this time.
last_success_atrequiredtimestamp or null
secretstringThe signing secret. Returned only when the endpoint is created or its secret rotated.
metadatarequiredobject of strings
created_atrequiredtimestamp

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 429Rate limited. See Retry-After.

GET /v1/webhook_endpoints/{id}

Retrieve a webhook endpoint

secret key only

GET /v1/webhook_endpoints/{id}request
curl https://api.marketsdk.com/v1/webhook_endpoints/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, webhook endpoint
{
  "object": "webhook_endpoint",
  "id": "whe_034XtPDs7UJ0TXzTsdaHZa",
  "url": "string",
  "description": null,
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "disabled_reason": null,
  "failing_since": null,
  "last_success_at": null,
  "secret": "string",
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, webhook endpoint

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_endpoint
idrequiredstring
urlrequiredstring
descriptionrequiredstring or null
enabled_eventsrequiredarray of string
statusrequiredone of: enabled, disabled
disabled_reasonrequiredstring or nullWhy it was turned off, when MarketSDK turned it off.
failing_sincerequiredtimestamp or nullEvery delivery has failed since this time.
last_success_atrequiredtimestamp or null
secretstringThe signing secret. Returned only when the endpoint is created or its secret rotated.
metadatarequiredobject of strings
created_atrequiredtimestamp

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

PATCH /v1/webhook_endpoints/{id}

Update a webhook endpoint, or turn it off and on

secret key only

PATCH /v1/webhook_endpoints/{id}request
curl -X PATCH https://api.marketsdk.com/v1/webhook_endpoints/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
200 example response, webhook endpoint
{
  "object": "webhook_endpoint",
  "id": "whe_034XtPDs7UJ0TXzTsdaHZa",
  "url": "string",
  "description": null,
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "disabled_reason": null,
  "failing_since": null,
  "last_success_at": null,
  "secret": "string",
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, update webhook endpoint

Request body
fieldtypeabout
urlstring
enabled_eventsarray of one of: *, seller.created, seller.updated, seller.erased, seller.suspended, seller.unsuspended, seller.verification_updated, seller.payouts_updated, buyer.created, buyer.updated, buyer.erased, category.created, category.updated, listing.created, listing.updated, listing.published, listing.unpublished, listing.sold, listing.expired, listing.removed, media.ready, media.deleted, order.created, order.committed, order.claimed, order.cancellation_proposed, order.cancellation_declined, order.cancelled, order.expired, order.completed, order.disputed, payment.created, payment.succeeded, payment.failed, payment.canceled, payment.refunded, payment.released, payment.release_failed, refund.created, refund.updated, verification.created, verification.updated, review.created, review.visible, review.removed, reputation_event.created, reputation_event.voided, dispute.created, dispute.evidence_added, dispute.updated, dispute.decision_overdue, dispute.decided, card_dispute.created, card_dispute.updated, flag.created, flag.resolved, moderation_action.created
descriptionstringup to 200 characters
statusone of: enabled, disabledTurn the endpoint off, or back on after it was turned off.
metadataobject of strings

returns 200, webhook endpoint

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_endpoint
idrequiredstring
urlrequiredstring
descriptionrequiredstring or null
enabled_eventsrequiredarray of string
statusrequiredone of: enabled, disabled
disabled_reasonrequiredstring or nullWhy it was turned off, when MarketSDK turned it off.
failing_sincerequiredtimestamp or nullEvery delivery has failed since this time.
last_success_atrequiredtimestamp or null
secretstringThe signing secret. Returned only when the endpoint is created or its secret rotated.
metadatarequiredobject of strings
created_atrequiredtimestamp

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

DELETE /v1/webhook_endpoints/{id}

Delete a webhook endpoint and its deliveries

secret key only

DELETE /v1/webhook_endpoints/{id}request
curl -X DELETE https://api.marketsdk.com/v1/webhook_endpoints/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, deleted webhook endpoint
{
  "object": "webhook_endpoint",
  "id": "string",
  "deleted": true
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, deleted webhook endpoint

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_endpoint
idrequiredstring
deletedrequiredone of: true

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

POST /v1/webhook_endpoints/{id}/rotate_secret

Replace the signing secret

Returns the new secret, once. The old one stops at once.

secret key only

POST /v1/webhook_endpoints/{id}/rotate_secretrequest
curl -X POST https://api.marketsdk.com/v1/webhook_endpoints/{id}/rotate_secret \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, webhook endpoint
{
  "object": "webhook_endpoint",
  "id": "whe_034XtPDs7UJ0TXzTsdaHZa",
  "url": "string",
  "description": null,
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "disabled_reason": null,
  "failing_since": null,
  "last_success_at": null,
  "secret": "string",
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, webhook endpoint

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_endpoint
idrequiredstring
urlrequiredstring
descriptionrequiredstring or null
enabled_eventsrequiredarray of string
statusrequiredone of: enabled, disabled
disabled_reasonrequiredstring or nullWhy it was turned off, when MarketSDK turned it off.
failing_sincerequiredtimestamp or nullEvery delivery has failed since this time.
last_success_atrequiredtimestamp or null
secretstringThe signing secret. Returned only when the endpoint is created or its secret rotated.
metadatarequiredobject of strings
created_atrequiredtimestamp

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

GET /v1/webhook_deliveries

Recent deliveries, newest first, with request and response

secret key only

GET /v1/webhook_deliveriesrequest
curl https://api.marketsdk.com/v1/webhook_deliveries \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, webhook delivery list
{
  "object": "list",
  "data": [
    {
      "object": "webhook_delivery",
      "id": "whd_034XtPDs7UJ0TXzTsdaHZa",
      "endpoint": "string",
      "event": "string",
      "event_type": "string",
      "replay_of": null,
      "status": "pending",
      "attempts": 0,
      "attempt_log": [
        {
          "at": null,
          "status": null,
          "duration_ms": null,
          "error": null
        }
      ],
      "next_attempt_at": null,
      "request": {
        "headers": {},
        "body": "string"
      },
      "response": {
        "status": null,
        "body": null
      },
      "error": null,
      "created_at": "2026-10-01T12:00:00.000Z",
      "completed_at": null
    }
  ],
  "has_more": false,
  "next_cursor": null
}

parameters

Parameters
fieldtypeabout
limitinteger, in querymin 1, max 100, default 20
starting_afterstring, in queryThe next_cursor of the previous page.
endpointstring, in query
statusone of: pending, succeeded, failed, in query

returns 200, webhook delivery list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of webhook delivery
data[].objectrequiredone of: webhook_delivery
data[].idrequiredstring
data[].endpointrequiredstring
data[].eventrequiredstring
data[].event_typerequiredstring
data[].replay_ofrequiredstring or nullThe delivery this one replays.
data[].statusrequiredone of: pending, succeeded, failed
data[].attemptsrequiredinteger
data[].attempt_logrequiredarray of delivery attempt
data[].attempt_log[].atrequiredtimestamp
data[].attempt_log[].statusrequiredinteger or nullThe HTTP status your endpoint answered with, or null if it did not answer.
data[].attempt_log[].duration_msrequiredinteger
data[].attempt_log[].errorrequiredstring or null
data[].next_attempt_atrequiredtimestamp or null
data[].requestrequiredwebhook delivery request
data[].request.headersrequiredobject of strings
data[].request.bodyrequiredstringThe exact body sent.
data[].responserequiredwebhook delivery response
data[].response.statusrequiredinteger or null
data[].response.bodyrequiredstring or nullThe first 4,096 characters.
data[].errorrequiredstring or nullWhy the last attempt failed.
data[].created_atrequiredtimestamp
data[].completed_atrequiredtimestamp or null
has_morerequiredbooleanWhether another page follows.
next_cursorrequiredstring or nullPass as starting_after (or cursor for search) to get the next page.

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 429Rate limited. See Retry-After.

GET /v1/webhook_deliveries/{id}

Retrieve a delivery

secret key only

GET /v1/webhook_deliveries/{id}request
curl https://api.marketsdk.com/v1/webhook_deliveries/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, webhook delivery
{
  "object": "webhook_delivery",
  "id": "whd_034XtPDs7UJ0TXzTsdaHZa",
  "endpoint": "string",
  "event": "string",
  "event_type": "string",
  "replay_of": null,
  "status": "pending",
  "attempts": 0,
  "attempt_log": [
    {
      "at": "2026-10-01T12:00:00.000Z",
      "status": null,
      "duration_ms": 0,
      "error": null
    }
  ],
  "next_attempt_at": null,
  "request": {
    "headers": {},
    "body": "string"
  },
  "response": {
    "status": null,
    "body": null
  },
  "error": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "completed_at": null
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, webhook delivery

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_delivery
idrequiredstring
endpointrequiredstring
eventrequiredstring
event_typerequiredstring
replay_ofrequiredstring or nullThe delivery this one replays.
statusrequiredone of: pending, succeeded, failed
attemptsrequiredinteger
attempt_logrequiredarray of delivery attempt
attempt_log[].atrequiredtimestamp
attempt_log[].statusrequiredinteger or nullThe HTTP status your endpoint answered with, or null if it did not answer.
attempt_log[].duration_msrequiredinteger
attempt_log[].errorrequiredstring or null
next_attempt_atrequiredtimestamp or null
requestrequiredwebhook delivery request
request.headersrequiredobject of strings
request.bodyrequiredstringThe exact body sent.
responserequiredwebhook delivery response
response.statusrequiredinteger or null
response.bodyrequiredstring or nullThe first 4,096 characters.
errorrequiredstring or nullWhy the last attempt failed.
created_atrequiredtimestamp
completed_atrequiredtimestamp or null

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

POST /v1/webhook_deliveries/{id}/replay

Send a delivery again

Creates a new delivery of the same event to the same endpoint.

secret key only

POST /v1/webhook_deliveries/{id}/replayrequest
curl -X POST https://api.marketsdk.com/v1/webhook_deliveries/{id}/replay \
  -H "Authorization: Bearer $MARKETSDK_KEY"
201 example response, webhook delivery
{
  "object": "webhook_delivery",
  "id": "whd_034XtPDs7UJ0TXzTsdaHZa",
  "endpoint": "string",
  "event": "string",
  "event_type": "string",
  "replay_of": null,
  "status": "pending",
  "attempts": 0,
  "attempt_log": [
    {
      "at": "2026-10-01T12:00:00.000Z",
      "status": null,
      "duration_ms": 0,
      "error": null
    }
  ],
  "next_attempt_at": null,
  "request": {
    "headers": {},
    "body": "string"
  },
  "response": {
    "status": null,
    "body": null
  },
  "error": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "completed_at": null
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 201, webhook delivery

fields
Response fields
fieldtypeabout
objectrequiredone of: webhook_delivery
idrequiredstring
endpointrequiredstring
eventrequiredstring
event_typerequiredstring
replay_ofrequiredstring or nullThe delivery this one replays.
statusrequiredone of: pending, succeeded, failed
attemptsrequiredinteger
attempt_logrequiredarray of delivery attempt
attempt_log[].atrequiredtimestamp
attempt_log[].statusrequiredinteger or nullThe HTTP status your endpoint answered with, or null if it did not answer.
attempt_log[].duration_msrequiredinteger
attempt_log[].errorrequiredstring or null
next_attempt_atrequiredtimestamp or null
requestrequiredwebhook delivery request
request.headersrequiredobject of strings
request.bodyrequiredstringThe exact body sent.
responserequiredwebhook delivery response
response.statusrequiredinteger or null
response.bodyrequiredstring or nullThe first 4,096 characters.
errorrequiredstring or nullWhy the last attempt failed.
created_atrequiredtimestamp
completed_atrequiredtimestamp or null

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 409The object is not in a state that allows this.
  • 429Rate limited. See Retry-After.

GET /v1/events

Events, newest first: every state change on every resource

secret key only

GET /v1/eventsrequest
curl https://api.marketsdk.com/v1/events \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, event list
{
  "object": "list",
  "data": [
    {
      "object": "event",
      "id": "evt_034XtPDs7UJ0TXzTsdaHZa",
      "type": "seller.created",
      "api_version": "string",
      "created": "2026-10-01T12:00:00.000Z",
      "livemode": false,
      "data": {}
    }
  ],
  "has_more": false,
  "next_cursor": null
}

parameters

Parameters
fieldtypeabout
limitinteger, in querymin 1, max 100, default 20
starting_afterstring, in queryThe next_cursor of the previous page.
typeone of: seller.created, seller.updated, seller.erased, seller.suspended, seller.unsuspended, seller.verification_updated, seller.payouts_updated, buyer.created, buyer.updated, buyer.erased, category.created, category.updated, listing.created, listing.updated, listing.published, listing.unpublished, listing.sold, listing.expired, listing.removed, media.ready, media.deleted, order.created, order.committed, order.claimed, order.cancellation_proposed, order.cancellation_declined, order.cancelled, order.expired, order.completed, order.disputed, payment.created, payment.succeeded, payment.failed, payment.canceled, payment.refunded, payment.released, payment.release_failed, refund.created, refund.updated, verification.created, verification.updated, review.created, review.visible, review.removed, reputation_event.created, reputation_event.voided, dispute.created, dispute.evidence_added, dispute.updated, dispute.decision_overdue, dispute.decided, card_dispute.created, card_dispute.updated, flag.created, flag.resolved, moderation_action.created, in query

returns 200, event list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of event
data[].objectrequiredone of: event
data[].idrequiredstring
data[].typerequiredone of: seller.created, seller.updated, seller.erased, seller.suspended, seller.unsuspended, seller.verification_updated, seller.payouts_updated, buyer.created, buyer.updated, buyer.erased, category.created, category.updated, listing.created, listing.updated, listing.published, listing.unpublished, listing.sold, listing.expired, listing.removed, media.ready, media.deleted, order.created, order.committed, order.claimed, order.cancellation_proposed, order.cancellation_declined, order.cancelled, order.expired, order.completed, order.disputed, payment.created, payment.succeeded, payment.failed, payment.canceled, payment.refunded, payment.released, payment.release_failed, refund.created, refund.updated, verification.created, verification.updated, review.created, review.visible, review.removed, reputation_event.created, reputation_event.voided, dispute.created, dispute.evidence_added, dispute.updated, dispute.decision_overdue, dispute.decided, card_dispute.created, card_dispute.updated, flag.created, flag.resolved, moderation_action.created
data[].api_versionrequiredstringAlways v1 in this version of the API.
data[].createdrequiredtimestamp
data[].livemoderequiredboolean
data[].datarequiredobject of stringsdata.object is the object as it was right after the change.
has_morerequiredbooleanWhether another page follows.
next_cursorrequiredstring or nullPass as starting_after (or cursor for search) to get the next page.

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 429Rate limited. See Retry-After.

GET /v1/events/{id}

Retrieve an event

secret key only

GET /v1/events/{id}request
curl https://api.marketsdk.com/v1/events/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, event
{
  "object": "event",
  "id": "evt_034XtPDs7UJ0TXzTsdaHZa",
  "type": "seller.created",
  "api_version": "string",
  "created": "2026-10-01T12:00:00.000Z",
  "livemode": false,
  "data": {}
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, event

fields
Response fields
fieldtypeabout
objectrequiredone of: event
idrequiredstring
typerequiredone of: seller.created, seller.updated, seller.erased, seller.suspended, seller.unsuspended, seller.verification_updated, seller.payouts_updated, buyer.created, buyer.updated, buyer.erased, category.created, category.updated, listing.created, listing.updated, listing.published, listing.unpublished, listing.sold, listing.expired, listing.removed, media.ready, media.deleted, order.created, order.committed, order.claimed, order.cancellation_proposed, order.cancellation_declined, order.cancelled, order.expired, order.completed, order.disputed, payment.created, payment.succeeded, payment.failed, payment.canceled, payment.refunded, payment.released, payment.release_failed, refund.created, refund.updated, verification.created, verification.updated, review.created, review.visible, review.removed, reputation_event.created, reputation_event.voided, dispute.created, dispute.evidence_added, dispute.updated, dispute.decision_overdue, dispute.decided, card_dispute.created, card_dispute.updated, flag.created, flag.resolved, moderation_action.created
api_versionrequiredstringAlways v1 in this version of the API.
createdrequiredtimestamp
livemoderequiredboolean
datarequiredobject of stringsdata.object is the object as it was right after the change.

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.