Solvador
API

POST /settle

Execute a verified payment on-chain. Requires an API key.

POST https://api.solvador.com/settle

Submits 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 /verifyx402Version, 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"
}
FieldTypeDescription
successbooleanWhether the payment settled on-chain
transactionstringOn-chain transaction hash / identifier (empty on failure)
networkstringCAIP-2 network the settlement ran on
payerstring?The paying address
amountstring?Actual settled amount in atomic units — present when it can differ from the authorized maximum, as with upto
errorReasonstring?Machine-readable failure code, present when success is false
errorMessagestring?Human-readable detail
extensionsobject?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

StatusMeaning
400Malformed payment-identifier
401Missing or invalid API key
402Quota exhausted, or pay-as-you-go account suspended
409payment-identifier conflict: same id, different payment
500Internal error