Payments · x402
Payment guarantees.
When a call is charged, what to do if its outcome is unknown, and how to follow a refund.
Contact Synal ↗01
Settlement before content
Synal returns model content only after the facilitator successfully settles the payment on-chain. This also applies to the first content chunk of a stream.
Example
The model finishes an answer, but settlement has not been confirmed. Synal keeps the answer back until the facilitator confirms the on-chain payment.
02
Model failure before settlement: no charge
If the model fails before settlement, the payment is released and nothing is charged. The same valid signature can be retried with the same request. A failure after settlement follows the refund process below; some networks and async video jobs settle first.
Example
A model call times out before settlement. Its payment is released; retry the same request with the same still-valid signature.
03
Unknown settlement: keep the same signature
An unknown settlement returns HTTP 503 with settlement_unknown, never 402. Retry with the same PAYMENT-SIGNATURE: it cannot be charged twice. Never sign a second payment while the original is unresolved. A retry does not guarantee that a lost answer will be replayed.
Example
You receive HTTP 503 settlement_unknown. Follow Retry-After and retry with the original request and PAYMENT-SIGNATURE; never sign a second payment for this unresolved call.
04
One signature is charged at most once
A unique payment key in the ledger and the on-chain nonce prevent the same authorization from being charged twice. A newly signed authorization is a separate payment.
Example
Your client sends the same signed request twice after a network timeout. Both attempts use the same payment key; they cannot produce two charges.
05
A payment outcome you can look up
After payment reservation, JSON errors include charged: true means charged, false means not charged, and null means unresolved. Responses after reservation carry an X-Synal-Payment-Id, including errors and streams. For an error after a stream starts, check the recorded payment in the Console.
If the response is lost, the Console’s by-authorization lookup recovers the payment outcome, not the answer. Wallet support for this lookup is limited; keep the network and authorization nonce. Contact support if your wallet cannot sign in.
Example
A response is lost after you sign a payment. Sign in to the Console with a supported paying wallet and look up the authorization by network and nonce to find its payment status and transaction.
06
Refunds after payment
On some networks, and for async video jobs, the payment settles before the model runs; if the model then fails, a refund is owed. The payment is marked refund_due and an operator refunds it. The Console shows “Refund sent” once the refund transfer is recorded. Failed video or music jobs after settlement also leave a refund owed. The original call remains charged; no refund arrival time is promised.
Example
A call settles first, then the model fails. Its payment record shows “Refund owed”; after the operator records the refund transfer, it shows “Refund sent” with its transaction link.
07
Pay for actual usage
upto payments are available where supported and offered by the model. You sign a maximum amount; Synal charges the provider cost of the actual input and output tokens × 1.03 + $0.001, never more than the ceiling you signed. Other offers use exact payments.
Streams paid with upto are buffered while the model runs. Synal settles the actual usage before delivering the buffered content. An exact quote is a fixed payment covering the full output limit.
Example
You sign a 0.010000 USDC ceiling. If the actual token cost is $0.004, the payment is 0.005120 USDC ($0.004 × 1.03 + $0.001), within that ceiling.