Skip to content
msMarketSDK

all endpoints

// api reference

Trust

POST /v1/sellers/{id}/verifications

Start a seller's identity verification

Creates a Stripe Identity session on your Stripe account and returns its page, once. Only the outcome and the session id are kept; no document image or document data. When seller verification is on, a seller can publish only once verified.

secret key only

POST /v1/sellers/{id}/verificationsrequest
curl -X POST https://api.marketsdk.com/v1/sellers/{id}/verifications \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'
201 example response, verification
{
  "object": "verification",
  "id": "ver_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "status": "requires_input",
  "last_error_code": null,
  "url": null,
  "stripe_session": null,
  "verified_at": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, create verification

Request body
fieldtypeabout
return_urlstringWhere Stripe sends the seller after the verification page.

returns 201, verification

fields
Response fields
fieldtypeabout
objectrequiredone of: verification
idrequiredstring
sellerrequiredstring
statusrequiredone of: requires_input, processing, verified, canceledStripe Identity's status for this attempt. requires_input with a last_error_code means the seller must try again.
last_error_coderequiredstring or nullStripe's reason the last attempt failed, such as document_expired.
urlrequiredstring or nullThe Stripe-hosted verification page. Returned only when the verification is created. Send the seller there.
stripe_sessionrequiredstring or nullThe Stripe Identity verification session.
verified_atrequiredtimestamp or null
created_atrequiredtimestamp
updated_atrequiredtimestamp

errors

  • 400The request is not valid.
  • 401No API key, or not a valid one.
  • 403Not allowed with this key, or the marketplace is read-only.
  • 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/verifications

List identity verifications, newest first

secret key only

GET /v1/verificationsrequest
curl https://api.marketsdk.com/v1/verifications \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, verification list
{
  "object": "list",
  "data": [
    {
      "object": "verification",
      "id": "ver_034XtPDs7UJ0TXzTsdaHZa",
      "seller": "string",
      "status": "requires_input",
      "last_error_code": null,
      "url": null,
      "stripe_session": null,
      "verified_at": null,
      "created_at": "2026-10-01T12:00:00.000Z",
      "updated_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.
sellerstring, in query

returns 200, verification list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of verification
data[].objectrequiredone of: verification
data[].idrequiredstring
data[].sellerrequiredstring
data[].statusrequiredone of: requires_input, processing, verified, canceledStripe Identity's status for this attempt. requires_input with a last_error_code means the seller must try again.
data[].last_error_coderequiredstring or nullStripe's reason the last attempt failed, such as document_expired.
data[].urlrequiredstring or nullThe Stripe-hosted verification page. Returned only when the verification is created. Send the seller there.
data[].stripe_sessionrequiredstring or nullThe Stripe Identity verification session.
data[].verified_atrequiredtimestamp or null
data[].created_atrequiredtimestamp
data[].updated_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.

GET /v1/verifications/{id}

Retrieve an identity verification

secret key only

GET /v1/verifications/{id}request
curl https://api.marketsdk.com/v1/verifications/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, verification
{
  "object": "verification",
  "id": "ver_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "status": "requires_input",
  "last_error_code": null,
  "url": null,
  "stripe_session": null,
  "verified_at": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, verification

fields
Response fields
fieldtypeabout
objectrequiredone of: verification
idrequiredstring
sellerrequiredstring
statusrequiredone of: requires_input, processing, verified, canceledStripe Identity's status for this attempt. requires_input with a last_error_code means the seller must try again.
last_error_coderequiredstring or nullStripe's reason the last attempt failed, such as document_expired.
urlrequiredstring or nullThe Stripe-hosted verification page. Returned only when the verification is created. Send the seller there.
stripe_sessionrequiredstring or nullThe Stripe Identity verification session.
verified_atrequiredtimestamp or null
created_atrequiredtimestamp
updated_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.

POST /v1/verifications/{id}/cancel

Cancel a verification the seller has not submitted

secret key only

POST /v1/verifications/{id}/cancelrequest
curl -X POST https://api.marketsdk.com/v1/verifications/{id}/cancel \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, verification
{
  "object": "verification",
  "id": "ver_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "status": "requires_input",
  "last_error_code": null,
  "url": null,
  "stripe_session": null,
  "verified_at": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, verification

fields
Response fields
fieldtypeabout
objectrequiredone of: verification
idrequiredstring
sellerrequiredstring
statusrequiredone of: requires_input, processing, verified, canceledStripe Identity's status for this attempt. requires_input with a last_error_code means the seller must try again.
last_error_coderequiredstring or nullStripe's reason the last attempt failed, such as document_expired.
urlrequiredstring or nullThe Stripe-hosted verification page. Returned only when the verification is created. Send the seller there.
stripe_sessionrequiredstring or nullThe Stripe Identity verification session.
verified_atrequiredtimestamp or null
created_atrequiredtimestamp
updated_atrequiredtimestamp

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/disputes

List disputes, newest first

Filter by stage for a queue.

secret key only

GET /v1/disputesrequest
curl https://api.marketsdk.com/v1/disputes \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, dispute list
{
  "object": "list",
  "data": [
    {
      "object": "dispute",
      "id": "dsp_034XtPDs7UJ0TXzTsdaHZa",
      "order": "string",
      "kind": "claimed_order",
      "opened_by": "buyer",
      "opener": "string",
      "reason": null,
      "stage": "evidence",
      "evidence_due_at": "2026-10-01T12:00:00.000Z",
      "decision_due_at": null,
      "overdue": false,
      "evidence_count": 0,
      "decision": {
        "against": "buyer",
        "outcome": "claim_upheld",
        "refund_amount": null,
        "note": "string",
        "decided_by": null,
        "decided_at": "2026-10-01T12:00:00.000Z"
      },
      "card_disputes": [
        {
          "object": null,
          "id": null,
          "order": null,
          "stripe_dispute": null,
          "amount": null,
          "currency": null,
          "reason": null,
          "status": null,
          "created_at": null
        }
      ],
      "metadata": {},
      "created_at": "2026-10-01T12:00:00.000Z",
      "updated_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.
stageone of: evidence, awaiting_decision, decided, in query
orderstring, in query

returns 200, dispute list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of dispute
data[].objectrequiredone of: dispute
data[].idrequiredstring
data[].orderrequiredstring
data[].kindrequiredone of: claimed_order, completed_order
data[].opened_byrequiredone of: buyer, seller
data[].openerrequiredstring
data[].reasonrequiredstring or nullNull once the opener's data is erased.
data[].stagerequiredone of: evidence, awaiting_decision, decided
data[].evidence_due_atrequiredtimestamp
data[].decision_due_atrequiredtimestamp or null
data[].overduerequiredbooleanTrue once the decision time limit has passed with no decision.
data[].evidence_countrequiredintegerPieces of evidence given so far.
data[].decisionrequireddispute decision or null
data[].decision.againstrequiredone of: buyer, seller
data[].decision.outcomerequiredone of: claim_upheld, claim_rejected, decideddecided for a dispute on a completed order, which has no claim to uphold.
data[].decision.refund_amountrequiredinteger or nullRefunded to the buyer by this decision. Null with payments off.
data[].decision.noterequiredstring
data[].decision.decided_byrequiredstring or null
data[].decision.decided_atrequiredtimestamp
data[].card_disputesrequiredarray of card disputeCard disputes on the same order, linked here but separate.
data[].card_disputes[].objectrequiredone of: card_dispute
data[].card_disputes[].idrequiredstring
data[].card_disputes[].orderrequiredstring
data[].card_disputes[].stripe_disputerequiredstringThe dispute's id on your Stripe account.
data[].card_disputes[].amountrequiredinteger
data[].card_disputes[].currencyrequiredstring
data[].card_disputes[].reasonrequiredstring
data[].card_disputes[].statusrequiredstringStripe's status, such as needs_response, won, or lost.
data[].card_disputes[].created_atrequiredtimestamp
data[].metadatarequiredobject of strings
data[].created_atrequiredtimestamp
data[].updated_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.

GET /v1/disputes/{id}

Retrieve a dispute

secret key only

GET /v1/disputes/{id}request
curl https://api.marketsdk.com/v1/disputes/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, dispute
{
  "object": "dispute",
  "id": "dsp_034XtPDs7UJ0TXzTsdaHZa",
  "order": "string",
  "kind": "claimed_order",
  "opened_by": "buyer",
  "opener": "string",
  "reason": null,
  "stage": "evidence",
  "evidence_due_at": "2026-10-01T12:00:00.000Z",
  "decision_due_at": null,
  "overdue": false,
  "evidence_count": 0,
  "decision": {
    "against": "buyer",
    "outcome": "claim_upheld",
    "refund_amount": null,
    "note": "string",
    "decided_by": null,
    "decided_at": "2026-10-01T12:00:00.000Z"
  },
  "card_disputes": [
    {
      "object": "card_dispute",
      "id": "cdp_034XtPDs7UJ0TXzTsdaHZa",
      "order": "string",
      "stripe_dispute": "string",
      "amount": 0,
      "currency": "string",
      "reason": "string",
      "status": "string",
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, dispute

fields
Response fields
fieldtypeabout
objectrequiredone of: dispute
idrequiredstring
orderrequiredstring
kindrequiredone of: claimed_order, completed_order
opened_byrequiredone of: buyer, seller
openerrequiredstring
reasonrequiredstring or nullNull once the opener's data is erased.
stagerequiredone of: evidence, awaiting_decision, decided
evidence_due_atrequiredtimestamp
decision_due_atrequiredtimestamp or null
overduerequiredbooleanTrue once the decision time limit has passed with no decision.
evidence_countrequiredintegerPieces of evidence given so far.
decisionrequireddispute decision or null
decision.againstrequiredone of: buyer, seller
decision.outcomerequiredone of: claim_upheld, claim_rejected, decideddecided for a dispute on a completed order, which has no claim to uphold.
decision.refund_amountrequiredinteger or nullRefunded to the buyer by this decision. Null with payments off.
decision.noterequiredstring
decision.decided_byrequiredstring or null
decision.decided_atrequiredtimestamp
card_disputesrequiredarray of card disputeCard disputes on the same order, linked here but separate.
card_disputes[].objectrequiredone of: card_dispute
card_disputes[].idrequiredstring
card_disputes[].orderrequiredstring
card_disputes[].stripe_disputerequiredstringThe dispute's id on your Stripe account.
card_disputes[].amountrequiredinteger
card_disputes[].currencyrequiredstring
card_disputes[].reasonrequiredstring
card_disputes[].statusrequiredstringStripe's status, such as needs_response, won, or lost.
card_disputes[].created_atrequiredtimestamp
metadatarequiredobject of strings
created_atrequiredtimestamp
updated_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/disputes/{id}/evidence

A dispute's evidence, oldest first

secret key only

GET /v1/disputes/{id}/evidencerequest
curl https://api.marketsdk.com/v1/disputes/{id}/evidence \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, dispute evidence list
{
  "object": "list",
  "data": [
    {
      "object": "dispute_evidence",
      "id": "dev_034XtPDs7UJ0TXzTsdaHZa",
      "dispute": "string",
      "party": "buyer",
      "author": "string",
      "body": null,
      "links": [
        "string"
      ],
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, dispute evidence list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of dispute evidence
data[].objectrequiredone of: dispute_evidence
data[].idrequiredstring
data[].disputerequiredstring
data[].partyrequiredone of: buyer, seller
data[].authorrequiredstring
data[].bodyrequiredstring or null
data[].linksrequiredarray of string
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.
  • 404No object with that id in this marketplace.
  • 429Rate limited. See Retry-After.

POST /v1/disputes/{id}/evidence

Add evidence from one side

Only while the dispute is in its evidence stage.

secret key only

POST /v1/disputes/{id}/evidencerequest
curl -X POST https://api.marketsdk.com/v1/disputes/{id}/evidence \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"actor":"string","body":"string"}'
201 example response, dispute evidence
{
  "object": "dispute_evidence",
  "id": "dev_034XtPDs7UJ0TXzTsdaHZa",
  "dispute": "string",
  "party": "buyer",
  "author": "string",
  "body": null,
  "links": [
    "string"
  ],
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, add evidence

Request body
fieldtypeabout
actorrequiredstringThe buyer or seller giving evidence.
bodyrequiredstringup to 10000 characters
linksarray of stringLinks to files the party provided, such as photos you store. HTTPS only.up to 5 items

returns 201, dispute evidence

fields
Response fields
fieldtypeabout
objectrequiredone of: dispute_evidence
idrequiredstring
disputerequiredstring
partyrequiredone of: buyer, seller
authorrequiredstring
bodyrequiredstring or null
linksrequiredarray of string
created_atrequiredtimestamp

errors

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

POST /v1/disputes/{id}/close_evidence

End the evidence stage early

secret key only

POST /v1/disputes/{id}/close_evidencerequest
curl -X POST https://api.marketsdk.com/v1/disputes/{id}/close_evidence \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, dispute
{
  "object": "dispute",
  "id": "dsp_034XtPDs7UJ0TXzTsdaHZa",
  "order": "string",
  "kind": "claimed_order",
  "opened_by": "buyer",
  "opener": "string",
  "reason": null,
  "stage": "evidence",
  "evidence_due_at": "2026-10-01T12:00:00.000Z",
  "decision_due_at": null,
  "overdue": false,
  "evidence_count": 0,
  "decision": {
    "against": "buyer",
    "outcome": "claim_upheld",
    "refund_amount": null,
    "note": "string",
    "decided_by": null,
    "decided_at": "2026-10-01T12:00:00.000Z"
  },
  "card_disputes": [
    {
      "object": "card_dispute",
      "id": "cdp_034XtPDs7UJ0TXzTsdaHZa",
      "order": "string",
      "stripe_dispute": "string",
      "amount": 0,
      "currency": "string",
      "reason": "string",
      "status": "string",
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, dispute

fields
Response fields
fieldtypeabout
objectrequiredone of: dispute
idrequiredstring
orderrequiredstring
kindrequiredone of: claimed_order, completed_order
opened_byrequiredone of: buyer, seller
openerrequiredstring
reasonrequiredstring or nullNull once the opener's data is erased.
stagerequiredone of: evidence, awaiting_decision, decided
evidence_due_atrequiredtimestamp
decision_due_atrequiredtimestamp or null
overduerequiredbooleanTrue once the decision time limit has passed with no decision.
evidence_countrequiredintegerPieces of evidence given so far.
decisionrequireddispute decision or null
decision.againstrequiredone of: buyer, seller
decision.outcomerequiredone of: claim_upheld, claim_rejected, decideddecided for a dispute on a completed order, which has no claim to uphold.
decision.refund_amountrequiredinteger or nullRefunded to the buyer by this decision. Null with payments off.
decision.noterequiredstring
decision.decided_byrequiredstring or null
decision.decided_atrequiredtimestamp
card_disputesrequiredarray of card disputeCard disputes on the same order, linked here but separate.
card_disputes[].objectrequiredone of: card_dispute
card_disputes[].idrequiredstring
card_disputes[].orderrequiredstring
card_disputes[].stripe_disputerequiredstringThe dispute's id on your Stripe account.
card_disputes[].amountrequiredinteger
card_disputes[].currencyrequiredstring
card_disputes[].reasonrequiredstring
card_disputes[].statusrequiredstringStripe's status, such as needs_response, won, or lost.
card_disputes[].created_atrequiredtimestamp
metadatarequiredobject of strings
created_atrequiredtimestamp
updated_atrequiredtimestamp

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.

POST /v1/disputes/{id}/decide

Decide a dispute

Your team's decision: who it went against, in writing, and with payments on, how much goes back to the buyer. On a claimed order, deciding against the party who disputed upholds the claim and completes the order; deciding against the claimant cancels it.

secret key only

POST /v1/disputes/{id}/deciderequest
curl -X POST https://api.marketsdk.com/v1/disputes/{id}/decide \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"against":"buyer","note":"string"}'
200 example response, dispute
{
  "object": "dispute",
  "id": "dsp_034XtPDs7UJ0TXzTsdaHZa",
  "order": "string",
  "kind": "claimed_order",
  "opened_by": "buyer",
  "opener": "string",
  "reason": null,
  "stage": "evidence",
  "evidence_due_at": "2026-10-01T12:00:00.000Z",
  "decision_due_at": null,
  "overdue": false,
  "evidence_count": 0,
  "decision": {
    "against": "buyer",
    "outcome": "claim_upheld",
    "refund_amount": null,
    "note": "string",
    "decided_by": null,
    "decided_at": "2026-10-01T12:00:00.000Z"
  },
  "card_disputes": [
    {
      "object": "card_dispute",
      "id": "cdp_034XtPDs7UJ0TXzTsdaHZa",
      "order": "string",
      "stripe_dispute": "string",
      "amount": 0,
      "currency": "string",
      "reason": "string",
      "status": "string",
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, decide dispute

Request body
fieldtypeabout
againstrequiredone of: buyer, sellerWho the decision went against. They get a dispute_lost reputation event; the other party gets dispute_won.
noterequiredstringThe written decision, kept with the dispute.up to 5000 characters
refund_amountintegerPayments on only. Minor units to refund to the buyer; the rest goes to the seller. Defaults: a claimed order whose claim is upheld refunds nothing; one whose claim is rejected refunds everything; a dispute on a completed order refunds nothing.min 0
decided_bystringWho on your team decided, for the record. Up to 200 characters.up to 200 characters

returns 200, dispute

fields
Response fields
fieldtypeabout
objectrequiredone of: dispute
idrequiredstring
orderrequiredstring
kindrequiredone of: claimed_order, completed_order
opened_byrequiredone of: buyer, seller
openerrequiredstring
reasonrequiredstring or nullNull once the opener's data is erased.
stagerequiredone of: evidence, awaiting_decision, decided
evidence_due_atrequiredtimestamp
decision_due_atrequiredtimestamp or null
overduerequiredbooleanTrue once the decision time limit has passed with no decision.
evidence_countrequiredintegerPieces of evidence given so far.
decisionrequireddispute decision or null
decision.againstrequiredone of: buyer, seller
decision.outcomerequiredone of: claim_upheld, claim_rejected, decideddecided for a dispute on a completed order, which has no claim to uphold.
decision.refund_amountrequiredinteger or nullRefunded to the buyer by this decision. Null with payments off.
decision.noterequiredstring
decision.decided_byrequiredstring or null
decision.decided_atrequiredtimestamp
card_disputesrequiredarray of card disputeCard disputes on the same order, linked here but separate.
card_disputes[].objectrequiredone of: card_dispute
card_disputes[].idrequiredstring
card_disputes[].orderrequiredstring
card_disputes[].stripe_disputerequiredstringThe dispute's id on your Stripe account.
card_disputes[].amountrequiredinteger
card_disputes[].currencyrequiredstring
card_disputes[].reasonrequiredstring
card_disputes[].statusrequiredstringStripe's status, such as needs_response, won, or lost.
card_disputes[].created_atrequiredtimestamp
metadatarequiredobject of strings
created_atrequiredtimestamp
updated_atrequiredtimestamp

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.

POST /v1/orders/{id}/disputes

Dispute an order

On a claimed order, by the party who did not claim: the order becomes disputed. On a completed order, by either party inside the dispute window: the order stays completed.

secret key only

POST /v1/orders/{id}/disputesrequest
curl -X POST https://api.marketsdk.com/v1/orders/{id}/disputes \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"actor":"buy_034XtPDs7UJ0TXzTsdaHZa","reason":"string"}'
201 example response, dispute
{
  "object": "dispute",
  "id": "dsp_034XtPDs7UJ0TXzTsdaHZa",
  "order": "string",
  "kind": "claimed_order",
  "opened_by": "buyer",
  "opener": "string",
  "reason": null,
  "stage": "evidence",
  "evidence_due_at": "2026-10-01T12:00:00.000Z",
  "decision_due_at": null,
  "overdue": false,
  "evidence_count": 0,
  "decision": {
    "against": "buyer",
    "outcome": "claim_upheld",
    "refund_amount": null,
    "note": "string",
    "decided_by": null,
    "decided_at": "2026-10-01T12:00:00.000Z"
  },
  "card_disputes": [
    {
      "object": "card_dispute",
      "id": "cdp_034XtPDs7UJ0TXzTsdaHZa",
      "order": "string",
      "stripe_dispute": "string",
      "amount": 0,
      "currency": "string",
      "reason": "string",
      "status": "string",
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, open dispute

Request body
fieldtypeabout
actorrequiredstringThe buyer or seller opening the dispute.
reasonrequiredstringWhat went wrong, in their words.up to 2000 characters
metadataobject of strings

returns 201, dispute

fields
Response fields
fieldtypeabout
objectrequiredone of: dispute
idrequiredstring
orderrequiredstring
kindrequiredone of: claimed_order, completed_order
opened_byrequiredone of: buyer, seller
openerrequiredstring
reasonrequiredstring or nullNull once the opener's data is erased.
stagerequiredone of: evidence, awaiting_decision, decided
evidence_due_atrequiredtimestamp
decision_due_atrequiredtimestamp or null
overduerequiredbooleanTrue once the decision time limit has passed with no decision.
evidence_countrequiredintegerPieces of evidence given so far.
decisionrequireddispute decision or null
decision.againstrequiredone of: buyer, seller
decision.outcomerequiredone of: claim_upheld, claim_rejected, decideddecided for a dispute on a completed order, which has no claim to uphold.
decision.refund_amountrequiredinteger or nullRefunded to the buyer by this decision. Null with payments off.
decision.noterequiredstring
decision.decided_byrequiredstring or null
decision.decided_atrequiredtimestamp
card_disputesrequiredarray of card disputeCard disputes on the same order, linked here but separate.
card_disputes[].objectrequiredone of: card_dispute
card_disputes[].idrequiredstring
card_disputes[].orderrequiredstring
card_disputes[].stripe_disputerequiredstringThe dispute's id on your Stripe account.
card_disputes[].amountrequiredinteger
card_disputes[].currencyrequiredstring
card_disputes[].reasonrequiredstring
card_disputes[].statusrequiredstringStripe's status, such as needs_response, won, or lost.
card_disputes[].created_atrequiredtimestamp
metadatarequiredobject of strings
created_atrequiredtimestamp
updated_atrequiredtimestamp

errors

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