Base URL
All API requests go to:Request format
Every request must include two headers:Versioning
The current API version is v1, reflected in the base URL. FormFlows.ai uses URL-based versioning. When a breaking change is introduced, a new version (/v2) is released and the previous version is supported for a minimum of 12 months. Non-breaking additions — new optional fields, new endpoints — are added without a version bump.
Subscribe to the changelog to be notified of deprecations before they take effect.
Rate limits
Limits are applied per API key, per minute.| Plan | Requests per minute |
|---|---|
| Free | 100 |
| Pro | 1,000 |
| Enterprise | Custom |
429 response. The response includes a Retry-After header indicating how many seconds to wait before retrying.
Errors
All errors follow this structure:Error codes
| HTTP status | Code | Description |
|---|---|---|
| 400 | bad_request | The request is malformed or missing required fields. |
| 401 | unauthorized | The API key is missing or invalid. |
| 403 | forbidden | The API key does not have permission for this action. |
| 404 | not_found | The requested resource does not exist. |
| 422 | validation_error | The request is well-formed but fails validation (e.g., a field value is out of range). |
| 429 | rate_limit_exceeded | You have exceeded your rate limit. Wait before retrying. |
| 500 | internal_error | Something went wrong on our end. These are rare — check the status page if they persist. |
Pagination
List endpoints use cursor-based pagination. Passlimit and cursor as query parameters. The response includes a next_cursor value — pass it as cursor on your next request to fetch the following page. When next_cursor is null, you have reached the last page.
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Number of results per page. Maximum 100. |
cursor | string | — | Cursor from the previous response’s next_cursor. Omit for the first page. |
