HTTP API
Schema, Submission, Upload, and Resolve
Read and submit forms, stage files, and resolve effective schema.
Schema
GET /forms/{key}GET /forms/{key}/versionsGET /forms/{key}/versions/{version}
Submission
POST /forms/{key}/submitPOST /forms/{key}/versions/{version}/submit
Payload input keys are accepted by canonical field name and by field_key (default mode: both).
Examples:
{
"payload": {
"name": "Evan",
"email": "evan@example.com"
}
}
{
"payload": {
"fk_abc123name": "Evan",
"fk_def456mail": "evan@example.com"
}
}
If both name and field_key are sent for the same field, name wins.
Upload (staged)
POST /forms/{key}/uploads/stagePOST /forms/{key}/versions/{version}/uploads/stage
Resolve
POST /forms/{key}/resolvePOST /forms/{key}/versions/{version}/resolvePOST /forms/{key}/validate-fieldPOST /forms/{key}/versions/{version}/validate-field
validate-field checks a single field value in isolation. Unlike submit, it does not validate or persist a full form payload.
Request body:
{
"field": "email",
"value": "john@example.com"
}
Success response:
{
"valid": true,
"errors": [],
"validated": {
"email": "john@example.com"
}
}
Failure response:
{
"valid": false,
"errors": [
"The email field is required."
],
"validated": []
}
If field is missing from the request body, validation fails with a 422 response from the request validator.
Drafts
POST /forms/{key}/draftsGET /forms/{key}/drafts/currentDELETE /forms/{key}/drafts/current