Skip to main content

Changelog

Notable changes to the SASOM Partners API and to this documentation.

Documentation correction — 2026-09-09​

This documentation was audited against the deployed sasom-partners-api stack and corrected. If you built against an earlier version of these docs, read this section — several documented behaviours never existed.

Corrected​

  • Response envelope. Earlier docs showed a {"success": true, "data": ...} wrapper. There is no envelope. Responses are the documented object at the top level. Code branching on body.success treats every success as a failure. The only place a success field appears is the error body of POST /partner/batch/r2s.
  • Rate limit: 200 requests / 60 seconds, not 1,000 per minute.
  • Throttling returns 403, not 429, and there is no Retry-After header. A throttle is indistinguishable from a wrong secret. Handlers written for 429 never fire.
  • Auth failures return 401, 403 or 500 — verified against the live API. A missing header is 401; an unrecognised api_key or malformed header is 500 (the authorizer fails rather than denies — a known defect on our side); a wrong secret and a rate-limit denial are both 403. An earlier revision of this page claimed the API never returns 401 and that every auth failure was an identical 403. Both were wrong.
  • Pagination fields. The cursor is nextCursor and the array is orders / listings. There is no cursor, data or has_more field, and no limit query parameter. Page size is fixed: 100 for order lists, 500 for live listings.
  • Price floors. The documented "minimum 250 baht" with a validation error never existed. Real behaviour: creates clamp below 50 THB to 50, edits clamp below 100 THB to 100 — silently, returning success.
  • No quantity on ask listings. Ask and pre-order creates take no quantity field; earlier examples showed one. Pre-orders use quota.
  • update/tracking field names. The endpoint takes order_ids (array) and tracking_code. Earlier examples showed order_id, tracking_number and logistics_provider, none of which exist.
  • Order-not-yours returns 400 ("uid not match"), not 404. 404 from this API means the route does not exist.
  • Not-found orders return 400, not 404.
  • 201 does not always mean created. In vacation mode listing creates return 201 with no order_id and create nothing.

Removed​

  • PUT /partner/reject/order. This endpoint was documented, with a working code sample, but is not available — it returns 404. There is no partner path to reject, cancel or refund a sold order. Contact your SASOM account manager instead. Do not build a rejection flow against this API.
  • Claimed logistics types (shippop, kerry, kerryDropoff, grab-express, external) as a partner-selectable option, and the associated pickup_date / pickup_time / Kerry-pickup validation errors. Partners do not select a carrier through this API; the label endpoint decides shipping type from order state.
  • The "cannot cancel batch" error and batch cancellation. There is no endpoint to cancel an R2S batch.
  • URL-based API versioning and the deprecation policy. No versioning scheme is implemented. Breaking changes are communicated by your account manager.
  • Suggested cache times. Replaced with the actual Cache-Control values the API sends.

Added​

  • POST /partner/lowest/bulk — resolve up to 100 SKUs in one request.
  • GET /partner/catalog/manifest — snapshot metadata plus a presigned URL to a gzipped NDJSON catalog manifest.
  • GET /partner/catalog/delta — SKUs added, removed or changed since a snapshot, for maintaining a local price mirror without crawling.
  • Documentation of credential rotation and revocation lag (up to 5 minutes).
  • Documentation of write non-idempotency, including the double-deduction risk on a retried PUT /partner/confirm/order.
  • Handling requirements for GET /partner/label/{orderId}, whose PDF contains buyer personal data and whose URL is a bearer credential for it.
  • Actual Cache-Control values per endpoint.
  • The r2s-processing and r2s-price-processing order statuses.
  • The Smart Price / SMP price locks and what they mean.

API — current surface​

Listings — POST /partner/list/ask · POST /partner/list/preorder · PUT /partner/edit/listing · PUT /partner/edit/preorder · PUT /partner/cancel/listing

Pricing — GET /partner/lowest/{sku} · POST /partner/lowest/bulk · GET /partner/catalog/manifest · GET /partner/catalog/delta

Orders — GET /partner/processing/orders · GET /partner/settled/orders · GET /partner/{order_id} · GET /partner/payout/{order_id} · GET /partner/live/listings/{type}

Operations — PUT /partner/confirm/order · PUT /partner/confirm/preorder · PUT /partner/update/shipping · PUT /partner/update/tracking · GET /partner/label/{orderId}

Warehouse — POST /partner/batch/r2s

Not available: order rejection, refunds, webhooks, batch cancellation, bulk listing creation.

Staying informed​

There is no automated change feed. Breaking changes are communicated by your SASOM account manager — make sure they have a technical contact for your integration, not only a commercial one.