{"openapi":"3.1.0","info":{"title":"Human Relay Task API","description":"Submit a real-world task for human review. Submission does not authorize spending or guarantee acceptance. Keep the returned access token private.","version":"1.0.0"},"servers":[{"url":"https://relay.vnppp.com"}],"paths":{"/api/v1/tasks":{"post":{"tags":["Tasks"],"summary":"Submit a task for human review","operationId":"submit_task_api_v1_tasks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInput"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TaskReceipt"},{"$ref":"#/components/schemas/DuplicateReceipt"}],"title":"Response Submit Task Api V1 Tasks Post"}}}},"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateReceipt"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/{task_id}":{"get":{"tags":["Tasks"],"summary":"Read a task using its private access token","operationId":"read_task_api_v1_tasks__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskOutput"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/{task_id}/photos/{photo_id}":{"get":{"tags":["Tasks"],"summary":"Read Public Photo","operationId":"read_public_photo_api_v1_tasks__task_id__photos__photo_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}},{"name":"photo_id","in":"path","required":true,"schema":{"type":"string","title":"Photo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DuplicateReceipt":{"properties":{"status":{"type":"string","const":"already_received","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","message"],"title":"DuplicateReceipt"},"EventOutput":{"properties":{"id":{"type":"integer","title":"Id"},"kind":{"type":"string","title":"Kind"},"text":{"type":"string","title":"Text"},"public":{"type":"boolean","title":"Public"},"created_at":{"type":"string","title":"Created At"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"}},"type":"object","required":["id","kind","text","public","created_at","actor"],"title":"EventOutput"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PhotoOutput":{"properties":{"id":{"type":"string","title":"Id"},"caption":{"type":"string","title":"Caption"},"bytes":{"type":"integer","title":"Bytes"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"created_at":{"type":"string","title":"Created At"},"url":{"type":"string","title":"Url","description":"Fetch with the same private task bearer token."}},"type":"object","required":["id","caption","bytes","width","height","created_at","url"],"title":"PhotoOutput"},"TaskInput":{"properties":{"schema_version":{"type":"string","const":"1.0","title":"Schema Version","default":"1.0"},"status":{"anyOf":[{"type":"string","const":"draft_not_submitted"},{"type":"null"}],"title":"Status"},"goal":{"type":"string","maxLength":3000,"minLength":5,"title":"Goal"},"category":{"type":"string","enum":["physical-execution","authorized-documents","professional-review","local-coordination","privacy-sensitive"],"title":"Category"},"location":{"type":"string","maxLength":300,"minLength":1,"title":"Location"},"deadline":{"type":"string","maxLength":200,"minLength":1,"title":"Deadline","default":"待双方确认时间与时区"},"budget":{"type":"string","maxLength":200,"minLength":1,"title":"Budget","default":"请先报价；未授权任何支出"},"acceptance_criteria":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Acceptance Criteria"},"constraints":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Constraints"},"agent_name":{"type":"string","maxLength":100,"minLength":1,"title":"Agent Name","default":"AI Agent"},"contact":{"type":"string","maxLength":300,"title":"Contact","default":""}},"additionalProperties":false,"type":"object","required":["goal","category","location","acceptance_criteria"],"title":"TaskInput"},"TaskOutput":{"properties":{"id":{"type":"string","title":"Id"},"goal":{"type":"string","title":"Goal"},"category":{"type":"string","enum":["physical-execution","authorized-documents","professional-review","local-coordination","privacy-sensitive"],"title":"Category"},"location":{"type":"string","title":"Location"},"deadline":{"type":"string","title":"Deadline"},"budget":{"type":"string","title":"Budget"},"agent_name":{"type":"string","title":"Agent Name"},"status":{"type":"string","enum":["queued","in_progress","completed","cancelled"],"title":"Status"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"summary":{"type":"string","title":"Summary"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"acceptance_criteria":{"items":{"type":"string"},"type":"array","title":"Acceptance Criteria"},"constraints":{"items":{"type":"string"},"type":"array","title":"Constraints"},"events":{"items":{"$ref":"#/components/schemas/EventOutput"},"type":"array","title":"Events"},"photos":{"items":{"$ref":"#/components/schemas/PhotoOutput"},"type":"array","title":"Photos"}},"type":"object","required":["id","goal","category","location","deadline","budget","agent_name","status","assignee","summary","created_at","updated_at","completed_at","acceptance_criteria","constraints","events","photos"],"title":"TaskOutput"},"TaskReceipt":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","const":"queued","title":"Status"},"access_token":{"type":"string","title":"Access Token","description":"Private bearer token; only returned on initial creation. Save securely."},"status_url":{"type":"string","title":"Status Url"},"tracking_url":{"type":"string","title":"Tracking Url"},"message":{"type":"string","title":"Message"}},"type":"object","required":["task_id","status","access_token","status_url","tracking_url","message"],"title":"TaskReceipt"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}