Proof of delivery
What a driver records at a stop — a photo, a signature, a checkbox, a note — is stored as an
order action on the order. You can read them through the Orders API, or receive each one as
an order_action.created webhook.
| What | Status |
|---|---|
| Photos, signatures and answers recorded in the driver app | Live |
| Reading them through the API | Live |
order_action.created webhook | Live, with webhooks switched on for your project |
What the driver is asked for
What the driver must record is set up once per project as order action templates: a name,
the kind of stop it applies to (pickup, delivery, …), whether it is mandatory, and what to
ask for (prompt_request.input_type):
input_type | The driver records | prompt_response.data is |
|---|---|---|
pictures | One or more photos | An array of file URLs |
sign | A signature | An array of file URLs |
boolean | Yes or no | true / false |
text | A note | A string |
number | A number | A number |
kv | A small form, which may include photo or signature fields | An object; photo and signature fields hold a file URL |
Ask us, or a dispatcher, to set up the templates you need — for example "Photo at delivery", mandatory on every delivery stop. See Order action templates.
Read them for an order
curl -s -G 'https://orders-api.cloud.zoopit.no/v1/order_actions' \
-H 'Authorization: Bearer <token>' \
--data-urlencode 'where=[{"order_id":{"=":"<order id>"}}]' \
--data-urlencode 'limit=100'
{
"resource": [{
"id": "4f7c2a8e-1b3d-4e5f-9a6b-7c8d9e0f1a2b",
"order_id": "559ade03-cb22-41b9-8987-567c192d9d08",
"name": "Photo at delivery",
"on_activities_type": "delivery",
"status": "COMPLETED",
"prompt_request": { "message": "Take a photo of the delivered goods", "input_type": "pictures" },
"prompt_response": {
"actor": "<driver>",
"data": ["https://files-external-api.cloud.zoopit.no/promptresp/…/photo.jpg"]
},
"created_at": "2026-12-04 11:41:55.120+00"
}],
"related": { "…": "…" }
}
GET /v1/orders/:order_id also returns the order's actions in related.order_actions.
The file URLs point to Zoopit's file service. They are not public: downloading a file requires authentication. Which credential your integration uses for file downloads is set up with you when you get your API key. Store your own copy of any file you need to keep.
Get them as they happen
Subscribe to order_action.created (see webhooks).
The event's order_id is the order, and data is the order action as above. The driver app
creates the action when the driver completes the stop, so the photo or signature URLs are in the
event.
An action that already existed and is later changed does not send a new event. Poll
GET /v1/order_actions with a modified_at selector if you need those too.