Platform forms public
Get Form Public
Get form definition + any existing draft for the token's respondent.
This is what the form renderer calls on load. Returns form config (fields, settings) + draft answers if resuming.
Path Parameters
Response Body
curl -X GET "https://loading/v1/public/forms/string"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}Save Draft
Save partial form progress (auto-save on field completion).
Workers on mobile get interrupted — this lets them resume from the same link.
Path Parameters
Empty Object
0Response Body
curl -X PATCH "https://loading/v1/public/forms/string/draft" \ -H "Content-Type: application/json" \ -d '{ "answers": {} }'null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}Submit Form
Submit a completed form. Creates an entity record if linked to a definition.
Idempotent: concurrent submits are serialised via FOR UPDATE row lock. Already-completed submissions return the existing result.
Path Parameters
Empty Object
Response Body
curl -X POST "https://loading/v1/public/forms/string/submit" \ -H "Content-Type: application/json" \ -d '{ "answers": {} }'null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}Get Upload Url
Get a presigned R2 upload URL for a file/photo form field.
Client uploads directly to R2 via PUT to the returned URL. The media_id is stored in the answers dict on draft save/submit.
Path Parameters
MIME type of the file
Form field ID requesting upload
length <= 100Original filename
length <= 255Response Body
curl -X POST "https://loading/v1/public/forms/string/upload-url" \ -H "Content-Type: application/json" \ -d '{ "content_type": "string", "field_id": "string", "filename": "string" }'null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}