All docs

REST API

API reference

Every endpoint, with a request you can copy and a sample response. Paths are relative to https://api.enform.co/api/v1, and every request needs your API key.

Raw OpenAPISwagger view

Check a key

GET/me

Returns the workspace the key belongs to. Use it to test a key.

curl "https://api.enform.co/api/v1/me" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "account",
  "data": {
    "workspace": {
      "id": "Hq7cT2vLm9xR4bWn",
      "name": "Acme"
    }
  }
}

List forms

GET/forms

Lists the workspace's forms, newest first. Forms without a title are left out.

Query

limitinteger
1 to 100. Defaults to 25.
cursorstring
The nextCursor from the previous page.
curl "https://api.enform.co/api/v1/forms?limit=25" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "list",
  "data": [
    {
      "id": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
      "title": "Customer feedback",
      "published": true,
      "createdAt": "2026-10-28T14:02:11.000Z",
      "updatedAt": "2026-11-02T08:40:53.000Z"
    }
  ],
  "hasMore": true,
  "nextCursor": "eyJ0IjoiMjAyNi0xMC0yOFQxNDowMjoxMS4wMDBaIiwiaWQiOiJjM2ExIn0"
}

Get a form

GET/forms/{formId}

Returns one form and its questions in order. Use each question's key to read answers.

Path

formIdstringrequired
The form's ID.
curl "https://api.enform.co/api/v1/forms/c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "form",
  "data": {
    "id": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
    "title": "Customer feedback",
    "published": true,
    "createdAt": "2026-10-28T14:02:11.000Z",
    "updatedAt": "2026-11-02T08:40:53.000Z",
    "fields": [
      {
        "id": "bba1826f-56fc-4e44-a0fa-bac06310da49",
        "key": "bba1826f-56fc-4e44-a0fa-bac06310da49",
        "label": "Your name",
        "type": "short_text"
      },
      {
        "id": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
        "key": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
        "label": "How likely are you to recommend us?",
        "type": "opinion_scale"
      },
      {
        "id": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
        "key": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
        "label": "What should we build next?",
        "type": "checkbox"
      },
      {
        "id": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
        "key": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
        "label": "email",
        "type": "hidden"
      }
    ]
  }
}

List responses

GET/forms/{formId}/submissions

Lists a form's completed responses, newest first by the time they were submitted.

Path

formIdstringrequired
The form's ID.

Query

