日本語

Developer Documentation

The FormEdge External API (ext API) lets you read forms, submissions, and usage data, and create pages and edit page drafts programmatically.

Requirements

  • API and MCP access require the Starter plan or higher (the Free plan cannot issue API keys or connect external apps).
  • Only the workspace owner can issue and revoke API keys. External app connections (OAuth / MCP) are approved and revoked by each member for their own connections (the owner can view and revoke every member's connections).

Issuing an API key

  1. Sign in to the FormEdge admin console and open "Settings" > "API Keys".
  2. Enter a name (what the key is for) and issue the key.
  3. The issued key (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.

Authentication

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.

Scopes

Each API key carries a set of scopes, and each endpoint requires a specific scope.

  • read:forms — list and read forms
  • read:submissions — list and read submissions, export CSV
  • read:usage — storage usage
  • read:attachments — list attachments
  • read:pages — list and read pages, templates, and authoring rules
  • write: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 key
  • read: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 key
  • write: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 key
  • read: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 key
  • publish: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.

Pagination and dates

  • List endpoints take page (1-based) and per_page; the pagination object in the response (page / per_page / total) gives the total count.
  • Date ranges (from / to) are specified as yyyy-MM-dd in Japan Standard Time (UTC+9), with both end dates inclusive.
  • Timestamps in responses are in ISO-8601 format.

Error format

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.

  • 401 — API key missing or invalid
  • 403 — insufficient scope / API and MCP access not available on the current plan (e.g. after downgrading to Free; upgrading restores access with the existing keys) / workspace disabled (suspended or cancelled) / OAuth (MCP) connection not yet approved. For OAuth connections, the 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 one
  • 404 — resource not found
  • 422 — invalid input (e.g. date format)
  • 429 — rate limit or quota exceeded (the quota is exceeded when quota_exceeded is true)

Each API key has a per-minute request limit. If you receive a 429 with quota_exceeded=false, wait and retry.

MCP server (AI agent integration)

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/mcp

For other MCP clients (such as Cursor), register the URL above in the client's MCP settings.

  • On the first call after authentication you will be directed to an approval page in the FormEdge admin console. Choose the target workspace and the scopes to grant, then approve (the approved scopes define exactly what the AI can do; publishing requires the publish scopes)
  • You can review and revoke approvals at any time under "Settings > External App Connections" in the admin console (revocation takes effect immediately)
  • The intended workflow for pages is: the AI creates a draft, a human reviews it via the preview URL, then it is published

API reference

See the API reference for the full request and response specification of every endpoint.

View the API reference