Bill per token.
Settle in USDC.

Pactum meters every call your API serves, holds the charge against an on-chain balance, then settles the batch on Arc. What your customer receives at the end is not an invoice PDF — it is a transaction hash they can verify without asking you.

Arc Testnet · chain 5042002

Reference
usage_period · 2026-07
Specimen
  • gpt-4o · prompt128,400 tok0.642000
  • gpt-4o · completion31,900 tok0.478500
  • embeddings · prompt902,000 tok0.090200
Due at settlement1.210700 USDC
1.0 — Fund

The balance exists before the first call

Your customer deposits USDC into the billing contract. That deposit is their channel balance, and it is the only thing standing between them and a rejected call. No card on file, no credit decision, no invoice you have to chase thirty days later.

  • DepositUSDC → PactumBilling
  • Balance readuserBalances(address)
  • Withdrawableunspent, at any time
2.0 — Meter

Every call is recorded once

One request per billable event. Pactum prices the tokens, checks the total against the channel balance minus everything still pending, and records it. Send the same idempotency_key twice — from a retry, a queue redelivery, a nervous client — and the second one comes back deduplicated, not double-charged.

When the balance will not cover the call, the answer is 402. Your service decides what to do with that; Pactum simply refuses to record a charge that cannot be settled.

POST /api/v1/usage/track
X-API-Key: pk_live_…

{
  "model": "gpt-4o",
  "prompt_tokens": 1280,
  "completion_tokens": 320,
  "prompt_price_per_token": "0.0000050",
  "completion_price_per_token": "0.0000150",
  "user_address": "0x…",
  "idempotency_key": "req_01H…"
}

→ 200  { "recorded": true,
         "deduplicated": false,
         "cost": "0.011200" }
3.0 — Seal

Settlement leaves a mark

Pending usage settles in batches. Many charges are folded into a single transaction through Multicall3From, which keeps each caller’s identity intact rather than collapsing them into one anonymous transfer. The batch lands, the pending rows become settled rows, and the receipt gains the one field that makes it checkable by someone who does not trust you.

Arc settles in USDC and charges gas in USDC, so the cost of sealing a batch is denominated in the same unit as the batch itself.

Settled on Arc0x9f2c…b9d1

Specimen seal.
Real ones link to
testnet.arcscan.app.

Network
Network
Arc Testnetchain ID 5042002
Settlement asset
USDCERC-20 view, 6 decimals — 0x3600000000000000000000000000000000000000
Batching
Multicall3Frommany settlements in one transaction, msg.sender preserved per call
Explorer
testnet.arcscan.appevery settlement resolves to a public transaction
CCTP domain
26for bridging USDC in and out of Arc
Testnet funds
faucet.circle.comCircle faucet — no mainnet value at stake

A bill your customer can verify without asking you.