Build with Formfy
Programmatically generate PDF forms from templates, send them to signers, retrieve signed PDFs, and react to events via webhooks. Bearer-token auth, OpenAPI 3.1 spec, separate live/test key partitions.
What you can build
Generate & send forms
Create a form from any of your templates with prefilled fields, send it to a signer over email or SMS, and retrieve the signed PDF when done.
Webhooks
Subscribe to form.created, form.sent, form.viewed, form.signed, form.expired. HMAC-SHA256 signed, 5-minute replay window.
Generate from prompts
Skip the template step entirely — describe what you need in natural language and the API returns a ready-to-send form.
Hello world
Create a form and email it to a signer in two curl calls.
# 1. Create a form from a template
curl https://formfy.ai/api/v1/forms \
-H "Authorization: Bearer fk_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{"template_id": "tmpl_abc123", "prefill": {"client_name": "Alex Doe"}}'
# → { "id": "form_xyz789", "status": "draft", ... }
# 2. Send it to a signer
curl https://formfy.ai/api/v1/forms/form_xyz789/send \
-H "Authorization: Bearer fk_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{"recipients": [{"email": "alex@example.com", "channel": "email"}]}'
# → { "id": "form_xyz789", "status": "sent", ... }Authentication & quotas
Bearer-token auth
Every request uses Authorization: Bearer fk_live_…. Keys come in two flavors:
fk_live_*— production keys, operate on real datafk_test_*— test keys, isolated partition, safe for CI
Quotas
| Plan | Key types | API calls / month |
|---|---|---|
| Free trial | Test only | 1,000 |
| Paid (any tier) | Live + Test | 10,000 |
Need higher limits? Contact us.
SDKs & codegen
The OpenAPI 3.1 spec at /api/v1/openapi.yaml is the source of truth. Use the pre-generated TypeScript types or point any codegen tool at the spec.
Pre-generated types
Drop this file into your project and get type-safe request/response shapes for every endpoint:
import type { paths, components } from './types/formfy-api'
type Form = components['schemas']['Form']
type CreateFormBody = paths['/api/v1/forms']['post']['requestBody']['content']['application/json']Generate your own client
Point any OpenAPI 3.1 codegen tool at our spec. A few popular options:
Ready to start?
Generate your first API key in your dashboard. Test keys are free; the only thing they can't touch is live data.