{
    "openapi": "3.1.0",
    "info": {
        "title": "Quiescence HumanOps",
        "version": "1.0.0",
        "summary": "Verified human execution for AI agents, in Europe.",
        "description": "Delegate a real-world task to a verified person and receive a structured, evidence-backed result with a confidence score.\n\n**Use this when** the answer cannot be established from public web sources — because it requires physically being somewhere, speaking to a person, or observing something now.\n\n**Prices are NET of VAT.** VAT is added according to where you are established.\n\n**Refusals are not errors.** A city we do not cover answers `200` with `created: false` and the nearest live alternative, so a caller can reason instead of giving up.\n\n**Webhooks.** Register an endpoint in the console and we POST every state change instead of making you poll. Each delivery carries `HO-Signature: t=<unix>,v1=<hmac-sha256(t + '.' + rawBody, secret)>`; reject anything older than five minutes. Delivery is **at least once** — dedupe on the event id. We retry six times over six hours. During a secret rotation two `v1` values are sent; accept if either matches.\n\n**Events:** `task.queued` — Accepted and waiting for a person., `task.accepted` — A verified person took it., `task.in_progress` — Work has started., `task.submitted` — Evidence is in and being checked., `task.completed` — The result is ready., `task.failed` — It could not be completed; any hold is returned., `task.cancelled` — Cancelled before work began., `task.expired` — The deadline passed with no acceptance., `task.refunded` — Money has gone back., `task.sla_breached` — The deadline passed. The remedy has already been paid — you do not have to ask for it., `task.disputed` — Somebody has questioned this result. It is back in review and a person will decide within two business days., `task.dispute_resolved` — The dispute was adjudicated. The verdict and any refund are in the payload., `credit.low` — Balance below 20% of the daily limit., `credit.exhausted` — A task was refused for want of credit.\n\n**Errors:** `unauthorized` (401) — Missing or unrecognised API key., `key_revoked` (401) — This API key has been revoked., `agent_suspended` (403) — This agent is suspended., `forbidden_scope` (403) — This key does not carry the required scope., `rate_limited` (429) — Too many requests., `quota_exceeded` (429) — Plan quota exhausted for this period., `invalid_request` (400) — The request could not be understood., `schema_violation` (422) — The task spec does not match the capability schema., `capability_unknown` (404) — No such capability., `capability_refused` (403) — This capability is not offered., `coverage_unavailable` (200) — We do not operate there yet., `sla_unavailable` (200) — That deadline is not available., `insufficient_credit` (402) — Not enough credit on this agent., `policy_denied` (403) — The agent policy refuses this task., `plan_required` (402) — This needs a paid plan. The sandbox has the full API and MCP; live dispatch and webhooks do not., `task_not_found` (404) — No such task for this agent., `task_not_cancellable` (409) — This task can no longer be cancelled., `bad_reason` (400) — Not a dispute reason we recognise., `not_disputable` (409) — There is no result to dispute yet, or the money has already gone back., `already_disputed` (409) — This task already has an open dispute., `idempotency_conflict` (409) — That Idempotency-Key was used with a different body., `method_not_allowed` (405) — Wrong method for this endpoint., `server_error` (500) — Something went wrong on our side.",
        "contact": {
            "url": "https://quiescence.eu/humanops/"
        }
    },
    "servers": [
        {
            "url": "https://quiescence.eu/humanops/api/v1"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "discovery",
            "description": "No key required. What we can do, where, and what it costs."
        },
        {
            "name": "tasks",
            "description": "Order human work and collect the result."
        }
    ],
    "paths": {
        "/capabilities": {
            "get": {
                "tags": [
                    "discovery"
                ],
                "operationId": "listCapabilities",
                "security": [],
                "summary": "Every capability, with its JSON Schemas, prices and live geographies",
                "responses": {
                    "200": {
                        "description": "The catalogue",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/capabilities/{key}": {
            "get": {
                "tags": [
                    "discovery"
                ],
                "operationId": "getCapability",
                "security": [],
                "parameters": [
                    {
                        "name": "key",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "human.call",
                                "human.translate",
                                "human.observe",
                                "human.visit",
                                "human.photograph",
                                "human.video",
                                "human.measure",
                                "human.verify",
                                "human.test",
                                "human.collect",
                                "human.inspect",
                                "human.audit",
                                "human.interview",
                                "human.attend",
                                "human.purchase",
                                "human.deliver",
                                "human.sign"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "One capability"
                    },
                    "404": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/coverage": {
            "get": {
                "tags": [
                    "discovery"
                ],
                "operationId": "getCoverage",
                "security": [],
                "parameters": [
                    {
                        "name": "country",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "pattern": "^[A-Za-z]{2}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Where we operate and how fast"
                    }
                }
            }
        },
        "/quote": {
            "post": {
                "tags": [
                    "discovery"
                ],
                "operationId": "quoteTask",
                "security": [],
                "summary": "An exact price, or a refusal with alternatives",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/QuoteRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "A quote, or feasible:false with the nearest live city and a waitlist URL"
                    }
                }
            }
        },
        "/tasks": {
            "get": {
                "tags": [
                    "tasks"
                ],
                "operationId": "listTasks",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "maximum": 100
                        }
                    },
                    {
                        "name": "cursor",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "The id of the last task seen. Cursor, not offset — an agent listing while creating gets no duplicates or gaps."
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A page of tasks"
                    }
                }
            },
            "post": {
                "tags": [
                    "tasks"
                ],
                "operationId": "createTask",
                "summary": "Order a task",
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "maxLength": 80
                        },
                        "description": "Required. A repeat within 24h returns the original task with 200 instead of 201; the same key with a different body is a 409."
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateTask"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created"
                    },
                    "200": {
                        "description": "Either an idempotent replay, or created:false with a reason and alternatives"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "409": {
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/tasks/{ref}": {
            "get": {
                "tags": [
                    "tasks"
                ],
                "operationId": "getTask",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^HO-[0-9A-Z]{6}$"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The task, with poll_after_s"
                    },
                    "404": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/tasks/{ref}/result": {
            "get": {
                "tags": [
                    "tasks"
                ],
                "operationId": "getTaskResult",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "ready:false while it is still running, or the answer with its confidence and evidence"
                    }
                }
            }
        },
        "/tasks/{ref}/evidence": {
            "get": {
                "tags": [
                    "tasks"
                ],
                "operationId": "listTaskEvidence",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Evidence items with hashes and short-lived signed URLs"
                    }
                }
            }
        },
        "/tasks/{ref}/cancel": {
            "post": {
                "tags": [
                    "tasks"
                ],
                "operationId": "cancelTask",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Cancelled and the hold returned"
                    },
                    "409": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/tasks/{ref}/dispute": {
            "post": {
                "tags": [
                    "tasks"
                ],
                "operationId": "disputeTask",
                "summary": "Say the delivered answer is wrong",
                "description": "Moves the task to review and puts it in front of a person, who decides within two business days. Nothing about the money changes until they do. One open dispute per task.",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "reason"
                                ],
                                "properties": {
                                    "reason": {
                                        "type": "string",
                                        "enum": [
                                            "wrong_place",
                                            "wrong_answer",
                                            "poor_evidence",
                                            "not_done",
                                            "other"
                                        ]
                                    },
                                    "detail": {
                                        "type": "string",
                                        "maxLength": 2000,
                                        "description": "What you expected and what you got. Read by the person who decides, so it is worth writing."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Opened; due_at is when it will be decided"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "409": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "ho_live_… for real tasks, ho_test_… for sandbox. Sandbox is a property of the KEY — there is no separate base URL."
            }
        },
        "responses": {
            "Error": {
                "description": "An error envelope",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "required": [
                    "ok",
                    "error"
                ],
                "properties": {
                    "ok": {
                        "type": "boolean",
                        "const": false
                    },
                    "error": {
                        "type": "object",
                        "required": [
                            "code",
                            "message"
                        ],
                        "properties": {
                            "code": {
                                "type": "string",
                                "enum": [
                                    "unauthorized",
                                    "key_revoked",
                                    "agent_suspended",
                                    "forbidden_scope",
                                    "rate_limited",
                                    "quota_exceeded",
                                    "invalid_request",
                                    "schema_violation",
                                    "capability_unknown",
                                    "capability_refused",
                                    "coverage_unavailable",
                                    "sla_unavailable",
                                    "insufficient_credit",
                                    "policy_denied",
                                    "plan_required",
                                    "task_not_found",
                                    "task_not_cancellable",
                                    "bad_reason",
                                    "not_disputable",
                                    "already_disputed",
                                    "idempotency_conflict",
                                    "method_not_allowed",
                                    "server_error"
                                ]
                            },
                            "message": {
                                "type": "string"
                            },
                            "detail": {
                                "type": "object",
                                "description": "What the caller needs to fix the call: the failing schema path, the nearest live city, the deficit in cents."
                            }
                        }
                    }
                }
            },
            "Location": {
                "type": "object",
                "properties": {
                    "country_iso": {
                        "type": "string",
                        "pattern": "^[A-Za-z]{2}$"
                    },
                    "city_slug": {
                        "type": "string"
                    },
                    "lat": {
                        "type": "number"
                    },
                    "lng": {
                        "type": "number"
                    }
                }
            },
            "QuoteRequest": {
                "type": "object",
                "required": [
                    "capability"
                ],
                "properties": {
                    "capability": {
                        "type": "string",
                        "enum": [
                            "human.call",
                            "human.translate",
                            "human.observe",
                            "human.visit",
                            "human.photograph",
                            "human.video",
                            "human.measure",
                            "human.verify",
                            "human.test",
                            "human.collect",
                            "human.inspect",
                            "human.audit",
                            "human.interview",
                            "human.attend",
                            "human.purchase",
                            "human.deliver",
                            "human.sign"
                        ]
                    },
                    "location": {
                        "$ref": "#/components/schemas/Location"
                    },
                    "sla": {
                        "type": "string",
                        "enum": [
                            "standard",
                            "priority",
                            "urgent",
                            "premium"
                        ]
                    },
                    "max_price_cents": {
                        "type": "integer",
                        "minimum": 0
                    }
                }
            },
            "CreateTask": {
                "type": "object",
                "required": [
                    "capability",
                    "spec",
                    "max_price_cents"
                ],
                "properties": {
                    "capability": {
                        "type": "string",
                        "enum": [
                            "human.call",
                            "human.translate",
                            "human.observe",
                            "human.visit",
                            "human.photograph",
                            "human.video",
                            "human.measure",
                            "human.verify",
                            "human.test",
                            "human.collect",
                            "human.inspect",
                            "human.audit",
                            "human.interview",
                            "human.attend",
                            "human.purchase",
                            "human.deliver",
                            "human.sign"
                        ]
                    },
                    "spec": {
                        "type": "object",
                        "description": "Must match the chosen capability's Spec_* schema below.",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/Spec_human_call"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_translate"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_observe"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_visit"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_photograph"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_video"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_measure"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_verify"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_test"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_collect"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_inspect"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_audit"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_interview"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_attend"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_purchase"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_deliver"
                            },
                            {
                                "$ref": "#/components/schemas/Spec_human_sign"
                            }
                        ]
                    },
                    "location": {
                        "$ref": "#/components/schemas/Location"
                    },
                    "sla": {
                        "type": "string",
                        "enum": [
                            "standard",
                            "priority",
                            "urgent",
                            "premium"
                        ],
                        "default": "standard"
                    },
                    "language": {
                        "type": "string"
                    },
                    "max_price_cents": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "REQUIRED. The most you will pay. A quote above it fails rather than charging."
                    }
                }
            },
            "Spec_human_call": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Call a business and get a documented answer",
                "properties": {
                    "target": {
                        "type": "string",
                        "description": "Who to call — business name, and the number if you have it.",
                        "maxLength": 200
                    },
                    "phone": {
                        "type": "string",
                        "description": "Phone number in E.164 if known.",
                        "maxLength": 24
                    },
                    "objective": {
                        "type": "string",
                        "description": "The single question to get answered. Be specific and answerable in one call.",
                        "maxLength": 500
                    },
                    "questions": {
                        "type": "array",
                        "description": "Additional questions, in priority order.",
                        "maxItems": 5,
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        }
                    },
                    "language": {
                        "type": "string",
                        "description": "ISO 639-1 language to conduct the call in.",
                        "maxLength": 8
                    },
                    "identify_as": {
                        "type": "string",
                        "enum": [
                            "member_of_public",
                            "researcher"
                        ],
                        "description": "How the caller introduces themselves. Impersonating anyone else is refused."
                    }
                },
                "required": [
                    "target",
                    "objective"
                ],
                "additionalProperties": false
            },
            "Result_human_call": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "answered": {
                        "type": "boolean",
                        "description": "Was the question actually answered."
                    },
                    "answer": {
                        "type": "string",
                        "description": "The answer in the respondent's terms.",
                        "maxLength": 500
                    },
                    "extra": {
                        "type": "object",
                        "description": "Answers to the additional questions, keyed by question."
                    },
                    "spoke_with": {
                        "type": "string",
                        "description": "Role of the person, never their name.",
                        "maxLength": 120
                    },
                    "called_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "attempts": {
                        "type": "integer"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_translate": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Native-speaker review of ambiguous content",
                "properties": {
                    "text": {
                        "type": "string",
                        "description": "The content to review.",
                        "maxLength": 5000
                    },
                    "source_language": {
                        "type": "string",
                        "description": "ISO 639-1.",
                        "maxLength": 8
                    },
                    "target_language": {
                        "type": "string",
                        "description": "ISO 639-1.",
                        "maxLength": 8
                    },
                    "question": {
                        "type": "string",
                        "description": "What you actually need to know about it.",
                        "maxLength": 500
                    },
                    "context": {
                        "type": "string",
                        "description": "Where this text came from and why it matters.",
                        "maxLength": 500
                    }
                },
                "required": [
                    "text",
                    "target_language",
                    "question"
                ],
                "additionalProperties": false
            },
            "Result_human_translate": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "translation": {
                        "type": "string",
                        "description": "Faithful translation.",
                        "maxLength": 5000
                    },
                    "answer": {
                        "type": "string",
                        "description": "The answer to your question.",
                        "maxLength": 500
                    },
                    "ambiguities": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        },
                        "description": "What is genuinely ambiguous in the original."
                    },
                    "register": {
                        "type": "string",
                        "description": "Formality, tone, regional markers.",
                        "maxLength": 200
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_observe": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Look at a place and report what is true right now",
                "properties": {
                    "place": {
                        "type": "string",
                        "description": "Name of the place.",
                        "maxLength": 200
                    },
                    "address": {
                        "type": "string",
                        "description": "Street address.",
                        "maxLength": 300
                    },
                    "question": {
                        "type": "string",
                        "description": "The single thing to establish by looking.",
                        "maxLength": 500
                    },
                    "observe_at": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Observe at this moment, if timing matters."
                    }
                },
                "required": [
                    "place",
                    "question"
                ],
                "additionalProperties": false
            },
            "Result_human_observe": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "answer": {
                        "type": "string",
                        "description": "What was observed.",
                        "maxLength": 500
                    },
                    "open": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "observed_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_visit": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Attend a location and report against a brief",
                "properties": {
                    "place": {
                        "type": "string",
                        "description": "Name of the place.",
                        "maxLength": 200
                    },
                    "address": {
                        "type": "string",
                        "description": "Street address.",
                        "maxLength": 300
                    },
                    "brief": {
                        "type": "string",
                        "description": "What to do and look for, in order.",
                        "maxLength": 2000
                    },
                    "checklist": {
                        "type": "array",
                        "maxItems": 15,
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "description": "Points to confirm one by one."
                    }
                },
                "required": [
                    "place",
                    "brief"
                ],
                "additionalProperties": false
            },
            "Result_human_visit": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "summary": {
                        "type": "string",
                        "description": "What happened.",
                        "maxLength": 2000
                    },
                    "checklist_results": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        },
                        "description": "One {point, result, note} per checklist entry."
                    },
                    "visited_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_photograph": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Photograph something, with provenance",
                "properties": {
                    "subject": {
                        "type": "string",
                        "description": "What to photograph.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it is.",
                        "maxLength": 300
                    },
                    "shots": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "description": "One framing instruction per required photograph."
                    },
                    "avoid": {
                        "type": "string",
                        "description": "Anything that must not be in frame. Faces and plates are blurred regardless.",
                        "maxLength": 300
                    }
                },
                "required": [
                    "subject",
                    "shots"
                ],
                "additionalProperties": false
            },
            "Result_human_photograph": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "captured": {
                        "type": "integer",
                        "description": "How many of the requested shots were obtained."
                    },
                    "notes": {
                        "type": "string",
                        "description": "Anything that prevented a shot.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_video": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Record a walk-through video",
                "properties": {
                    "subject": {
                        "type": "string",
                        "description": "What to record.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it is.",
                        "maxLength": 300
                    },
                    "route": {
                        "type": "string",
                        "description": "The path or sequence to follow while recording.",
                        "maxLength": 1000
                    },
                    "max_seconds": {
                        "type": "integer",
                        "minimum": 10,
                        "maximum": 600
                    }
                },
                "required": [
                    "subject",
                    "route"
                ],
                "additionalProperties": false
            },
            "Result_human_video": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "seconds": {
                        "type": "integer"
                    },
                    "notes": {
                        "type": "string",
                        "description": "Anything the route could not cover.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_measure": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Take physical measurements",
                "properties": {
                    "subject": {
                        "type": "string",
                        "description": "What to measure.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it is.",
                        "maxLength": 300
                    },
                    "measurements": {
                        "type": "array",
                        "maxItems": 12,
                        "minItems": 1,
                        "items": {
                            "type": "object",
                            "description": "{name, unit, how} — what to measure, in what unit, measured how."
                        },
                        "description": "Each becomes a required numeric field on the worker's form."
                    }
                },
                "required": [
                    "subject",
                    "measurements"
                ],
                "additionalProperties": false
            },
            "Result_human_measure": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "values": {
                        "type": "object",
                        "description": "One numeric value per requested measurement, keyed by name."
                    },
                    "method_notes": {
                        "type": "string",
                        "description": "How each was taken, and any that could not be.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_verify": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Confirm a fact in the real world",
                "properties": {
                    "claim": {
                        "type": "string",
                        "description": "The claim to test, stated so that it can be true or false.",
                        "maxLength": 500
                    },
                    "subject": {
                        "type": "string",
                        "description": "The business, place or object it is about.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where to go.",
                        "maxLength": 300
                    },
                    "measurements": {
                        "type": "array",
                        "maxItems": 8,
                        "items": {
                            "type": "string",
                            "maxLength": 120
                        },
                        "description": "Any figures that would settle it."
                    },
                    "accept_if": {
                        "type": "string",
                        "description": "What would count as confirming it.",
                        "maxLength": 500
                    }
                },
                "required": [
                    "claim",
                    "subject"
                ],
                "additionalProperties": false
            },
            "Result_human_verify": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "verified": {
                        "type": [
                            "boolean",
                            "null"
                        ],
                        "description": "true, false, or null when it genuinely could not be determined."
                    },
                    "determinable": {
                        "type": "boolean"
                    },
                    "finding": {
                        "type": "string",
                        "description": "What was established, in plain terms.",
                        "maxLength": 1000
                    },
                    "values": {
                        "type": "object",
                        "description": "Any requested measurements."
                    },
                    "verified_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_test": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Use a real-world service and report",
                "properties": {
                    "service": {
                        "type": "string",
                        "description": "The service to test.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where, or a URL for an online step.",
                        "maxLength": 300
                    },
                    "scenario": {
                        "type": "string",
                        "description": "The scenario to follow, step by step.",
                        "maxLength": 2000
                    },
                    "record": {
                        "type": "array",
                        "maxItems": 12,
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "description": "What to note at each step."
                    }
                },
                "required": [
                    "service",
                    "scenario"
                ],
                "additionalProperties": false
            },
            "Result_human_test": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "completed": {
                        "type": "boolean"
                    },
                    "steps": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        },
                        "description": "One {step, outcome, seconds, note} per step."
                    },
                    "friction": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        }
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_collect": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Obtain a public document in person",
                "properties": {
                    "document": {
                        "type": "string",
                        "description": "Exactly which document is needed.",
                        "maxLength": 300
                    },
                    "office": {
                        "type": "string",
                        "description": "Which office issues it.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where that office is.",
                        "maxLength": 300
                    },
                    "reference": {
                        "type": "string",
                        "description": "Any reference, file or entity number required to request it.",
                        "maxLength": 200
                    },
                    "fee_ceiling_cents": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Maximum official fee to pay on your behalf; charged at cost."
                    }
                },
                "required": [
                    "document",
                    "office"
                ],
                "additionalProperties": false
            },
            "Result_human_collect": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "obtained": {
                        "type": "boolean"
                    },
                    "document_type": {
                        "type": "string",
                        "description": "What was actually issued.",
                        "maxLength": 200
                    },
                    "issued_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "fee_paid_cents": {
                        "type": "integer"
                    },
                    "refusal_reason": {
                        "type": "string",
                        "description": "If it could not be obtained, why.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_inspect": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Inspect the condition of a product, premises or asset",
                "properties": {
                    "asset": {
                        "type": "string",
                        "description": "What is being inspected.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it is.",
                        "maxLength": 300
                    },
                    "criteria": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 25,
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        },
                        "description": "Each becomes a scored line in the report."
                    },
                    "standard": {
                        "type": "string",
                        "description": "Any standard or grading scale to assess against.",
                        "maxLength": 300
                    }
                },
                "required": [
                    "asset",
                    "criteria"
                ],
                "additionalProperties": false
            },
            "Result_human_inspect": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "overall": {
                        "type": "string",
                        "enum": [
                            "good",
                            "acceptable",
                            "poor",
                            "unusable",
                            "undetermined"
                        ]
                    },
                    "findings": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        },
                        "description": "One {criterion, rating, note, photo_ref} per criterion."
                    },
                    "defects": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        }
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_audit": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Structured retail or compliance audit",
                "properties": {
                    "site": {
                        "type": "string",
                        "description": "The site to audit.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it is.",
                        "maxLength": 300
                    },
                    "protocol": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 60,
                        "items": {
                            "type": "object"
                        },
                        "description": "One {id, question, type, options} per audit line."
                    },
                    "standard": {
                        "type": "string",
                        "description": "The standard or planogram being audited against.",
                        "maxLength": 300
                    }
                },
                "required": [
                    "site",
                    "protocol"
                ],
                "additionalProperties": false
            },
            "Result_human_audit": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "score_bps": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10000
                    },
                    "lines": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        },
                        "description": "One {id, value, note, photo_ref} per protocol line."
                    },
                    "exceptions": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        }
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_interview": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Conduct a structured interview to a script",
                "properties": {
                    "respondent_profile": {
                        "type": "string",
                        "description": "The KIND of person to interview. Never a named individual.",
                        "maxLength": 500
                    },
                    "script": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 30,
                        "items": {
                            "type": "object"
                        },
                        "description": "One {id, question, type} per question."
                    },
                    "consent_text": {
                        "type": "string",
                        "description": "What the respondent is told before consenting.",
                        "maxLength": 1000
                    },
                    "address": {
                        "type": "string",
                        "description": "Where, if in person.",
                        "maxLength": 300
                    }
                },
                "required": [
                    "respondent_profile",
                    "script"
                ],
                "additionalProperties": false
            },
            "Result_human_interview": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "answers": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "respondent_type": {
                        "type": "string",
                        "description": "Role or segment only, never an identity.",
                        "maxLength": 200
                    },
                    "consented": {
                        "type": "boolean"
                    },
                    "duration_min": {
                        "type": "integer"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_attend": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Attend an event or appointment and report",
                "properties": {
                    "event": {
                        "type": "string",
                        "description": "What to attend.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where.",
                        "maxLength": 300
                    },
                    "starts_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "ends_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "brief": {
                        "type": "string",
                        "description": "What to observe and record.",
                        "maxLength": 2000
                    },
                    "ticket_cost_ceiling_cents": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Admission paid on your behalf, at cost."
                    }
                },
                "required": [
                    "event",
                    "starts_at",
                    "brief"
                ],
                "additionalProperties": false
            },
            "Result_human_attend": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "attended": {
                        "type": "boolean"
                    },
                    "report": {
                        "type": "string",
                        "description": "Structured account against the brief.",
                        "maxLength": 4000
                    },
                    "arrived_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "left_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "cost_paid_cents": {
                        "type": "integer"
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_purchase": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Make a purchase and return the evidence",
                "properties": {
                    "item": {
                        "type": "string",
                        "description": "What to buy.",
                        "maxLength": 300
                    },
                    "vendor": {
                        "type": "string",
                        "description": "Where to buy it.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Vendor address.",
                        "maxLength": 300
                    },
                    "max_item_cents": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Hard ceiling on the item, charged at cost on top of the task price."
                    },
                    "observe": {
                        "type": "array",
                        "maxItems": 12,
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "description": "What to note during the interaction."
                    },
                    "return_item": {
                        "type": "boolean",
                        "description": "Ship the item to you afterwards."
                    }
                },
                "required": [
                    "item",
                    "vendor",
                    "max_item_cents"
                ],
                "additionalProperties": false
            },
            "Result_human_purchase": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "purchased": {
                        "type": "boolean"
                    },
                    "price_paid_cents": {
                        "type": "integer"
                    },
                    "observations": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "item_condition": {
                        "type": "string",
                        "description": "Condition on receipt.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_deliver": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "Collect or deliver something locally, with proof",
                "properties": {
                    "item": {
                        "type": "string",
                        "description": "What is being moved.",
                        "maxLength": 300
                    },
                    "from_address": {
                        "type": "string",
                        "description": "Collect from.",
                        "maxLength": 300
                    },
                    "to_address": {
                        "type": "string",
                        "description": "Deliver to.",
                        "maxLength": 300
                    },
                    "handover": {
                        "type": "string",
                        "description": "Who hands over and who receives, by role.",
                        "maxLength": 300
                    },
                    "constraints": {
                        "type": "string",
                        "description": "Size, weight, fragility, temperature.",
                        "maxLength": 300
                    }
                },
                "required": [
                    "item",
                    "from_address",
                    "to_address"
                ],
                "additionalProperties": false
            },
            "Result_human_deliver": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "delivered": {
                        "type": "boolean"
                    },
                    "collected_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "delivered_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "received_by_role": {
                        "type": "string",
                        "description": "Role only, never a name.",
                        "maxLength": 120
                    }
                },
                "additionalProperties": false
            },
            "Spec_human_sign": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "title": "A presence-requiring act by a qualified professional",
                "properties": {
                    "act": {
                        "type": "string",
                        "description": "Exactly what act is required.",
                        "maxLength": 500
                    },
                    "qualification": {
                        "type": "string",
                        "description": "The qualification or authority the person must hold.",
                        "maxLength": 300
                    },
                    "address": {
                        "type": "string",
                        "description": "Where it must happen.",
                        "maxLength": 300
                    },
                    "jurisdiction": {
                        "type": "string",
                        "description": "ISO 3166-2 region whose law governs it.",
                        "maxLength": 16
                    }
                },
                "required": [
                    "act",
                    "qualification",
                    "jurisdiction"
                ],
                "additionalProperties": false
            },
            "Result_human_sign": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                    "performed": {
                        "type": "boolean"
                    },
                    "professional_qualification": {
                        "type": "string",
                        "description": "The qualification actually held.",
                        "maxLength": 300
                    },
                    "performed_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "refusal_reason": {
                        "type": "string",
                        "description": "If it could not lawfully be performed, why.",
                        "maxLength": 500
                    }
                },
                "additionalProperties": false
            }
        }
    }
}