Two calls are enough to integrate: request a recommendation and record signals. They are HTTP with JSON, and the SDK does nothing you can’t do with them.

The five operations

The process status lives at the server root, outside /v1 and /salespilot.

The minimal path

A recommendation (in the API, Decision: the list of products recommended for that moment) and the signal that it was shown, tied to its decision_id. With both, it appears in your store and is measured.

Conventions that apply everywhere

  • The store comes from the key, never from the body: What CrossUp decides. Another store’s product returns 404, like a missing one.
  • Ids have a prefix. cn_, itm_, var_, dec_, sig_, vis_, ses_, spk_. Treat them as opaque.
  • Texts are per language: { language: text } objects with at least one key, and no guaranteed language.
  • Absent means unknown, not zero or false.
  • Dates are RFC 3339 in UTC.
  • Errors have a fixed shape: Errors.
  • Retrying is safe where there is a stable id: the signal’s.

The contract

The source of truth is platform-api-v1.yaml, in OpenAPI 3.1. The SDK, this reference and the test fixtures come from it.

Quota and cache

Sixty per minute, Retry-After, and what to cache.

Versioning

What can change without notice and what can’t.