Docs/Reference
View Markdown

Statuses and assets

Relay exposes an overall payment status, an independent settlement status, and—on reusable customer wallets—separate deposit and transfer statuses. Keep these state machines separate in your integration.

Payment status#

ValueMeaning
pendingThe payment exists and has not reached a more specific funding state.
pending_verificationRelay has evidence that requires additional verification.
awaiting_confirmationAn observed transaction has not met the required finality threshold.
awaiting_offsetEligible confirmed funding is below the target and more funds are required.
successfulThe incoming payment target is funded. Outgoing settlement can still be pending.
completedRelay's post-funding workflow reached completion/submission. Check settlementStatus for final settlement evidence.
failedPayment processing reached a failed state. Inspect settlement independently if funds were already confirmed.
cancelledThe payment was cancelled.

The exact transition path varies by payment type and network. Integrations should accept a valid state without assuming every payment visits every earlier state.

Settlement status#

ValueMeaning
not_startedNo outgoing settlement has been submitted.
submittedRelay recorded an outgoing transaction and is checking its on-chain result.
settledOutgoing settlement was verified.
failedSettlement was verified as failed or exhausted safe processing attempts.
review_requiredThe broadcast, resources, or accounting outcome is ambiguous and requires reconciliation before another send.

Some historical records can contain legacy settlement values. Treat unknown values as non-final, log them, and reconcile through retrieval or Relay support.

Accounting state#

ValueMeaning
readyThe payment's immutable target and cumulative confirmed accounting are ready for automated processing.
review_requiredAccounting evidence requires operational reconciliation.

Customer wallet deposit status#

ValueMeaning
confirmedIncoming evidence was credited and a merchant payout was queued.
settledThe linked merchant payout was verified on-chain.
review_requiredThe deposit or its payout cannot continue automatically.

Customer wallet transfer status#

ValueMeaning
queuedTransfer is durably queued but not broadcast.
submittedAn outgoing hash is recorded and awaiting verification.
settledOn-chain settlement was verified.
review_requiredRelay will not authorize a replacement send until reconciliation is complete.

Enabled networks#

New wallet and payment work currently uses:

NetworkAPI valueCustomer walletsCrypto payment intentsFiat settlement
TRONtronyesyesdepends on active token configuration
Solanasolanayesyesno; crypto intents only

Ethereum, Polygon, and Stellar values can exist on historical records, but they are not enabled for new work in the current network policy. Do not infer availability from historical data or enum names.

Tokens and precision#

Customer wallet requests accept USDT and USDC, subject to active network/token configuration. The broader stored token enum also contains MATIC, TRON, ETH, and XLM for historical or specialized records; their presence does not make them available for a new request.

Asset familyExpected precision in payment accounting
USDT / USDC6 decimals
XLM historical records7 decimals
Other historical crypto assetsgenerally 18 decimals

Always use the active-assets endpoint and the payment's pinned tokenDecimals, tokenContractAddress, and chain fields when available.

Decimal handling#

Payment-object monetary fields, customer deposit amounts, fees, merchant amounts, and transfer amounts are serialized as decimal strings.

javascript
import Decimal from "decimal.js";

const confirmed = new Decimal(payment.confirmedAmount);
const target = new Decimal(payment.originalAmount);
const fullyFunded = confirmed.greaterThanOrEqualTo(target);

Do not convert these values to JavaScript number before arithmetic. The standalone fiat-rate endpoint currently returns its indicative rate as a JSON number; convert it to your decimal type from its string representation and treat the created intent's stored quote as authoritative.

Event ordering#

Webhook delivery order is not guaranteed. Use resourceVersion to avoid moving a local payment projection backward. A settlement event can arrive after a funded event, and a retry of the funded event can arrive after that newer settlement event. Event id handles duplicate delivery; resourceVersion handles resource ordering.

Relay Finance APIServer-to-server financial infrastructure.