Skip to main content
POST
Post a transaction (stamp / redeem / adjust)

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string

Replay-safe request key. Repeated requests with the same value within 24h return the original response unchanged.

Maximum string length: 255

Body

application/json
enrollment_id
string
required
type
enum<string>
required
Available options:
STAMP,
REDEEM,
ADJUST
delta
number
Required range: x <= 100000Must be a multiple of 0.01
amount_pence
integer | null
Required range: x >= 0
note
string | null
Maximum string length: 280
external_id
string | null
Maximum string length: 120
external_transaction_id
string | null

Stable partner-side identifier used for permanent organization-wide deduplication.

Maximum string length: 180
metadata
object

Response

201 - application/json

Created

id
string
enrollment_id
string
type
enum<string>
Available options:
STAMP,
REDEEM,
ADJUST
source
enum<string>
Available options:
SCANNER,
POS,
API,
ADJUST,
DASHBOARD,
LEGACY_IMPORT,
TAP
delta
number
Must be a multiple of 0.01
amount_pence
integer | null
note
string | null
external_id
string | null
external_transaction_id
string | null

Partner-supplied stable identifier (Toast order id, Shopify checkout id, Square payment id). When set on create via POST /transactions or POST /marketplace/accrue, the unique (orgId, externalTransactionId) index makes the call permanently idempotent — a redelivered upstream webhook returns the existing row at HTTP 200 instead of double-crediting.

reverses_transaction_id
string | null

Set on a compensating row created by /marketplace/reverse. Points at the original transaction this row reverses. The original is reversed at most once (enforced by a unique constraint).

reason_text
string | null

Operator-visible reason for a reversal ("Customer refunded the order"). Persisted on the COMPENSATING row, not the original.

test_mode
boolean

True when posted via a pk_test_… key. Test rows still write to the ledger and still fire webhooks (so partner sandbox integrations can verify their receivers), but DO NOT update Customer / Card / Enrollment aggregates and are excluded from operator dashboard rollups.

created_at
string<date-time>
enrollment
object