limitinteger
1 to 100. Defaults to 25.
cursorstring
The nextCursor from the previous page.
sinceISO 8601
Only responses completed after this time.
curl "https://api.enform.co/api/v1/forms/c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10/submissions?since=2026-11-01T00:00:00Z" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "list",
  "data": [
    {
      "id": "5b0e4c1a-7d2f-4f0e-9a51-2f6c8d0b9e13",
      "formId": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
      "createdAt": "2026-11-03T09:14:02.511Z",
      "completedAt": "2026-11-03T09:16:40.020Z",
      "answers": {
        "bba1826f-56fc-4e44-a0fa-bac06310da49": "Ada Lovelace",
        "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b": "9",
        "a2d90fd0-3942-45c8-ade3-773ed5f9733e": "Weekly reports, Slack alerts",
        "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01": "ada@example.com"
      },
      "hidden": {
        "email": "ada@example.com"
      },
      "fields": [
        {
          "id": "bba1826f-56fc-4e44-a0fa-bac06310da49",
          "key": "bba1826f-56fc-4e44-a0fa-bac06310da49",
          "label": "Your name",
          "type": "short_text",
          "value": "Ada Lovelace",
          "text": "Ada Lovelace"
        },
        {
          "id": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
          "key": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
          "label": "How likely are you to recommend us?",
          "type": "opinion_scale",
          "value": 9,
          "text": "9"
        },
        {
          "id": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
          "key": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
          "label": "What should we build next?",
          "type": "checkbox",
          "value": [
            "Weekly reports",
            "Slack alerts"
          ],
          "text": "Weekly reports, Slack alerts"
        },
        {
          "id": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
          "key": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
          "label": "email",
          "type": "hidden",
          "value": "ada@example.com",
          "text": "ada@example.com"
        }
      ]
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Get a response

GET/submissions/{submissionId}

Returns one completed response. See how answers read.

Path

submissionIdstringrequired
The response's ID.
curl "https://api.enform.co/api/v1/submissions/5b0e4c1a-7d2f-4f0e-9a51-2f6c8d0b9e13" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "submission",
  "data": {
    "id": "5b0e4c1a-7d2f-4f0e-9a51-2f6c8d0b9e13",
    "formId": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
    "createdAt": "2026-11-03T09:14:02.511Z",
    "completedAt": "2026-11-03T09:16:40.020Z",
    "answers": {
      "bba1826f-56fc-4e44-a0fa-bac06310da49": "Ada Lovelace",
      "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b": "9",
      "a2d90fd0-3942-45c8-ade3-773ed5f9733e": "Weekly reports, Slack alerts",
      "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01": "ada@example.com"
    },
    "hidden": {
      "email": "ada@example.com"
    },
    "fields": [
      {
        "id": "bba1826f-56fc-4e44-a0fa-bac06310da49",
        "key": "bba1826f-56fc-4e44-a0fa-bac06310da49",
        "label": "Your name",
        "type": "short_text",
        "value": "Ada Lovelace",
        "text": "Ada Lovelace"
      },
      {
        "id": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
        "key": "4dfa4a9e-85e3-4187-b38e-ae1d4675f99b",
        "label": "How likely are you to recommend us?",
        "type": "opinion_scale",
        "value": 9,
        "text": "9"
      },
      {
        "id": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
        "key": "a2d90fd0-3942-45c8-ade3-773ed5f9733e",
        "label": "What should we build next?",
        "type": "checkbox",
        "value": [
          "Weekly reports",
          "Slack alerts"
        ],
        "text": "Weekly reports, Slack alerts"
      },
      {
        "id": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
        "key": "e7c2a9d4-0b3f-4c1e-9a8d-5f6b7c8d9e01",
        "label": "email",
        "type": "hidden",
        "value": "ada@example.com",
        "text": "ada@example.com"
      }
    ]
  }
}

List webhooks

GET/webhooks

Lists the workspace's webhook subscriptions, newest first.

Query

formIdstring
Only webhooks for this form.
curl "https://api.enform.co/api/v1/webhooks?formId=c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "list",
  "data": [
    {
      "id": "9d4e2b7a-3c1f-4a6e-8b0d-1f2e3a4b5c6d",
      "formId": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
      "url": "https://example.com/enform/webhook",
      "event": "submission.created",
      "createdAt": "2026-11-03T10:00:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}

Create a webhook

POST/webhooks

Sends every new completed response on one form to your URL. The secret comes back only here, so save it. A form can have up to 25 webhooks. See Webhooks.

JSON body

formIdstringrequired
The form's ID.
urlstringrequired
A public https URL that receives each delivery.
eventstring
Always submission.created, the default.
curl -X POST "https://api.enform.co/api/v1/webhooks" \
  -H "Authorization: Bearer $ENFORM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"formId":"c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10","url":"https://example.com/enform/webhook","event":"submission.created"}'
Response 201
{
  "type": "webhook",
  "data": {
    "id": "9d4e2b7a-3c1f-4a6e-8b0d-1f2e3a4b5c6d",
    "formId": "c3a1f7e2-1b4d-4e8a-9c2f-6d5e4b3a2f10",
    "url": "https://example.com/enform/webhook",
    "event": "submission.created",
    "createdAt": "2026-11-03T10:00:00.000Z",
    "secret": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
}

Delete a webhook

DELETE/webhooks/{webhookId}

Stops deliveries to that URL right away.

Path

webhookIdstringrequired
The webhook's ID.
curl -X DELETE "https://api.enform.co/api/v1/webhooks/9d4e2b7a-3c1f-4a6e-8b0d-1f2e3a4b5c6d" \
  -H "Authorization: Bearer $ENFORM_API_KEY"
Response 200
{
  "type": "webhook",
  "data": {
    "id": "9d4e2b7a-3c1f-4a6e-8b0d-1f2e3a4b5c6d",
    "deleted": true
  }
}

What do you want to ask?

Start free

Free, no card needed.