{ "openapi": "3.0.3", "info": { "title": "Playwright Runner API", "version": "0.1.0" }, "paths": { "/tasks": { "post": { "summary": "Create tasks (batch)", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["run_id", "tasks"], "properties": { "run_id": { "type": "string" }, "tasks": { "type": "array", "items": { "$ref": "#/components/schemas/TaskCreate" } } }, "additionalProperties": false } } } }, "responses": { "200": { "description": "Accepted/rejected tasks", "content": { "application/json": { "schema": { "type": "object", "required": ["accepted", "rejected"], "properties": { "accepted": { "type": "array", "items": { "type": "object", "required": ["task_id"], "properties": { "task_id": { "type": "string" } }, "additionalProperties": false } }, "rejected": { "type": "array", "items": { "type": "object", "required": ["task_id", "reason"], "properties": { "task_id": { "type": "string" }, "reason": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false } } } } } } }, "/tasks/{task_id}": { "get": { "summary": "Get task status/result", "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Task status/result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunnerTaskResult" } } } } } } }, "/tasks/{task_id}/resume": { "post": { "summary": "Resume a paused task after human intervention", "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["resume_token"], "properties": { "resume_token": { "type": "string" } }, "additionalProperties": false } } } }, "responses": { "200": { "description": "Resume accepted", "content": { "application/json": { "schema": { "type": "object", "required": ["ok"], "properties": { "ok": { "type": "boolean" } }, "additionalProperties": false } } } } } } }, "/callbacks/task-finished": { "post": { "summary": "Optional callback for task completion", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunnerTaskResult" } } } }, "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "TaskCreate": { "type": "object", "required": ["task_id", "site", "question_id", "question_text", "profile_id"], "properties": { "task_id": { "type": "string" }, "site": { "type": "string" }, "question_id": { "type": "string" }, "question_text": { "type": "string" }, "profile_id": { "type": "string" }, "locale": { "type": "string" } }, "additionalProperties": false }, "RunnerTaskResult": { "type": "object", "required": ["task_id", "status"], "properties": { "task_id": { "type": "string" }, "status": { "type": "string", "enum": ["success", "failed", "needs_human", "running"] }, "reason": { "type": "string" }, "handoff_url": { "type": "string" }, "result": { "type": "object", "required": ["answer_text", "citations", "screenshots"], "properties": { "answer_text": { "type": "string" }, "citations": { "type": "array", "items": { "type": "object", "required": ["url"], "properties": { "url": { "type": "string" }, "title": { "type": "string" } }, "additionalProperties": false } }, "screenshots": { "type": "array", "items": { "type": "object", "required": ["url", "ts"], "properties": { "url": { "type": "string" }, "ts": { "type": "string" } }, "additionalProperties": false } }, "raw_html_url": { "type": "string" }, "log_url": { "type": "string" } }, "additionalProperties": false } }, "additionalProperties": false } } } }