Webhooks

Receive signed HTTPS notifications for account grants, sync, account resources, orders, and reauth.

Finatic can POST JSON events to an HTTPS endpoint you control whenever subscribed account grants, sync state, account resources, orders, or reauth requirements change. Delivery is handled by FinaticBackground and is scoped to company account grants.

Configure subscriptions

Create and manage webhook endpoints in the Finatic dashboard under Settings → Webhooks for your team workspace.

For each subscription you provide:

  • URL — Must be HTTPS.
  • Environmentlive or sandbox.
  • Event types — One or more event strings from the catalog below.
  • Secret — Used to compute X-Finatic-Signature.

The public event catalog is available at GET /api/v1/webhooks/catalog (no auth required). Subscription management is performed through the dashboard.

Event catalog

The canonical catalog is available at /api/v1/webhooks/catalog.

Account grants

  • account.grant.created
  • account.grant.updated
  • account.grant.revoked

Account sync

  • account.sync.started
  • account.sync.succeeded
  • account.sync.failed

Account resources

  • account.balance.updated
  • account.position.updated
  • account.transaction.created

Orders

  • order.created
  • order.updated
  • order.filled
  • order.cancelled
  • order.rejected

Connections

  • connection.reauth.required

Request shape

Each POST body is a JSON object with:

  • schemaVersion — currently v1.
  • eventId — unique event id.
  • eventType — subscribed event string.
  • createdAt — ISO timestamp.
  • environmentlive or sandbox.
  • companyAccountId — company workspace that owns the grant/subscription.
  • accountId — financial account ID when the event is account-scoped.
  • grantId — account grant ID when available.
  • resource — resource pointer with resourceType, resourceId, accountId, and grantId.
  • data — event-specific payload.

Example:

1{ 2"schemaVersion": "v1", 3"eventId": "evt_01HX...", 4"eventType": "order.filled", 5"createdAt": "2026-06-08T20:15:00Z", 6"environment": "live", 7"companyAccountId": "acct_company_123", 8"accountId": "acct_financial_456", 9"grantId": "grant_789", 10"resource": { 11"resourceType": "order", 12"resourceId": "order_abc", 13"accountId": "acct_financial_456", 14"grantId": "grant_789" 15}, 16"data": { 17"status": "FILLED", 18"symbol": "AAPL" 19} 20} 21

Headers

Finatic sends at least:

1Content-Type: application/json 2User-Agent: Finatic-Webhooks/3.0 3X-Finatic-Event 4X-Finatic-Event-Id 5X-Finatic-Delivery 6X-Finatic-Signature: sha256=<hex> 7

X-Finatic-Signature is included when a subscription secret is configured.

Verify signatures

The signature is HMAC-SHA256 over the exact UTF-8 JSON body Finatic posts. Acknowledge quickly with any HTTP 2xx and process expensive work asynchronously.

1import { createHmac, timingSafeEqual } from 'node:crypto'; 2 3export async function POST(request: Request) { 4const rawBody = await request.text(); 5const signature = request.headers.get('x-finatic-signature') ?? ''; 6const expected = `sha256=${createHmac( 7'sha256', 8process.env.FINATIC_WEBHOOK_SECRET!, 9) 10.update(rawBody, 'utf8') 11.digest('hex')}`; 12 13const valid = 14signature.length === expected.length && 15timingSafeEqual(Buffer.from(signature), Buffer.from(expected)); 16 17if (!valid) { 18return new Response('invalid signature', { status: 401 }); 19} 20 21return new Response('ok', { status: 200 }); 22} 23

Retries and idempotency

The worker treats any HTTP 2xx response as success. On timeouts, transport errors, or non-2xx responses, Finatic retries with exponential backoff. Use eventId as your idempotency key and store the latest processed event per resource if your workflow is order-sensitive.

Testing

  • Use sandbox subscriptions while you iterate.
  • Use dashboard test sends to validate endpoint routing and signature handling.
  • Confirm your handler routes by companyAccountId, accountId, and grantId.
  • Do not use provider connection IDs in webhook routing logic.

Next steps

  1. Account-First Model — Understand public identity fields.
  2. Account Grants — Manage grant scopes and disconnect behavior.
  3. API Reference — Explore the webhook event catalog.