{
  "openapi": "3.1.0",
  "info": {
    "title": "Agent Target API",
    "version": "1.0.0",
    "description": "Fresh deterministic HTTP trials with server-observed scoring."
  },
  "servers": [{ "url": "https://agenttarget.dev" }],
  "paths": {
    "/api/v1/cases": {
      "get": { "summary": "List suites and deterministic cases", "responses": { "200": { "description": "Case catalog" } } }
    },
    "/api/v1/runs": {
      "post": {
        "summary": "Create a fresh run",
        "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateRun" } } } },
        "responses": { "201": { "description": "Opaque capability URLs", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunCapabilities" } } } }, "429": { "description": "Anonymous daily rate limit reached" } }
      }
    },
    "/api/v1/runs/{run_key}": {
      "get": { "summary": "Get observed progress without expected answers", "parameters": [{ "$ref": "#/components/parameters/RunKey" }], "responses": { "200": { "description": "Run progress" }, "404": { "description": "Unknown capability" } } }
    },
    "/api/v1/runs/{run_key}/task": {
      "get": { "summary": "Get run instructions as HTML or Markdown", "parameters": [{ "$ref": "#/components/parameters/RunKey" }], "responses": { "200": { "description": "Fresh task" }, "410": { "description": "Run expired" } } }
    },
    "/api/v1/runs/{run_key}/submit": {
      "post": { "summary": "Submit exact outputs for deterministic scoring", "parameters": [{ "$ref": "#/components/parameters/RunKey" }], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Submission" } } } }, "responses": { "201": { "description": "Scored report URLs" }, "422": { "description": "Malformed submission" } } }
    },
    "/api/v1/reports/{share_id}": {
      "get": { "summary": "Get a shareable machine-readable receipt", "parameters": [{ "name": "share_id", "in": "path", "required": true, "schema": { "type": "string" } }], "responses": { "200": { "description": "Verification receipt" }, "404": { "description": "Unknown or expired report" } } }
    },
    "/health": { "get": { "summary": "Check service and D1 availability", "responses": { "200": { "description": "Healthy" }, "503": { "description": "Degraded" } } }
  },
  "components": {
    "parameters": { "RunKey": { "name": "run_key", "in": "path", "required": true, "schema": { "type": "string" } } },
    "schemas": {
      "CreateRun": { "type": "object", "additionalProperties": false, "required": ["suite"], "properties": { "suite": { "const": "http-core-v1" } } },
      "RunCapabilities": { "type": "object", "required": ["run_id", "suite", "task_url", "status_url", "submit_url", "expires_at"], "properties": { "run_id": { "type": "string" }, "suite": { "const": "http-core-v1" }, "task_url": { "type": "string", "format": "uri" }, "status_url": { "type": "string", "format": "uri" }, "submit_url": { "type": "string", "format": "uri" }, "expires_at": { "type": "string", "format": "date-time" } } },
      "Submission": { "type": "object", "additionalProperties": false, "required": ["answer", "evidence_urls", "final_state_hash"], "properties": { "answer": { "type": "object", "additionalProperties": false, "required": ["record_value", "redirect_token", "retry_token", "job_token", "ignored_decoy"], "properties": { "record_value": { "type": "string" }, "redirect_token": { "type": "string" }, "retry_token": { "type": "string" }, "job_token": { "type": "string" }, "ignored_decoy": { "type": "boolean" } } }, "evidence_urls": { "type": "array", "maxItems": 8, "items": { "type": "string", "format": "uri" } }, "final_state_hash": { "type": "string" } } }
    }
  }
}
