Management API

Read your forms and submissions programmatically. Authenticate with an API key from your account settings.

Authentication

Create a key under Account → API keys. The key is shown once — store it like a password. Send it on every request:

curl https://api.formcrest.com/v1/api/me \
  -H "Authorization: Bearer fc_live_…"

Keys can be revoked at any time from the same page. Requests are rate-limited to 120 per minute per key. Endpoints are read-only, except the Zapier-style REST-hook subscriptions below.

Endpoints

GET /v1/api/me

The account that owns the key.

{ "user": { "id": "…", "email": "…", "displayName": "…", "planId": "pro" } }

GET /v1/api/forms

All your forms, newest first.

{ "forms": [ { "id": "…", "name": "Contact", "isActive": 1, "createdAt": "…" } ] }

GET /v1/api/forms/:id/submissions

Submissions for a form, newest first. limit is 1–100 (default 25). Page with the returned nextCursor:

GET /v1/api/forms/FORM_ID/submissions?limit=50
GET /v1/api/forms/FORM_ID/submissions?limit=50&cursor=NEXT_CURSOR

{
  "submissions": [
    {
      "id": "…",
      "createdAt": "2026-06-10T12:00:00.000Z",
      "status": "delivered",
      "isSpam": 0,
      "country": "GR",
      "payload": { "email": "jane@acme.com", "message": "…" }
    }
  ],
  "nextCursor": "2026-06-10T11:58:01.000Z"
}

nextCursor is null on the last page.

GET /v1/api/submissions/:id

A single submission, including its payload.

REST hooks (Pro+)

Subscribe a URL to a form and we POST every new submission to it — this is the mechanism behind our Zapier integration, and you can use it directly. Delivery is best-effort with no retries; answer 410 Gone and the subscription is deleted.

POST /v1/api/hooks

curl -X POST https://api.formcrest.com/v1/api/hooks \
  -H "Authorization: Bearer fc_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "formId": "FORM_ID", "targetUrl": "https://hooks.zapier.com/…" }'

{ "hook": { "id": "…", "formId": "FORM_ID", "targetUrl": "…", "createdAt": "…" } }

The target must be a public HTTPS URL. Each new submission is delivered as a flat JSON object:

{
  "id": "…",
  "form_id": "…",
  "created_at": "2026-06-11T12:00:00.000Z",
  "ip": "…",
  "country": "GR",
  "user_agent": "…",
  "referer": "…",
  "fields": { "email": "jane@acme.com", "message": "…" }
}

GET /v1/api/hooks

All your subscriptions, newest first.

DELETE /v1/api/hooks/:id

Remove a subscription.

Errors

Errors use the same shape as the rest of the API — see Error codes. 401 means the key is missing, malformed, or revoked; 404 means the resource doesn't exist or belongs to another account.