Forms on a job (job-level and per visit), or on one visit, newest first, without fields and answers. Filter by status.
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 |
|---|
job_id | string (uuid) | no |
visit_id | string (uuid) | no |
status | string (one of draft, submitted, cancelled) | no |
Example
GET https://doingwork.work/v1/forms?job_id=00000000-0000-4000-8000-000000000000&visit_id=00000000-0000-4000-8000-000000000000&status=draft
Output
| Field | Type | Always there |
|---|
items | array | yes |
items[].form_id | string (uuid) | yes |
items[].shop_id | string (uuid) | yes |
items[].job_id | string (uuid) | yes |
items[].visit_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].form_template_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].copied_from_form_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].name | string | yes |
items[].status | string | yes |
items[].signoff_required | boolean | yes |
items[].missing | array | yes |
items[].created_by | string (uuid) | yes |
items[].created_at | string (date-time) | yes |
items[].updated_at | string (date-time) | yes |
items[].submitted_by | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].submitted_at | ['string', 'null', ' ', '(', 'd', 'a', 't', 'e', '-', 't', 'i', 'm', 'e', ')'] | yes |
items[].document_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].document_sha256 | ['string', 'null'] | yes |
items[].cancelled_at | ['string', 'null', ' ', '(', 'd', 'a', 't', 'e', '-', 't', 'i', 'm', 'e', ')'] | yes |
items[].signature_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
items[].signoff_request_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
{
"items": [
{
"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"
}
]
}
Errors
| Code | Status | What to do |
|---|
invalid_input, invalid_token, rate_limited | | Can happen on any call. See errors. |