Skip to main content
The FormFlows.ai REST API lets you manage forms, retrieve submissions, configure workflows, and register webhooks — all programmatically. Use it to embed FormFlows.ai into your product, automate data pipelines, or build custom integrations.

Base URL

All API requests go to:
https://api.formflows.ai/v1

Request format

Every request must include two headers:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Request bodies must be valid JSON. Responses are always JSON.

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.
PlanRequests per minute
Free100
Pro1,000
EnterpriseCustom
When you exceed your limit, the API returns a 429 response. The response includes a Retry-After header indicating how many seconds to wait before retrying.
If you need higher limits for a production workload, contact [email protected] about an Enterprise plan.

Errors

All errors follow this structure:
{
  "error": {
    "code": "form_not_found",
    "message": "No form with that ID exists in your account.",
    "status": 404
  }
}

Error codes

HTTP statusCodeDescription
400bad_requestThe request is malformed or missing required fields.
401unauthorizedThe API key is missing or invalid.
403forbiddenThe API key does not have permission for this action.
404not_foundThe requested resource does not exist.
422validation_errorThe request is well-formed but fails validation (e.g., a field value is out of range).
429rate_limit_exceededYou have exceeded your rate limit. Wait before retrying.
500internal_errorSomething went wrong on our end. These are rare — check the status page if they persist.

Pagination

List endpoints use cursor-based pagination. Pass limit 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.
ParameterTypeDefaultDescription
limitinteger20Number of results per page. Maximum 100.
cursorstringCursor from the previous response’s next_cursor. Omit for the first page.
Example paginated response:
{
  "data": [...],
  "next_cursor": "cur_eyJpZCI6ImZybV8wMDEiLCJkaXIiOiJuZXh0In0",
  "has_more": true
}

Example request

curl --request GET \
  --url "https://api.formflows.ai/v1/forms?limit=10" \
  --header "Authorization: Bearer sk_live_your_api_key" \
  --header "Content-Type: application/json"