Listings

View offer activity

Timeline of everything that happened to the offer.

GET
/v1/listings/{listingId}/activity

Returns the offer timeline, paginated, newest first. Use it to explain to a user why the listing is the way it is.

curl "$BACKEND_URL/v1/listings/<listingId>/activity?page=1&pageSize=20" \
  -H "Authorization: Bearer mk_your_api_key"

Each entry says what happened (type), who caused it (actor), the Job behind it (jobId, or null) and where it touched (changes: the groups and the paths). Values are not kept here: to see them, read the diff or the listing itself.

actorWho
clientan API call of yours
systemour own work, such as a Job or an import
marketplacea change that came from there (notification or reconciliation)

The type values group like this:

  • Editing: created, updated, sync_policy_changed, bindings_changed.
  • Publishing: publication_requested, published, inventory_published, publication_failed, removal_requested.
  • Outside change: external_changed, status_changed.
  • Conflict: conflict_opened, conflict_resolved.

The types follow the listing.* events you get by webhook. Changing the content of the MarketplaceProduct shows up here as updated, with groups: ["content"], on each of its offers.

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 the history, newest first. A page beyond pagination.totalPages returns empty data, not 404.

application/json
  1. response

One page of the history of an offer.

data*array<>

The entries of this page, newest first.

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/activity"
{  "data": [    {      "id": "a4c1e7d2-6b3f-4e8a-9d05-1f2b3c4d5e6a",      "listingId": "0e2ce906-a6ab-4101-9461-4168c8b6b902",      "type": "publication_requested",      "actor": "client",      "jobId": "7c6b5a49-3827-4615-a0b9-c8d7e6f5a4b3",      "changes": {        "groups": [          "offer"        ],        "paths": [          "priceInCents"        ]      },      "createdAt": "2026-10-19T12:00:00.000Z"    }  ],  "pagination": {    "page": 1,    "pageSize": 20,    "totalItems": 1,    "totalPages": 1,    "hasNext": false,    "hasPrev": false  }}