Skip to main content
POST
POS reports a top-up SKU sold: credit wallet + accrue SKU bonus

Authorizations

Authorization
string
header
required

POS terminal JWT minted by /auth/token; carries integrationId + terminal/cashier claims (server-trusted).

Headers

Idempotency-Key
string<uuid>
required

Partner-generated UUID; the ONE dedup key for all mutating endpoints. 24h TTL. Same key + same payload -> byte-identical replay; same key + different payload -> IDEMPOTENCY_KEY_REUSED (422).

Path Parameters

skuId
string<uuid>
required

The registered top-up SKU id.

Body

application/json

Body for POST /topup/sku/{skuId}. The credited amount + bonus are derived server-side from the SKU registration + finalized POS sale; POS-submitted money fields are ignored. Idempotent on the Idempotency-Key header AND the pos_order_ref.

context
object
required

Canonical request context, shared across all partner domains. merchant_id is key-enforced to a merchant the calling credential is authorized for (a platform-scoped credential acts only on its own tenants), so it is never a free-text trust field: a merchant_id outside the credential's authority is rejected rather than honored.

pos_order_ref
string
required

The finalized POS order reference for this sale, the server-side derivation + idempotency anchor.

meta
object

Common request metadata shared across all Partner API domains. partner_request_id is a correlation identifier only: it appears in logs and responses for tracing but is never used as the deduplication key. Request deduplication is keyed exclusively on the Idempotency-Key header.

customer
object

An identity credential used to resolve a customer, shared across all partner domains. The object is discriminated by credential_type, and the value field matching the declared credential_type is REQUIRED (enforced by per-type conditional schemas: a credential without its matching value field is invalid). The set of supported credential_type values is enumerated by GET /capabilities. New credential types are added additively: a new type appears in the GET /capabilities set without any route change. A credential_type that is not in the supported set returns CREDENTIAL_TYPE_UNSUPPORTED, and the error response lists the currently supported set.

quantity
integer
default:1

Number of SKU units sold (credit = wallet_credits_minor × quantity).

Required range: x >= 1

Response

Wallet credited (or escrowed for PENDING_PROOF) + SKU bonus accrued.

The standard response envelope that every enveloped endpoint serializes through. ok is a boolean discriminator: when ok is true, the typed result is carried in data; when ok is false, a typed error object is returned instead. The meta object is uniform across the entire API surface.

ok
boolean
required
meta
object
required

The uniform response metadata block returned on every response. data_completeness_score is computed per call and reports the completeness of the returned data. decision_trace_id is present on responses that carry decision or insight output and can be used to correlate the response with its reasoning. capabilities is an additive, response-level array of hints advertising features the caller may use, and may be extended over time without notice.

data
object

Result of a completed top-up credit (confirm or SKU sale). Carries both money classes after the credit.

error
object | null

The typed error object returned with every non-2xx response. code is a string enum (for example WALLET_PROGRAM_AMBIGUOUS, CREDENTIAL_TYPE_UNSUPPORTED, INSUFFICIENT_FUNDS, IDEMPOTENCY_KEY_REUSED, CURRENCY_NOT_SUPPORTED), never a bare HTTP status number. Inspect code for programmatic branching, not the HTTP status. Some codes echo the valid set in details so clients can present or reconcile the accepted values: for example CREDENTIAL_TYPE_UNSUPPORTED lists the supported credential types, CURRENCY_NOT_SUPPORTED lists the supported ISO-4217 currencies, and WALLET_PROGRAM_AMBIGUOUS lists the candidate wallet_program_id values that matched the request.