Developers
The entire API surface centres on one chain-agnostic object: the Payment Intent. You never write chain-specific code.
Base URL
https://api.gatesettle.tld/v1
Auth
Bearer sk_live_… / sk_test_…
Idempotency
Required on every POST, cached 24 h
Pagination
Cursor-based, limit ≤ 100
Create a payment intent
curl https://api.gatesettle.tld/v1/payment_intents \
-H "Authorization: Bearer sk_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"amount": "149.00",
"currency": "USD",
"accept": ["*"],
"settle_in": "USDC:arbitrum",
"reference": "order_10231",
"webhook_url": "https://shop.tld/hooks/gatesettle"
}'The response contains one payable option per enabled asset — address, exact amount and a wallet-ready QR payload — plus a hosted checkout URL and the quote expiry.
Webhooks
Every delivery is HMAC-SHA256 signed, timestamped and replay-protected with a five-minute tolerance. Failed deliveries retry at 1 m, 5 m, 30 m, 2 h, 6 h and 24 h; an endpoint is auto-disabled after three days of failures and you are notified.
import { verifyWebhook, SIGNATURE_HEADER } from '@gatesettle/shared';
const signature = request.headers.get(SIGNATURE_HEADER);
const raw = await request.text();
if (!verifyWebhook(raw, signature, process.env.WEBHOOK_SECRET)) {
return new Response('invalid signature', { status: 400 });
}
const event = JSON.parse(raw);
// event.id is the idempotency key; ordering is not guaranteed.Event catalogue
- payment_intent.created
- payment_intent.detected
- payment_intent.confirmed
- payment_intent.settled
- payment_intent.underpaid
- payment_intent.overpaid
- payment_intent.expired
- payment.reversed
- payment.rescue_detected
- payout.created
- payout.completed
- payout.failed
- refund.created
- refund.completed
- refund.failed
SDKs & plugins
TypeScript SDK
Generated from the OpenAPI 3.1 document in CI, so it never drifts from the API. Fully typed intents, payouts, refunds and webhook payloads.
Checkout widget
A framework-agnostic <gatesettle-checkout> web component under 40 KB gzipped. Styles are compiled into a Shadow DOM, so nothing leaks into or inherits from your page.
WooCommerce
PHP 8.2 plugin following WordPress coding standards, compatible with High-Performance Order Storage and the Block Checkout.
Shopify, Magento, PrestaShop
Shopify app in TypeScript; Magento and PrestaShop modules wrapping the same REST API and signed webhooks.
Errors
Errors follow RFC 9457 Problem Details with a stable machine-readable code such asintent_expired,amount_mismatch orasset_disabled. Money is always a decimal string, never a float, and assets are addressed as SYMBOL:chain.