API

API and webhooks

Read and write your forms and responses from your own systems. You can also be told the moment a response arrives, so nothing has to keep checking.

Getting started

Sign in to Halict and issue a key under Settings → API Keys. It starts with qk_live_ and is shown once, when you create it.

Send it in the Authorization header. A key belongs to one workspace.

curl https://halict.com/api/forms \
  -H "Authorization: Bearer qk_live_xxxxxxxx"

The main endpoints

Every path below starts at https://halict.com/api.

GET/formsList your forms
POST/formsCreate a form as a draft
PATCH/forms/{id}Change the title, the description, or whether it accepts responses
GET/forms/{id}/responsesList the responses that arrived, with filters
GET/forms/{id}/stagesThe stages a response moves through
GET/responses/{id}One response in full
PATCH/responses/{id}Change the stage, the assignee or the tags
POST/responses/{id}/notesAdd an internal note
GET/membersThe people you can assign a response to
POST/webhooks/subscribeSubscribe to an event

Add flat=1 to the response list and every answer comes keyed by the question it belongs to. That is the same shape as the event below, so there is only one shape to learn.

Hearing about events

Instead of checking, register a URL. Halict posts to it when a response arrives (response.created) and when the stage of a response changes (response.stage_changed).

curl -X POST https://halict.com/api/webhooks/subscribe \
  -H "Authorization: Bearer qk_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "formId": 12,
    "event": "response.created",
    "targetUrl": "https://example.com/hooks/halict"
  }'

This is what arrives at the URL you registered.

{
  "event": "response.created",
  "form": { "id": 12, "title": "Trial lesson application" },
  "responseId": 345,
  "submittedAt": "2026-09-18T01:00:00.000Z",
  "stage": null,
  "respondent": { "name": "Hanako Yamada", "email": "[email protected]" },
  "answers": {
    "Name": "Hanako Yamada",
    "Preferred day": "Sunday"
  },
  "summary": "■ Name\nHanako Yamada\n\n■ Preferred day\nSunday",
  "link": "https://halict.com/forms/12/responses?open=345"
}

When you no longer need it, delete it with DELETE /webhooks/subscribe/{id}, using the id you got back.

The spec

The whole API is published as OpenAPI 3.1. halict.com/api/openapi.json

No login is needed. You can hand it straight to ChatGPT or Claude and have them write the part that connects.

Ready made integrations

You do not have to write any of this yourself. The n8n node (n8n-nodes-halict) installs from the settings screen, and the Zapier integration is built on the same endpoints.

From the notification settings of each form you can send straight to Slack, Teams, Discord, Chatwork, Google Sheets, or any URL you like.

From an AI assistant

Halict speaks MCP. Add https://halict.com/mcp to ChatGPT or Claude, sign in, and you can build forms and read what came in while you talk. The assistant only ever acts within your own permissions.

If you get stuck connecting, Contact us is the place.