Skip to main content

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.

WhatStatus
Photos, signatures and answers recorded in the driver appLive
Reading them through the APILive
order_action.created webhookLive, 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_typeThe driver recordsprompt_response.data is
picturesOne or more photosAn array of file URLs
signA signatureAn array of file URLs
booleanYes or notrue / false
textA noteA string
numberA numberA number
kvA small form, which may include photo or signature fieldsAn 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.