Arc RPC, the USDC transfer feed, and settlement you can prove.
Full JSON-RPC with tracing, one USDC transfer feed across both emitters, and balances that never mix 18 decimals with 6. One API key, production-ready in minutes.
Archive on every plan · Plans from $49/mo · See why the others are wrong →
Get an API key
50% off first monthPick a plan and you’re on the endpoint in minutes.
Production Arc RPC, and every correctness API, for one backend.
- Full JSON-RPC: trace, debug, txpool and arc_*
- Unpruned archive, billed at request parity
- Decimal-safe USDC balances and settlement proofs
- Unified USDC transfer feed, 10 webhooks
250 RPS · 400M requests/mo · then $49/mo
gRPC streaming, full backfill, and every warehouse sink.
1,500 RPS · 2,000M requests/mo · then $199/mo
Secure checkout by Stripe · Nothing charged today
Your USDC balance is off by a trillion
Arc keeps one USDC balance behind two interfaces: 18 decimals natively, 6 on the ERC-20 view. At least one provider's published Arc reference gets that wrong, and every integration that follows it inherits the error.
How much USDC does this account hold? One balance, two interfaces: eth_getBalance returns it at 18 decimals, the ERC-20 view at 6. Format the native number with the ERC-20 decimals and the answer is wrong by construction.
eth_getBalance(0x7c4e...09b1, 4,210,887)
/ 10^6 ← 6 decimals, per one Arc reference20,000,000,000,000,000.00 USDC
Treats native USDC as 6 decimals. The raw balance is right; the scale is not.
arcrpc_getUsdcBalance(0x7c4e...09b1, 4,210,887)
native18 / 10^18
erc20_6 / 10^620,000.00 USDC
Both representations returned together, already scaled, with a flag when the ERC-20 view truncates.
How a USDC transfer gets from Arc to your app.
Our nodes watch Arc, reconcile what it emits into clean structured data, and stream it to your application. This is the journey of one transfer.
One transfer, fully detailed
{ : "4210887:3:0", "kind": "ERC20_TRANSFER", "from": "0x7c4e...09b1", "to": "0x2d91...c3f0", "amount_native": "1250000000000000000000", : "1250.000000", : "INV-2026-0914", "block_number": 4210887, : 0}Four products. One API key.
Everything authenticates with the same key. Start with one product and add the others whenever you need them.
Real-time streams
Every USDC movement on Arc, de-duplicated across both emitters and delivered as the block commits, over gRPC, WebSocket, webhooks or straight into your warehouse.
- Subscribe to only the addresses you need
- Every transfer carries both decimal conventions and its Memo
- Backfill from any block, then tail live on one stream
StreamTransfers · USDC
sample- 4,210,8800x5d69...c5ce → 0x8099...66f3ERC-206.68
- 4,210,8800xba1b...9d01 → 0x907c...6fa2mint685.87
- 4,210,8800xa573...75a8 → 0x0be8...0f42ERC-201.28
- 4,210,8810x1107...75b2 → 0x6278...2032ERC-20memo456.96
- 4,210,8810xff34...4c71 → 0x78a5...6ec9ERC-209.70
- 4,210,8820x6ae3...51f2 → 0x4c58...707cnative51.11
- 4,210,8830xa207...e7c0 → 0x8d61...c56eERC-206,603.16
- 4,210,8840x6c1e...b64d → 0xad6b...99e0ERC-2066.64
POSTrpc.arcrpc.com/v1/{API_KEY}
request
{
"jsonrpc": "2.0",
"id": 1,
"method": "arc_getCertificate",
"params": ["latest"]
}responsefinal on commit
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"height": 21285725,
"round": 0,
"block_hash": "0x6414...9a21",
"signatures": [
{ "address": "0x1e70...e716", "signature": "Xp5u...BA==" },
{ "address": "0x8c2d...41a0", "signature": "q3Lk...wg==" },
"... 12 in total"
]
}
}Where “archive” starts, 127 blocks behind the tip
On Arc almost every historical read is an archive read. We bill it at the same rate as a call against the tip.
arcrpc_getSettlementProof
verified offline- transaction
- 0x9f2c...a41e
- block
- 4,210,887
- commit round
- 0
- validator signatures
- 12
- block hash signed
- 0x3b8e...77d2
The certificate is Arc’s own. Checking it needs the validator set, not trust in us.
Real-time streams
Every USDC movement on Arc, de-duplicated across both emitters and delivered as the block commits, over gRPC, WebSocket, webhooks or straight into your warehouse.
- Subscribe to only the addresses you need
- Every transfer carries both decimal conventions and its Memo
- Backfill from any block, then tail live on one stream
StreamTransfers · USDC
sample- 4,210,8800x5d69...c5ce → 0x8099...66f3ERC-206.68
- 4,210,8800xba1b...9d01 → 0x907c...6fa2mint685.87
- 4,210,8800xa573...75a8 → 0x0be8...0f42ERC-201.28
- 4,210,8810x1107...75b2 → 0x6278...2032ERC-20memo456.96
- 4,210,8810xff34...4c71 → 0x78a5...6ec9ERC-209.70
- 4,210,8820x6ae3...51f2 → 0x4c58...707cnative51.11
- 4,210,8830xa207...e7c0 → 0x8d61...c56eERC-206,603.16
- 4,210,8840x6c1e...b64d → 0xad6b...99e0ERC-2066.64
Arc JSON-RPC
Mainnet 5042 and testnet 5042002 over HTTPS and WebSocket, with the full debug, trace and txpool surface and the arc_ namespace documented down to its error codes.
- arc_getVersion and arc_getCertificate, documented
- Sub-floor transactions rejected, not silently dropped at 20 Gwei
- Works with viem, ethers, web3.py and Foundry unchanged
POSTrpc.arcrpc.com/v1/{API_KEY}
request
{
"jsonrpc": "2.0",
"id": 1,
"method": "arc_getCertificate",
"params": ["latest"]
}responsefinal on commit
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"height": 21285725,
"round": 0,
"block_hash": "0x6414...9a21",
"signatures": [
{ "address": "0x1e70...e716", "signature": "Xp5u...BA==" },
{ "address": "0x8c2d...41a0", "signature": "q3Lk...wg==" },
"... 12 in total"
]
}
}Historical & archive
Every block since genesis on both networks, unpruned, queried through the same endpoint and billed at the same rate as the tip. Bulk exports on request.
- Archive on every plan, never a multiplier
- Testnet backfills handled across the Zero5 fork
- Parquet, CSV and JSONL exports of any range
Where “archive” starts, 127 blocks behind the tip
On Arc almost every historical read is an archive read. We bill it at the same rate as a call against the tip.
Settlement proofs
Given a transaction hash, the receipt, the BFT commit certificate that finalised its block, and a verifier you can run without trusting us. The artefact an audit team actually needs.
- Built on arc_getCertificate, cached and indexed by tx hash
- Offline verification against the validator set
- Signed exports of every certificate in a range
arcrpc_getSettlementProof
verified offline- transaction
- 0x9f2c...a41e
- block
- 4,210,887
- commit round
- 0
- validator signatures
- 12
- block hash signed
- 0x3b8e...77d2
The certificate is Arc’s own. Checking it needs the validator set, not trust in us.
The transfer preview shows sample records in the production feed schema. The archive comparison is arithmetic from published block times.
Every block since genesis, at the price of the tip.
Unpruned archive on mainnet and testnet, queried through the same endpoint as the tip. At 0.5s blocks, anything older than about a minute is an archive read, so we do not charge a multiplier for it. Bulk exports of any range on request.
Chain 5042 · genesis to tipWhat’s in the archive
- Blocks and commit certificatesfrom genesis
every block with the certificate that finalised it
- Transactions and receiptsfrom genesis
gas cost derived from the receipt, since Arc emits no log for it
- USDC transfers, reconciledboth emitters
one record per movement, both decimal conventions
- Logsunpruned
every log, orderable by block number and log index
- Memo, blocklist and CCTPdecoded
payment references, compliance state and cross-chain legs
- Testnet before Zero5switched
NativeCoinTransferred mapped onto EIP-7708 at the fork boundary
Protocol behaviour as documented at docs.arc.io, as of 2026-09-16. Export ranges are confirmed per request.
Arc mainnet in three steps.
- 1
Create an API key
Pick a plan in about two minutes. Pro is $49 a month, and your first payment is half off with ACTIVATE50.
- 2
Change one URL
Any EVM library works unchanged: viem, ethers, web3.py, Foundry. Coming from another Arc provider, only the endpoint moves.
- 3
Use what only Arc needs
Read USDC without mixing decimals, stream reconciled transfers, and prove settlement with the commit certificate.
$ grpcurl -H 'x-api-key: ...' grpc.arcrpc.com:443 \
arcrpc.v1.Transfers/StreamTransfers
▌streaming
curl https://rpc.arcrpc.com/v1/YOUR_KEY \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1, "method":"arcrpc_getUsdcBalance", "params":["0x7c4e...09b1","latest"]}'Built for payments, treasury, and the teams who index them.
Two plans. The full platform on both.
Every plan includes full JSON-RPC, the archive and every Arc correctness API on one key. Scale adds gRPC streaming, full backfill and warehouse sinks. Annual billing saves 17%.
Then $49/month
Production Arc RPC, and every correctness API, for one backend.
- Complete JSON-RPC: eth, net, web3, txpool, debug, trace, arc
- Unpruned archive from genesis, billed at request parity
- Decimal-safe USDC balances and the Settlement Proof API
- Unified USDC transfer feed · 250 RPS · 400M requests
- 20 Gwei floor guard · 10 webhooks · 99.9% uptime target
Then $199/month
gRPC streaming, full backfill, and every warehouse sink.
- Everything in Pro
- gRPC and gRPC-Web streaming, with a signed gap report per range
- Compliance pre-flight against live blocklist state
- Full history backfill · 1,500 RPS · 2,000M requests
- Kafka, Postgres, ClickHouse and S3 sinks · 99.99% uptime target
Every gate (throughput, streaming, sinks, controls, SLA) is spelled out in the full feature matrix. Dedicated nodes and custom terms live on Enterprise.
Start building on Arc today.
One API key gets you JSON-RPC, the USDC transfer feed and settlement proofs on mainnet and testnet. Scale adds gRPC streaming and warehouse sinks.