I want forms from code. POST a title and fields. Get a link. GET the answers as JSON or CSV. One key.
Make a form
curl -X POST https://aiformapi.com/v1/forms \
-H "Authorization: Bearer $AIFORMAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Customer feedback",
"fields": [
{"id": "name", "label": "Your name", "type": "short_text"},
{"id": "score", "label": "How was it?", "type": "rating", "required": true},
{"id": "comment", "label": "Anything to add?", "type": "long_text"}
],
"settings": {"agent_fill": true}
}'You get 201 with id, slug, public_url, status and created_at. Share public_url. Read the answers later:
curl "https://aiformapi.com/v1/forms/FORM_ID/responses?format=csv" \
-H "Authorization: Bearer $AIFORMAPI_KEY" -o responses.csvThe Quickstart has JavaScript and Python.
Endpoints
Base URL: https://aiformapi.com/v1. Full list: openapi.json.
- Forms (key):
POST /v1/forms,GET /v1/forms,GET, PATCH, DELETE /v1/forms/{id},POST /v1/forms/{id}/closeand/reopen. - Answers (key):
GET /v1/forms/{id}/responses,GET /v1/forms/{id}/responses/{response_id}. - Webhooks and usage (key):
POST, DELETE /v1/forms/{id}/webhooks,GET /v1/usage. - Public (no key):
POST /v1/signup,GET /v1/public/forms/{slug},POST /v1/public/forms/{slug}/responses,POST /v1/public/forms/{slug}/fill-tokens. - Agents (fill token):
GET, POST /v1/fill/{token}.
More: Forms and fields, Responses, Webhooks, Agent fill, MCP, Errors. 11 field types. Up to 50 fields.
Bring your own front end
Skip our page. Read the schema, draw the fields, then post the answers to the public endpoints above. No key needed. Limits are per IP address. When Turnstile is on, send turnstile_token. Want no code? Use the embed script.
Free plan limits
| Limit | Free plan |
|---|---|
| Open forms | 3 |
| Responses a month | 100 |
| API requests per key | 30 a minute, 1,000 a day |
| Request body | 64 KB |
See rate limits and pricing. No SDKs yet. Make a client from /openapi.json.
Other forms APIs
Read on 2026-10-30. Limits differ in kind. Do not compare numbers one to one.
| AI Form API | Google Forms API | Jotform API | Tally API | |
|---|---|---|---|---|
| Credential | One API key | API key as apiKey query parameter or APIKEY header | Bearer token | |
| Rate limit | 30 a minute, 1,000 a day (free) | Per minute per project: 975 reads, 450 for responses.list, 375 writes; no daily cap | 1,000 a day on Starter (free), 10,000 on Bronze | 100 a minute |
| Webhooks | Yes, signed | Watches that expire after 7 days | Yes, through the API | Yes; the docs prefer them to polling |
They have more features: logic, uploads, payments. Need those? Use them. Want a short API, one key and an agent hand-off? Use ours. Compare Google Forms, Jotform and Tally.
Sources: Google Forms API, Google limits, Jotform, Tally.
Questions
What is a forms API?
It lets code make forms and read the answers. You POST a form, get a public link, and later GET the responses as JSON or CSV.
How do I authenticate?
Send your API key as a Bearer token in the Authorization header. Keys start with afk_. We show the full key once and store only a hash.
Does it have SDKs?
Not yet. It is plain JSON over HTTPS. Use fetch, requests or curl. An OpenAPI 3.1 file is at /openapi.json.