API Reference - FormFlow Docs

Deploy complex forms instantly

Open API Sandbox Read Integration Guides

Endpoints

Manage form structures, retrieve submission payloads, and configure webhook routing through our RESTful interface. The base URL is https://api.formflow.io/v2.

POST

/forms

Create a new form schema. Accepts JSON payloads defining fields, validation rules, and branching logic. Returns a unique form_id and public embed URL.

GET

/submissions

Fetch completed form responses. Supports pagination (limit, offset), date filtering (created_after), and field-specific queries. Max response size: 500 entries per call.

POST

/webhooks

Register event listeners for submission.created, submission.updated, and form.published. FormFlow retries failed deliveries up to 5 times with exponential backoff.

Authentication

Secure your requests using Bearer tokens issued from your FormFlow dashboard. All API calls require HTTPS and must include your organization ID as a query parameter.

Required Header

Authorization

Include Authorization: Bearer <YOUR_API_KEY> in every request. Keys are scoped to either read or admin privileges. Rotate keys monthly via Settings > API Access.

Rate Limits

Request Throttling

Standard plans allow 1,200 requests per hour. Enterprise accounts scale to 50,000 requests per hour. Exceeding limits returns a 429 Too Many Requests response with a Retry-After header.

Examples

Copy-paste ready snippets to validate your integration. All examples target the us-east-1 region endpoint.

cURL

Retrieve Form Submissions

curl -X GET "https://api.formflow.io/v2/submissions?form_id=ff_8a9b2c&limit=10" \
  -H "Authorization: Bearer sk_live_9x7z4m2p1q" \
  -H "Content-Type: application/json"
Python

Create Form via Requests

import requests

url = "https://api.formflow.io/v2/forms"
headers = {
    "Authorization": "Bearer sk_live_9x7z4m2p1q",
    "Content-Type": "application/json"
}
payload = {
    "title": "Q3 Vendor Compliance Audit",
    "fields": [
        {"type": "text", "key": "company_name", "required": True},
        {"type": "select", "key": "compliance_status", "options": ["Pending", "Approved", "Rejected"]}
    ],
    "redirect_url": "https://vendor-portal.example.io/thank-you"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())