Skip to main content
Make your first authenticated Flow9 call in a few minutes with the typed @flow9/sdk — generated from the OpenAPI spec, so every endpoint, parameter and response is typed, with retries, pagination helpers and webhook verification included. Node 18+, Deno and Bun; server-side only — never ship a key to a browser you don’t control.

1. Install

2. Get a key

Create a key in Settings → Developers → API keys (or headlessly via POST /v1/api-keys after signing up). Use a Test key (f9_test_) while developing — nothing real is sent.

3. Your first calls

Every response is the standard envelope: result.success, result.data, and result.meta.request_id (quote that in support requests). Field names are camelCase in the SDK (firstName) and snake_case on the wire (first_name) — the SDK maps them.

4. Page through a list

Every list endpoint takes limit + cursor and returns nextCursor + hasMore (conventions). @flow9/sdk/extras turns that into a plain for await:

5. Verify webhooks

The one thing a generator cannot produce: byte-for-byte parity with the server’s signer lives in @flow9/sdk/extras too.

6. Handle errors and limits

  • Errors throw Flow9Error subclasses carrying the envelope’s stable error.code — branch on the code, never the message. Full catalogue: errors.md.
  • Rate limits return 429 RATE_LIMIT_EXCEEDED with Retry-After. The SDK’s built-in retry config honours it; @flow9/sdk/extras exposes retryAfterMs / retryDelayMs if you roll your own loop. Details: rate-limits.md.
  • Retries on writes must carry an Idempotency-Key; idempotencyKey() from extras mints one. Details: idempotency.md.

Next steps

  • Recipes — batch import, webhook mirror, full export.
  • Records reference — filtering, sorting, custom objects.
  • Webhooks — react to events instead of polling.
  • Connect an AI assistant — drive the same data from Claude.
  • Prefer plain fetch? The API conventions doc shows the envelope and pagination contract the SDK wraps; scripts/docs-curl-examples.sh has runnable curl.