Developers

Build on ArcFX

A REST API for stablecoin payments on Arc. Query payments, poll invoice status, and read on-chain settlement data — backed by live event tracking via Circle's Smart Contract Platform.

API Reference
Full endpoint docs — authentication, request/response schemas, rate limits, and error codes.
View docs →

Introduction

The ArcFX API lets you read payment and settlement data from the ArcFX protocol on Arc. All responses are JSON. The API has two surfaces:

  • Authenticated API (/api/v1) — requires an API key. This is the developer surface for building integrations.
  • Public API (/v1) — no key required. Serves public on-chain protocol data (the same endpoints the ArcFX dashboard uses).

Base URL

https://arcfx-backend-production.up.railway.app
Testnet. The API currently serves Arc Testnet data. Amounts are in human-readable units (e.g. 1.000000 USDC).

Authentication

Authenticated endpoints require an API key, sent as a Bearer token in the Authorization header:

Authorization: Bearer arcfx_sk_test_...

Keep your key secret — treat it like a password, and never embed it in client-side code you ship to users.

Get an API key

Generate a testnet key instantly. Enter your email (so we can reach you about your integration), and we'll issue a key. It's shown once — copy it immediately.


            
Tip. You can try the public endpoints below right now with no key. For the authenticated endpoints, paste your key into the "Try it" box and it'll be used only for that request (held in your browser, never sent anywhere except the API).

List payments

GET /api/v1/payments API key
Returns payments processed through ArcFX, newest first (full history).
ParameterTypeDescription
payerstringOptional. Filter to payments from a specific wallet address (0x…).
limitintegerOptional. Max results, 1–100. Default 20.

Example response

{
  "count": 1,
  "payments": [
    {
      "txHash": "0x4ec3…d6bb",
      "payer": "0x63c3…c897",
      "recipient": "0x50E6…9c4F",
      "token": "USDC",
      "gross": "1.000000",
      "fee": "0.001500",
      "net": "0.998500",
      "blockNumber": 45944963,
      "blockTime": "2026-06-07T09:15:19.000Z",
      "explorer": "https://testnet.arcscan.app/tx/0x4ec3…"
    }
  ]
}
Try it

                

Invoice status

GET /api/v1/invoices/status API key
Check whether an invoice has been paid. Poll this to detect settlement.
ParameterTypeDescription
numberstringRequired. The invoice number you generated (e.g. INV-001).
recipientstringRequired. The recipient wallet address (0x…).

Example response (paid)

{
  "paid": true,
  "invoiceNumber": "INV-001",
  "recipient": "0x50E6…9c4F",
  "payment": {
    "txHash": "0x4ec3…d6bb",
    "token": "USDC",
    "gross": "1.000000",
    "blockTime": "2026-06-07T09:15:19.000Z"
  }
}
Try it

                

Protocol stats

GET /v1/stats Public
Aggregate protocol totals: settlements, volume, fees, and unique payers.

Example response

{
  "settlements": 8,
  "volume": "10.00",
  "fees": "0.01",
  "uniquePayers": 2
}
Try it — no key needed

                

Recipient breakdown

GET /v1/breakdown Public
For a given payer, totals grouped by recipient (who they've paid, and how much).
ParameterTypeDescription
payerstringRequired. Wallet address to break down (0x…).
limitintegerOptional. Max recipients returned.
Try it — no key needed

                

Public payments feed

GET /v1/payments Public
Recent payments across the protocol, newest first. Same shape as the authenticated endpoint.
ParameterTypeDescription
limitintegerOptional. Max results. Default 20.
Try it — no key needed

                

Errors

Authenticated endpoints return 401 when the key is missing, malformed, or invalid:

{
  "error": "missing_api_key",
  "message": "Provide your key as: Authorization: Bearer <key>"
}

Other error codes: invalid_api_key (bad or revoked key), 400 for missing required parameters.