Objects
Every object and enum the API sends or accepts, in alphabetical order.
AddressDerivation
How the client can prove a deposit address is safe without trusting this API.
The checkout must recompute the address from these inputs and refuse to show it on any mismatch.
It must compare destination against the merchant's destination pinned in the checkout's own
bundle/config, not only against the value in this response: a compromised backend could send both.
Type: ForwarderDerivation and object { scheme } or RegisteredDerivation and object { scheme } or Bip32Derivation and object { scheme }
- ForwarderDerivation and object { scheme }
A CREATE2 forwarder that can only ever pay
destination(minusfee_bpstofee_recipient). - RegisteredDerivation and object { scheme }
The address is itself one of the merchant's registered receive addresses (EOA pool slot).
- Bip32Derivation and object { scheme }
A fresh receive address derived from the merchant's own watch-only account key (Bitcoin): the funds land directly in the merchant's wallet.
AmountType
Who sets the amount.
Type: string
- One of:
"fixed","payer_chosen"
AssetBalances
One asset's balances.
| Field | Type | Description |
|---|---|---|
assetrequired | string |
|
symbolrequired | string | |
networkrequired | string | CAIP-2 network. |
network_namerequired | string | |
balancedrequired | boolean | The lines' net debits sum to zero at both ends of the period (double entry holds). |
linesrequired | array of BalanceLine |
AssetMoney
An amount of one on-chain asset.
| Field | Type | Description |
|---|---|---|
amountrequired | string | Decimal string in whole tokens (not base units), e.g.
|
assetrequired | string | Asset code
|
AssetReconciliation
One asset's reconciliation.
| Field | Type | Description |
|---|---|---|
assetrequired | string |
|
symbolrequired | string | |
networkrequired | string | CAIP-2 network. |
network_namerequired | string | |
statusrequired | ReconciliationStatus | |
ledgerrequired | array of LedgerLine | |
chainrequired | ChainTotals | |
invoicesrequired | InvoiceTotals | |
discrepanciesrequired | array of Discrepancy | Flagged first, then explained. |
BalanceLine
One account group's balances. Every balance is on the account's normal side: positive means the account holds what it normally holds.
| Field | Type | Description |
|---|---|---|
accountrequired | string | Same labels as the reconciliation report, e.g.
|
descriptionrequired | string | |
normal_siderequired | NormalSide | |
openingrequired | string | Balance at |
debitsrequired | string | Σ debit postings in the period. |
creditsrequired | string | Σ credit postings in the period. |
closingrequired | string | Balance at |
movementrequired | string |
|
previous_movementrequired | string | The same account's movement in the previous period ( |
Bip32Derivation
Inputs of a BIP32 receive address (Bitcoin): xpub / keychain / index, encoded as script.
child = CKDpub(CKDpub(xpub, keychain), index) (BIP32 public derivation, non-hardened)
p2wpkh = bech32 witness v0 of HASH160(child pubkey) BIP84: bc1q / tb1q
p2tr = bech32m witness v1 of the BIP86 key-path output BIP86: bc1p / tb1pThe account key is private to the merchant. Fresh per-invoice addresses are a privacy feature:
anyone holding the xpub can derive every receive address and follow the merchant's whole BTC
revenue. So the payer-facing checkout view never carries xpub or descriptor; only the merchant's
own (secret-key) API does. A client verifies a BTC address by deriving index from the account key
it already holds (the merchant's pin: the embed's pins option, the portal adapter's config).
Without such a pin the hosted checkout shows the server-derived address unverified: hosted-checkout
BTC relies on the server's integrity, merchant-side integrations can pin.
| Field | Type | Description |
|---|---|---|
xpub | string or null | The merchant's account-level extended public key, in the form the merchant gave it
( |
scriptrequired | string |
|
keychainrequired | integer (int32) | 0 = receive keychain.
|
indexrequired | integer (int32) | The address index below the keychain (never hardened).
|
descriptor | string or null | The account's output descriptor with checksum (it contains the account key). Merchant API only: absent from the checkout view. |
CancellationReason
Why a subscription ended.
Type: string
- One of:
"requested","unpaid"
CancelSubscriptionRequest
| Field | Type | Description |
|---|---|---|
at_period_end | boolean or null |
|
ChainTotals
What the chain says, for the cohort's invoices.
| Field | Type | Description |
|---|---|---|
transfersrequired | integer (int32) | Transfers attributed to the cohort's invoices (orphaned ones included in this count).
|
observedrequired | string | Σ transfers still on chain. |
creditedrequired | string | … of which credited to the merchant. |
refundablerequired | string | … of which held as refundable to the payer (wrong asset, late, after cancellation). |
unpostedrequired | string | … of which not posted yet (confirming or held for review). |
orphanedrequired | string | Σ transfers removed by a reorg (not in any other total). |
suspenserequired | string | Σ unattributed deposits at your deposit addresses opened in the period and still open. |
CheckoutCapabilities
Optional payer-facing features of this server.
| Field | Type | Description |
|---|---|---|
receipt_emailrequired | boolean |
|
CheckoutInvoice
The payer's view of an invoice: only what the checkout needs. No metadata, customer reference,
merchant settings or secrets, ever (this is an explicit allowlist projection, see routes::checkout).
| Field | Type | Description |
|---|---|---|
idrequired | string | |
objectrequired | string | Always
|
livemoderequired | boolean | |
statusrequired | InvoiceStatus | |
merchantrequired | CheckoutMerchant | |
amountrequired | FiatMoney | |
description | string or null | |
payment_optionsrequired | array of PaymentOption | |
amount_received | AssetMoney or null | |
amount_remaining | AssetMoney or null | |
confirmations | Confirmations or null | |
expires_atrequired | string (date-time) | |
price_locked_until | string (date-time) or null | See [ |
capabilitiesrequired | CheckoutCapabilities | What this server can do for the payer beyond showing the invoice. The checkout hides a feature
whose flag is |
session_token | string or null | A checkout-session token (
|
pending_options | array of PendingOption | See [ |
select_by | string (date-time) or null | See [ |
CheckoutMerchant
The merchant, as the payer sees it.
| Field | Type | Description |
|---|---|---|
display_namerequired | string |
CheckoutPaymentLink
The payer's view of a link: only what the landing screen needs (an explicit allowlist, like the checkout invoice). No metadata, counts or asset configuration.
| Field | Type | Description |
|---|---|---|
slugrequired | string | |
objectrequired | string | Always
|
livemoderequired | boolean | |
statusrequired | PaymentLinkStatus | |
merchantrequired | CheckoutMerchant | |
amount_typerequired | AmountType | |
currencyrequired | string | |
amount | string or null |
|
min_amount | string or null |
|
max_amount | string or null |
|
description | string or null | |
expires_at | string (date-time) or null |
CheckoutStatus
Live status snapshot. Each SSE event carries a complete one, so clients never merge deltas.
| Field | Type | Description |
|---|---|---|
invoicerequired | string | |
statusrequired | InvoiceStatus | |
amount_received | AssetMoney or null | |
amount_remaining | AssetMoney or null | |
confirmations | Confirmations or null | |
payment | PaymentSummary or null |
CheckResult
Outcome of one check.
Type: string
- One of:
"clear","match","not_applicable","unavailable"
ClaimNetwork
A network the payer can receive the refund on.
| Field | Type | Description |
|---|---|---|
networkrequired | string | CAIP-2 id. |
network_namerequired | string |
|
assetrequired | string | The asset sent on that network. |
ClaimPayout
What the payer submitted (echoed back to them).
| Field | Type | Description |
|---|---|---|
networkrequired | string | |
network_namerequired | string | |
addressrequired | string | |
submitted_atrequired | string (date-time) |
Confirmations
Confirmation progress of the payment being counted.
| Field | Type | Description |
|---|---|---|
currentrequired | integer (int32) |
|
requiredrequired | integer (int32) |
|
CreateCustomerRequest
| Field | Type | Description |
|---|---|---|
name | string or null | |
email | string or null | Where renewal reminders go. Optional: without it, you tell the customer yourself (the
|
metadata | map of string or null |
CreateInvoiceRequest
POST /v1/invoices body.
| Field | Type | Description |
|---|---|---|
amountrequired | string | Price in major units of
|
currencyrequired | string | ISO 4217 code of the price.
|
assets | array of string or null | Assets the payer may use. Defaults to the merchant's |
description | string or null | Shown to the payer. At most 500 characters. |
customer_ref | string or null | Your reference for the customer. At most 200 characters. Never shown to the payer. |
metadata | map of string or null | Up to 20 pairs; keys at most 40 characters, values at most 500. Never shown to the payer. |
CreateLinkInvoiceRequest
| Field | Type | Description |
|---|---|---|
amount | string or null | The amount the payer chose, in the link's currency, as a decimal string. Required for
|
CreatePaymentLinkRequest
POST /v1/payment_links body.
| Field | Type | Description |
|---|---|---|
amount_type | AmountType or null | |
currencyrequired | string | ISO 4217 code.
|
amount | string or null | The price (
|
min_amount | string or null | Lower bound for |
max_amount | string or null | Upper bound for |
description | string or null | Shown to the payer. At most 500 characters. |
assets | array of string or null | Accepted assets. Omit to use the merchant's defaults at the time each invoice is created. |
quantity_limit | integer (int32) or null | 1 to 1,000,000 payments; omit for unlimited.
|
expires_at | string (date-time) or null | RFC 3339; must be in the future. |
metadata | map of string or null | Up to 20 pairs; keys at most 40 characters, values at most 500. Copied to every invoice. |
active | boolean or null | Default |
CreatePlanRequest
| Field | Type | Description |
|---|---|---|
namerequired | string |
|
amountrequired | string | Price per period, a decimal string.
|
currencyrequired | string |
|
intervalrequired | IntervalUnit | |
interval_count | integer (int32) or null | Default 1. At most 365 days, 52 weeks, 12 months or 1 year.
|
trial_days | integer (int32) or null | Default 0, at most 365.
|
grace_days | integer (int32) or null | Default 3, at most 30.
|
max_attempts | integer (int32) or null | Default 4, 1 to 7.
|
assets | array of string or null | |
billing_timezone | string or null | IANA name, default
|
CreateRefundRequest
| Field | Type | Description |
|---|---|---|
amount | string or null | Whole tokens, as a decimal string. Defaults to the overpaid excess (or, for an
|
asset | string or null | The asset code to refund in. Defaults to the asset the invoice was paid in; give another received asset (e.g. a wrong token) to refund that.
|
reason | RefundReason or null |
CreateSubscriptionRequest
| Field | Type | Description |
|---|---|---|
customerrequired | string |
|
planrequired | string |
|
trial_days | integer (int32) or null | Overrides the plan's trial (0 = start billing now).
|
metadata | map of string or null |
Customer
Someone who subscribes. The email receives renewal reminders (in the merchant's name).
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
name | string or null | |
email | string or null | |
metadatarequired | map of string | |
credit_balancerequired | array of AssetMoney | Prepaid credit (overpayments and top-ups), per asset. Renewals consume it before invoicing. |
created_atrequired | string (date-time) |
CustomerList
| Field | Type | Description |
|---|---|---|
objectrequired | string |
|
datarequired | array of Customer | |
has_morerequired | boolean | |
next_cursor | string or null |
DeliveryStatus
Type: string
- One of:
"pending","succeeded","failed"
Discrepancy
A difference between the views, explained or flagged.
| Field | Type | Description |
|---|---|---|
coderequired | DiscrepancyCode | |
severityrequired | Severity | |
messagerequired | string | What differs, why, and what happens next. |
amount | string or null | The amount involved (decimal string in the section's asset; may be negative). |
invoice | string or null | |
transfer | TransferRef or null | |
refund | string or null |
DiscrepancyCode
What kind of difference a discrepancy is.
Type: string
- One of:
"ledger_unavailable","ledger_unbalanced","ledger_mismatch","awaiting_confirmation","held_for_review","transfer_not_posted","orphaned_transfer","posting_without_transfer","credit_amount_mismatch","settlement_pending","settlement_missing","settlement_mismatch","refund_owed","refund_sent_unmatched","suspense_open","suspense_resolved"
ErrorBody
The error object.
| Field | Type | Description |
|---|---|---|
typerequired | ErrorType | |
coderequired | string | Stable machine-readable reason, e.g. |
messagerequired | string | Human-readable explanation. Do not parse it. |
param | string or null | The request parameter the error is about, if any (e.g. |
doc_urlrequired | string | Link to the documentation for |
request_id | string or null | The request id, also returned in the |
ErrorResponse
Every non-2xx response body.
| Field | Type | Description |
|---|---|---|
errorrequired | ErrorBody |
ErrorType
The coarse error class.
Type: string
- One of:
"invalid_request_error","authentication_error","permission_error","idempotency_error","rate_limit_error","api_error"
Exchange
One exchange.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
namerequired | string |
|
networksrequired | array of ExchangeNetwork |
ExchangeList
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
assetrequired | string | The asset the fees are for.
|
datarequired | array of Exchange |
ExchangeNetwork
One network at one exchange.
| Field | Type | Description |
|---|---|---|
familyrequired | string | Network family:
|
networkrequired | string | The mainnet the entry describes (CAIP-2).
|
network_label | string or null | The exchange's own name for the network, exactly as its withdrawal screen shows it. |
withdrawal_fee | AssetMoney or null | |
supported | boolean or null | Whether the exchange supports withdrawals of this asset on this network ( |
verified_at | string or null | When the served values were last checked against |
source_url | string or null | The exchange's own page the values were checked against. |
FiatMoney
An amount in a fiat currency.
| Field | Type | Description |
|---|---|---|
amountrequired | string | Decimal string in major units, e.g.
|
currencyrequired | string | ISO 4217 code.
|
ForwarderDerivation
Inputs of ForwarderFactory.predict().
salt = keccak256(abi.encode(address destination, address fee_recipient, uint16 fee_bps,
uint16 dust, bytes32 slot))
args = destination(20) ‖ fee_recipient(20) ‖ fee_bps(2, BE) ‖ dust(2, BE) (44 bytes)
init_code = 61 {0x2d + len(args) as 2 bytes} 3d81600a3d39f3 363d3d373d3d3d363d73 ‖ implementation(20)
‖ 5af43d82803e903d91602b57fd5bf3 ‖ args
address = keccak256(create2_prefix ‖ factory(20) ‖ salt ‖ keccak256(init_code))[12..32]Addresses are in the chain's display form (TRON Base58Check T…, EVM EIP-55 0x…); hash with their
20-byte form (for TRON, drop the leading 0x41 byte).
| Field | Type | Description |
|---|---|---|
create2_prefixrequired | string |
|
factoryrequired | string | |
implementationrequired | string | |
destinationrequired | string | The merchant's registered destination. Compare it with your own pinned copy. |
fee_recipientrequired | string | The zero address when |
fee_bpsrequired | integer (int32) | Processor fee in basis points, at most 500 (enforced by the contract).
|
dustrequired | string | Base units the forwarder keeps after a flush (warm-slot dust), as a decimal string.
|
slotrequired | string | The slot id (bytes32, 0x-hex). |
saltrequired | string | The expected salt (bytes32, 0x-hex). Recompute it; it is here for debugging only. |
HealthStatus
GET /healthz and GET /readyz.
| Field | Type | Description |
|---|---|---|
statusrequired | string |
|
IntervalUnit
The unit of a plan's billing interval.
Type: string
- One of:
"day","week","month","year"
Invoice
A request for payment.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
statusrequired | InvoiceStatus | |
amountrequired | FiatMoney | The price, as the merchant set it. |
description | string or null | |
customer_ref | string or null | The merchant's own customer reference. Never shown to the payer. |
metadatarequired | map of string | Up to 20 merchant key/value pairs. Never shown to the payer. |
payment_optionsrequired | array of PaymentOption | |
amount_received | AssetMoney or null | |
amount_remaining | AssetMoney or null | |
confirmations | Confirmations or null | |
created_atrequired | string (date-time) | |
expires_atrequired | string (date-time) | End of the detection window. Payments after it are late. |
price_locked_until | string (date-time) or null | End of the price lock, when the invoice offers a volatile asset (BTC). A volatile-asset payment after it is repriced at arrival (within the late band it is still accepted). Absent for stablecoin-only invoices, which have no lock. |
paid_at | string (date-time) or null | |
payment_link | string or null | The payment link ( |
pending_options | array of PendingOption | Offered options that have no deposit address yet. A payment-link invoice leases an address only
when the payer picks a network ( |
select_by | string (date-time) or null | Payment-link invoices only: if the payer has not picked a network by then, the invoice expires
early (it never held a deposit address). |
InvoiceEvent
One event on GET /v1/invoices/{id}/events. The SSE id: field is seq, the event: field is
type, and data: is this object. Reconnect with Last-Event-ID: {seq} to resume.
| Field | Type | Description |
|---|---|---|
seqrequired | integer (int64) | Per-invoice sequence number, starting at 1, strictly increasing.
|
typerequired | string |
|
created_atrequired | string (date-time) | |
datarequired | CheckoutStatus |
InvoiceList
A page of invoices, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
datarequired | array of Invoice | |
has_morerequired | boolean | |
next_cursor | string or null | Pass as |
InvoiceStatus
Where an invoice is in its life.
detected → confirming → paid is the happy path. detected means a payment was seen but has no
confirmations yet; confirming means it is gaining confirmations (see confirmations).
Type: string
- One of:
"awaiting_payment","detected","confirming","partially_paid","paid","overpaid","paid_late","expired","under_review","cancelled"
InvoiceTotals
What the invoices say.
| Field | Type | Description |
|---|---|---|
countrequired | integer (int32) |
|
paidrequired | string | Σ received by paid (and paid late) invoices. |
overpaidrequired | string | Σ received by overpaid invoices (the excess is in |
underpaidrequired | string | Σ received by invoices that were not paid in full (partially paid, expired, cancelled). |
in_progressrequired | string | Σ received by invoices still in progress (awaiting, detected, confirming, under review). |
refundablerequired | string | Σ the invoices hold as refundable to payers, less refunds marked in the ledger. |
refundedrequired | string | Σ refunds recorded as sent. |
refunds_openrequired | string | Σ refunds created and not yet sent (awaiting claim, ready to send, in review). |
suspenserequired | string | Σ open suspense (same as |
by_statusrequired | array of StatusTotal |
LedgerBalances
Ledger balances as of a date, with the period's movement and the previous period's.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
livemoderequired | boolean | |
fromrequired | string (date-time) | Start of the period (inclusive): opening balances are as of this moment. |
torequired | string (date-time) | End of the period (exclusive): closing balances are as of this moment. |
previous_fromrequired | string (date-time) | Start of the previous period, which ends at |
generated_atrequired | string (date-time) | |
ledger_availablerequired | boolean | False on a server without a ledger (the in-memory demo): balances are then derived from the invoices, each dated at its creation. |
assetsrequired | array of AssetBalances |
LedgerLine
One ledger account group of the cohort's journal entries.
| Field | Type | Description |
|---|---|---|
accountrequired | string |
|
descriptionrequired | string | |
debitsrequired | string | Σ debit postings (decimal string). |
creditsrequired | string | Σ credit postings (decimal string). |
balancerequired | string | The balance on the account's normal side: positive = what the account normally holds. |
LookupOutcome
What the lookup found, relative to this invoice.
Type: string
- One of:
"this_invoice","reached_invoice_address","not_this_invoice","not_found"
LookupTransfer
One token transfer inside the looked-up transaction.
| Field | Type | Description |
|---|---|---|
networkrequired | string | CAIP-2 network. |
network_namerequired | string | |
asset | string or null | Asset code when the token is one we support, else |
amount | string or null | Whole tokens, when the asset is known. |
to_addressrequired | string | Where it went, in the network's display form. |
to_this_invoicerequired | boolean | It went to this invoice's deposit address on that network. |
MarkRefundSentRequest
| Field | Type | Description |
|---|---|---|
tx_hashrequired | string | Your payout transaction (0x + 64 hex digits; TRON hashes without 0x are accepted too). |
MerchantSettings
Merchant configuration for one mode (test and live are configured separately).
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
livemoderequired | boolean | |
merchantrequired | string | |
display_namerequired | string | Shown to payers on the checkout. |
webhook_url | string or null | |
webhook_secret_last4 | string or null | The last four characters of the webhook signing secret, to tell secrets apart. |
default_assetsrequired | array of string | Assets offered when an invoice does not list its own. |
available_assetsrequired | array of string | Every asset this mode can accept. |
underpay_tolerance_bpsrequired | integer (int32) | Shortfall still counted as paid, in basis points of the amount due.
|
registered_destinationsrequired | array of RegisteredDestination |
NormalSide
Which side of an account normally holds its balance.
Type: string
- One of:
"debit","credit"
PayerNotice
The payer's notification preference for one invoice.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
invoicerequired | string |
|
emailrequired | string | The address, masked (
|
localerequired | string | |
receiptrequired | ReceiptTiming | |
created_atrequired | string (date-time) |
PayerNotifyRequest
| Field | Type | Description |
|---|---|---|
emailrequired | string | Where to send the receipt (and any refund link).
|
locale | string or null | The payer's language for the emails (
|
session_tokenrequired | string | The checkout view's
|
Payment
An on-chain transfer attributed to an invoice.
| Field | Type | Description |
|---|---|---|
idrequired | string | |
objectrequired | string | Always
|
livemoderequired | boolean | |
invoicerequired | string | |
statusrequired | PaymentStatus | |
amountrequired | AssetMoney | |
networkrequired | string | |
tx_hashrequired | string | |
from_address | string or null | |
to_addressrequired | string | |
confirmationsrequired | Confirmations | |
detected_atrequired | string (date-time) | |
confirmed_at | string (date-time) or null |
PaymentLink
A payment link, as the merchant sees it.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
statusrequired | PaymentLinkStatus | Computed: whether a payer can use the link now. |
activerequired | boolean | The merchant's switch. |
slugrequired | string | The public part of the link's URL.
|
url | string or null |
|
amount_typerequired | AmountType | |
currencyrequired | string | ISO 4217 code of every amount on the link.
|
amount | string or null | The price, as a decimal string (
|
min_amount | string or null | The smallest amount a payer may choose (
|
max_amount | string or null | The largest amount a payer may choose (
|
description | string or null | Shown to the payer and copied to each invoice. |
assets | array of string or null | Accepted assets. |
quantity_limit | integer (int32) or null | How many payments the link takes.
|
quantity_usedrequired | integer (int32) | Invoices created from this link on which a payment was seen.
|
quantity_reserved | integer (int32) | Open, unpaid invoices of this link. Each holds a unit until it is paid (then it counts in
|
invoices_createdrequired | integer (int32) | Every invoice created from this link, paid or not.
|
expires_at | string (date-time) or null | After this, the link creates no more invoices. |
metadatarequired | map of string | Up to 20 merchant key/value pairs, copied to each invoice. Never shown to the payer. |
created_atrequired | string (date-time) | |
updated_atrequired | string (date-time) |
PaymentLinkList
A page of payment links, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
datarequired | array of PaymentLink | |
has_morerequired | boolean | |
next_cursor | string or null | Pass as |
PaymentLinkStatus
Whether a payer can use the link right now.
Type: string
- One of:
"active","inactive","expired","sold_out"
PaymentList
A page of payments, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
datarequired | array of Payment | |
has_morerequired | boolean | |
next_cursor | string or null | Pass as |
PaymentOption
One way to pay an invoice: an asset on a network, the amount that must arrive, and where to send it.
| Field | Type | Description |
|---|---|---|
assetrequired | string | Asset code, e.g. |
symbolrequired | string | Ticker as payers know it.
|
networkrequired | string | CAIP-2 network id.
|
network_namerequired | string | The network named the way exchanges name it.
|
amount_duerequired | string | Exactly how much must arrive, in whole tokens.
|
addressrequired | string | The deposit address, in the network's display form. |
address_derivationrequired | AddressDerivation | |
payment_uri | string or null | A wallet URI (EIP-681 on EVM networks) when one exists for the network. |
PaymentStatus
Type: string
- One of:
"detected","confirming","confirmed","reversed"
PaymentSummary
The payment currently being counted, as the checkout shows it.
| Field | Type | Description |
|---|---|---|
networkrequired | string | |
tx_hashrequired | string | 0x-hex transaction hash, or on Solana the transaction's base58 signature (informational: a hash never credits anything). |
amountrequired | AssetMoney |
PendingOption
A payment option offered without a deposit address yet (see [Invoice::pending_options]).
| Field | Type | Description |
|---|---|---|
assetrequired | string | Asset code, e.g. |
symbolrequired | string |
|
networkrequired | string | CAIP-2 network id.
|
network_namerequired | string |
|
amount_duerequired | string | Exactly how much must arrive, in whole tokens.
|
Plan
A price and a billing interval. Immutable once created, except that it can be archived.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
namerequired | string |
|
amountrequired | FiatMoney | The price of one period. |
intervalrequired | IntervalUnit | |
interval_countrequired | integer (int32) | Periods are
|
trial_daysrequired | integer (int32) | Free days before the first period (0 = none).
|
grace_daysrequired | integer (int32) | Days after a renewal's due date before the subscription becomes
|
max_attemptsrequired | integer (int32) | Payment attempts per period (the renewal invoice counts as the first); when every one closes unpaid, the subscription is cancelled.
|
assets | array of string or null | Asset codes renewal invoices offer; |
billing_timezonerequired | string | IANA time zone the periods are counted in (month ends, DST).
|
activerequired | boolean | Archived plans take no new subscriptions; existing ones keep renewing. |
created_atrequired | string (date-time) |
PlanList
A page of plans, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string |
|
datarequired | array of Plan | |
has_morerequired | boolean | |
next_cursor | string or null |
ReceiptTiming
When the receipt goes out.
Type: string
- One of:
"queued","on_payment"
Reconciliation
A reconciliation report.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
livemoderequired | boolean | |
fromrequired | string (date-time) | Start of the period (inclusive): invoices created at or after it. |
torequired | string (date-time) | End of the period (exclusive). |
generated_atrequired | string (date-time) | |
statusrequired | ReconciliationStatus | The worst status of any asset ( |
ledger_availablerequired | boolean | False on a server without a ledger (the in-memory demo): ledger lines are then empty. |
assetsrequired | array of AssetReconciliation |
ReconciliationStatus
How a report (or one asset of it) came out.
Type: string
- One of:
"balanced","explained","attention"
Refund
A refund the merchant owes a payer. Tillsafe never sends it: the merchant does, from their wallet.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
invoicerequired | string | |
statusrequired | RefundStatus | |
reasonrequired | RefundReason | |
amountrequired | AssetMoney | How much to send, in whole tokens. The same amount on whichever network the payer picks. |
claim_networksrequired | array of string | Networks the payer may choose from (CAIP-2). |
claim_tokenrequired | string | The claim capability. Give the payer |
claim_url | string or null |
|
claim_expires_atrequired | string (date-time) | |
payout | RefundPayout or null | |
sent_tx_hash | string or null | The merchant's payout transaction, once recorded. |
sent_at | string (date-time) or null | |
cancelled_at | string (date-time) or null | |
created_atrequired | string (date-time) |
RefundClaim
The payer's view of a refund, reached with the claim token alone. No invoice metadata, no screening detail, no merchant settings: only what the claim screen needs.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
livemoderequired | boolean | |
statusrequired | RefundStatus |
|
merchantrequired | CheckoutMerchant | |
amountrequired | AssetMoney | |
symbolrequired | string |
|
networksrequired | array of ClaimNetwork | |
payout | ClaimPayout or null | |
sent_tx_hash | string or null | |
expires_atrequired | string (date-time) |
RefundList
A page of refunds, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
datarequired | array of Refund | |
has_morerequired | boolean | |
next_cursor | string or null |
RefundPayout
Where the payer asked to be paid, and how that address screened.
| Field | Type | Description |
|---|---|---|
networkrequired | string | CAIP-2 network the payer chose. |
network_namerequired | string |
|
assetrequired | string | The asset to send on that network, e.g. |
addressrequired | string | The payer's address, in the network's display form. |
submitted_atrequired | string (date-time) | |
screeningrequired | Screening |
RefundReason
Why the merchant is refunding.
Type: string
- One of:
"overpayment","wrong_asset","late_payment","other"
RefundStatus
Where a refund is.
Type: string
- One of:
"awaiting_claim","ready_to_send","in_review","sent","cancelled","expired"
RegisteredDerivation
| Field | Type | Description |
|---|---|---|
registered_destinationrequired | string | Must equal the deposit address and one of the merchant's pinned receive addresses. |
RegisteredDestination
A merchant receive address, registered through a separately authenticated flow. API keys cannot change these.
| Field | Type | Description |
|---|---|---|
networkrequired | string | |
addressrequired | string |
ResolveReviewRequest
| Field | Type | Description |
|---|---|---|
decisionrequired | ReviewDecision | |
reasonrequired | string | Why, for your records and the webhook (1 to 500 characters).
|
ReviewDecision
Accept or reject a held payment.
Type: string
- One of:
"accept","reject"
Screening
The screening of one payout address.
| Field | Type | Description |
|---|---|---|
resultrequired | ScreeningResult | |
checked_atrequired | string (date-time) | |
checksrequired | array of ScreeningCheck |
ScreeningCheck
One screening check.
| Field | Type | Description |
|---|---|---|
listrequired | string |
|
resultrequired | CheckResult | |
source | string or null | Which list version or contract was consulted, e.g. the SDN extract's fetch date. |
detail | string or null | Why a check did not apply or could not run. |
ScreeningResult
Overall screening verdict.
Type: string
- One of:
"clear","match","incomplete"
SelectPaymentOptionRequest
| Field | Type | Description |
|---|---|---|
assetrequired | string | One of the invoice's
|
Severity
Type: string
- One of:
"explained","flagged"
SimulatePaymentRequest
| Field | Type | Description |
|---|---|---|
asset | string or null | The payment option to pay: an asset code (
|
network | string or null | CAIP-2 network ( |
amount | string or null | Whole tokens to "send", as a decimal string. Defaults to the option's amount due. Send more to test an overpayment, less for an underpayment.
|
finality_steps | array of string or null | Finality levels the payment passes through, in order: |
StatusTotal
Invoices of one status.
| Field | Type | Description |
|---|---|---|
statusrequired | InvoiceStatus | |
countrequired | integer (int32) |
|
receivedrequired | string | Σ received in this asset. |
SubmitClaimRequest
| Field | Type | Description |
|---|---|---|
networkrequired | string | One of the claim's
|
addressrequired | string | Your address on that network. For an exchange account, your deposit address for this asset on exactly this network. |
Subscription
A customer's recurring purchase of a plan.
| Field | Type | Description |
|---|---|---|
idrequired | string |
|
objectrequired | string | Always
|
livemoderequired | boolean | |
customerrequired | string | |
planrequired | Plan | |
statusrequired | SubscriptionStatus | |
current_period_startrequired | string (date-time) | The period the subscription is in now (the trial, while in trial). |
current_period_endrequired | string (date-time) | |
trial_end | string (date-time) or null | |
paid_through | string (date-time) or null | Everything up to here is paid for. |
next_payment_due_at | string (date-time) or null | When the next unpaid period is due; |
payment_attemptsrequired | integer (int32) | Attempts made for the next unpaid period (0 until its renewal invoice exists).
|
latest_invoice | string or null | The newest invoice this subscription created. |
cancel_at_period_endrequired | boolean | |
cancelled_at | string (date-time) or null | |
cancellation_reason | CancellationReason or null | |
paused_at | string (date-time) or null | |
metadatarequired | map of string | |
created_atrequired | string (date-time) |
SubscriptionList
| Field | Type | Description |
|---|---|---|
objectrequired | string |
|
datarequired | array of Subscription | |
has_morerequired | boolean | |
next_cursor | string or null |
SubscriptionStatus
Where a subscription is.
Type: string
- One of:
"incomplete","active","past_due","paused","cancelled"
TopUpRequest
POST /v1/customers/{id}/top_up: an invoice whose payment becomes prepaid credit.
| Field | Type | Description |
|---|---|---|
amountrequired | string |
|
currencyrequired | string |
|
assets | array of string or null |
TransferRef
One on-chain transfer.
| Field | Type | Description |
|---|---|---|
networkrequired | string | CAIP-2 network. |
tx_hashrequired | string | |
indexrequired | integer (int32) | Log / output index within the transaction.
|
TxLookup
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
tx_hashrequired | string | The hash as looked up ( |
outcomerequired | LookupOutcome | |
network | string or null | The network the transaction was found on. |
transfersrequired | array of LookupTransfer | |
payment_status | PaymentStatus or null | |
checked_networksrequired | array of string | Networks that were searched (CAIP-2). |
UpdatePaymentLinkRequest
POST /v1/payment_links/{id} body. Omitted fields are unchanged; null clears an optional field.
Changes apply to invoices created afterwards only.
| Field | Type | Description |
|---|---|---|
active | boolean or null |
|
amount_type | AmountType or null | |
currency | string or null | |
amount | string or null | |
min_amount | string or null | |
max_amount | string or null | |
description | string or null | |
assets | array of string or null |
|
quantity_limit | integer (int32) or null |
|
expires_at | string (date-time) or null |
|
metadata | map of string or null | Replaces the metadata. |
UpdateSettingsRequest
POST /v1/merchant/settings body. Omitted fields are unchanged; webhook_url: null removes the URL.
| Field | Type | Description |
|---|---|---|
display_name | string or null | |
webhook_url | string or null |
|
default_assets | array of string or null | |
underpay_tolerance_bps | integer (int32) or null |
|
WalletBinding
The transfer the connected wallet must send.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
invoicerequired | string |
|
assetrequired | string |
|
networkrequired | string | CAIP-2 network.
|
senderrequired | string | The bound wallet address (display form). Only a transfer from it is attributed. |
treasuryrequired | string | Where to send: the merchant's registered destination on this network (display form). The checkout checks it against the destination the deposit addresses commit to, and against the merchant's pins, before building the transfer. |
token_contract | string or null | The token contract (display form); |
decimalsrequired | integer (int32) | The token's decimals.
|
amountrequired | string | Send exactly this, in whole tokens (decimal string). The amount due plus the uniqueness suffix.
|
amount_base_unitsrequired | string | The same amount in base units (decimal string): what goes into the transfer call.
|
amount_duerequired | string | The invoice's amount due in this asset (whole tokens).
|
window_ends_atrequired | string (date-time) | A transfer arriving after this is not attributed by this binding. |
WalletBindingRequest
| Field | Type | Description |
|---|---|---|
assetrequired | string | The payment option to pay: its asset code,
|
senderrequired | string | The connected wallet's address on that network, in its display form (
|
WebhookDelivery
One attempt to deliver a webhook event to the merchant's endpoint.
| Field | Type | Description |
|---|---|---|
idrequired | string | |
objectrequired | string | Always
|
livemoderequired | boolean | |
event_idrequired | string | |
event_typerequired | string |
|
invoice | string or null | The invoice the event is about ( |
urlrequired | string | |
statusrequired | DeliveryStatus | |
attemptrequired | integer (int32) | 1 for the first attempt of this delivery.
|
status_code | integer (int32) or null |
|
latency_ms | integer (int32) or null |
|
error | string or null | |
response_snippet | string or null | The first 1 KiB of the endpoint's response body. |
replay_of | string or null | The delivery this one replays, if it is a replay. |
created_atrequired | string (date-time) |
WebhookDeliveryList
A page of webhook deliveries, newest first.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
datarequired | array of WebhookDelivery | |
has_morerequired | boolean | |
next_cursor | string or null | Pass as |
WebhookSecret
A newly created webhook signing secret. Shown once.
| Field | Type | Description |
|---|---|---|
objectrequired | string | Always
|
secretrequired | string |
|