Guides

Getting Started

Go from zero to your first escrowed stablecoin payment on Base Sepolia in a few minutes.

Last updated 2026-07-16View as Markdown

Coinbax builds payment controls for programmable money. The Payments API wraps every transaction in the Coinbax Execution Framework (Verify, Fund, Confirm, Settle), so escrow, compliance screening, and approval rules run on every payment you create.

This guide takes you from a new account to your first escrowed USDC payment on Base Sepolia, the staging testnet.

1. Create an account

Sign up at beta.coinbax.com/signup. Your account gets a workspace: the tenant that owns your customers, transactions, templates, and credentials.

Verify your email before continuing. Staging access is approved for developer testing; production access is a separate conversation with our team.

2. Get staging OAuth credentials

In the dashboard, switch to the staging environment and open your workspace settings to create an OAuth client. Staging credentials only work against staging, and staging only ever touches testnets. The two environments are enforced at the infrastructure level: a staging deployment refuses to start if it is configured with mainnet networks.

The client secret is shown once at creation. Store it immediately; it cannot be retrieved later.

export COINBAX_CLIENT_ID=coinbax_client_...
export COINBAX_CLIENT_SECRET=...

Exchange them for a short lived access token, and send that token on every Payments API request:

export ACCESS_TOKEN=$(curl -s -X POST https://api-staging.coinbax.com/api/v2/oauth/token \
  -H "Content-Type: application/json" \
  -d "{\"grant_type\":\"client_credentials\",\"client_id\":\"$COINBAX_CLIENT_ID\",\"client_secret\":\"$COINBAX_CLIENT_SECRET\"}" \
  | jq -r .data.access_token)

The token endpoint uses RFC 6749’s snake_case field names, unlike the rest of the API. It expires in an hour (expires_in), so request a fresh one rather than caching it indefinitely.

The Payments API v2 accepts OAuth 2.0 Bearer tokens only. API keys work against /api/v1, which sunsets on 1 November 2026 — see the authentication guide.

3. Know your staging constants

What Value
Payments API base URL https://api-staging.coinbax.com/api/v2
Workspace API base URL https://core-staging.coinbax.com/api/v1
Network Base Sepolia (chain ID 84532)
Test USDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e

Need testnet USDC? Use the Circle faucet and select Base Sepolia. Testnet ETH for gas comes from any Base Sepolia faucet.

4. Customers are optional

A transaction moves funds between two wallet addresses, so you do not need to create customer records to make your first payment. Customer records are a Workspace API concept (/workspaces/{id}/customers on the Workspace API), managed by workspace admins, and used when you want to associate a payment with a known party. If you have one, pass its id as customerId on the transaction. Otherwise, skip straight to creating a transaction with addresses.

Every endpoint returns the same envelope:

{
  "success": true,
  "data": { "id": "...", "status": "..." },
  "meta": { "timestamp": "...", "requestId": "..." },
  "error": null
}

5. Create your first transaction

curl -X POST https://api-staging.coinbax.com/api/v2/transactions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "fromAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb2",
    "toAddress":   "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
    "amount": 100,
    "currency": "USDC",
    "blockchainNetwork": "base",
    "orchestrationType": "coinbax",
    "templateId": "<your-template-id>"
  }'

orchestrationType: "coinbax" routes the payment through programmable escrow with the controls defined on your template. The response returns the transaction in PENDING; compliance screening and risk scoring run before any funds move.

Follow the transaction through the lifecycle with:

curl https://api-staging.coinbax.com/api/v2/transactions/<transactionId> \
  -H "Authorization: Bearer $ACCESS_TOKEN"

See your first transaction for the full walkthrough of each state.

Rather than polling, register a webhook and receive every state transition:

Webhook subscriptions live on the Workspace API, alongside the rest of workspace configuration:

curl -X POST https://core-staging.coinbax.com/api/v1/workspaces/$WORKSPACE_ID/webhooks \
  -H "Authorization: Bearer $WORKSPACE_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.example.com/coinbax-webhook",
    "eventTypes": ["transaction.created", "transaction.escrowed", "transaction.completed"]
  }'

Delivery is retried with circuit-breaker protection. See the webhooks guide for event types and signature verification.

Next steps

Building with an AI agent? This entire site is machine-readable: see llms.txt, append .md to any page URL for raw markdown, or connect to the MCP server.