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.inbound and cctp.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 bodyimport { 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