API Reference
Complete technical reference for Static Forms API
Agent access and MCP
This page primarily covers the public form submission API. ChatGPT, Claude and compatible MCP agents connect to /mcp through Static Forms OAuth. Public submission keys do not authorize reads or management operations. Agent access requires paid Starter, Pro or Agency and excludes Free and trial workspaces.
OAuth authorizes one workspace, not one form. Consent never asks the user to select forms: the connection follows every form that user can currently access in the chosen workspace, including forms created after consent. Account-scoped members remain limited to their assigned forms. When the user asks for recent submissions across the workspace, the client calls staticforms_submissions_list once without formIds; it supplies formIds only for a user-named subset.
Staging preview: agent integration, workspace and team management are available for staging verification and are not available in production yet. Workspace and team results use explicit safe representations and never expose payment identifiers, provider credentials, invitation tokens, verification codes or raw database rows.
| Scope | Capability |
|---|---|
| configuration:read | Read the safe workspace overview plus form configuration, redacted integration state and bounded activity allowed by the user's current form access. |
| submissions:read | List the combined workspace inbox and read a selected message, safe delivery timeline or generated reply within current form and history access. |
| submissions:write | Mark messages read or as spam, and prepare or commit confirmed restoration and permanent deletion. It does not grant access to message contents. |
| forms:write | Create and update permitted forms, or prepare and confirm key rotation and form deletion. |
| settings:write | Validate and update supported form behavior, security, reply, builder and presentation settings. |
| integrations:write | Validate and save supported post-connection settings, and prepare or commit confirmed integration actions. |
| rules:write | Validate, dry-run, save and delete Form Rules where the current role and plan allow it. |
| workspace:write | Change supported workspace branding and verified recipients within the caller's current owner or admin role. |
| team:read | Read the safe team roster and bounded activity as the current workspace owner. |
| team:write | Prepare and commit team invitations, resends, access changes, cancellations and removals with current revisions and confirmations. |
Integration MCP tools are staticforms_form_integrations_get, staticforms_form_integration_options_list, staticforms_form_integration_validate, staticforms_form_integration_update, staticforms_form_integration_action_prepare, staticforms_form_integration_action_commit and staticforms_form_integration_activity. Mutations require the current integration revision and a UUID idempotency key. Actions also require a short-lived confirmation token issued for the exact reviewed effect. An identical lost response can use the same retry key; a changed request needs a new key.
Workspace MCP tools include staticforms_workspaces_list, branding validation and update, verified-recipient read, validation, prepare and commit, and workspace activity. Team tools separately list the roster and activity, prepare and commit access grants, and prepare and commit access reductions. Tool discovery follows the granted OAuth scopes and the user's current role and plan, so a read-only connection cannot discover write tools.
Option listing and validation may contact a connected provider. Tests and resyncs create external effects; a Mailchimp test creates or updates a real subscribed contact. Treat an unknown test outcome as potentially delivered and do not retry it automatically. Connecting OAuth or entering a token, API key, bot token or webhook URL always uses the exact signed-in Delivery link returned by Static Forms. See the agent setup and management guide for the plan matrix and complete workflow.
Workspace and team mutations use opaque current revisions and UUID idempotency keys. Email-producing recipient and invitation actions also use a short-lived confirmation for the exact target and effect. An unknown email outcome may already have been delivered and must not be retried automatically. Billing, credits, DNS, account identity, recipient verification completion and invitation acceptance remain signed-in browser steps.
Safe results return exact signed-in links for steps that must stay in Static Forms, including payments, account identity, data residency, CSV export, attachment download, credentials, CAPTCHA or provider secrets, knowledge files, logo uploads, DNS proof, verification and Agent access. Opening a link grants no authority: Static Forms signs the user in, selects the intended workspace where applicable and checks current access again.
The native Zapier polling integration uses a separate account-wide Zapier token managed under Workspace → Zapier. That token covers the owner's forms and is never an MCP credential. Make and n8n remain per-form Delivery integrations. Static Forms never returns the Zapier token through workspace reads or agent tools.
Base URL
POST /submit
Submit form data to your Static Forms account.
Request
Content-Type
application/json- JSON payloads (for API requests)application/x-www-form-urlencoded- Standard HTML formsmultipart/form-data- Forms with file uploads
Required Parameters
| Parameter | Type | Description |
|---|---|---|
| apiKey | string | Your unique API key from the dashboard |
Optional Parameters
| Parameter | Type | Description |
|---|---|---|
| redirectTo | URL | URL to redirect after successful submission |
| honeypot | string | Honeypot field for spam protection (any field with "honeypot" in name, should be hidden) |
| replyTo | string | Reply-to email address (or use email field value) |
| g-recaptcha-response | string | reCAPTCHA response token (v2 widget field name) |
| recaptchaToken | string | reCAPTCHA token (v2 or v3) |
| cf-turnstile-response | string | Cloudflare Turnstile token |
| altchaToken | string | ALTCHA challenge response (if enabled) |
Example Requests
JSON Request
Form-Encoded Request
Response
Success Response (200 OK)
Error Response (400 Bad Request)
Error Response (401 Unauthorized)
Status Codes & Error Responses
The API uses standard HTTP status codes to indicate success or failure. Error responses include a JSON body with error details.
| Code | Description | Common Causes |
|---|---|---|
| 200 | Success - Form submission received and processed | Valid submission. Also returned when delivery is silently blocked (e.g. bounced recipient address) - the submission is recorded but no email is sent. |
| 400 | Bad Request - Missing required fields or invalid data | Missing apiKey, invalid file type, file too large |
| 401 | Unauthorized - Invalid or missing API key | Wrong API key, API key not provided |
| 403 | Forbidden - Request blocked by a policy or account restriction | Domain not on allowed list, CAPTCHA verification failed, account suspended, feature not available on your plan, form paused |
| 429 | Too Many Requests - Rate limit exceeded | Monthly limit exceeded, submission rate limit exceeded, ALTCHA rate limit exceeded |
| 500 | Internal Server Error - Something went wrong on our end | Server error, temporary service issue |
Error Response Examples
400 Bad Request - Missing API Key
400 Bad Request - File Too Large
400 Bad Request - Feature Requires a Paid Plan
401 Unauthorized - Invalid API Key
403 Forbidden - Domain Not Allowed
403 Forbidden - CAPTCHA Failed
429 Too Many Requests - Monthly Limit Exceeded
429 Too Many Requests - ALTCHA Rate Limit
💡 Need Help? Check out our troubleshooting guide for solutions to common errors.
Rate Limits
Static Forms uses monthly submission limits to prevent abuse while ensuring reliable service:
Monthly Email Limits
Form submissions are limited by monthly submission quotas:
| Plan | Emails/Month | Notes |
|---|---|---|
| Free | 500 | Resets monthly, hard cap |
| Starter | 3,000 | Resets monthly, hard cap |
| Pro | 25,000 | Resets monthly, optional overage |
| Agency | 30,000 | Resets monthly, optional overage |
💡 Note: Monthly limits apply to every accepted form submission, whether or not it results in an email. If you exceed your monthly limit, you'll receive a 429 status code. Free and Starter hard-stop at the quota; Pro and Agency can opt into overage at $1.00 per 1,000 extra submissions.
Per-Minute Rate Limits
All endpoints have per-minute rate limiting:
- ALTCHA Challenge Endpoint: 10 requests per minute per API key
- Form Submission Endpoint (Free plan and trials): 10 submissions per minute, 30 submissions per hour
- Form Submission Endpoint (Starter plan): 15 submissions per minute, 60 submissions per hour
- Form Submission Endpoint (Pro/Agency plans): 20 submissions per minute, 100 submissions per hour
- Sustained violations (>15 minutes): account temporarily blocked for 1 hour
⚠️ Note: Rate limits are applied per API key. If you exceed your limit, you'll receive a 429 status code with an error message.
CORS Support
The Static Forms API supports Cross-Origin Resource Sharing (CORS), allowing you to make requests from any domain.
💡 Info: All origins are allowed for form submissions. No additional configuration is required.
Special Field Names
Certain field names have special handling:
honeypot- Any field containing "honeypot" in the name is used for spam detection and removed from emailsreplyTo- Custom reply-to email addressemail- Used as reply-to if replyTo is not providedredirectTo- URL to redirect after successful submission
All other field names are treated as regular form data and will be included in your notification email.
Code Examples
JavaScript (Fetch API) - JSON
JavaScript (Fetch API) - FormData
cURL - JSON
cURL - Form Data
Python (Requests) - JSON
Python (Requests) - Form Data







