The FormEdge External API (ext API) lets you read forms, submissions, and usage data, and create pages and edit page drafts programmatically.
fe_live_...) is shown only once, at creation time. Store it somewhere safe.Keys belong to a workspace (tenant). If a key is leaked, revoke it immediately and issue a new one.
Send the API key as a Bearer token in the Authorization header on every request.
curl "https://admin-api.formedge.app/api/ext/v1/forms" \
-H "Authorization: Bearer fe_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"The base URL is https://admin-api.formedge.app.
Each API key carries a set of scopes, and each endpoint requires a specific scope.
read:forms — list and read formsread:submissions — list and read submissions, export CSVread:usage — storage usageread:attachments — list attachmentsread:pages — list and read pages, templates, and authoring ruleswrite:pages — create pages and edit drafts (write access; not granted by default, must be explicitly selected when issuing the key)write:forms — create forms, update basic settings, and replace field definitions in bulk (write access; not granted by default, must be explicitly selected when issuing the key)read:notifications — read notification settings (contains sensitive data such as recipients and webhook headers, so unlike other read scopes it is not granted by default and must be explicitly selected when issuing the key)write:notifications — replace notification settings in full (write access; not granted by default, must be explicitly selected when issuing the key)read:assets — list assets (images) (a read scope, but not granted by default; must be explicitly selected when issuing the key)write:assets — upload assets (issue an upload URL and confirm the upload). Consumes storage, so it is not granted by default and must be explicitly selected when issuing the keyread:custom-domains — list custom domains (to obtain the IDs used when configuring the domain a page or form is published on). Exposes infrastructure settings, so it is not granted by default and must be explicitly selected when issuing the keywrite:custom-domains — register, re-verify, and delete custom domains. Changes infrastructure settings, so it is not granted by default and must be explicitly selected when issuing the keyread:tenant-settings — read tenant settings (workspace-wide settings such as branding) (not granted by default; must be explicitly selected when issuing the key)write:tenant-settings — change tenant settings. Changes propagate to every page and form at once, so it is not granted by default and must be explicitly selected when issuing the keypublish:pages — publish and unpublish pages (selected separately from write:pages, so you can issue one key that can only create drafts and another that can also publish)publish:forms — publish and unpublish forms (must be explicitly selected when issuing the key, like publish:pages)delete:pages — delete pages (irreversible, so it is selected separately from write:pages. Deleting a page also takes it offline)delete:forms — delete forms (explicitly selected, like delete:pages. Submission data also becomes inaccessible)When issuing a key you can select only the scopes you need. The five defaults are read:forms / read:submissions / read:usage / read:attachments / read:pages; everything else (the read:notifications, read:assets, read:custom-domains, and read:tenant-settings read scopes, plus all write, publish, and delete scopes) must be explicitly selected when issuing the key. Write and publish scopes automatically include the corresponding read scope (delete scopes do not, because they respond with 204 and return no body). Scopes cannot be changed after issuance; to change them, revoke the key and issue a new one.
page (1-based) and per_page; the pagination object in the response (page / per_page / total) gives the total count.from / to) are specified as yyyy-MM-dd in Japan Standard Time (UTC+9), with both end dates inclusive.Errors are returned as RFC 9457 Problem Details (application/problem+json).
{
"type": "https://valueforms.jp/errors/forbidden",
"title": "Forbidden",
"status": 403,
"detail": "This API key does not have the required scope (read:forms). Open \"API keys\" in the FormEdge dashboard and issue a new key with the required scopes.",
"instance": "/api/ext/v1/forms"
}The detail message is human-readable text for the caller (including AI agents). Use status and type for programmatic handling.
connect_url field in the response points to where to recover (if unapproved, approve the connection on the approval page; if the scope is insufficient, edit the connection in the connections list and add the scope. Edits take effect immediately, with no re-authentication from the connecting app). For API keys with insufficient scope, revoke the key and issue a new onequota_exceeded is true)Each API key has a per-minute request limit. If you receive a 429 with quota_exceeded=false, wait and retry.
Connect to the official remote MCP (Model Context Protocol) server at https://mcp.formedge.app/mcp to create and publish forms and landing pages in natural language from AI agents such as Claude, Claude Code, and Cursor (under the hood it is a thin wrapper around this API). Nothing to install: when you connect, sign in with your FormEdge account to authorize (OAuth).
In claude.ai (Settings > Connectors) and ChatGPT (Settings > Apps), just pick FormEdge from the list and click Connect — FormEdge is listed in the official directories, so there is no URL to enter.
Example registration in Claude Code:
claude mcp add --transport http formedge https://mcp.formedge.app/mcpFor other MCP clients (such as Cursor), register the URL above in the client's MCP settings.
See the API reference for the full request and response specification of every endpoint.
View the API reference