Realtime
Webhooks
Push delivery on addresses, events and onchain conditions, signed, retried, and safe to act on at one confirmation.
Create
POST /v1/$KEY/webhooks
{
"event": "usdc.transfer",
"filter": { "to": "0x2c…", "minValue": "100000000" },
"confirmations": 1,
"url": "https://api.you.com/hooks/arc",
"secret": "whsec_…"
}Events
usdc.transfer, from the de-duplicated feed, so one delivery per movement rather than one per log.usdc.blocklist, when an address is added to or removed from the blocklist.cctp.inboundandcctp.outbound, the two legs of a crosschain transfer.address.activity, any transaction touching a watched address.
Delivery
At-least-once with exponential backoff, HMAC-SHA256 signed, with a 24 hour replay window and a dead letter queue in the dashboard. Deliveries are idempotent on (txHash, logIndex), which is the key to dedupe on if your handler is not already idempotent.
// verify the signature before trusting the body
import { createHmac, timingSafeEqual } from 'node:crypto'
const sig = req.headers['x-arcrpc-signature'] // t=…,v1=…
const [t, v1] = parse(sig)
const expected = createHmac('sha256', SECRET)
.update(`${t}.${rawBody}`)
.digest('hex')
if (!timingSafeEqual(Buffer.from(v1), Buffer.from(expected))) reject()
if (Date.now() / 1000 - Number(t) > 300) reject() // replay window