POST /settle
Execute a verified payment on-chain. Requires an API key.
POST https://api.solvador.com/settleSubmits the payment on-chain and returns the result. Requires your API key in the X-API-Key header. Successful mainnet settlements count against your plan quota — except on the XRP Ledger, which is always free of quota.
Every settlement (successful or failed) is recorded and appears in your dashboard with its network, scheme, payer, amount, and transaction hash.
Request
The body is identical in shape to /verify — x402Version, paymentPayload, paymentRequirements:
curl https://api.solvador.com/settle \
-H "Content-Type: application/json" \
-H "X-API-Key: $SOLVADOR_KEY" \
-d '{
"x402Version": 2,
"paymentPayload": { "…": "…" },
"paymentRequirements": {
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"payTo": "0xYourReceivingAddress",
"maxTimeoutSeconds": 300,
"extra": {}
}
}'Response
Always HTTP 200 for a processed settlement, successful or not:
{
"success": true,
"transaction": "0x6fe1…c40b",
"network": "eip155:8453",
"payer": "0xPayerAddress"
}{
"success": false,
"errorReason": "invalid_signature",
"errorMessage": "authorization signature does not match the payer",
"transaction": "",
"network": "eip155:8453"
}| Field | Type | Description |
|---|---|---|
success | boolean | Whether the payment settled on-chain |
transaction | string | On-chain transaction hash / identifier (empty on failure) |
network | string | CAIP-2 network the settlement ran on |
payer | string? | The paying address |
amount | string? | Actual settled amount in atomic units — present when it can differ from the authorized maximum, as with upto |
errorReason | string? | Machine-readable failure code, present when success is false |
errorMessage | string? | Human-readable detail |
extensions | object? | Per-extension response data |
Idempotency
Include a payment-identifier id in the payload and retries become safe: re-sending the same id with the same payment replays the cached response verbatim — no second on-chain transaction, no additional quota. The same id with a different payment is rejected with 409. A failed settle releases the id so your retry re-executes.
Quota
When your monthly quota is exhausted, /settle returns 402 with an explanatory body — /verify keeps working:
{
"error": "quota_exceeded",
"plan": "free",
"limit": 10,
"usedThisMonth": 10,
"upgrade": "/api/billing/upgrade"
}Upgrading in the dashboard’s Plans tab takes effect immediately. XRP Ledger settlements never count against quota.
Errors
| Status | Meaning |
|---|---|
400 | Malformed payment-identifier |
401 | Missing or invalid API key |
402 | Quota exhausted, or pay-as-you-go account suspended |
409 | payment-identifier conflict: same id, different payment |
500 | Internal error |