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 | /forms | List your forms |
| POST | /forms | Create a form as a draft |
| PATCH | /forms/{id} | Change the title, the description, or whether it accepts responses |
| GET | /forms/{id}/responses | List the responses that arrived, with filters |
| GET | /forms/{id}/stages | The 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}/notes | Add an internal note |
| GET | /members | The people you can assign a response to |
| POST | /webhooks/subscribe | Subscribe 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.