SDKs
A zero-dependency TypeScript client with full endpoint coverage, auto-pagination, typed errors and typed webhook events.
Source lives in src/sdk/typescript. Copy it into your project or build it as a package.
import { FormFlowClient, RateLimitError } from "./formflow";
const ff = new FormFlowClient({ apiKey: process.env.FORMFLOW_API_KEY!, baseUrl: "https://YOUR_HOST", version: "2026-10-01" });
const form = await ff.forms.create({ name: "Survey", templateId: "nps" });
await ff.forms.publish(form.id);
for await (const s of ff.submissions.listAll(form.id, { status: "completed" })) {
console.log(s.id, s.answers);
}Surfaces
Resources: forms, submissions, themes, templates, webhooks, analytics, ai, exports, account, results, payments, workflows, public. Every method takes { signal, idempotencyKey }. See Form builder and React SDK for the rest.
const event = await constructWebhookEvent(rawBody, signatureHeader, secret);
if (event.type === "submission.completed") console.log(event.data.answers);Behavior
Retries 429 and 5xx with exponential backoff and jitter, honoring Retry-After. POST requests send an automatic Idempotency-Key, so retries never duplicate work. Errors are typed: AuthenticationError, PermissionError, NotFoundError, ConflictError, ValidationError, RateLimitError.
Python, Go and Postman
Small clients: pip install formizeflow (github.com/formizeflow/formflow-python, standard library only) and go get github.com/formizeflow/formflow-go (standard library only, Go 1.21). Both send a bearer key, retry 429 and 5xx with backoff, add an Idempotency-Key to every POST, paginate, and verify webhook signatures with the scheme above. Both are tested in CI on every push. node scripts/openapi-to-postman.mjs regenerates docs/formflow.postman_collection.json from openapi.json.
New resources
The TypeScript client adds results (triage, edits, spam, invitations, share links, version restore), payments (connections, rules, refunds, sync) and workflows (approvals, signing, integration health, data sources, captcha).
Other languages
Generate a client from /openapi.json with any OpenAPI 3.1 generator. Zapier and Make app definitions are in integrations/ and are not published.