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.

ScopeCapability
configuration:readRead the safe workspace overview plus form configuration, redacted integration state and bounded activity allowed by the user's current form access.
submissions:readList the combined workspace inbox and read a selected message, safe delivery timeline or generated reply within current form and history access.
submissions:writeMark messages read or as spam, and prepare or commit confirmed restoration and permanent deletion. It does not grant access to message contents.
forms:writeCreate and update permitted forms, or prepare and confirm key rotation and form deletion.
settings:writeValidate and update supported form behavior, security, reply, builder and presentation settings.
integrations:writeValidate and save supported post-connection settings, and prepare or commit confirmed integration actions.
rules:writeValidate, dry-run, save and delete Form Rules where the current role and plan allow it.
workspace:writeChange supported workspace branding and verified recipients within the caller's current owner or admin role.
team:readRead the safe team roster and bounded activity as the current workspace owner.
team:writePrepare 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

https://api.staticforms.dev

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 forms
  • multipart/form-data - Forms with file uploads

Required Parameters

ParameterTypeDescription
apiKeystringYour unique API key from the dashboard

Optional Parameters

ParameterTypeDescription
redirectToURLURL to redirect after successful submission
honeypotstringHoneypot field for spam protection (any field with "honeypot" in name, should be hidden)
replyTostringReply-to email address (or use email field value)
g-recaptcha-responsestringreCAPTCHA response token (v2 widget field name)
recaptchaTokenstringreCAPTCHA token (v2 or v3)
cf-turnstile-responsestringCloudflare Turnstile token
altchaTokenstringALTCHA challenge response (if enabled)

Example Requests

JSON Request

HTTP

Form-Encoded Request

HTTP

Response

Success Response (200 OK)

JSON

Error Response (400 Bad Request)

JSON

Error Response (401 Unauthorized)

JSON

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.

CodeDescriptionCommon Causes
200Success - Form submission received and processedValid submission. Also returned when delivery is silently blocked (e.g. bounced recipient address) - the submission is recorded but no email is sent.
400Bad Request - Missing required fields or invalid dataMissing apiKey, invalid file type, file too large
401Unauthorized - Invalid or missing API keyWrong API key, API key not provided
403Forbidden - Request blocked by a policy or account restrictionDomain not on allowed list, CAPTCHA verification failed, account suspended, feature not available on your plan, form paused
429Too Many Requests - Rate limit exceededMonthly limit exceeded, submission rate limit exceeded, ALTCHA rate limit exceeded
500Internal Server Error - Something went wrong on our endServer error, temporary service issue

Error Response Examples

400 Bad Request - Missing API Key

JSON

400 Bad Request - File Too Large

JSON

400 Bad Request - Feature Requires a Paid Plan

JSON

401 Unauthorized - Invalid API Key

JSON

403 Forbidden - Domain Not Allowed

JSON

403 Forbidden - CAPTCHA Failed

JSON

429 Too Many Requests - Monthly Limit Exceeded

JSON

429 Too Many Requests - ALTCHA Rate Limit

JSON

💡 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:

PlanEmails/MonthNotes
Free500Resets monthly, hard cap
Starter3,000Resets monthly, hard cap
Pro25,000Resets monthly, optional overage
Agency30,000Resets 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 emails
  • replyTo - Custom reply-to email address
  • email - Used as reply-to if replyTo is not provided
  • redirectTo - 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

JavaScript (Fetch API) - FormData

JavaScript

cURL - JSON

Bash

cURL - Form Data

Bash

Python (Requests) - JSON

Python

Python (Requests) - Form Data

Python