{"openapi":"3.1.0","info":{"title":"Gemini Computer Use Test Runner","description":"Browser QA agent service around google-gemini/computer-use-preview. Submit natural-language browser tests over HTTP, MCP, or A2A; poll status; fetch logs and videos. Docs hub: `/`. Swagger: `/docs`. MCP: `/mcp`. A2A card: `/.well-known/agent-card.json`.","version":"1.0.0"},"servers":[{"url":"https://gemini-cua.apps2.povio.dev","description":"Production"},{"url":"http://localhost:8080","description":"Local Docker"}],"paths":{"/.well-known/agent-card.json":{"get":{"tags":["A2A: Agent Card"],"summary":" Get Agent Card","description":"Returns the public AgentCard describing this agent's capabilities, supported transports, and skills.","operationId":"_get_agent_card__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/a2a":{"post":{"tags":["A2A: JSON-RPC"],"summary":"A2A JSON-RPC endpoint","description":"A2A JSON-RPC 2.0 endpoint. The `method` field selects the operation;\n`params` must match that method's schema (see the `oneOf` below).\n\n**Supported methods:**\n\n- `SendMessage` — Send a message to the agent (returns a Task or response Message).\n- `SendStreamingMessage` — Send a message and receive a Server-Sent Events stream.\n- `GetTask` — Fetch a task by ID.\n- `ListTasks` — List tasks with pagination and filtering.\n- `CancelTask` — Cancel an in-progress task.\n- `CreateTaskPushNotificationConfig` — Register a push-notification config on a task.\n- `GetTaskPushNotificationConfig` — Read a single push-notification config.\n- `ListTaskPushNotificationConfigs` — List all push-notification configs for a task.\n- `DeleteTaskPushNotificationConfig` — Delete a push-notification config.\n- `SubscribeToTask` — Subscribe to task events via Server-Sent Events.\n- `GetExtendedAgentCard` — Fetch the authenticated extended agent card.\n","operationId":"handle_requests_a2a_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"requestBody":{"description":"A2A JSON-RPC 2.0 request","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/A2ARequest"}}}},"parameters":[{"in":"header","name":"A2A-Version","required":true,"schema":{"type":"string","enum":["1.0"]},"example":"1.0"}]}},"/health":{"get":{"tags":["ops"],"summary":"Health","description":"Liveness and queue snapshot (no auth).","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/v1/jobs":{"post":{"tags":["jobs"],"summary":"Create Job","description":"Enqueue a natural-language browser test job.","operationId":"create_job_v1_jobs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateJobRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["jobs"],"summary":"List Jobs","description":"List recent jobs, optionally filtered by status.","operationId":"list_jobs_v1_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Jobs V1 Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","description":"Get job status, summary, and artifact links.","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Job V1 Jobs  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancel Job","description":"Mark a queued job cancelled. Running jobs are not force-killed.","operationId":"cancel_job_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Job V1 Jobs  Job Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/log":{"get":{"tags":["jobs"],"summary":"Get Job Log","description":"Fetch the agent log for a job.","operationId":"get_job_log_v1_jobs__job_id__log_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/video":{"get":{"tags":["jobs"],"summary":"Get Job Video","description":"Download the recorded video when available.","operationId":"get_job_video_v1_jobs__job_id__video_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CreateJobRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Natural-language browser test instructions"},"initial_url":{"type":"string","title":"Initial Url","default":"https://www.google.com"},"model":{"type":"string","title":"Model","default":"gemini-3.6-flash"},"env":{"type":"string","pattern":"^(playwright|browserbase)$","title":"Env","default":"playwright"},"highlight_mouse":{"type":"boolean","title":"Highlight Mouse","default":true},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["query"],"title":"CreateJobRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobStatus":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"],"title":"JobStatus"},"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"},"SendMessageRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"message":{"$ref":"#/components/schemas/Message"},"configuration":{"oneOf":[{"$ref":"#/components/schemas/SendMessageConfiguration"},{"type":"null"}],"example":null},"metadata":{"type":"object"}}},"Message":{"type":"object","properties":{"message_id":{"type":"string","example":"message_id"},"context_id":{"type":"string","example":""},"task_id":{"type":"string","example":""},"role":{"type":"string","enum":["ROLE_UNSPECIFIED","ROLE_USER","ROLE_AGENT"],"example":"ROLE_USER"},"parts":{"type":"array","items":{"$ref":"#/components/schemas/Part"},"example":[{"text":""}]},"metadata":{"type":"object"},"extensions":{"type":"array","items":{"type":"string","example":""},"example":[""]},"reference_task_ids":{"type":"array","items":{"type":"string","example":""},"example":[""]}}},"Part":{"allOf":[{"type":"object","properties":{"metadata":{"type":"object"},"filename":{"type":"string","example":""},"media_type":{"type":"string","example":""}}},{"oneOf":[{"type":"object","properties":{"text":{"type":"string","example":""}},"required":["text"]},{"type":"object","properties":{"raw":{"type":"string","format":"byte"}},"required":["raw"]},{"type":"object","properties":{"url":{"type":"string","example":""}},"required":["url"]},{"type":"object","properties":{"data":{}},"required":["data"]}]}],"example":{"text":""}},"SendMessageConfiguration":{"type":"object","properties":{"accepted_output_modes":{"type":"array","items":{"type":"string","example":""},"example":[""]},"task_push_notification_config":{"oneOf":[{"$ref":"#/components/schemas/TaskPushNotificationConfig"},{"type":"null"}],"example":null},"history_length":{"type":"integer","format":"int32"},"return_immediately":{"type":"boolean","example":false}}},"TaskPushNotificationConfig":{"type":"object","properties":{"tenant":{"type":"string","example":""},"id":{"type":"string","example":""},"task_id":{"type":"string","example":""},"url":{"type":"string","example":"url"},"token":{"type":"string","example":""},"authentication":{"oneOf":[{"$ref":"#/components/schemas/AuthenticationInfo"},{"type":"null"}],"example":null}}},"AuthenticationInfo":{"type":"object","properties":{"scheme":{"type":"string","example":"scheme"},"credentials":{"type":"string","example":""}}},"GetTaskRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"id":{"type":"string","example":"id"},"history_length":{"type":"integer","format":"int32"}}},"ListTasksRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"context_id":{"type":"string","example":""},"status":{"type":"string","enum":["TASK_STATE_UNSPECIFIED","TASK_STATE_SUBMITTED","TASK_STATE_WORKING","TASK_STATE_COMPLETED","TASK_STATE_FAILED","TASK_STATE_CANCELED","TASK_STATE_INPUT_REQUIRED","TASK_STATE_REJECTED","TASK_STATE_AUTH_REQUIRED"],"example":"TASK_STATE_SUBMITTED"},"page_size":{"type":"integer","format":"int32"},"page_token":{"type":"string","example":""},"history_length":{"type":"integer","format":"int32"},"status_timestamp_after":{"type":"string","format":"date-time"},"include_artifacts":{"type":"boolean","example":false}}},"CancelTaskRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"id":{"type":"string","example":"id"},"metadata":{"type":"object"}}},"GetTaskPushNotificationConfigRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"task_id":{"type":"string","example":"task_id"},"id":{"type":"string","example":"id"}}},"ListTaskPushNotificationConfigsRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"task_id":{"type":"string","example":"task_id"},"page_size":{"type":"integer","format":"int32"},"page_token":{"type":"string","example":""}}},"DeleteTaskPushNotificationConfigRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"task_id":{"type":"string","example":"task_id"},"id":{"type":"string","example":"id"}}},"SubscribeToTaskRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""},"id":{"type":"string","example":"id"}}},"GetExtendedAgentCardRequest":{"type":"object","properties":{"tenant":{"type":"string","example":""}}},"A2ARequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"method":{"type":"string","enum":["SendMessage","SendStreamingMessage","GetTask","ListTasks","CancelTask","CreateTaskPushNotificationConfig","GetTaskPushNotificationConfig","ListTaskPushNotificationConfigs","DeleteTaskPushNotificationConfig","SubscribeToTask","GetExtendedAgentCard"]},"params":{"oneOf":[{"$ref":"#/components/schemas/SendMessageRequest"},{"$ref":"#/components/schemas/GetTaskRequest"},{"$ref":"#/components/schemas/ListTasksRequest"},{"$ref":"#/components/schemas/CancelTaskRequest"},{"$ref":"#/components/schemas/TaskPushNotificationConfig"},{"$ref":"#/components/schemas/GetTaskPushNotificationConfigRequest"},{"$ref":"#/components/schemas/ListTaskPushNotificationConfigsRequest"},{"$ref":"#/components/schemas/DeleteTaskPushNotificationConfigRequest"},{"$ref":"#/components/schemas/SubscribeToTaskRequest"},{"$ref":"#/components/schemas/GetExtendedAgentCardRequest"}]}}}}}}