Forms
Forms are publishable to external URLs for customer intake — bug reports, feature requests, lead capture. Submissions can create tasks or datatable rows.
The API exposes read-only access to forms and their submissions. Form creation, editing, and publishing happens in the UI.
GET /forms
List all forms in the workspace.
curl -H "Authorization: Bearer kdt_..." \
https://api.konduit.work/v1/forms
Response:
{
"forms": [
{
"id": "...",
"name": "Bug Report",
"slug": "bug-report",
"target_type": "task",
"target_id": "list_id_xxx",
"is_published": 1,
"submission_count": 47,
"created_at": 1735689600,
"updated_at": 1735689600
}
]
}
| Field | Meaning |
|---|---|
slug |
The URL slug at konduit.work/f/<slug> |
target_type |
task or datatable_row — what each submission creates |
target_id |
The list ID (for task) or table ID (for datatable_row) |
is_published |
1 if the form is publicly reachable, 0 if draft |
submission_count |
Total submissions over the form's lifetime |
GET /forms/{formId}
Returns the full form definition including field_config, rules, and settings. Use this to render the form in your own integration or pre-validate submissions before sending users to the public URL.
curl -H "Authorization: Bearer kdt_..." \
https://api.konduit.work/v1/forms/<formId>
Response:
{
"id": "...",
"name": "Bug Report",
"slug": "bug-report",
"field_config": [
{ "id": "field_1", "label": "Title", "type": "text", "required": true },
{ "id": "field_2", "label": "Severity", "type": "dropdown",
"options": ["low", "medium", "high"] }
],
"rules": { ... },
"settings": { ... }
}
GET /forms/{formId}/submissions
List submissions for a form.
Query parameters:
limit(default50, max200),offsetsince— unix timestamp; only submissions created after this time
curl -H "Authorization: Bearer kdt_..." \
"https://api.konduit.work/v1/forms/<formId>/submissions?limit=50"
Response:
{
"submissions": [
{
"id": "...",
"data": { "name": "Alice", "severity": "high" },
"created_entity_type": "task",
"created_entity_id": "task_id_xxx",
"created_at": 1735689600
}
],
"limit": 50, "offset": 0
}
created_entity_type is task or datatable_row and created_entity_id is the resulting record. Use these to follow the submission into the rest of the API — fetch the resulting task with GET /tasks/{taskId} or the resulting row with GET /datatables/{tableId}/rows/{rowId}.
Polling pattern
To sync form submissions into your system:
# First call: get everything
GET /forms/{formId}/submissions?limit=200
# Subsequent calls: incremental
GET /forms/{formId}/submissions?since=<last_seen_timestamp>&limit=200
For real-time delivery, configure an automation rule with a Webhook action — see Webhooks.
Next
- Webhooks → — push delivery instead of polling
- Tasks →
- DataTables →