{"openapi":"3.1.0","info":{"title":"Тимон — сборка демо по URL","description":"URL → durable job → snapshot and InitAvatar package. Packaging, deployment and acceptance are separate. Service API key is not a ChatGPT token. Swagger: /docs; ReDoc: /redoc; recipient page: /yura.","version":"0.4.0"},"paths":{"/v1/openapi.json":{"get":{"tags":["Service"],"summary":"OpenAPI generated from running FastAPI models and routes","operationId":"specification_v1_openapi_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/healthz":{"get":{"tags":["Service"],"summary":"API availability; does not prove worker/provider readiness","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/":{"get":{"tags":["Interface"],"summary":"Interface","operationId":"interface__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/yura":{"get":{"tags":["Interface"],"summary":"Recipient Page","operationId":"recipient_page_yura_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/api.md":{"get":{"tags":["Service"],"summary":"Guide","operationId":"guide_v1_api_md_get","responses":{"200":{"description":"Successful Response","content":{"text/markdown":{}}}}}},"/integration.zip":{"get":{"tags":["Interface"],"summary":"Integration","operationId":"integration_integration_zip_get","responses":{"200":{"description":"Successful Response","content":{"application/zip":{}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/examples/kalinov/result":{"get":{"tags":["Example"],"summary":"Existing Kalinov result; never starts generation","operationId":"example_result_v1_examples_kalinov_result_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResult"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/showcase/kalinov/data":{"get":{"tags":["Example"],"summary":"Showcase Data","operationId":"showcase_data_showcase_kalinov_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/showcase/kalinov/packet.zip":{"get":{"tags":["Example"],"summary":"Full selected handoff; Bearer required in public mode","operationId":"showcase_packet_showcase_kalinov_packet_zip_get","responses":{"200":{"description":"Successful Response","content":{"application/zip":{}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"ServiceApiKey":[]}]}},"/showcase/kalinov/site/{route}":{"get":{"tags":["Example"],"summary":"Readonly captured page/resource; scripts/forms disabled","operationId":"captured_page_showcase_kalinov_site__route__get","parameters":[{"name":"route","in":"path","required":true,"schema":{"type":"string","title":"Route"}}],"responses":{"200":{"description":"Successful Response"},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/client/importer.py":{"get":{"tags":["Delivery"],"summary":"Importer","operationId":"importer_v1_client_importer_py_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"ServiceApiKey":[]}]}},"/v1/contract":{"get":{"tags":["Delivery"],"summary":"Contract","operationId":"contract_v1_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"ServiceApiKey":[]}]}},"/v1/examples":{"get":{"tags":["Example"],"summary":"Examples","operationId":"examples_v1_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Examples"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"ServiceApiKey":[]}]}},"/v1/jobs":{"get":{"tags":["Builds"],"summary":"Latest 30 jobs, no pagination","operationId":"list_jobs_v1_jobs_get","security":[{"ServiceApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Builds"],"summary":"Create/replay a URL build; same key and exact body return the same job","operationId":"create_job_v1_jobs_post","security":[{"ServiceApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / receipt_conflict / result_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid JSON, body, URL, receipt or daily_job_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["Builds"],"summary":"Durable state; poll every 3–10 seconds","operationId":"job_status_v1_jobs__job_id__get","security":[{"ServiceApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs/{job_id}/result":{"get":{"tags":["Delivery"],"summary":"Job Result","operationId":"job_result_v1_jobs__job_id__result_get","security":[{"ServiceApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildResult"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / receipt_conflict / result_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/platform":{"get":{"tags":["Delivery"],"summary":"Platform","operationId":"platform_v1_platform_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Platform"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"ServiceApiKey":[]}]}},"/v1/artifacts/{sha256}":{"get":{"tags":["Delivery"],"summary":"Artifact","operationId":"artifact_v1_artifacts__sha256__get","security":[{"ServiceApiKey":[]}],"parameters":[{"name":"sha256","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Sha256"}}],"responses":{"200":{"description":"Successful Response","content":{"application/zip":{}}},"206":{"description":"Requested byte range","content":{"application/zip":{}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs/{job_id}/deployments":{"post":{"tags":["Delivery"],"summary":"Store recipient evidence; does not deploy or change build acceptance","operationId":"deployment_v1_jobs__job_id__deployments_post","security":[{"ServiceApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentReceipt"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptStored"}}}},"401":{"description":"unauthorized — missing or wrong service API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found / example_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / receipt_conflict / result_not_available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid JSON, body, URL, receipt or daily_job_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Artifact":{"properties":{"kind":{"type":"string","title":"Kind"},"download_url":{"type":"string","title":"Download Url","description":"Relative URI on the same service origin; downloads require Bearer."},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Sha256"},"bytes":{"type":"integer","minimum":0.0,"title":"Bytes"}},"type":"object","required":["kind","download_url","sha256","bytes"],"title":"Artifact"},"BuildRequest":{"properties":{"source_url":{"type":"string","maxLength":2048,"title":"Source Url","description":"Public HTTP(S) URL, port 80/443, no credentials, whitespace or fragment."}},"additionalProperties":false,"type":"object","required":["source_url"],"title":"BuildRequest","examples":[{"source_url":"https://kalinovrodnik.ru/"}]},"BuildResult":{"properties":{"schema_version":{"type":"string","const":"0.1","title":"Schema Version"},"job_id":{"type":"string","pattern":"^[a-f0-9]{32}$","title":"Job Id"},"package_id":{"type":"string","title":"Package Id"},"manifest_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Manifest Sha256"},"source_url":{"type":"string","title":"Source Url"},"build_state":{"type":"string","enum":["needs_review","succeeded"],"title":"Build State"},"auto_deploy":{"type":"boolean","title":"Auto Deploy"},"runtime_contract":{"$ref":"#/components/schemas/RuntimeContract"},"artifacts":{"items":{"$ref":"#/components/schemas/Artifact"},"type":"array","minItems":1,"title":"Artifacts"},"checks":{"additionalProperties":{"$ref":"#/components/schemas/Check"},"type":"object","title":"Checks"},"limitations":{"items":{"type":"string"},"type":"array","title":"Limitations"},"scope":{"additionalProperties":true,"type":"object","title":"Scope"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary"}},"additionalProperties":true,"type":"object","required":["schema_version","job_id","package_id","manifest_sha256","source_url","build_state","auto_deploy","runtime_contract","artifacts","checks","limitations","scope"],"title":"BuildResult"},"Check":{"properties":{"status":{"type":"string","title":"Status"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"evidence":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Evidence"}},"additionalProperties":true,"type":"object","required":["status"],"title":"Check"},"DeploymentReceipt":{"properties":{"deployment_id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,100}$","title":"Deployment Id"},"package_id":{"type":"string","title":"Package Id"},"manifest_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","title":"Manifest Sha256"},"state":{"type":"string","enum":["deployed","verified","failed"],"title":"State"},"demo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Demo Url"},"overrides_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overrides Sha256"},"checks":{"additionalProperties":{"$ref":"#/components/schemas/Check"},"type":"object","title":"Checks"}},"additionalProperties":false,"type":"object","required":["deployment_id","package_id","manifest_sha256","state"],"title":"DeploymentReceipt"},"Error":{"properties":{"error":{"type":"string","title":"Error"}},"type":"object","required":["error"],"title":"Error"},"Examples":{"properties":{"examples":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Examples"}},"type":"object","required":["examples"],"title":"Examples"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Health":{"properties":{"ok":{"type":"boolean","const":true,"title":"Ok"},"version":{"type":"string","title":"Version"},"engine":{"type":"string","const":"codex-chatgpt","title":"Engine"},"framework":{"type":"string","const":"fastapi","title":"Framework"},"public_access":{"type":"boolean","title":"Public Access"}},"type":"object","required":["ok","version","engine","framework","public_access"],"title":"Health"},"Job":{"properties":{"job_id":{"type":"string","pattern":"^[a-f0-9]{32}$","title":"Job Id"},"source_url":{"type":"string","title":"Source Url"},"state":{"type":"string","enum":["queued","running","needs_review","succeeded","failed"],"title":"State"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"profile_version":{"type":"string","title":"Profile Version"},"auto_deploy":{"type":"boolean","title":"Auto Deploy"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"},"created_at":{"type":"number","title":"Created At","description":"Unix UTC seconds"},"updated_at":{"type":"number","title":"Updated At","description":"Unix UTC seconds"},"attempt":{"type":"integer","minimum":0.0,"title":"Attempt"}},"type":"object","required":["job_id","source_url","state","stage","profile_version","auto_deploy","reasons","created_at","updated_at","attempt"],"title":"Job"},"JobList":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/Job"},"type":"array","title":"Jobs"}},"type":"object","required":["jobs"],"title":"JobList"},"Platform":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"artifact":{"$ref":"#/components/schemas/Artifact"},"files":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Files"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"voice_verification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Verification"}},"additionalProperties":true,"type":"object","required":["id","version","artifact"],"title":"Platform"},"ReceiptStored":{"properties":{"stored":{"type":"boolean","const":true,"title":"Stored"},"evidence_origin":{"type":"string","const":"recipient_reported","title":"Evidence Origin"}},"type":"object","required":["stored","evidence_origin"],"title":"ReceiptStored"},"RuntimeContract":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"}},"type":"object","required":["id","version"],"title":"RuntimeContract"},"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":{"ServiceApiKey":{"type":"http","description":"Key issued by Larry for this service; not a ChatGPT token.","scheme":"bearer"}}},"servers":[{"url":"/","description":"Current service origin; localhost is available only through Larry SSH tunnel."}]}