Skip to content

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

POST /v1/payment_intents
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.

Verify a signature
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.