Listings

List offer relations

Catalog twin, relisting and migration.

GET
/v1/listings/{listingId}/relations

Lists this offer's links to other offers, in both directions, paginated, newest first. Use it to follow a listing that changed ID on the marketplace.

curl "$BACKEND_URL/v1/listings/<listingId>/relations" \
  -H "Authorization: Bearer mk_your_api_key"
typeMeans
catalog_twinthe offer's copy in the marketplace catalog
relisted_froma relist that got a new ID
migrated_fromthe same offer, moved to a new marketplace model

direction tells which side you are on. With outgoing, the relation starts at this offer (for relisted_from and migrated_from, this offer came out of the other one). With incoming, it ends here (the other one came out of this one). The relation shows up on both offers, each with its own direction.

relatedListingId is the other offer: read it with Get listing. The old marketplace ID stays in externalIds.

Today the list comes back empty: relations are born with relisting and the catalog twin, which do not exist in the API yet.

Authorization

api_key
headerAuthorizationBearer <token>

API key (mk_...)

Path Parameters

listingId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Query Parameters

page?integer

Page number, starting at 1. Defaults to 1. A page beyond pagination.totalPages is not an error: it returns empty data.

Range1 <= value <= 9007199254740991
Default1
pageSize?integer

Items per page, from 1 to 100. Defaults to 20.

Range1 <= value <= 100
Default20

Response Body

One page of relations, newest first. A page beyond pagination.totalPages returns empty data, not 404.

application/json
  1. response

One page of the relations of an offer.

data*array<>

The relations of this page, newest first. A relation shows up from both of its offers.

pagination*

Where this page sits in the whole listing: the totals and whether there are pages before and after it.

curl -X GET "https://example.com/v1/listings/497f6eca-6276-4993-bfeb-53cbbbba6f08/relations"
{  "data": [    {      "id": "f1a2b3c4-d5e6-4f70-8a9b-0c1d2e3f4a5b",      "type": "relisted_from",      "direction": "outgoing",      "relatedListingId": "5e8d1c2a-9b3f-4d6e-a7c1-0f4b2e8d9a13",      "externalIds": [        "MLB999"      ],      "createdAt": "2026-10-19T12:00:00.000Z"    }  ],  "pagination": {    "page": 1,    "pageSize": 20,    "totalItems": 1,    "totalPages": 1,    "hasNext": false,    "hasPrev": false  }}