Overview
Any step in a Rundun checklist can capture photos — regardless of its primary type. A boolean "Was the bed made?" step can also require a photo of the bed. A number "Odometer reading" step can require a photo of the dashboard. Photos are additive to the primary answer, not a replacement for it.
You control whether photos are optional, required, and how many are expected. The executor is blocked from completing the step until the minimum photo requirement is met.
How it works
Photo capture is a two-phase process designed to balance speed with storage efficiency:
Phase 1 — Preview thumbnail (immediate)
When an executor completes a step, the Rundun app compresses each photo to a small preview and embeds it directly in the step.completed webhook payload. Your backend receives visual confirmation within seconds of the step being completed — no waiting.
Phase 2 — Full resolution (background)
Simultaneously, the app uploads the original full-resolution photo to Rundun's servers in the background. The run.completed webhook includes direct URLs to the full-resolution images once the run is submitted.
TDL configuration
Enable photos on a step using the photo field in the TDL:
{
"id": "s-k2m1",
"type": "boolean",
"label": "Is the unit clean and guest-ready?",
"required": true,
"photo": {
"min": 1,
"max": 4,
"annotate": false
}
}Set photo: false (or omit the field) to disable the camera for a step. Setting min: 0 makes photos optional — the executor can skip them. Setting min: 1 or higher blocks step completion until that many photos are taken.
Configuration options
| Field | Type | Default | Description |
|---|---|---|---|
min | number | 0 | Minimum photos required to complete the step |
max | number | 10 | Maximum photos allowed (1–10) |
annotate | boolean | false | Enable drawing overlay — post-MVP |
Webhook payloads
step.completed — thumbnail
{
"event": "step.completed",
"data": {
"step_id": "s-k2m1",
"answer": true,
"photos": [
{
"photo_index": 0,
"preview": "data:image/jpeg;base64,/9j/4AAQ...",
"width": 320,
"height": 240
}
]
}
}run.completed — full resolution
{
"event": "run.completed",
"data": {
"answers": {
"s-k2m1": {
"value": true,
"photos": [
{ "photo_index": 0, "url": "https://media.rundun.app/runs/r-.../s-k2m1/photo_0.jpg" }
]
}
}
}
}Storage
Full-resolution photos are stored securely on Rundun's servers. Storage is separate from run credits — each plan includes a storage allowance. A typical STR turnover run generates ~25 photos at ~500KB each (~12.5MB per run). See pricing for storage add-ons.
When to require photos
Require photos (min: 1) when visual evidence matters for dispute resolution — room condition before a guest, vehicle condition before a rental, meter readings that need verification. Make photos optional (min: 0) for steps where photos add context but aren't essential — a general inspection note, an informational step acknowledgement.
When to disable photos
Set photo: false on steps where camera access would be distracting or irrelevant — numeric inputs, text fields, instruction acknowledgements. Keeping the camera off reduces executor friction and speeds up completion.