One form with its fields, answers, the required fields still missing, its stored PDF id and hash once submitted, and its sign-off.
When to use it
Keep form templates (forms.saveTemplate: ordered fields of type heading, text, long_text, number, yes_no, choice, multi_choice, date or photos, each optionally required). Start a form on a job or one visit (forms.start) from a template, from an earlier form (copy_from_form_id, which also carries its answers), or with fields given on the spot; the form keeps its own copy of the fields.
What to tell the owner
Tell them what you found in plain words. Don't read back raw fields.
| Field | Type | Required |
|---|
form_id | string (uuid) | yes |
Example
GET https://doingwork.work/v1/forms/get?form_id=00000000-0000-4000-8000-000000000000
Output
| Field | Type | Always there |
|---|
form_id | string (uuid) | yes |
shop_id | string (uuid) | yes |
job_id | string (uuid) | yes |
visit_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
form_template_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
copied_from_form_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
name | string | yes |
status | string | yes |
signoff_required | boolean | yes |
missing | array | yes |
created_by | string (uuid) | yes |
created_at | string (date-time) | yes |
updated_at | string (date-time) | yes |
submitted_by | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
submitted_at | ['string', 'null', ' ', '(', 'd', 'a', 't', 'e', '-', 't', 'i', 'm', 'e', ')'] | yes |
document_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
document_sha256 | ['string', 'null'] | yes |
cancelled_at | ['string', 'null', ' ', '(', 'd', 'a', 't', 'e', '-', 't', 'i', 'm', 'e', ')'] | yes |
signature_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
signoff_request_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
fields | array | yes |
fields[].key | string | yes |
fields[].label | string | yes |
fields[].type | string | yes |
fields[].required | boolean | yes |
fields[].help | string | no |
fields[].options | array | no |
answers | object | yes |
{
"form_id": "00000000-0000-4000-8000-000000000000",
"shop_id": "00000000-0000-4000-8000-000000000000",
"job_id": "00000000-0000-4000-8000-000000000000",
"visit_id": "00000000-0000-4000-8000-000000000000",
"form_template_id": "00000000-0000-4000-8000-000000000000",
"copied_from_form_id": "00000000-0000-4000-8000-000000000000",
"name": "Ruiz Plumbing",
"status": "...",
"signoff_required": true,
"missing": [
"..."
],
"created_by": "00000000-0000-4000-8000-000000000000",
"created_at": "...",
"updated_at": "...",
"submitted_by": "00000000-0000-4000-8000-000000000000",
"submitted_at": "...",
"document_id": "00000000-0000-4000-8000-000000000000",
"document_sha256": "...",
"cancelled_at": "...",
"signature_id": "00000000-0000-4000-8000-000000000000",
"signoff_request_id": "00000000-0000-4000-8000-000000000000",
"fields": [
{
"key": "...",
"label": "...",
"type": "...",
"required": true
}
],
"answers": {}
}
Errors
| Code | Status | What to do |
|---|
invalid_input, invalid_token, rate_limited | | Can happen on any call. See errors. |