Skip to content
msMarketSDK

all endpoints

// api reference

Listings

GET /v1/listings

List listings, newest first

With a publishable key, only published listings are listed.

secret key, or a publishable key from a browser

GET /v1/listingsrequest
curl https://api.marketsdk.com/v1/listings \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, listing list
{
  "object": "list",
  "data": [
    {
      "object": "listing",
      "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
      "seller": "string",
      "category": null,
      "title": "string",
      "description": null,
      "price": {
        "amount": 4900,
        "currency": "USD"
      },
      "quantity": 0,
      "quantity_available": 0,
      "status": "draft",
      "attributes": {},
      "media": [
        {
          "object": null,
          "id": null,
          "listing": null,
          "status": null,
          "content_type": null,
          "size_bytes": null,
          "position": null,
          "url": null,
          "url_expires_at": null,
          "created_at": null
        }
      ],
      "metadata": {},
      "published_at": null,
      "expires_at": null,
      "removed_reason": 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
categorystring, in query
statusone of: draft, published, sold, expired, removed, in query

returns 200, listing list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of listing
data[].objectrequiredone of: listing
data[].idrequiredstring
data[].sellerrequiredstring
data[].categoryrequiredstring or null
data[].titlerequiredstring
data[].descriptionrequiredstring or null
data[].pricerequiredmoney
data[].price.amountrequiredintegerInteger minor units.
data[].price.currencyrequiredstring
data[].quantityrequiredinteger
data[].quantity_availablerequiredintegerNot reserved by an open order.
data[].statusrequiredone of: draft, published, sold, expired, removed
data[].attributesrequiredobject of strings
data[].mediarequiredarray of media
data[].media[].objectrequiredone of: media
data[].media[].idrequiredstring
data[].media[].listingrequiredstring
data[].media[].statusrequiredone of: pending, ready
data[].media[].content_typerequiredstring
data[].media[].size_bytesrequiredinteger
data[].media[].positionrequiredinteger
data[].media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
data[].media[].url_expires_atrequiredtimestamp or null
data[].media[].created_atrequiredtimestamp
data[].metadatarequiredobject of strings
data[].published_atrequiredtimestamp or null
data[].expires_atrequiredtimestamp or null
data[].removed_reasonrequiredstring 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.

POST /v1/listings

Create a listing, as a draft

secret key only

POST /v1/listingsrequest
curl -X POST https://api.marketsdk.com/v1/listings \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"seller":"sel_034XtPDs7UJ0TXzTsdaHZa","title":"string","price":{"amount":4900,"currency":"USD"}}'
201 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

body, create listing

Request body
fieldtypeabout
sellerrequiredstring
categorystring or null
titlerequiredstringup to 200 characters
descriptionstring or nullup to 20000 characters
pricerequiredmoney
price.amountrequiredintegerInteger minor units, such as cents.
price.currencyrequiredstringISO 4217 code. Must be the marketplace currency.
quantityintegermin 1, max 100000, default 1
attributesobject of stringsValidated against the category's attribute schema.
metadataobject of strings
expires_attimestamp or nullWhen a published listing expires.

returns 201, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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.

POST /v1/listings/bulk

Create up to 100 listings at once, all or none

secret key only

POST /v1/listings/bulkrequest
curl -X POST https://api.marketsdk.com/v1/listings/bulk \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"listings":[{"seller":"sel_034XtPDs7UJ0TXzTsdaHZa","title":"string","price":{"amount":4900,"currency":"USD"}}]}'
201 example response, bulk listings
{
  "object": "list",
  "data": [
    {
      "object": "listing",
      "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
      "seller": "string",
      "category": null,
      "title": "string",
      "description": null,
      "price": {
        "amount": 4900,
        "currency": "USD"
      },
      "quantity": 0,
      "quantity_available": 0,
      "status": "draft",
      "attributes": {},
      "media": [
        {
          "object": null,
          "id": null,
          "listing": null,
          "status": null,
          "content_type": null,
          "size_bytes": null,
          "position": null,
          "url": null,
          "url_expires_at": null,
          "created_at": null
        }
      ],
      "metadata": {},
      "published_at": null,
      "expires_at": null,
      "removed_reason": null,
      "created_at": "2026-10-01T12:00:00.000Z",
      "updated_at": "2026-10-01T12:00:00.000Z"
    }
  ]
}

body, bulk create listings

Request body
fieldtypeabout
listingsrequiredarray of create listingAll are created, or none.up to 100 items
listings[].sellerrequiredstring
listings[].categorystring or null
listings[].titlerequiredstringup to 200 characters
listings[].descriptionstring or nullup to 20000 characters
listings[].pricerequiredmoney
listings[].price.amountrequiredintegerInteger minor units, such as cents.
listings[].price.currencyrequiredstringISO 4217 code. Must be the marketplace currency.
listings[].quantityintegermin 1, max 100000, default 1
listings[].attributesobject of stringsValidated against the category's attribute schema.
listings[].metadataobject of strings
listings[].expires_attimestamp or nullWhen a published listing expires.

returns 201, bulk listings

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of listing
data[].objectrequiredone of: listing
data[].idrequiredstring
data[].sellerrequiredstring
data[].categoryrequiredstring or null
data[].titlerequiredstring
data[].descriptionrequiredstring or null
data[].pricerequiredmoney
data[].price.amountrequiredintegerInteger minor units.
data[].price.currencyrequiredstring
data[].quantityrequiredinteger
data[].quantity_availablerequiredintegerNot reserved by an open order.
data[].statusrequiredone of: draft, published, sold, expired, removed
data[].attributesrequiredobject of strings
data[].mediarequiredarray of media
data[].media[].objectrequiredone of: media
data[].media[].idrequiredstring
data[].media[].listingrequiredstring
data[].media[].statusrequiredone of: pending, ready
data[].media[].content_typerequiredstring
data[].media[].size_bytesrequiredinteger
data[].media[].positionrequiredinteger
data[].media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
data[].media[].url_expires_atrequiredtimestamp or null
data[].media[].created_atrequiredtimestamp
data[].metadatarequiredobject of strings
data[].published_atrequiredtimestamp or null
data[].expires_atrequiredtimestamp or null
data[].removed_reasonrequiredstring or null
data[].created_atrequiredtimestamp
data[].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/listings/{id}

Retrieve a listing

With a publishable key, only a published listing can be retrieved.

secret key, or a publishable key from a browser

GET /v1/listings/{id}request
curl https://api.marketsdk.com/v1/listings/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": 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, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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.

PATCH /v1/listings/{id}

Update a listing

secret key only

PATCH /v1/listings/{id}request
curl -X PATCH https://api.marketsdk.com/v1/listings/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
200 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, update listing

Request body
fieldtypeabout
categorystring or null
titlestringup to 200 characters
descriptionstring or null
pricemoney
price.amountrequiredintegerInteger minor units, such as cents.
price.currencyrequiredstringISO 4217 code. Must be the marketplace currency.
quantityintegerThe total. Cannot go below what open orders have reserved.min 1
attributesobject of strings
metadataobject of strings
expires_attimestamp or null

returns 200, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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.

POST /v1/listings/{id}/publish

Publish a listing

Needs an active seller, verified when seller verification is on, and a category that is not prohibited.

secret key only

POST /v1/listings/{id}/publishrequest
curl -X POST https://api.marketsdk.com/v1/listings/{id}/publish \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": 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, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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.

POST /v1/listings/{id}/unpublish

Return a published listing to draft

secret key only

POST /v1/listings/{id}/unpublishrequest
curl -X POST https://api.marketsdk.com/v1/listings/{id}/unpublish \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": 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, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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.

POST /v1/listings/{id}/remove

Take a listing down, with a reason

secret key only

POST /v1/listings/{id}/removerequest
curl -X POST https://api.marketsdk.com/v1/listings/{id}/remove \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"reason":"string"}'
200 example response, listing
{
  "object": "listing",
  "id": "lst_034XtPDs7UJ0TXzTsdaHZa",
  "seller": "string",
  "category": null,
  "title": "string",
  "description": null,
  "price": {
    "amount": 4900,
    "currency": "USD"
  },
  "quantity": 0,
  "quantity_available": 0,
  "status": "draft",
  "attributes": {},
  "media": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "metadata": {},
  "published_at": null,
  "expires_at": null,
  "removed_reason": null,
  "created_at": "2026-10-01T12:00:00.000Z",
  "updated_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, remove listing

Request body
fieldtypeabout
reasonrequiredstringRecorded with the removal.up to 500 characters

returns 200, listing

fields
Response fields
fieldtypeabout
objectrequiredone of: listing
idrequiredstring
sellerrequiredstring
categoryrequiredstring or null
titlerequiredstring
descriptionrequiredstring or null
pricerequiredmoney
price.amountrequiredintegerInteger minor units.
price.currencyrequiredstring
quantityrequiredinteger
quantity_availablerequiredintegerNot reserved by an open order.
statusrequiredone of: draft, published, sold, expired, removed
attributesrequiredobject of strings
mediarequiredarray of media
media[].objectrequiredone of: media
media[].idrequiredstring
media[].listingrequiredstring
media[].statusrequiredone of: pending, ready
media[].content_typerequiredstring
media[].size_bytesrequiredinteger
media[].positionrequiredinteger
media[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media[].url_expires_atrequiredtimestamp or null
media[].created_atrequiredtimestamp
metadatarequiredobject of strings
published_atrequiredtimestamp or null
expires_atrequiredtimestamp or null
removed_reasonrequiredstring 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/listings/{id}/media

A listing's media, pending uploads included

secret key only

GET /v1/listings/{id}/mediarequest
curl https://api.marketsdk.com/v1/listings/{id}/media \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, media list
{
  "object": "list",
  "data": [
    {
      "object": "media",
      "id": "med_034XtPDs7UJ0TXzTsdaHZa",
      "listing": "string",
      "status": "pending",
      "content_type": "image/jpeg",
      "size_bytes": 0,
      "position": 0,
      "url": null,
      "url_expires_at": null,
      "created_at": "2026-10-01T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, media list

fields
Response fields
fieldtypeabout
objectrequiredone of: list
datarequiredarray of media
data[].objectrequiredone of: media
data[].idrequiredstring
data[].listingrequiredstring
data[].statusrequiredone of: pending, ready
data[].content_typerequiredstring
data[].size_bytesrequiredinteger
data[].positionrequiredinteger
data[].urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
data[].url_expires_atrequiredtimestamp or null
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/listings/{id}/media

Start a media upload

Returns a signed URL, valid for 10 minutes. PUT the file there, then complete the upload. The file is stored under a path that begins with the marketplace id.

secret key only

POST /v1/listings/{id}/mediarequest
curl -X POST https://api.marketsdk.com/v1/listings/{id}/media \
  -H "Authorization: Bearer $MARKETSDK_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"content_type":"image/jpeg","size_bytes":1}'
201 example response, media upload
{
  "media": {
    "object": "media",
    "id": "med_034XtPDs7UJ0TXzTsdaHZa",
    "listing": "string",
    "status": "pending",
    "content_type": "image/jpeg",
    "size_bytes": 0,
    "position": 0,
    "url": null,
    "url_expires_at": null,
    "created_at": "2026-10-01T12:00:00.000Z"
  },
  "upload_url": "string",
  "upload_expires_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

body, create media

Request body
fieldtypeabout
content_typerequiredone of: image/jpeg, image/png, image/webp, image/gif, image/avif
size_bytesrequiredintegerThe exact size of the file, in bytes. At most 10 MB.min 1, max 10485760
positionintegerdefault 0

returns 201, media upload

fields
Response fields
fieldtypeabout
mediarequiredmedia
media.objectrequiredone of: media
media.idrequiredstring
media.listingrequiredstring
media.statusrequiredone of: pending, ready
media.content_typerequiredstring
media.size_bytesrequiredinteger
media.positionrequiredinteger
media.urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
media.url_expires_atrequiredtimestamp or null
media.created_atrequiredtimestamp
upload_urlrequiredstringPUT the file here, with the same Content-Type, within 10 minutes. Then complete the upload.
upload_expires_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/media/{id}/complete

Complete a media upload

Checks the stored file against the declared type and size.

secret key only

POST /v1/media/{id}/completerequest
curl -X POST https://api.marketsdk.com/v1/media/{id}/complete \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, media
{
  "object": "media",
  "id": "med_034XtPDs7UJ0TXzTsdaHZa",
  "listing": "string",
  "status": "pending",
  "content_type": "image/jpeg",
  "size_bytes": 0,
  "position": 0,
  "url": null,
  "url_expires_at": null,
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, media

fields
Response fields
fieldtypeabout
objectrequiredone of: media
idrequiredstring
listingrequiredstring
statusrequiredone of: pending, ready
content_typerequiredstring
size_bytesrequiredinteger
positionrequiredinteger
urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
url_expires_atrequiredtimestamp or null
created_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.

DELETE /v1/media/{id}

Delete media and its file

secret key only

DELETE /v1/media/{id}request
curl -X DELETE https://api.marketsdk.com/v1/media/{id} \
  -H "Authorization: Bearer $MARKETSDK_KEY"
200 example response, media
{
  "object": "media",
  "id": "med_034XtPDs7UJ0TXzTsdaHZa",
  "listing": "string",
  "status": "pending",
  "content_type": "image/jpeg",
  "size_bytes": 0,
  "position": 0,
  "url": null,
  "url_expires_at": null,
  "created_at": "2026-10-01T12:00:00.000Z"
}

parameters

Parameters
fieldtypeabout
idrequiredstring, in path

returns 200, media

fields
Response fields
fieldtypeabout
objectrequiredone of: media
idrequiredstring
listingrequiredstring
statusrequiredone of: pending, ready
content_typerequiredstring
size_bytesrequiredinteger
positionrequiredinteger
urlrequiredstring or nullA signed link to the file, valid for an hour. Null until the upload completes.
url_expires_atrequiredtimestamp or null
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.