{"openapi":"3.1.0","info":{"title":"SeaOtter Agent API (scoped)","version":"0.1.0","description":"The agent-callable sub-surface of the SeaOtter API: the Ocean lifecycle (register / predict / select), the eval loop (feedback, runs, jobs sync|stream|async), keys, billing, acceptance policies, and training-corpus consent. Paths and schemas are generated from the app's own spec (types, required fields, enums, security, and status codes are exact; descriptions over 220 chars are truncated to their first sentence \u2014 full prose at /api/v1/openapi.json). Read THIS document before constructing a request; read the full spec only when you need a path outside this surface. Errors on these routes use the seaotter.error.v1 envelope {schema, error, message, retriable, retry_after_s?, next?, docs, detail}."},"paths":{"/api/v1/world-model/examples/registration":{"get":{"tags":["workflow-world-model"],"summary":"Fetch a signed, replayable Ocean registration example","description":"One complete, valid `seaotter.world_model_invocation_registration_request.v1` body bound to the public demo tenant namespace, self-validated through the real gateway checks before serving. [full prose: /api/v1/openapi.json]","operationId":"get_ocean_registration_example_api_v1_world_model_examples_registration_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanRegistrationExample"}}}},"500":{"description":"`ocean_example_generation_failed` \u2014 the server refused to serve an example that no longer passes its own validation."},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/world-model/invocations":{"post":{"tags":["workflow-world-model"],"summary":"Register an exact Ocean prediction invocation","description":"Assemble the trusted observed state and return the only bounded prediction request plus a one-use `X-SeaOtter-Invocation-Nonce`. [full prose: /api/v1/openapi.json]","operationId":"register_workflow_model_invocation_api_v1_world_model_invocations_post","security":[{"SeaOtterBearer":[]},{"OtterBenchKey":[]}],"parameters":[{"name":"X-SeaOtter-World-Model-Contract","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout.","enum":["seaotter.ocean.v1"],"title":"X-Seaotter-World-Model-Contract"},"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvocationRegistrationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvocationRegistrationResponse"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanErrorResponse"}}},"description":"Conflict"},"422":{"description":"The body parsed but cannot derive a valid observed state. [full prose: /api/v1/openapi.json]","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowStateInvalidError"},{"$ref":"#/components/schemas/RegionUnsupportedError"},{"$ref":"#/components/schemas/ProjectionContentInvalidError"},{"$ref":"#/components/schemas/RequestValidationErrorResponse"}],"title":"Response 422 Register Workflow Model Invocation Api V1 World Model Invocations Post"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanErrorResponse"}}},"description":"Service Unavailable"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/world-model/transitions/predict":{"post":{"tags":["workflow-world-model"],"summary":"Predict next workflow states with Ocean","description":"Ocean shows where agent work goes next. [full prose: /api/v1/openapi.json]","operationId":"predict_workflow_transitions_api_v1_world_model_transitions_predict_post","security":[{"SeaOtterBearer":[]},{"OtterBenchKey":[]}],"parameters":[{"name":"X-SeaOtter-Invocation-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":32,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","title":"X-Seaotter-Invocation-Nonce"}},{"name":"X-SeaOtter-World-Model-Contract","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout.","enum":["seaotter.ocean.v1"],"title":"X-Seaotter-World-Model-Contract"},"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanTransitionPredictionResponse"}}}},"400":{"description":"The body was empty, oversized, duplicate-keyed, or invalid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidRequestError"}}}},"401":{"description":"An issued key or signed SeaOtter bearer token is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"409":{"description":"The state or one-use registered invocation no longer matches.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StateNotTrustedError"},{"$ref":"#/components/schemas/OceanErrorResponse"}],"title":"Response 409 Predict Workflow Transitions Api V1 World Model Transitions Predict Post"}}}},"422":{"description":"The JSON body did not match the exact transition request schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestValidationErrorResponse"}}}},"502":{"description":"The prediction result failed the public transition contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderInvalidError"}}}},"503":{"description":"The state reader, durable state store, or transition runtime is unavailable.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ServiceUnavailableError"},{"$ref":"#/components/schemas/OceanErrorResponse"}],"title":"Response 503 Predict Workflow Transitions Api V1 World Model Transitions Predict Post"}}}},"504":{"description":"The transition runtime exceeded the request deadline.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderTimeoutError"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_transition_prediction_request.v1","title":"Schema","type":"string"},"request_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Request Id","type":"string"},"state":{"$ref":"#/$defs/WorkflowState"},"candidate_actions":{"items":{"$ref":"#/$defs/CandidateAction"},"maxItems":1,"minItems":1,"title":"Candidate Actions","type":"array"},"horizon_steps":{"maximum":3,"minimum":1,"title":"Horizon Steps","type":"integer"},"response_budget":{"$ref":"#/$defs/ResponseBudget"},"scenario_context":{"discriminator":{"mapping":{"absent":"#/$defs/AbsentScenarioContext","present":"#/$defs/PresentScenarioContext"},"propertyName":"status"},"oneOf":[{"$ref":"#/$defs/PresentScenarioContext"},{"$ref":"#/$defs/AbsentScenarioContext"}],"title":"Scenario Context"},"consult_provenance":{"discriminator":{"mapping":{"live":"#/$defs/LiveConsultProvenance","replay":"#/$defs/ReplayConsultProvenance","undeclared":"#/$defs/UndeclaredConsultProvenance"},"propertyName":"provenance"},"oneOf":[{"$ref":"#/$defs/LiveConsultProvenance"},{"$ref":"#/$defs/ReplayConsultProvenance"},{"$ref":"#/$defs/UndeclaredConsultProvenance"}],"title":"Consult Provenance"},"fork_context":{"discriminator":{"mapping":{"absent":"#/$defs/AbsentForkContext","declared":"#/$defs/DeclaredForkContext"},"propertyName":"status"},"oneOf":[{"$ref":"#/$defs/DeclaredForkContext"},{"$ref":"#/$defs/AbsentForkContext"}],"title":"Fork Context"}},"required":["schema","request_id","state","candidate_actions","horizon_steps","response_budget"],"title":"TransitionPredictionRequest","type":"object"}}}}}},"/api/v1/world-model/transitions/predict/stream":{"post":{"tags":["workflow-world-model"],"summary":"Predict next workflow states with Ocean, streaming live phases","description":"Identical contract and side effects to `/transitions/predict`, but the response is an `application/x-ndjson` stream of typed phase events so clients can render live progress while a scale-to-zero runtime warms up. [full prose: /api/v1/openapi.json]","operationId":"predict_workflow_transitions_stream_api_v1_world_model_transitions_predict_stream_post","security":[{"SeaOtterBearer":[]},{"OtterBenchKey":[]}],"parameters":[{"name":"X-SeaOtter-Invocation-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":32,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","title":"X-Seaotter-Invocation-Nonce"}}],"responses":{"200":{"description":"Typed NDJSON phase events ending in `result` or `failed`.","content":{"application/json":{"schema":{}},"application/x-ndjson":{}}},"401":{"description":"An issued key or signed SeaOtter bearer token is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"422":{"description":"The JSON body did not match the exact transition request schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestValidationErrorResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/world-model/transitions/predict/sse":{"post":{"tags":["workflow-world-model"],"summary":"Predict next workflow states with Ocean, streaming ocean.stream.v1","description":"Identical contract and side effects to `/transitions/predict`, but the response is a `text/event-stream` of typed `ocean.stream.v1` events: an immediate `open` frame, measured `phase` entries (admissi\u2026 [full prose: /api/v1/openapi.json]","operationId":"predict_workflow_transitions_sse_api_v1_world_model_transitions_predict_sse_post","security":[{"SeaOtterBearer":[]},{"OtterBenchKey":[]}],"parameters":[{"name":"X-SeaOtter-Invocation-Nonce","in":"header","required":true,"schema":{"type":"string","minLength":32,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$","title":"X-Seaotter-Invocation-Nonce"}},{"name":"X-SeaOtter-Ocean-Engine","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120,"pattern":"^[a-z0-9][a-z0-9._-]{0,118}$"},{"type":"null"}],"description":"Optional routed engine-seat request (ocean.engine.*). [full prose: /api/v1/openapi.json]","title":"X-Seaotter-Ocean-Engine"},"description":"Optional routed engine-seat request (ocean.engine.*). [full prose: /api/v1/openapi.json]"}],"responses":{"200":{"description":"Typed ocean.stream.v1 SSE frames ending in one terminal `done`, `error`, or `cancelled` event.","content":{"application/json":{"schema":{}},"text/event-stream":{}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/world-model/invocations/by-request/{request_id}/selection":{"post":{"tags":["workflow-world-model"],"summary":"Select one exact predicted Ocean branch","description":"Persist one displayed predicted branch as `selected`. Selection is not execution, observation, or verification evidence.","operationId":"select_workflow_model_branch_api_v1_world_model_invocations_by_request__request_id__selection_post","security":[{"SeaOtterBearer":[]},{"OtterBenchKey":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"X-SeaOtter-World-Model-Contract","in":"header","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout.","enum":["seaotter.ocean.v1"],"title":"X-Seaotter-World-Model-Contract"},"description":"Send `seaotter.ocean.v1` for the current Ocean response schemas. Omission is accepted temporarily for the previous web BFF during rollout."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBranchSelectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanWorkflowLifecycleResponse"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanErrorResponse"}}},"description":"Conflict"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OceanErrorResponse"}}},"description":"Service Unavailable"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/feedback":{"post":{"tags":["eval"],"summary":"Feedback","description":"Grade work in one call \u2192 flat verdict + run_id to keep iterating.","operationId":"feedback_api_v1_eval_feedback_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__routes__eval_agent_routes__FeedbackRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Feedback Api V1 Eval Feedback Post"}}},"headers":{"Idempotency-Replayed":{"$ref":"#/components/headers/IdempotencyReplayed"}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/runs":{"post":{"tags":["eval"],"summary":"Create Run","operationId":"create_run_api_v1_eval_runs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Run Api V1 Eval Runs Post"}}},"headers":{"Idempotency-Replayed":{"$ref":"#/components/headers/IdempotencyReplayed"}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/runs/{run_id}":{"get":{"tags":["eval"],"summary":"Get Run","operationId":"get_run_api_v1_eval_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Run Api V1 Eval Runs  Run Id  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/runs/{run_id}/iterate":{"post":{"tags":["eval"],"summary":"Iterate Run","operationId":"iterate_run_api_v1_eval_runs__run_id__iterate_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IterateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Iterate Run Api V1 Eval Runs  Run Id  Iterate Post"}}},"headers":{"Idempotency-Replayed":{"$ref":"#/components/headers/IdempotencyReplayed"}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/runs/{run_id}/feedback":{"post":{"tags":["eval-feedback"],"summary":"Submit Feedback","description":"Record a human's verdict-vs-OtterScore disagreement on a run, and return the\nrunning tighten-only recommendation for its policy/rubric scope. [full prose: /api/v1/openapi.json]","operationId":"submit_feedback_api_v1_eval_runs__run_id__feedback_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Feedback Api V1 Eval Runs  Run Id  Feedback Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/jobs":{"post":{"tags":["eval-jobs"],"summary":"Create Job Endpoint","description":"Submit work for grading. [full prose: /api/v1/openapi.json]","operationId":"create_job_endpoint_api_v1_eval_jobs_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Retry-safety for this money POST (PA-29): a re-POST with the same key and an identical payload returns the ORIGINAL job with replayed:true (never a second spend); the same key with a different payload\u2026 [full prose: /api/v1/openapi.json]","title":"Idempotency-Key"},"description":"Retry-safety for this money POST (PA-29): a re-POST with the same key and an identical payload returns the ORIGINAL job with replayed:true (never a second spend); the same key with a different payload\u2026 [full prose: /api/v1/openapi.json]"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Create Job Endpoint Api V1 Eval Jobs Post"}}},"headers":{"Idempotency-Replayed":{"$ref":"#/components/headers/IdempotencyReplayed"}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/jobs/{job_id}":{"get":{"tags":["eval-jobs"],"summary":"Get Job Endpoint","description":"Poll a job: status + progress + cost + result_summary (tenant-scoped). [full prose: /api/v1/openapi.json]","operationId":"get_job_endpoint_api_v1_eval_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Job Endpoint Api V1 Eval Jobs  Job Id  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"delete":{"tags":["eval-jobs"],"summary":"Cancel Job Endpoint","description":"Cancel a job at the next checkpoint (via the lease). [full prose: /api/v1/openapi.json]","operationId":"cancel_job_endpoint_api_v1_eval_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Job Endpoint Api V1 Eval Jobs  Job Id  Delete"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/jobs/{job_id}/ready":{"get":{"tags":["eval-jobs"],"summary":"Job Ready Endpoint","description":"Fast poll: ``{ready, status, band?, score?}`` from a status-only row read. [full prose: /api/v1/openapi.json]","operationId":"job_ready_endpoint_api_v1_eval_jobs__job_id__ready_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Job Ready Endpoint Api V1 Eval Jobs  Job Id  Ready Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/jobs/{job_id}/stream":{"get":{"tags":["eval-jobs"],"summary":"Stream Job Endpoint","description":"Tail a job's reasoning steps + status as Server-Sent Events. [full prose: /api/v1/openapi.json]","operationId":"stream_job_endpoint_api_v1_eval_jobs__job_id__stream_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"last-event-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last-Event-Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/stream":{"post":{"tags":["eval"],"summary":"Stream Run","description":"Stream the critic's grade for one artifact as Server-Sent Events. [full prose: /api/v1/openapi.json]","operationId":"stream_run_api_v1_eval_stream_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StreamEvalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/loop/stream":{"post":{"tags":["eval-vertical-loop"],"summary":"Run the whole vertical QC loop from one trigger, streaming typed measured phases (NDJSON)","operationId":"vertical_loop_stream_api_v1_eval_loop_stream_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoopStreamRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/policies":{"get":{"tags":["eval"],"summary":"List Policies","description":"Org acceptance policies the agent can condition its grading on.","operationId":"list_policies_api_v1_eval_policies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Policies Api V1 Eval Policies Get"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/rubrics":{"get":{"tags":["eval"],"summary":"Get Rubrics","operationId":"get_rubrics_api_v1_eval_rubrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Rubrics Api V1 Eval Rubrics Get"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/rubrics/{rubric_id}":{"get":{"tags":["eval"],"summary":"Get Rubric","description":"Return one rubric's criteria + weights. [full prose: /api/v1/openapi.json]","operationId":"get_rubric_api_v1_eval_rubrics__rubric_id__get","parameters":[{"name":"rubric_id","in":"path","required":true,"schema":{"type":"string","title":"Rubric Id"}},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Rubric Api V1 Eval Rubrics  Rubric Id  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/feedback-artifacts/{ref}":{"get":{"tags":["eval"],"summary":"Get Feedback Artifact","description":"Fetch a rendered feedback artifact by ``{run_id}::{idx}::{i}`` ref.","operationId":"get_feedback_artifact_api_v1_eval_feedback_artifacts__ref__get","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Feedback Artifact Api V1 Eval Feedback Artifacts  Ref  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/agent/overview":{"get":{"tags":["eval-agent-debug"],"summary":"Agent Overview","operationId":"agent_overview_api_v1_eval_agent_overview_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"number","maximum":720.0,"minimum":0.0,"default":24.0,"title":"Window Hours"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Overview Api V1 Eval Agent Overview Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/agent/tasks":{"get":{"tags":["eval-agent-debug"],"summary":"Agent Tasks","operationId":"agent_tasks_api_v1_eval_agent_tasks_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Status"}},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Modality"}},{"name":"policy","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Policy"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Tasks Api V1 Eval Agent Tasks Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/agent/tasks/{job_id}":{"get":{"tags":["eval-agent-debug"],"summary":"Agent Task Trace","operationId":"agent_task_trace_api_v1_eval_agent_tasks__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Task Trace Api V1 Eval Agent Tasks  Job Id  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent/policy":{"get":{"tags":["agent"],"summary":"Effective Policy","description":"The effective (SeaOtter default \u25b8 org \u25b8 team) policy this agent is graded on.","operationId":"effective_policy_api_v1_agent_policy_get","parameters":[{"name":"modality","in":"query","required":false,"schema":{"type":"string","default":"text","title":"Modality"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Effective Policy Api V1 Agent Policy Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/leaderboard/opt-in":{"post":{"tags":["leaderboard"],"summary":"Leaderboard Opt In","description":"Opt THIS agent key in/out of the public leaderboard + set its handle. [full prose: /api/v1/openapi.json]","operationId":"leaderboard_opt_in_api_v1_eval_leaderboard_opt_in_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptInRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Opt In Api V1 Eval Leaderboard Opt In Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/eval/leaderboard/me":{"get":{"tags":["leaderboard"],"summary":"Leaderboard Me","description":"THIS agent's standing on a board: rank, total, percentile, and the\nchallengers right behind it \u2014 the 'post to climb' nudge. [full prose: /api/v1/openapi.json]","operationId":"leaderboard_me_api_v1_eval_leaderboard_me_get","parameters":[{"name":"board","in":"query","required":false,"schema":{"type":"string","default":"activity","title":"Board"}},{"name":"modality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Me Api V1 Eval Leaderboard Me Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-keys/signup":{"post":{"tags":["agent-keys"],"summary":"Signup Agent","description":"Fully-programmatic agent self-signup \u2014 NO human step required. [full prose: /api/v1/openapi.json]","operationId":"signup_agent_api_v1_agent_keys_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSignupIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Signup Agent Api V1 Agent Keys Signup Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-keys":{"get":{"tags":["agent-keys"],"summary":"List Agent Keys","description":"List the caller tenant's keys (never the secret). Each carries its\n``vendor``/``task`` label so keys are never mistaken for one another.","operationId":"list_agent_keys_api_v1_agent_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Agent Keys Api V1 Agent Keys Get"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}},"post":{"tags":["agent-keys"],"summary":"Create Agent Key","description":"Mint a new agent API key for the caller's tenant.\n\nReturns ``{id, key, key_prefix, name, created_at}`` \u2014 ``key`` is the FULL\nsecret and is shown ONLY here (never stored, never re-fetchable).","operationId":"create_agent_key_api_v1_agent_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyCreateIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Agent Key Api V1 Agent Keys Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-keys/{key_id}/revoke":{"post":{"tags":["agent-keys"],"summary":"Revoke Agent Key","description":"Revoke one of the caller tenant's keys.\n\n404 if the key does not exist for this tenant (including a cross-tenant id\nor an already-revoked key) \u2014 a tenant can never act on another's key.","operationId":"revoke_agent_key_api_v1_agent_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Agent Key Api V1 Agent Keys  Key Id  Revoke Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-keys/verify/request":{"post":{"tags":["agent-keys"],"summary":"Verify Request","description":"Send a signed email-confirmation link to the calling key's owner email. [full prose: /api/v1/openapi.json]","operationId":"verify_request_api_v1_agent_keys_verify_request_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequestIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Request Api V1 Agent Keys Verify Request Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-keys/verify/confirm":{"get":{"tags":["agent-keys"],"summary":"Verify Confirm Get","description":"Confirm an email by clicking the link (GET ?token=...).","operationId":"verify_confirm_get_api_v1_agent_keys_verify_confirm_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Confirm Get Api V1 Agent Keys Verify Confirm Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"post":{"tags":["agent-keys"],"summary":"Verify Confirm Post","description":"Confirm an email programmatically (POST {token}).","operationId":"verify_confirm_post_api_v1_agent_keys_verify_confirm_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyConfirmIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Confirm Post Api V1 Agent Keys Verify Confirm Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/billing/pay-link":{"post":{"tags":["billing"],"summary":"Create Pay Link","description":"Create a Stripe Checkout URL for this tenant \u2014 the link to hand the owner.","operationId":"create_pay_link_api_v1_billing_pay_link_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayLinkResponse"}}},"headers":{"Idempotency-Replayed":{"$ref":"#/components/headers/IdempotencyReplayed"}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/billing/status":{"get":{"tags":["billing"],"summary":"Billing Status","description":"Report this tenant's billing + free-quota state for an agent to act on.","operationId":"billing_status_api_v1_billing_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Billing Status Api V1 Billing Status Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/identity/register":{"post":{"tags":["identity"],"summary":"Register Identity","description":"Register (or update) the caller's identity: DID + agentic email + card. [full prose: /api/v1/openapi.json]","operationId":"register_identity_api_v1_identity_register_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RegisterIdentityRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityCard"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/identity/whoami":{"get":{"tags":["identity"],"summary":"Whoami","description":"Which canonical identity does the caller's CURRENT credential resolve to? [full prose: /api/v1/openapi.json]","operationId":"whoami_api_v1_identity_whoami_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhoamiResponse"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/identity/{handle}":{"get":{"tags":["identity"],"summary":"Get Identity","description":"Public identity card (respects ``visibility``).","operationId":"get_identity_api_v1_identity__handle__get","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityCard"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/policies":{"get":{"tags":["policies"],"summary":"List Policies","operationId":"list_policies_api_v1_policies_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Policies Api V1 Policies Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"post":{"tags":["policies"],"summary":"Create Policy","operationId":"create_policy_api_v1_policies_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Policy Api V1 Policies Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/policies/{policy_id}":{"get":{"tags":["policies"],"summary":"Get Policy","operationId":"get_policy_api_v1_policies__policy_id__get","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Policy Api V1 Policies  Policy Id  Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"put":{"tags":["policies"],"summary":"Update Policy","operationId":"update_policy_api_v1_policies__policy_id__put","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Policy Api V1 Policies  Policy Id  Put"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"delete":{"tags":["policies"],"summary":"Delete Policy","operationId":"delete_policy_api_v1_policies__policy_id__delete","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Policy Api V1 Policies  Policy Id  Delete"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/training-corpus/consent":{"get":{"tags":["training-corpus","privacy"],"summary":"Get Training Corpus Consent","description":"The account's stored training-corpus consents + effective opt-out state.","operationId":"get_training_corpus_consent_api_v1_training_corpus_consent_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Training Corpus Consent Api V1 Training Corpus Consent Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"post":{"tags":["training-corpus","privacy"],"summary":"Set Training Corpus Consent","description":"Grant or revoke training-corpus consent for one modality (or '*').","operationId":"set_training_corpus_consent_api_v1_training_corpus_consent_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/src__routes__training_corpus_consent_routes__ConsentIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Training Corpus Consent Api V1 Training Corpus Consent Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"delete":{"tags":["training-corpus","privacy"],"summary":"Revoke Training Corpus Consent","description":"Idempotent revoke (Anthropic-style opt-out). [full prose: /api/v1/openapi.json]","operationId":"revoke_training_corpus_consent_api_v1_training_corpus_consent_delete","parameters":[{"name":"modality","in":"query","required":false,"schema":{"type":"string","maxLength":32,"default":"*","title":"Modality"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-otterbench-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Otterbench-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Training Corpus Consent Api V1 Training Corpus Consent Delete"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-feedback":{"post":{"tags":["agent-feedback"],"summary":"Agents: send SeaOtter platform feedback (bug / feature / docs / critic / pricing)","description":"Submit feedback about the SeaOtter PLATFORM itself (not a grade): what's wrong, missing, or great. [full prose: /api/v1/openapi.json]","operationId":"submit_agent_feedback_api_v1_agent_feedback_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentFeedbackIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Agent Feedback Api V1 Agent Feedback Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"get":{"tags":["agent-feedback"],"summary":"List Agent Feedback","description":"List agent feedback (team-gated), newest first, with optional filters.","operationId":"list_agent_feedback_api_v1_agent_feedback_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":8760,"minimum":1,"default":2160,"title":"Window Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Agent Feedback Api V1 Agent Feedback Get"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/agent-pricing":{"get":{"tags":["agent-pricing"],"summary":"Get Agent Pricing","description":"Return the current agent pricing set (public read). [full prose: /api/v1/openapi.json]","operationId":"get_agent_pricing_api_v1_agent_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Agent Pricing Api V1 Agent Pricing Get"}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts":{"post":{"tags":["intent-capture"],"summary":"Create Draft","description":"Submit an intent \u2192 compiled draft + round-1 questions. FAILS CLOSED on\nany compile failure: a typed error, never a fabricated criteria list.","operationId":"create_draft_api_v1_intent_capture_drafts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Draft Api V1 Intent Capture Drafts Post"}}}},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"description":"error: rate_limited (carries retry_after_seconds + Retry-After / X-RateLimit-* headers; scope intent_draft_create)"},"503":{"description":"error: intent_compile_unavailable | intent_translate_unavailable \u2014 fails closed, never a fabricated or unguarded draft"}}}},"/api/v1/intent-capture/drafts/{spec_id}":{"get":{"tags":["intent-capture"],"summary":"Get Draft","operationId":"get_draft_api_v1_intent_capture_drafts__spec_id__get","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Draft Api V1 Intent Capture Drafts  Spec Id  Get"}}}},"404":{"description":"error: spec_not_found"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/artifacts":{"post":{"tags":["intent-capture"],"summary":"Register Artifact","description":"Register a content-addressed buyer upload as contract material, bound\nto its own transcript turn. Idempotent per (spec, sha256).","operationId":"register_artifact_api_v1_intent_capture_drafts__spec_id__artifacts_post","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtifactRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Register Artifact Api V1 Intent Capture Drafts  Spec Id  Artifacts Post"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: interview_closed"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/interview":{"post":{"tags":["intent-capture"],"summary":"Interview","operationId":"interview_api_v1_intent_capture_drafts__spec_id__interview_post","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Interview Api V1 Intent Capture Drafts  Spec Id  Interview Post"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: interview_closed | target_required | criteria_conflict"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"503":{"description":"error: intent_compile_unavailable | intent_translate_unavailable"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/confirm":{"post":{"tags":["intent-capture"],"summary":"Confirm","description":"Explicit per-criterion machine confirmation, binding ``spec_hash``. [full prose: /api/v1/openapi.json]","operationId":"confirm_api_v1_intent_capture_drafts__spec_id__confirm_post","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Confirm Api V1 Intent Capture Drafts  Spec Id  Confirm Post"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: spec_hash_stale (carries current_spec_hash) | unticked_blocking_lines (carries missing) | acknowledgment_mismatch | interview_closed | target_required | criteria_conflict |  [full prose: /api/v1/openapi.json]"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"503":{"description":"error: intent_translate_unavailable \u2014 fails closed"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/seal":{"post":{"tags":["intent-capture"],"summary":"Seal","operationId":"seal_api_v1_intent_capture_drafts__spec_id__seal_post","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Seal Api V1 Intent Capture Drafts  Spec Id  Seal Post"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: seal_requires_confirmed | seal_conflict | unticked_blocking_lines | string_matching_only | llm_judge_only | contract_language_not_confirmable | missing_bilingual_surface"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/receipt":{"get":{"tags":["intent-capture"],"summary":"Receipt","description":"The sealed read model (\u00a74 invariant 8): every criterion with its stable\nid, origin, verbatim quote, byte span, oracle class, and artifact refs \u2014\nthe anchors downstream check specs bind to and the receipt renderer quotes.","operationId":"receipt_api_v1_intent_capture_drafts__spec_id__receipt_get","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Receipt Api V1 Intent Capture Drafts  Spec Id  Receipt Get"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: not_sealed"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/intent-capture/drafts/{spec_id}/revise":{"post":{"tags":["intent-capture"],"summary":"Revise","description":"Create version+1 of a sealed spec. If a dispatch_job is bound and in\nflight it is PAUSED (spec \u00a74 invariant 2) \u2014 state only; re-confirmation\nand re-dispatch are owned by the dispatch lifecycle.","operationId":"revise_api_v1_intent_capture_drafts__spec_id__revise_post","parameters":[{"name":"spec_id","in":"path","required":true,"schema":{"type":"string","title":"Spec Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revise Api V1 Intent Capture Drafts  Spec Id  Revise Post"}}}},"404":{"description":"error: spec_not_found"},"409":{"description":"error: revise_requires_sealed"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/jobs/{job_id}/status":{"get":{"tags":["dispatch-buyer"],"summary":"Get Buyer Job Status","description":"``seaotter.buyer_job_status.v1`` \u2014 the typed job read. Everything the\nbuyer UI renders is here; the worker's identity deliberately is NOT\n(spec \u00a71: the buyer never shops, judges, or picks).","operationId":"get_buyer_job_status_api_v1_dispatch_jobs__job_id__status_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job.","title":"Contact Email"},"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Buyer Job Status Api V1 Dispatch Jobs  Job Id  Status Get"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/jobs/{job_id}/receipt":{"get":{"tags":["dispatch-buyer"],"summary":"Get Buyer Job Receipt","description":"``seaotter.acceptance_receipt.read.v1`` \u2014 the machine-readable\nper-criterion receipt in the fixed \u00a79 order. Typed pending/none states\nwhile the decision is out; never a fabricated verdict.","operationId":"get_buyer_job_receipt_api_v1_dispatch_jobs__job_id__receipt_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job.","title":"Contact Email"},"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Buyer Job Receipt Api V1 Dispatch Jobs  Job Id  Receipt Get"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/jobs/{job_id}/contract":{"get":{"tags":["dispatch-buyer"],"summary":"Get Buyer Job Contract","description":"``seaotter.sealed_contract.v1`` \u2014 the sealed criteria contract this\njob is bound to: the exact content-hashed canonical payload the buyer\nconfirmed, re-readable at any time (the dispute artifact).","operationId":"get_buyer_job_contract_api_v1_dispatch_jobs__job_id__contract_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job.","title":"Contact Email"},"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Buyer Job Contract Api V1 Dispatch Jobs  Job Id  Contract Get"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/buyer/webhook":{"put":{"tags":["dispatch-buyer"],"summary":"Put Buyer Webhook","description":"Register (or replace) this buyer party's signed callback. [full prose: /api/v1/openapi.json]","operationId":"put_buyer_webhook_api_v1_dispatch_buyer_webhook_put","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyerWebhookIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Buyer Webhook Api V1 Dispatch Buyer Webhook Put"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"409":{"description":"detail.error: buyer_party_missing"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}},"delete":{"tags":["dispatch-buyer"],"summary":"Delete Buyer Webhook","operationId":"delete_buyer_webhook_api_v1_dispatch_buyer_webhook_delete","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job.","title":"Contact Email"},"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Buyer Webhook Api V1 Dispatch Buyer Webhook Delete"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email) | detail.error: webhook_not_registered"},"409":{"description":"detail.error: buyer_party_missing"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/buyer/notifications":{"get":{"tags":["dispatch-buyer"],"summary":"Get Buyer Notifications","description":"The buyer party's in-app list (every job the party runs \u2014 the same\nrows the web app shows). Cursor-paginated per \u00a710: opaque cursor,\nbounded limit, ``next_cursor: null`` terminates; never offsets.","operationId":"get_buyer_notifications_api_v1_dispatch_buyer_notifications_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":320,"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job.","title":"Contact Email"},"description":"The job's contact email \u2014 the buyer capability. Wrong email reads exactly like an unknown job."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Buyer Notifications Api V1 Dispatch Buyer Notifications Get"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"409":{"description":"detail.error: buyer_party_missing"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/escalations":{"post":{"tags":["escalations"],"summary":"Open Escalation","description":"One \"something is wrong\" door. [full prose: /api/v1/openapi.json]","operationId":"open_escalation_api_v1_escalations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenEscalationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Open Escalation Api V1 Escalations Post"}}}},"404":{"description":"detail.error: job_not_found (identical for unknown job and wrong email)"},"429":{"description":"detail.error: rate_limited (carries retry_after_s + Retry-After)"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"}}},"get":{"tags":["escalations"],"summary":"List Escalations","operationId":"list_escalations_api_v1_escalations_get","parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","title":"Contact Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Escalations Api V1 Escalations Get"}}}},"404":{"description":"detail.error: job_not_found"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/escalations/{escalation_id}":{"get":{"tags":["escalations"],"summary":"Get Escalation","operationId":"get_escalation_api_v1_escalations__escalation_id__get","parameters":[{"name":"escalation_id","in":"path","required":true,"schema":{"type":"string","title":"Escalation Id"}},{"name":"job_id","in":"query","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"contact_email","in":"query","required":true,"schema":{"type":"string","title":"Contact Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Escalation Api V1 Escalations  Escalation Id  Get"}}}},"404":{"description":"detail.error: job_not_found | escalation_not_found"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/escalations/{escalation_id}/appeal":{"post":{"tags":["escalations"],"summary":"Appeal Escalation","description":"The ONE further look a resolved case allows.","operationId":"appeal_escalation_api_v1_escalations__escalation_id__appeal_post","parameters":[{"name":"escalation_id","in":"path","required":true,"schema":{"type":"string","title":"Escalation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppealRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Appeal Escalation Api V1 Escalations  Escalation Id  Appeal Post"}}}},"404":{"description":"detail.error: job_not_found | escalation_not_found"},"409":{"description":"detail.error: appeal_requires_resolved | appeal_already_taken"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/dispatch/track-records/{handle}":{"get":{"tags":["dispatch-track-record"],"summary":"Get Public Track Record","description":"The public page's read \u2014 no auth, receipt-backed classes only, and a\nthin class reads the typed ``not_enough_evidence`` (never a score\ninvented for display).","operationId":"get_public_track_record_api_v1_dispatch_track_records__handle__get","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","title":"Handle"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Public Track Record Api V1 Dispatch Track Records  Handle  Get"}}}},"404":{"description":"detail.error: track_record_not_found (identical for an unknown handle and an unpublished one)"},"422":{"description":"Validation error \u2014 seaotter.error.v1 envelope {schema, error: 'validation_error', message, retriable: false, docs, detail}"},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/health":{"get":{"tags":["health"],"summary":"Health V1","operationId":"health_v1_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/version":{"get":{"tags":["health"],"summary":"Version","description":"Return API version and build info.","operationId":"version_api_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}},"/api/v1/openapi/agent.json":{"get":{"tags":["meta"],"summary":"Scoped OpenAPI for the agent-callable surface (~35 paths)","description":"Serve the scoped spec, rebuilt only when the app spec object changes.","operationId":"agent_scoped_openapi_api_v1_openapi_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"429":{"$ref":"#/components/responses/RateLimited429"}}}}},"components":{"responses":{"RateLimited429":{"description":"Throttled \u2014 seaotter.error.v1 envelope {schema, error: 'rate_limited' | 'budget_exceeded', message, retriable, retry_after_s?, next?, docs, detail}. rate_limited is retriable after the Retry-After header / retry_after_s seconds; budget_exceeded is NOT retriable on an identical immediate retry (the cap does not clear by retrying) and carries next.billing_status + next.pay_link plus the measured X-Budget-* headers.","headers":{"Retry-After":{"description":"Seconds to wait before retrying (rate limits).","schema":{"type":"integer"}},"X-Budget-Allowed":{"description":"false on a budget block (budget_exceeded only).","schema":{"type":"string"}},"X-Budget-Remaining-USD":{"description":"Measured remaining budget (budget_exceeded only).","schema":{"type":"string"}},"X-Budget-Utilization":{"description":"Measured budget utilization 0..1+ (budget scope).","schema":{"type":"string"}},"X-Budget-Scope-Breached":{"description":"Which cap tripped: per_user | per_tenant | org.","schema":{"type":"string"}}}}},"headers":{"IdempotencyReplayed":{"description":"'true' when this response is an idempotent REPLAY: the same Idempotency-Key with an identical payload returned the ORIGINAL result \u2014 no second spend. The body carries the matching typed marker replayed:true. The same key with a DIFFERENT payload is a 409 idempotency_key_conflict (seaotter.error.v1).","schema":{"type":"string"}}},"schemas":{"AbsentForkContext":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_fork_context.v1","default":"seaotter.ocean_fork_context.v1"},"status":{"type":"string","const":"absent"}},"additionalProperties":false,"type":"object","required":["status"],"description":"The typed no-grounding marker \u2014 today's behavior, explicitly declared."},"AbsentScenarioContext":{"properties":{"schema":{"type":"string","const":"seaotter.study_scenario_context.v1","default":"seaotter.study_scenario_context.v1"},"status":{"type":"string","const":"absent"}},"additionalProperties":false,"type":"object","required":["status"],"description":"The typed no-context marker \u2014 today's behavior, explicitly declared."},"ActionSupport":{"properties":{"executor_kind":{"type":"string","enum":["connector","mcp","browser","app_driver","human","external_feedback"]},"target_binding_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"capability_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"support_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"support_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"supported":{"type":"boolean","const":true}},"additionalProperties":false,"type":"object","required":["executor_kind","target_binding_id","capability_id","support_receipt_ref","support_revision_sha256","supported"]},"AgentFeedbackIn":{"properties":{"message":{"type":"string","maxLength":8000,"minLength":1},"category":{"type":"string","default":"other"},"severity":{"type":"string","default":"medium"},"agent_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"context":{"additionalProperties":true,"type":"object"},"source":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"app_version":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"surface":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["message"],"description":"An agent's (or an app user's) feedback about the platform."},"AgentKeyCreateIn":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"vendor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Which vendor/agent this key is for, e.g. 'Cursor'."},"task":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"What this key does, e.g. 'CI release gate'."},"origin":{"anyOf":[{"type":"string","enum":["desktop","ottergate","web"]},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Create body. ``tenant_id`` is taken from the auth context, never here."},"AgentSignupIn":{"properties":{"email":{"type":"string","maxLength":320,"description":"Owner email (for invoices / pay-link)."},"org_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"key_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"leaderboard_opt_in":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"handle":{"anyOf":[{"type":"string","maxLength":40,"minLength":3,"pattern":"^[A-Za-z0-9 _-]+$"},{"type":"null"}]},"vendor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"task":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"origin":{"anyOf":[{"type":"string","enum":["desktop","ottergate","web"]},{"type":"null"}]},"attribution":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["email"],"description":"Self-serve signup body \u2014 no auth; creates a fresh free-tier tenant + key."},"AnswerModel":{"properties":{"question_id":{"type":"string","maxLength":128,"minLength":1},"option_ids":{"items":{"type":"string"},"type":"array","maxItems":8},"text":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["question_id"]},"AppealRequest":{"properties":{"job_id":{"type":"string","maxLength":64,"minLength":1},"contact_email":{"type":"string","maxLength":320,"minLength":3},"detail":{"type":"string","maxLength":2000,"minLength":1}},"additionalProperties":false,"type":"object","required":["job_id","contact_email","detail"]},"ApplicationIdentity":{"properties":{"schema":{"type":"string","const":"seaotter.application_identity.v1"},"application_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"runtime_kind":{"type":"string","enum":["native","browser","web","connector","mcp"]},"runtime_instance_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["schema","application_id","runtime_kind","runtime_instance_id","revision_sha256"]},"ArtifactPartRef":{"properties":{"mime_type":{"type":"string","maxLength":128,"default":"text/plain"},"text":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}]},"data_b64":{"anyOf":[{"type":"string","maxLength":2000000},{"type":"null"}]},"uri":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"ingest_artifact_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"content_sha256":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"render_view":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"logical_name":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]},"role":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"One part of the artifact's actual content, sent inline with a run. [full prose: /api/v1/openapi.json]"},"ArtifactRequest":{"properties":{"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"mime":{"type":"string","maxLength":128,"minLength":3},"modality":{"type":"string","enum":["image","video","file"]},"byte_size":{"type":"integer","exclusiveMinimum":0.0},"storage_ref":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["sha256","mime","modality","byte_size"]},"ArtifactRevisionRef":{"properties":{"schema":{"type":"string","const":"seaotter.artifact_revision_ref.v1"},"artifact_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"lineage_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"modality":{"type":"string","enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"]},"mime_or_schema":{"type":"string","maxLength":160,"minLength":1},"byte_length":{"type":"integer","maximum":10000000000.0,"minimum":0.0},"source_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"region":{"type":"string","enum":["us-central1"],"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","description":"Data-processing region of the assembled state (never a client-surface token such as `native` or `public`). [full prose: /api/v1/openapi.json]"},"access_policy_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["schema","artifact_id","lineage_id","revision_id","digest_sha256","modality","mime_or_schema","byte_length","source_ref","region","access_policy_ref"]},"AssemblyCheckFailure":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_assembly_check_failure.v1"},"code":{"type":"string","enum":["primary_artifact_revision_absent","state_outside_target_validity","destination_confirmed_after_observation","topology_destination_revision_mismatch","scope_consent_generation_mismatch","artifact_revision_ids_not_unique","artifact_region_scope_mismatch","projection_artifact_revision_unknown","projection_modality_outside_scope","prior_transition_ids_not_unique","prior_transition_after_observation"]},"message":{"type":"string","maxLength":240,"minLength":1}},"additionalProperties":false,"type":"object","required":["schema","code","message"],"description":"One failed non-subject cross-field assembly check, with its values."},"BuiltByInfo":{"properties":{"did":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"verified":{"type":"boolean","default":false},"website":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object"},"BuiltOnInfo":{"properties":{"did":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object"},"BuyerWebhookIn":{"properties":{"job_id":{"type":"string","maxLength":64,"minLength":1},"contact_email":{"type":"string","maxLength":320,"minLength":3},"url":{"type":"string","maxLength":500,"minLength":12},"secret":{"type":"string","maxLength":128,"minLength":16}},"additionalProperties":false,"type":"object","required":["job_id","contact_email","url","secret"],"description":"Registration carries the capability (a job + its contact email) plus\nthe callback. The secret is the BUYER's shared HMAC material \u2014 stored to\nsign, never echoed back (GitHub-webhook model)."},"CandidateAction":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_candidate_action.v1"},"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"action_schema":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"parameters_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"parameters_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"support":{"$ref":"#/components/schemas/ActionSupport"},"side_effect":{"$ref":"#/components/schemas/SideEffectMetadata"},"execution_authority":{"type":"boolean","const":false}},"additionalProperties":false,"type":"object","required":["schema","action_id","action_schema","parameters_ref","parameters_digest_sha256","support","side_effect","execution_authority"]},"ConfirmRequest":{"properties":{"acknowledged":{"items":{"type":"string"},"type":"array","maxItems":64,"minItems":1},"spec_hash":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["acknowledged","spec_hash"],"description":"Per-criterion machine confirmation \u2014 the API twin of ticks. [full prose: /api/v1/openapi.json]"},"ConversationIdentity":{"properties":{"schema":{"type":"string","const":"seaotter.conversation_identity.v1"},"conversation_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["schema","conversation_id","revision_sha256"]},"CostEstimate":{"properties":{"lower_usd":{"type":"number","maximum":1000000.0,"minimum":0.0},"expected_usd":{"type":"number","maximum":1000000.0,"minimum":0.0},"upper_usd":{"type":"number","maximum":1000000.0,"minimum":0.0},"currency":{"type":"string","const":"USD"}},"additionalProperties":false,"type":"object","required":["lower_usd","expected_usd","upper_usd","currency"]},"CreateJobRequest":{"properties":{"mode":{"type":"string","maxLength":24,"default":"one_shot"},"submission":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}]},"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"priority":{"type":"string","maxLength":8,"default":"medium"},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"accept_timeout_secs":{"anyOf":[{"type":"number","maximum":60.0,"minimum":0.0},{"type":"null"}]},"cost_authorized_usd":{"anyOf":[{"type":"number","maximum":50.0,"minimum":0.0},{"type":"null"}]},"allow_mode_fallback":{"type":"boolean","default":false},"critic":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"visual_specialist_policy":{"type":"string","enum":["required","prefer"],"default":"required"},"source_model_family":{"type":"string","maxLength":128,"default":""},"required_checks":{"items":{"type":"string"},"type":"array","maxItems":16},"forward_mission":{"anyOf":[{"$ref":"#/components/schemas/ForwardMissionJobBinding"},{"type":"null"}]},"workflow_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"modality":{"type":"string","maxLength":32,"default":"text"},"rubric_id":{"type":"string","maxLength":128,"minLength":1,"default":"enterprise-acceptance-default"},"artifact_ref":{"type":"string","maxLength":2048,"minLength":1,"default":"inline:otterloop"},"artifact_parts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":16},"intent_text":{"type":"string","maxLength":4000,"default":""},"user_prompt":{"type":"string","maxLength":4000,"default":""},"critic_prompt":{"type":"string","maxLength":8000,"default":""},"references":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":5},"prior_iterations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":20},"cost_cap_usd":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}]},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]},"locale":{"type":"string","maxLength":16,"default":"en"},"return_feedback_artifacts":{"type":"boolean","default":false},"benchmark_task_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"on_behalf_of":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}]},"ocean_lineage":{"anyOf":[{"$ref":"#/components/schemas/OceanJobLineage"},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Submit work for grading. [full prose: /api/v1/openapi.json]"},"CreateRunRequest":{"properties":{"workflow_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"agent_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"modality":{"type":"string","maxLength":32},"rubric_id":{"type":"string","maxLength":128,"minLength":1},"artifact_ref":{"type":"string","maxLength":2048,"minLength":1},"artifact_parts":{"items":{"$ref":"#/components/schemas/ArtifactPartRef"},"type":"array","maxItems":16},"intent_text":{"type":"string","maxLength":4000,"default":""},"user_prompt":{"type":"string","maxLength":4000,"default":""},"critic_prompt":{"type":"string","maxLength":8000,"default":""},"references":{"items":{"$ref":"#/components/schemas/ReferenceRef"},"type":"array","maxItems":5},"prior_iterations":{"items":{"$ref":"#/components/schemas/IterationRef"},"type":"array","maxItems":20},"cost_cap_usd":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}]},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy":{"anyOf":[{"$ref":"#/components/schemas/InlinePolicy"},{"type":"null"}]},"locale":{"type":"string","maxLength":16,"default":"en"},"return_feedback_artifacts":{"type":"boolean","default":false},"visual_specialist_policy":{"type":"string","enum":["required","prefer"],"default":"required"},"source_model_family":{"type":"string","maxLength":128,"default":""},"acting_model_id":{"anyOf":[{"type":"string","maxLength":192},{"type":"null"}]},"required_checks":{"items":{"type":"string"},"type":"array","maxItems":16},"vertical":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"archetype":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy_packs":{"items":{"type":"string"},"type":"array","maxItems":16},"app_id":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}]},"vendor_id":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["modality","rubric_id","artifact_ref"]},"CredentialInfo":{"properties":{"kind":{"type":"string"},"ref":{"type":"string"}},"type":"object","required":["kind","ref"]},"DeclaredForkContext":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_fork_context.v1","default":"seaotter.ocean_fork_context.v1"},"status":{"type":"string","const":"declared"},"now_state_label":{"type":"string","maxLength":80,"minLength":1},"futures":{"items":{"$ref":"#/components/schemas/ForkFutureDisplay"},"type":"array","maxItems":3,"minItems":2}},"additionalProperties":false,"type":"object","required":["status","now_state_label","futures"],"description":"Declared fork display grounding + the measured now-state label."},"DestinationBinding":{"properties":{"schema":{"type":"string","const":"seaotter.destination_binding.v1"},"destination_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"completion_predicate_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"authority":{"type":"string","enum":["user_confirmed","policy_confirmed"]},"confirmed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"evidence_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["schema","destination_id","revision_sha256","completion_predicate_revision_sha256","authority","confirmed_at","evidence_ref"]},"DraftRequest":{"properties":{"need_text":{"type":"string","maxLength":8000,"minLength":8},"locale":{"type":"string","maxLength":16,"default":"en"},"from_token":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"dispatch_job_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["need_text"]},"DurationEstimate":{"properties":{"lower_ms":{"type":"integer","minimum":0.0},"expected_ms":{"type":"integer","minimum":0.0},"upper_ms":{"type":"integer","minimum":0.0}},"additionalProperties":false,"type":"object","required":["lower_ms","expected_ms","upper_ms"]},"Erc8004Info":{"properties":{"registry":{"type":"string"},"chainId":{"type":"integer"},"address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object","required":["registry","chainId"]},"ExactTargetBinding-Output":{"properties":{"binding_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"application":{"$ref":"#/components/schemas/ApplicationIdentity"},"session":{"$ref":"#/components/schemas/SessionIdentity"},"project":{"$ref":"#/components/schemas/ProjectIdentity"},"conversation":{"$ref":"#/components/schemas/ConversationIdentity"},"context_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"consent_generation":{"type":"integer","minimum":1.0},"primary_artifact_revision_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"valid_until":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"schema":{"type":"string","const":"seaotter.exact_target_binding.v1"},"target_identity_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["binding_id","application","session","project","conversation","context_revision_sha256","consent_generation","primary_artifact_revision_id","observed_at","valid_until","schema","target_identity_sha256"]},"FeedbackIn":{"properties":{"human_decision":{"type":"string","maxLength":32},"critic_decision":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"critic_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"rubric_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"modality":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"missed_flaw":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["human_decision"]},"ForkFutureDisplay":{"properties":{"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"title":{"type":"string","maxLength":80,"minLength":1},"consequence":{"type":"string","maxLength":160,"minLength":1},"then_step":{"type":"string","maxLength":120,"minLength":1}},"additionalProperties":false,"type":"object","required":["action_id","title","consequence","then_step"],"description":"Client-declared display grounding for ONE candidate route. [full prose: /api/v1/openapi.json]"},"ForwardMissionJobBinding":{"properties":{"schema":{"type":"string","const":"seaotter.forward_mission_job_binding.v1"},"mission_id":{"type":"string","maxLength":160,"minLength":1},"target_binding_id":{"type":"string","maxLength":160,"minLength":1},"target_fingerprint":{"type":"string","maxLength":71,"minLength":64},"intended_modality":{"type":"string","maxLength":32,"minLength":1},"artifact_id":{"type":"string","maxLength":160,"minLength":1},"lineage_id":{"type":"string","maxLength":160,"minLength":1},"revision":{"type":"string","maxLength":160,"minLength":1},"sha256":{"type":"string","maxLength":71,"minLength":64},"producer_agent_id":{"type":"string","maxLength":160,"minLength":1},"producer_model_family":{"type":"string","maxLength":160,"minLength":1},"parent_job_id":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]},"correction_plan_id":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["schema","mission_id","target_binding_id","target_fingerprint","intended_modality","artifact_id","lineage_id","revision","sha256","producer_agent_id","producer_model_family"]},"IdentityCard":{"properties":{"did":{"type":"string"},"handle":{"type":"string"},"kind":{"type":"string","enum":["human","agent","org","agent_type","model_provider"]},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["active","suspended","revoked"],"default":"active"},"visibility":{"type":"string","enum":["public","private"],"default":"public"},"wallet":{"anyOf":[{"$ref":"#/components/schemas/WalletInfo"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"trust":{"anyOf":[{"$ref":"#/components/schemas/TrustInfo"},{"type":"null"}]},"credentials":{"items":{"$ref":"#/components/schemas/CredentialInfo"},"type":"array"},"erc8004":{"anyOf":[{"$ref":"#/components/schemas/Erc8004Info"},{"type":"null"}]},"self_built":{"type":"boolean","default":true},"summary":{"anyOf":[{"type":"string"},{"type":"null"}]},"provenance":{"anyOf":[{"$ref":"#/components/schemas/ProvenanceInfo"},{"type":"null"}]},"operated_by":{"anyOf":[{"$ref":"#/components/schemas/OperatedByInfo"},{"type":"null"}]},"controller_did":{"anyOf":[{"type":"string"},{"type":"null"}]},"instance_of":{"anyOf":[{"type":"string"},{"type":"null"}]},"principal":{"anyOf":[{"$ref":"#/components/schemas/PrincipalInfo"},{"type":"null"}]},"claim_tier":{"anyOf":[{"type":"string","enum":["anonymous","self_served","operator_claimed","principal_bound","verified"]},{"type":"null"}]},"badge_visibility":{"type":"string","enum":["private","redacted","public"],"default":"private"},"passport":{"anyOf":[{"$ref":"#/components/schemas/PassportExplain"},{"type":"null"}]},"links":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object","required":["did","handle","kind"],"description":"The unifying response (DID + wallet + email + trust + credentials). [full prose: /api/v1/openapi.json]"},"IdentityProof":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_identity_proof.v1"},"proof_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"subject_kind":{"type":"string","enum":["application","session","project","conversation","destination","topology","primary_artifact","observation"]},"subject_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"subject_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"evidence_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"source":{"type":"string","enum":["app_driver","connector","mcp","browser","server_observer","human_confirmation","artifact_store"]},"consent_generation":{"type":"integer","minimum":1.0},"measured_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"valid_until":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."}},"additionalProperties":false,"type":"object","required":["schema","proof_id","subject_kind","subject_ref","subject_revision_sha256","evidence_digest_sha256","receipt_ref","source","consent_generation","measured_at","valid_until"]},"InlineBands":{"properties":{"ship":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"route_to_fix":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"quarantine":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"human_approval_below":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Decision-band thresholds (score in [0,1]; higher is better)."},"InlineCriterion":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"name":{"type":"string","maxLength":200,"minLength":1},"weight":{"type":"number","maximum":100.0,"minimum":0.0,"default":1.0},"definition":{"type":"string","maxLength":2000,"default":""}},"additionalProperties":false,"type":"object","required":["name"]},"InlineHardRule":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"kind":{"type":"string","maxLength":48},"params":{"additionalProperties":true,"type":"object"},"on_violation":{"type":"string","maxLength":16,"default":"block"},"description":{"type":"string","maxLength":500,"default":""}},"additionalProperties":false,"type":"object","required":["kind"],"description":"A deterministic, code-enforced gate (see ``src.policy.schema.HARD_RULE_KINDS``)."},"InlinePolicy":{"properties":{"name":{"type":"string","maxLength":128,"default":""},"extends":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"instructions":{"type":"string","maxLength":8000,"default":""},"directives":{"items":{"type":"string"},"type":"array","maxItems":25},"criteria":{"items":{"$ref":"#/components/schemas/InlineCriterion"},"type":"array","maxItems":25},"bands":{"anyOf":[{"$ref":"#/components/schemas/InlineBands"},{"type":"null"}]},"hard_rules":{"items":{"$ref":"#/components/schemas/InlineHardRule"},"type":"array","maxItems":25}},"additionalProperties":false,"type":"object","description":"A caller-supplied acceptance policy, composed onto the hostile base rubric. [full prose: /api/v1/openapi.json]"},"InterviewRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerModel"},"type":"array","maxItems":6},"thats_enough":{"type":"boolean","default":false}},"additionalProperties":false,"type":"object"},"InvalidRequestDetail":{"properties":{"code":{"type":"string","const":"invalid_request"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"InvalidRequestError":{"properties":{"detail":{"$ref":"#/components/schemas/InvalidRequestDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"InvocationRegistrationRequest":{"properties":{"schema":{"type":"string","const":"seaotter.world_model_invocation_registration_request.v1"},"request_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"selection_group_id":{"type":"string","maxLength":86,"minLength":86,"pattern":"^ocean:selection-group:[0-9a-f]{64}$"},"assembly_input":{"$ref":"#/components/schemas/WorkflowStateAssemblyInput"},"candidate_actions":{"items":{"$ref":"#/components/schemas/CandidateAction"},"type":"array","maxItems":1,"minItems":1},"horizon_steps":{"type":"integer","maximum":3.0,"minimum":1.0},"response_budget":{"$ref":"#/components/schemas/ResponseBudget"},"projection_contents":{"items":{"$ref":"#/components/schemas/ProjectionContentSubmission"},"type":"array","maxItems":16},"scenario_context":{"oneOf":[{"$ref":"#/components/schemas/PresentScenarioContext"},{"$ref":"#/components/schemas/AbsentScenarioContext"}],"discriminator":{"propertyName":"status","mapping":{"absent":"#/components/schemas/AbsentScenarioContext","present":"#/components/schemas/PresentScenarioContext"}}},"consult_provenance":{"oneOf":[{"$ref":"#/components/schemas/LiveConsultProvenance"},{"$ref":"#/components/schemas/ReplayConsultProvenance"},{"$ref":"#/components/schemas/UndeclaredConsultProvenance"}],"discriminator":{"propertyName":"provenance","mapping":{"live":"#/components/schemas/LiveConsultProvenance","replay":"#/components/schemas/ReplayConsultProvenance","undeclared":"#/components/schemas/UndeclaredConsultProvenance"}}},"fork_context":{"oneOf":[{"$ref":"#/components/schemas/DeclaredForkContext"},{"$ref":"#/components/schemas/AbsentForkContext"}],"discriminator":{"propertyName":"status","mapping":{"absent":"#/components/schemas/AbsentForkContext","declared":"#/components/schemas/DeclaredForkContext"}}}},"additionalProperties":false,"type":"object","required":["schema","request_id","selection_group_id","assembly_input","candidate_actions","horizon_steps","response_budget"]},"InvocationRegistrationResponse":{"properties":{"schema":{"type":"string","const":"seaotter.world_model_invocation_registration_response.v1"},"prediction_request":{"$ref":"#/components/schemas/TransitionPredictionRequest"},"selection_group_id":{"type":"string","maxLength":86,"minLength":86,"pattern":"^ocean:selection-group:[0-9a-f]{64}$"},"invocation_nonce":{"type":"string","maxLength":128,"minLength":32,"pattern":"^[A-Za-z0-9_-]+$"},"invocation_nonce_expires_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"invocation_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["schema","prediction_request","selection_group_id","invocation_nonce","invocation_nonce_expires_at","invocation_ref"]},"IterateRequest":{"properties":{"decision":{"type":"string","minLength":1},"user_prompt":{"type":"string","maxLength":4000,"default":""},"critic_prompt":{"type":"string","maxLength":8000,"default":""},"new_artifact_ref":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"new_artifact_parts":{"items":{"$ref":"#/components/schemas/ArtifactPartRef"},"type":"array","maxItems":16},"locale":{"type":"string","maxLength":16,"default":"en"},"return_feedback_artifacts":{"type":"boolean","default":false},"visual_specialist_policy":{"type":"string","enum":["required","prefer"],"default":"required"},"source_model_family":{"type":"string","maxLength":128,"default":""},"required_checks":{"items":{"type":"string"},"type":"array","maxItems":16}},"additionalProperties":false,"type":"object","required":["decision"]},"IterationRef":{"properties":{"iter":{"type":"integer","maximum":100.0,"minimum":0.0},"critique":{"type":"string","maxLength":8000,"default":""},"decision":{"type":"string","maxLength":16,"default":"pending"},"user_followup":{"type":"string","maxLength":4000,"default":""}},"additionalProperties":false,"type":"object","required":["iter"],"description":"One prior (critique, decision, follow-up) tuple \u2014 \u00a71.6 history slot.\n\nCarried in ``prior_iterations`` so a fresh run starts with N>0 history.\nDistinct from in-run iterations stored under ``eval_iterations``."},"LiveConsultProvenance":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1"},"provenance":{"type":"string","const":"live"}},"additionalProperties":false,"type":"object","required":["provenance"],"description":"An explicitly declared live consult over a fresh observed state."},"LoopStreamRequest":{"properties":{"modality":{"type":"string","maxLength":32,"default":"text"},"rubric_id":{"type":"string","maxLength":128,"default":"enterprise-acceptance-default"},"intent_text":{"type":"string","maxLength":4000,"default":""},"vertical":{"type":"string","maxLength":64,"default":"general"},"artifact_parts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":16,"minItems":1},"revised_artifact_parts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":16},"acceptance_bar":{"type":"string","enum":["ship","route_to_fix","quarantine"],"default":"ship"},"ocean":{"type":"boolean","default":true},"candidate_action_id":{"type":"string","maxLength":128,"default":"action:apply-fix"}},"additionalProperties":false,"type":"object","required":["artifact_parts"],"description":"One trigger for the whole loop."},"ModalityProjectionRef":{"properties":{"schema":{"type":"string","const":"seaotter.modality_projection_ref.v1"},"projection_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"artifact_revision_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"modality":{"type":"string","enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"]},"projection_kind":{"type":"string","enum":["structural_text","document_chunks","image_regions","visual_embedding","video_keyframes","temporal_features","audio_features","transcript_ref","page_slide_sheet_structure","accessibility_dom_scene","verifier_findings"]},"projection_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"model_visible":{"type":"boolean","const":true},"raw_artifact_included":{"type":"boolean","const":false}},"additionalProperties":false,"type":"object","required":["schema","projection_id","revision_sha256","artifact_revision_id","modality","projection_kind","projection_ref","digest_sha256","model_visible","raw_artifact_included"]},"OceanAggregateReceipt":{"properties":{"receipt_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"latency_ms":{"type":"integer","maximum":86400000.0,"minimum":0.0},"input_tokens":{"type":"integer","minimum":0.0},"output_tokens":{"type":"integer","minimum":0.0},"cost_usd":{"type":"number","maximum":1000000.0,"minimum":0.0},"currency":{"type":"string","const":"USD"}},"additionalProperties":false,"type":"object","required":["receipt_id","latency_ms","input_tokens","output_tokens","cost_usd","currency"]},"OceanArtifactRelation":{"properties":{"relation":{"type":"string","enum":["unchanged","same_lineage_new_revision","new_lineage","no_artifact","unknown"]}},"additionalProperties":false,"type":"object","required":["relation"]},"OceanBranchSelectionReceipt":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_branch_selection_receipt.v1"},"receipt_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"request_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"selection_group_id":{"type":"string","maxLength":86,"minLength":86,"pattern":"^ocean:selection-group:[0-9a-f]{64}$"},"invocation_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"choice_index":{"type":"integer","const":1},"branch_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"prediction_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"lifecycle_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"authority":{"type":"string","const":"selected"}},"additionalProperties":false,"type":"object","required":["schema","receipt_id","request_id","selection_group_id","invocation_ref","choice_index","branch_id","action_id","prediction_digest_sha256","lifecycle_receipt_ref","authority"],"description":"Browser/native-safe proof of the exact branch made Selected by the store."},"OceanConsultFork":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_consult_fork.v1","default":"seaotter.ocean_consult_fork.v1"},"status":{"type":"string","const":"fork"},"now_state":{"$ref":"#/components/schemas/OceanForkNowState"},"futures":{"items":{"$ref":"#/components/schemas/OceanForkFuture"},"type":"array","maxItems":2,"minItems":2},"authority":{"type":"string","const":"predicted","default":"predicted"}},"additionalProperties":false,"type":"object","required":["status","now_state","futures"],"description":"The present fork: EXACTLY two pressable futures over one now-state."},"OceanConsultForkAbsence":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_consult_fork.v1","default":"seaotter.ocean_consult_fork.v1"},"status":{"type":"string","const":"absent"},"reason":{"type":"string","enum":["single_candidate_consult","display_grounding_undeclared","insufficient_predicted_branches","confidence_unavailable"]}},"additionalProperties":false,"type":"object","required":["status","reason"],"description":"The typed absence: the honest reason, never a silent null."},"OceanErrorDetail":{"properties":{"code":{"type":"string","enum":["ocean_state_store_unavailable","ocean_invocation_nonce_invalid","ocean_invocation_conflict"]},"message":{"type":"string","maxLength":240,"minLength":1}},"additionalProperties":false,"type":"object","required":["code","message"]},"OceanErrorResponse":{"properties":{"detail":{"$ref":"#/components/schemas/OceanErrorDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"OceanExamplePredictCall":{"properties":{"method":{"type":"string","const":"POST"},"path":{"type":"string","const":"/api/v1/world-model/transitions/predict"},"required_headers":{"additionalProperties":{"type":"string"},"type":"object"},"body_from":{"type":"string","const":"registration_response.prediction_request"}},"additionalProperties":false,"type":"object","required":["method","path","required_headers","body_from"]},"OceanExampleRegisterCall":{"properties":{"method":{"type":"string","const":"POST"},"path":{"type":"string","const":"/api/v1/world-model/invocations"},"required_headers":{"additionalProperties":{"type":"string"},"type":"object"},"body":{"$ref":"#/components/schemas/InvocationRegistrationRequest"}},"additionalProperties":false,"type":"object","required":["method","path","required_headers","body"]},"OceanExampleSignature":{"properties":{"algorithm":{"type":"string","const":"hmac-sha256"},"key_id":{"type":"string","maxLength":64,"minLength":1},"payload_canonicalization":{"type":"string","const":"seaotter.canonical_json.v1"},"payload_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"signature_base64":{"type":"string","maxLength":88,"minLength":1}},"additionalProperties":false,"type":"object","required":["algorithm","key_id","payload_canonicalization","payload_sha256","signature_base64"],"description":"Server attestation over the served body (integrity + provenance)."},"OceanExpectedObservation":{"properties":{"kind":{"type":"string","enum":["exact_target_reread","agent_status","artifact_revision","deterministic_probe","human_confirmation","external_feedback","persisted_state"]},"falsification_predicate_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"required_receipt_types":{"items":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"type":"array","maxItems":8,"minItems":1}},"additionalProperties":false,"type":"object","required":["kind","falsification_predicate_ref","required_receipt_types"]},"OceanForkFuture":{"properties":{"branch_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"prediction_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"title":{"type":"string","maxLength":80,"minLength":1},"time_estimate_min":{"type":"integer","maximum":525600.0,"minimum":0.0},"consequence":{"type":"string","maxLength":160,"minLength":1},"then_step":{"type":"string","maxLength":120,"minLength":1},"confidence":{"type":"number","maximum":1.0,"minimum":0.0},"authority":{"type":"string","const":"predicted","default":"predicted"},"execution_authority":{"type":"boolean","const":false,"default":false}},"additionalProperties":false,"type":"object","required":["branch_id","action_id","prediction_digest_sha256","title","time_estimate_min","consequence","then_step","confidence"],"description":"One pressable future: declared prose fused with measured prediction. [full prose: /api/v1/openapi.json]"},"OceanForkNowState":{"properties":{"label":{"type":"string","maxLength":80,"minLength":1},"state_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observation_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"authority":{"type":"string","const":"observed","default":"observed"}},"additionalProperties":false,"type":"object","required":["label","state_ref","observation_receipt_ref"],"description":"The measured now-state chip, anchored to the exact observed state."},"OceanJobLineage":{"properties":{"scope_fingerprint":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"target_token":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}]},"decision_receipt_sha256":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{64}$"},{"type":"null"}]},"ocean_request_id":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Optional Ocean route lineage carried by a graded job (0167). [full prose: /api/v1/openapi.json]"},"OceanObservedState":{"properties":{"state_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"canonical_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"authority":{"type":"string","const":"observed"},"observation_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["state_id","canonical_digest_sha256","authority","observation_receipt_ref"]},"OceanPredictedBranch":{"properties":{"branch_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"prediction_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"status":{"type":"string","enum":["predicted","abstained"]},"states":{"items":{"$ref":"#/components/schemas/OceanPredictedState"},"type":"array","maxItems":3},"eventual_outcome":{"anyOf":[{"$ref":"#/components/schemas/OceanPredictedEventualOutcome"},{"type":"null"}]},"uncertainty":{"$ref":"#/components/schemas/OceanPredictionUncertainty"},"abstention":{"anyOf":[{"$ref":"#/components/schemas/OceanPredictionAbstention"},{"type":"null"}]},"preview":{"anyOf":[{"$ref":"#/components/schemas/OceanPredictedPreview"},{"type":"null"}]},"total_duration":{"anyOf":[{"$ref":"#/components/schemas/DurationEstimate"},{"type":"null"}]},"total_cost":{"anyOf":[{"$ref":"#/components/schemas/CostEstimate"},{"type":"null"}]},"total_tokens":{"anyOf":[{"$ref":"#/components/schemas/TokenEstimate"},{"type":"null"}]},"authority":{"type":"string","const":"predicted","default":"predicted"},"execution_authority":{"type":"boolean","const":false,"default":false}},"additionalProperties":false,"type":"object","required":["branch_id","action_id","prediction_digest_sha256","status","uncertainty"]},"OceanPredictedEventualOutcome":{"properties":{"outcome_code":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"destination_progress":{"type":"string","enum":["advance","hold","regress","unknown"]},"completion_predicate_status":{"type":"string","enum":["unlikely","possible","likely"]},"artifact_relation":{"$ref":"#/components/schemas/OceanArtifactRelation"},"falsifying_observation":{"$ref":"#/components/schemas/OceanExpectedObservation"},"authority":{"type":"string","const":"predicted","default":"predicted"}},"additionalProperties":false,"type":"object","required":["outcome_code","destination_progress","completion_predicate_status","artifact_relation","falsifying_observation"]},"OceanPredictedPreview":{"properties":{"preview_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"artifact_revision_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"modality":{"type":"string","enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"]},"digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"source_prediction_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"authority":{"type":"string","const":"predicted","default":"predicted"}},"additionalProperties":false,"type":"object","required":["preview_id","artifact_revision_ref","modality","digest_sha256","source_prediction_digest_sha256"]},"OceanPredictedRisk":{"properties":{"risk_code":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"severity":{"type":"string","enum":["low","medium","high","critical"]},"likelihood":{"type":"number","maximum":1.0,"minimum":0.0}},"additionalProperties":false,"type":"object","required":["risk_code","severity","likelihood"]},"OceanPredictedState":{"properties":{"horizon_step":{"type":"integer","maximum":3.0,"minimum":1.0},"state_code":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"destination_progress":{"type":"string","enum":["advance","hold","regress","unknown"]},"completion_predicate_status":{"type":"string","enum":["not_evaluated","unlikely","possible","likely"]},"artifact_relation":{"$ref":"#/components/schemas/OceanArtifactRelation"},"duration":{"$ref":"#/components/schemas/DurationEstimate"},"incremental_cost":{"$ref":"#/components/schemas/CostEstimate"},"risks":{"items":{"$ref":"#/components/schemas/OceanPredictedRisk"},"type":"array","maxItems":8},"falsifying_observation":{"$ref":"#/components/schemas/OceanExpectedObservation"},"authority":{"type":"string","const":"predicted","default":"predicted"}},"additionalProperties":false,"type":"object","required":["horizon_step","state_code","destination_progress","completion_predicate_status","artifact_relation","duration","incremental_cost","falsifying_observation"]},"OceanPredictionAbstention":{"properties":{"reason_code":{"type":"string","enum":["wrong_target","stale_context","unsupported_modality","out_of_domain","insufficient_evidence","safety_policy","response_budget"]},"censored_from_horizon_step":{"type":"integer","maximum":3.0,"minimum":1.0},"required_observation":{"$ref":"#/components/schemas/OceanExpectedObservation"}},"additionalProperties":false,"type":"object","required":["reason_code","censored_from_horizon_step","required_observation"]},"OceanPredictionUncertainty":{"properties":{"method":{"type":"string","enum":["calibrated_probability","ensemble_disagreement","uncalibrated_score","deterministic_bound"]},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"disagreement":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}]},"calibrated":{"type":"boolean"},"out_of_domain":{"type":"boolean"},"reason_codes":{"items":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"type":"array","maxItems":12,"minItems":1}},"additionalProperties":false,"type":"object","required":["method","calibrated","out_of_domain","reason_codes"]},"OceanRegistrationExample":{"properties":{"schema":{"type":"string","const":"ocean.examples.v1"},"example_id":{"type":"string","const":"registration"},"demo_tenant":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"expires_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"register":{"$ref":"#/components/schemas/OceanExampleRegisterCall"},"predict":{"$ref":"#/components/schemas/OceanExamplePredictCall"},"signature":{"$ref":"#/components/schemas/OceanExampleSignature"}},"additionalProperties":false,"type":"object","required":["schema","example_id","demo_tenant","generated_at","expires_at","predict","signature"]},"OceanTransitionPredictionResponse":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_transition_prediction_response.v1"},"model_name":{"type":"string","const":"Ocean","default":"Ocean"},"request_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observed_state":{"$ref":"#/components/schemas/OceanObservedState"},"prediction_status":{"type":"string","enum":["predicted","partially_abstained","abstained"]},"authority":{"type":"string","const":"predicted"},"consult_provenance":{"type":"string","enum":["live","replay"]},"fork":{"oneOf":[{"$ref":"#/components/schemas/OceanConsultFork"},{"$ref":"#/components/schemas/OceanConsultForkAbsence"}],"discriminator":{"propertyName":"status","mapping":{"absent":"#/components/schemas/OceanConsultForkAbsence","fork":"#/components/schemas/OceanConsultFork"}}},"horizon_steps":{"type":"integer","maximum":3.0,"minimum":1.0},"serving_mode":{"type":"string","enum":["live_model","composed","deterministic_rules","test_fixture"]},"generated_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"branches":{"items":{"$ref":"#/components/schemas/OceanPredictedBranch"},"type":"array","maxItems":2,"minItems":1},"aggregate_receipt":{"$ref":"#/components/schemas/OceanAggregateReceipt"},"invocation_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"operator_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"lifecycle":{"$ref":"#/components/schemas/OceanWorkflowLifecycle"}},"additionalProperties":false,"type":"object","required":["schema","request_id","observed_state","prediction_status","authority","consult_provenance","fork","horizon_steps","serving_mode","generated_at","branches","aggregate_receipt","invocation_ref","operator_receipt_ref","lifecycle"]},"OceanWorkflowLifecycle":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_workflow_lifecycle.v1"},"invocation_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"state_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"phase":{"type":"string","enum":["predicted","selected","running","observed","verified"]},"authority":{"type":"string","enum":["predicted","selected","running","observed","verified"]},"updated_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["schema","invocation_ref","state_ref","phase","authority","updated_at","receipt_ref"]},"OceanWorkflowLifecycleResponse":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_workflow_lifecycle_response.v1"},"model_name":{"type":"string","const":"Ocean","default":"Ocean"},"lifecycle":{"$ref":"#/components/schemas/OceanWorkflowLifecycle"},"selection_receipt":{"$ref":"#/components/schemas/OceanBranchSelectionReceipt"}},"additionalProperties":false,"type":"object","required":["schema","lifecycle","selection_receipt"]},"OpenEscalationRequest":{"properties":{"job_id":{"type":"string","maxLength":64,"minLength":1},"contact_email":{"type":"string","maxLength":320,"minLength":3},"kind":{"type":"string","enum":["acceptance_dispute","timeout","refund","other"]},"detail":{"type":"string","maxLength":2000,"default":""}},"additionalProperties":false,"type":"object","required":["job_id","contact_email","kind"]},"OperatedByInfo":{"properties":{"tenant":{"anyOf":[{"type":"string"},{"type":"null"}]},"namespace":{"anyOf":[{"type":"string"},{"type":"null"}]},"self_operated":{"type":"boolean","default":true}},"type":"object"},"OptInRequest":{"properties":{"opt_in":{"type":"boolean","default":true},"handle":{"anyOf":[{"type":"string","maxLength":40,"minLength":3,"pattern":"^[A-Za-z0-9 _-]+$"},{"type":"null"}]}},"additionalProperties":false,"type":"object"},"PassportExplain":{"properties":{"role":{"type":"string"},"summary":{"type":"string"},"you_own":{"items":{"type":"string"},"type":"array"},"you_do_not_own":{"items":{"type":"string"},"type":"array"}},"type":"object","required":["role","summary"],"description":"Plain-language \"who am I in the chain\" block (intuitive for humans+agents)."},"PayLinkRequest":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object"},"PayLinkResponse":{"properties":{"checkout_url":{"type":"string"},"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object","required":["checkout_url"]},"PolicyIn":{"properties":{"id":{"type":"string"},"name":{"type":"string","default":""},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"visibility":{"type":"string","default":"team"},"modality_scope":{"items":{"type":"string"},"type":"array"},"hard_rules":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"conditioning":{"additionalProperties":true,"type":"object"},"bands":{"additionalProperties":true,"type":"object"},"commit_message":{"type":"string","default":""}},"type":"object","required":["id"],"description":"Writable policy fields. tenant_id is taken from the auth context, never the body."},"PresentScenarioContext":{"properties":{"schema":{"type":"string","const":"seaotter.study_scenario_context.v1","default":"seaotter.study_scenario_context.v1"},"status":{"type":"string","const":"present"},"scenario_ref":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]},"persona":{"anyOf":[{"type":"string","enum":["novice","power_user"]},{"type":"null"}]},"embedded_agent":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}]},"task_class":{"anyOf":[{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]{0,63}$"},{"type":"null"}]},"app_context":{"anyOf":[{"$ref":"#/components/schemas/ScenarioAppContext"},{"type":"null"}]},"complications":{"items":{"type":"string","enum":["parallel_agents","attention_elsewhere","app_switch_mid_task","agent_error_mid_task","agent_stall","interruption","multi_agent_supervision"]},"type":"array","maxItems":7,"default":[]}},"additionalProperties":false,"type":"object","required":["status"],"description":"A known real-world scenario, \u00a78g-library-shaped."},"PrincipalInfo":{"properties":{"did":{"type":"string"},"handle":{"type":"string"}},"type":"object","required":["did","handle"]},"PriorObservedTransition":{"properties":{"schema":{"type":"string","const":"seaotter.observed_transition_ref.v1"},"transition_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"action_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"state_before_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"state_after_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"authority":{"type":"string","const":"observed"},"executed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"action_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observation_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["schema","transition_id","action_id","state_before_digest_sha256","state_after_digest_sha256","authority","executed_at","action_receipt_ref","observation_receipt_ref"]},"ProcessingScope":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_model_processing_scope.v1"},"model_processing_allowed":{"type":"boolean","const":true},"training_allowed":{"type":"boolean"},"raw_personal_content_included":{"type":"boolean","const":false},"consent_generation":{"type":"integer","minimum":1.0},"region":{"type":"string","enum":["us-central1"],"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","description":"Data-processing region of the assembled state (never a client-surface token such as `native` or `public`). [full prose: /api/v1/openapi.json]"},"scope_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"allowed_modalities":{"items":{"type":"string","enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"]},"type":"array","maxItems":10,"minItems":1}},"additionalProperties":false,"type":"object","required":["schema","model_processing_allowed","training_allowed","raw_personal_content_included","consent_generation","region","scope_receipt_ref","allowed_modalities"]},"ProjectIdentity":{"properties":{"schema":{"type":"string","const":"seaotter.project_identity.v1"},"project_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["schema","project_id","revision_sha256"]},"ProjectionContentInvalidDetail":{"properties":{"code":{"type":"string","const":"ocean_projection_content_invalid"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"ProjectionContentInvalidError":{"properties":{"detail":{"$ref":"#/components/schemas/ProjectionContentInvalidDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"ProjectionContentSubmission":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_projection_content_submission.v1"},"projection_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"text":{"type":"string","maxLength":12000,"minLength":1}},"additionalProperties":false,"type":"object","required":["schema","projection_id","digest_sha256","text"],"description":"Redacted structural text for exactly one declared projection ref. [full prose: /api/v1/openapi.json]"},"ProvenanceInfo":{"properties":{"built_by":{"anyOf":[{"$ref":"#/components/schemas/BuiltByInfo"},{"type":"null"}]},"built_on":{"anyOf":[{"$ref":"#/components/schemas/BuiltOnInfo"},{"type":"null"}]},"runs_model":{"anyOf":[{"type":"string"},{"type":"null"}]},"signed":{"type":"boolean","default":false},"revoked":{"type":"boolean","default":false},"build_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"self_built":{"type":"boolean","default":false}},"type":"object","description":"The vendor/build provenance rider on a deployment (read-only)."},"ProviderInvalidDetail":{"properties":{"code":{"type":"string","const":"world_model_transition_provider_invalid"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"ProviderInvalidError":{"properties":{"detail":{"$ref":"#/components/schemas/ProviderInvalidDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"ProviderTimeoutDetail":{"properties":{"code":{"type":"string","const":"world_model_transition_provider_timeout"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"ProviderTimeoutError":{"properties":{"detail":{"$ref":"#/components/schemas/ProviderTimeoutDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"ReferenceRef":{"properties":{"kind":{"type":"string","maxLength":16},"artifact_ref":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}]},"caption":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}]},"label":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["kind"],"description":"One reference media item \u2014 \u00a71.6.1 per-user conditional critic. [full prose: /api/v1/openapi.json]"},"RegionUnsupportedDetail":{"properties":{"code":{"type":"string","const":"ocean_processing_region_unsupported"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"RegionUnsupportedError":{"properties":{"detail":{"$ref":"#/components/schemas/RegionUnsupportedDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"RegisterIdentityRequest":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"handle":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"visibility":{"anyOf":[{"type":"string","enum":["public","private"]},{"type":"null"}]},"origin":{"anyOf":[{"type":"string","enum":["desktop","ottergate","web"]},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Optional overrides for ``POST /api/v1/identity/register``. [full prose: /api/v1/openapi.json]"},"ReplayConsultProvenance":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1"},"provenance":{"type":"string","const":"replay"},"replay_source_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"}},"additionalProperties":false,"type":"object","required":["provenance","replay_source_ref"],"description":"A declared replay consult over a HISTORICAL trusted observed state. [full prose: /api/v1/openapi.json]"},"RequestValidationErrorItem":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"msg":{"type":"string"},"type":{"type":"string"}},"additionalProperties":true,"type":"object","required":["loc","msg","type"]},"RequestValidationErrorResponse":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/RequestValidationErrorItem"},"type":"array"}},"additionalProperties":false,"type":"object","required":["detail"]},"ResponseBudget":{"properties":{"max_branches":{"type":"integer","maximum":3.0,"minimum":1.0},"max_output_tokens":{"type":"integer","maximum":65536.0,"minimum":1.0},"max_latency_ms":{"type":"integer","maximum":600000.0,"minimum":1.0},"max_cost_usd":{"type":"number","maximum":1000000.0,"minimum":0.0},"currency":{"type":"string","const":"USD"}},"additionalProperties":false,"type":"object","required":["max_branches","max_output_tokens","max_latency_ms","max_cost_usd","currency"]},"ScenarioAppContext":{"properties":{"prev_app_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]},"prev_app_name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}]},"next_app_id":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]},"next_app_name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}]},"workflow_node":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"The lived app neighborhood \u2014 the promote-moment ``app_context`` shape. [full prose: /api/v1/openapi.json]"},"ServiceUnavailableDetail":{"properties":{"code":{"type":"string","enum":["world_model_state_reader_unavailable","world_model_transition_provider_unavailable"]},"message":{"type":"string"},"reason_codes":{"items":{"type":"string"},"type":"array","default":[]}},"additionalProperties":false,"type":"object","required":["code","message"]},"ServiceUnavailableError":{"properties":{"detail":{"$ref":"#/components/schemas/ServiceUnavailableDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"SessionIdentity":{"properties":{"schema":{"type":"string","const":"seaotter.session_identity.v1"},"session_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["schema","session_id","revision_sha256"]},"SideEffectMetadata":{"properties":{"side_effect_class":{"type":"string","enum":["none","read_only","reversible_write","external_write","publish","destructive"]},"approval_required":{"type":"boolean"},"reversible":{"type":"boolean"},"side_effect_receipt_required":{"type":"boolean"}},"additionalProperties":false,"type":"object","required":["side_effect_class","approval_required","reversible","side_effect_receipt_required"]},"StateNotTrustedDetail":{"properties":{"code":{"type":"string","const":"world_model_state_not_trusted"},"message":{"type":"string"}},"additionalProperties":false,"type":"object","required":["code","message"]},"StateNotTrustedError":{"properties":{"detail":{"$ref":"#/components/schemas/StateNotTrustedDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"StreamEvalRequest":{"properties":{"workflow_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"modality":{"type":"string","maxLength":32},"rubric_id":{"type":"string","maxLength":128,"minLength":1},"artifact_ref":{"type":"string","maxLength":2048,"minLength":1},"artifact_parts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":16},"intent_text":{"type":"string","maxLength":4000,"default":""},"user_prompt":{"type":"string","maxLength":4000,"default":""},"critic_prompt":{"type":"string","maxLength":8000,"default":""},"references":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":5},"prior_iterations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":20},"cost_cap_usd":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}]},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]},"locale":{"type":"string","maxLength":16,"default":"en"},"return_feedback_artifacts":{"type":"boolean","default":false}},"additionalProperties":false,"type":"object","required":["modality","rubric_id","artifact_ref"],"description":"Mirror of ``CreateRunRequest`` \u2014 same fields, same semantics.\n\n``tenant_id`` is NOT accepted from the body; it is resolved from the auth\ncontext by ``require_eval_api_key`` (S0-1 pivot fix)."},"SubjectProofDiff":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_subject_proof_diff.v1"},"subject_kind":{"type":"string","enum":["application","session","project","conversation","destination","topology","primary_artifact","observation"]},"reasons":{"items":{"type":"string","enum":["missing_proof","duplicate_proof","subject_ref_mismatch","revision_sha256_mismatch","consent_generation_mismatch","stale_at_observation"]},"type":"array","maxItems":6,"minItems":1},"expected_subject_ref":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]},"expected_revision_sha256":{"anyOf":[{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},{"type":"null"}]},"supplied_subject_ref":{"anyOf":[{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},{"type":"null"}]},"supplied_revision_sha256":{"anyOf":[{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},{"type":"null"}]},"expected_consent_generation":{"anyOf":[{"type":"integer"},{"type":"null"}]},"supplied_consent_generation":{"anyOf":[{"type":"integer"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["schema","subject_kind","reasons"],"description":"One proof subject's expected-vs-supplied exact-identity diff."},"TargetAssemblyInput":{"properties":{"binding_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"application":{"$ref":"#/components/schemas/ApplicationIdentity"},"session":{"$ref":"#/components/schemas/SessionIdentity"},"project":{"$ref":"#/components/schemas/ProjectIdentity"},"conversation":{"$ref":"#/components/schemas/ConversationIdentity"},"context_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"consent_generation":{"type":"integer","minimum":1.0},"primary_artifact_revision_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"valid_until":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"schema":{"type":"string","const":"seaotter.exact_target_coordinates.v1"}},"additionalProperties":false,"type":"object","required":["binding_id","application","session","project","conversation","context_revision_sha256","consent_generation","primary_artifact_revision_id","observed_at","valid_until","schema"]},"TokenEstimate":{"properties":{"lower_tokens":{"type":"integer","maximum":1000000000.0,"minimum":0.0},"expected_tokens":{"type":"integer","maximum":1000000000.0,"minimum":0.0},"upper_tokens":{"type":"integer","maximum":1000000000.0,"minimum":0.0}},"additionalProperties":false,"type":"object","required":["lower_tokens","expected_tokens","upper_tokens"],"description":"Predicted-route token bounds; distinct from measured ask-price usage. [full prose: /api/v1/openapi.json]"},"TransitionPredictionRequest":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_transition_prediction_request.v1"},"request_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"state":{"$ref":"#/components/schemas/WorkflowState"},"candidate_actions":{"items":{"$ref":"#/components/schemas/CandidateAction"},"type":"array","maxItems":3,"minItems":1},"horizon_steps":{"type":"integer","maximum":3.0,"minimum":1.0},"response_budget":{"$ref":"#/components/schemas/ResponseBudget"},"scenario_context":{"oneOf":[{"$ref":"#/components/schemas/PresentScenarioContext"},{"$ref":"#/components/schemas/AbsentScenarioContext"}],"discriminator":{"propertyName":"status","mapping":{"absent":"#/components/schemas/AbsentScenarioContext","present":"#/components/schemas/PresentScenarioContext"}}},"consult_provenance":{"oneOf":[{"$ref":"#/components/schemas/LiveConsultProvenance"},{"$ref":"#/components/schemas/ReplayConsultProvenance"},{"$ref":"#/components/schemas/UndeclaredConsultProvenance"}],"discriminator":{"propertyName":"provenance","mapping":{"live":"#/components/schemas/LiveConsultProvenance","replay":"#/components/schemas/ReplayConsultProvenance","undeclared":"#/components/schemas/UndeclaredConsultProvenance"}}},"fork_context":{"oneOf":[{"$ref":"#/components/schemas/DeclaredForkContext"},{"$ref":"#/components/schemas/AbsentForkContext"}],"discriminator":{"propertyName":"status","mapping":{"absent":"#/components/schemas/AbsentForkContext","declared":"#/components/schemas/DeclaredForkContext"}}}},"additionalProperties":false,"type":"object","required":["schema","request_id","state","candidate_actions","horizon_steps","response_budget"]},"TrustInfo":{"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}]},"band":{"anyOf":[{"type":"string"},{"type":"null"}]},"report_url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"type":"object"},"UnauthorizedError":{"properties":{"detail":{"type":"string"}},"additionalProperties":false,"type":"object","required":["detail"]},"UndeclaredConsultProvenance":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1"},"provenance":{"type":"string","const":"undeclared"}},"additionalProperties":false,"type":"object","required":["provenance"],"description":"The typed pre-provenance-client marker \u2014 today's behavior, declared. [full prose: /api/v1/openapi.json]"},"VerifyConfirmIn":{"properties":{"token":{"type":"string","minLength":1}},"additionalProperties":false,"type":"object","required":["token"]},"VerifyRequestIn":{"properties":{"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}]}},"additionalProperties":false,"type":"object","description":"Request a confirmation email. ``email`` is optional \u2014 when omitted the key's\nalready-recorded ``owner_email`` is used; when supplied it (re)claims that email\n(resetting verification) and sends the link there."},"WalletInfo":{"properties":{"address":{"type":"string"},"chain":{"type":"string"},"explorer_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"balance":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]}},"type":"object","required":["address","chain"]},"WhoamiResponse":{"properties":{"did":{"type":"string"},"handle":{"type":"string"},"kind":{"type":"string","enum":["human","agent","org","agent_type","model_provider"]},"credential_count":{"type":"integer","default":0},"this_credential":{"anyOf":[{"$ref":"#/components/schemas/CredentialInfo"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["did","handle","kind"],"description":"Response for ``GET /api/v1/identity/whoami`` \u2014 which identity does the\ncaller's CURRENT credential resolve to? Lets any harness confirm \"am I the\nsame agent?\" after a /link-key claim."},"WorkflowBranchSelectionRequest":{"properties":{"schema":{"type":"string","const":"seaotter.ocean_branch_selection_request.v1"},"choice_index":{"type":"integer","const":1}},"additionalProperties":false,"type":"object","required":["schema","choice_index"]},"WorkflowState":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_state.v1"},"state_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"canonical_digest_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"assembly_identity_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"authority":{"type":"string","const":"observed"},"observation_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"destination":{"$ref":"#/components/schemas/DestinationBinding"},"target":{"$ref":"#/components/schemas/ExactTargetBinding-Output"},"topology":{"$ref":"#/components/schemas/WorkflowTopologyBinding"},"artifacts":{"items":{"$ref":"#/components/schemas/ArtifactRevisionRef"},"type":"array","maxItems":16,"minItems":1},"modality_projections":{"items":{"$ref":"#/components/schemas/ModalityProjectionRef"},"type":"array","maxItems":16},"prior_transitions":{"items":{"$ref":"#/components/schemas/PriorObservedTransition"},"type":"array","maxItems":8},"processing_scope":{"$ref":"#/components/schemas/ProcessingScope"},"identity_proofs":{"items":{"$ref":"#/components/schemas/IdentityProof"},"type":"array","maxItems":8,"minItems":8}},"additionalProperties":false,"type":"object","required":["schema","state_id","canonical_digest_sha256","assembly_identity_sha256","authority","observation_receipt_ref","observed_at","destination","target","topology","artifacts","processing_scope","identity_proofs"]},"WorkflowStateAssemblyInput":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_state_assembly_input.v1"},"observation_receipt_ref":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"observed_at":{"type":"string","format":"date-time","description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected."},"destination":{"$ref":"#/components/schemas/DestinationBinding"},"target":{"$ref":"#/components/schemas/TargetAssemblyInput"},"topology":{"$ref":"#/components/schemas/WorkflowTopologyBinding"},"artifacts":{"items":{"$ref":"#/components/schemas/ArtifactRevisionRef"},"type":"array","maxItems":16,"minItems":1},"modality_projections":{"items":{"$ref":"#/components/schemas/ModalityProjectionRef"},"type":"array","maxItems":16},"prior_transitions":{"items":{"$ref":"#/components/schemas/PriorObservedTransition"},"type":"array","maxItems":8},"processing_scope":{"$ref":"#/components/schemas/ProcessingScope"},"identity_proofs":{"items":{"$ref":"#/components/schemas/IdentityProof"},"type":"array","maxItems":8,"minItems":8}},"additionalProperties":false,"type":"object","required":["schema","observation_receipt_ref","observed_at","destination","target","topology","artifacts","processing_scope","identity_proofs"]},"WorkflowStateInvalidDetail":{"properties":{"code":{"type":"string","const":"ocean_workflow_state_invalid"},"message":{"type":"string"},"expected_subjects":{"items":{"type":"string","enum":["application","session","project","conversation","destination","topology","primary_artifact","observation"]},"type":"array","default":[]},"subject_diffs":{"items":{"$ref":"#/components/schemas/SubjectProofDiff"},"type":"array","default":[]},"failures":{"items":{"$ref":"#/components/schemas/AssemblyCheckFailure"},"type":"array","default":[]}},"additionalProperties":false,"type":"object","required":["code","message"],"description":"The self-serve registration diagnosis (never an opaque wall). [full prose: /api/v1/openapi.json]"},"WorkflowStateInvalidError":{"properties":{"detail":{"$ref":"#/components/schemas/WorkflowStateInvalidDetail"}},"additionalProperties":false,"type":"object","required":["detail"]},"WorkflowTopologyBinding":{"properties":{"schema":{"type":"string","const":"seaotter.workflow_topology_binding.v1"},"topology_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"},"current_node_id":{"type":"string","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$"},"destination_revision_sha256":{"type":"string","maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$"}},"additionalProperties":false,"type":"object","required":["schema","topology_id","revision_sha256","current_node_id","destination_revision_sha256"]},"src__routes__eval_agent_routes__FeedbackRequest":{"properties":{"modality":{"type":"string","maxLength":32,"default":"text"},"rubric_id":{"type":"string","maxLength":128,"default":"enterprise-acceptance-default"},"policy_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"policy":{"anyOf":[{"$ref":"#/components/schemas/InlinePolicy"},{"type":"null"}]},"artifact":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}]},"artifact_parts":{"items":{"$ref":"#/components/schemas/ArtifactPartRef"},"type":"array","maxItems":16},"artifact_ref":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"prompt":{"type":"string","maxLength":4000,"default":""},"intent_text":{"type":"string","maxLength":4000,"default":""},"references":{"items":{"$ref":"#/components/schemas/ReferenceRef"},"type":"array","maxItems":5},"locale":{"type":"string","maxLength":16,"default":"en"},"cost_cap_usd":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}]},"return_feedback_artifacts":{"type":"boolean","default":true}},"additionalProperties":false,"type":"object","description":"One-shot grade request. ``artifact`` is convenience inline text; for\nmultimodal pass ``artifact_parts`` (base64 data, file refs)."},"src__routes__training_corpus_consent_routes__ConsentIn":{"properties":{"granted":{"type":"boolean","description":"True = grant training-corpus collection; False = revoke."},"modality":{"type":"string","maxLength":32,"description":"A modality (text, code, image, ...) or '*' for all.","default":"*"},"scope":{"additionalProperties":true,"type":"object"}},"additionalProperties":false,"type":"object","required":["granted"]}},"securitySchemes":{"SeaOtterBearer":{"type":"http","description":"Issued SeaOtter agent key or signed SeaOtter user token.","scheme":"bearer","bearerFormat":"issued SeaOtter key or signed user token"},"OtterBenchKey":{"type":"apiKey","description":"Issued SeaOtter agent key in the explicit agent-key header.","in":"header","name":"X-OtterBench-Key"},"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-OtterBench-Key"}}},"x-seaotter":{"scope":"agent-callable","schema":"seaotter.openapi_scope.v1","full_spec":"/api/v1/openapi.json","llms_txt":"https://seaotter.ai/llms.txt","path_count":62,"compaction":{"descriptions_truncated_over_chars":220,"schema_titles_stripped":true,"auto_422_replaced_with":"seaotter.error.v1","contract_fields_exact":true},"throttling":"every operation documents 429 via #/components/responses/RateLimited429 (Retry-After + X-Budget-*)","idempotency":"money POSTs honour Idempotency-Key \u2014 an identical replay returns the ORIGINAL result (body replayed:true + the Idempotency-Replayed header, #/components/headers/IdempotencyReplayed); the same key with a different payload is a 409 idempotency_key_conflict","missing_paths":[]},"$defs":{"AbsentForkContext":{"additionalProperties":false,"description":"The typed no-grounding marker \u2014 today's behavior, explicitly declared.","properties":{"schema":{"const":"seaotter.ocean_fork_context.v1","default":"seaotter.ocean_fork_context.v1","title":"Schema","type":"string"},"status":{"const":"absent","title":"Status","type":"string"}},"required":["status"],"title":"AbsentForkContext","type":"object"},"AbsentScenarioContext":{"additionalProperties":false,"description":"The typed no-context marker \u2014 today's behavior, explicitly declared.","properties":{"schema":{"const":"seaotter.study_scenario_context.v1","default":"seaotter.study_scenario_context.v1","title":"Schema","type":"string"},"status":{"const":"absent","title":"Status","type":"string"}},"required":["status"],"title":"AbsentScenarioContext","type":"object"},"ActionSupport":{"additionalProperties":false,"properties":{"executor_kind":{"enum":["connector","mcp","browser","app_driver","human","external_feedback"],"title":"Executor Kind","type":"string"},"target_binding_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Target Binding Id","type":"string"},"capability_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Capability Id","type":"string"},"support_receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Support Receipt Ref","type":"string"},"support_revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Support Revision Sha256","type":"string"},"supported":{"const":true,"title":"Supported","type":"boolean"}},"required":["executor_kind","target_binding_id","capability_id","support_receipt_ref","support_revision_sha256","supported"],"title":"ActionSupport","type":"object"},"ApplicationIdentity":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.application_identity.v1","title":"Schema","type":"string"},"application_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Application Id","type":"string"},"runtime_kind":{"enum":["native","browser","web","connector","mcp"],"title":"Runtime Kind","type":"string"},"runtime_instance_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Runtime Instance Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"}},"required":["schema","application_id","runtime_kind","runtime_instance_id","revision_sha256"],"title":"ApplicationIdentity","type":"object"},"ArtifactRevisionRef":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.artifact_revision_ref.v1","title":"Schema","type":"string"},"artifact_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Artifact Id","type":"string"},"lineage_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Lineage Id","type":"string"},"revision_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Revision Id","type":"string"},"digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Digest Sha256","type":"string"},"modality":{"enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"],"title":"Modality","type":"string"},"mime_or_schema":{"maxLength":160,"minLength":1,"title":"Mime Or Schema","type":"string"},"byte_length":{"maximum":10000000000,"minimum":0,"title":"Byte Length","type":"integer"},"source_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Source Ref","type":"string"},"region":{"description":"Data-processing region of the assembled state (never a client-surface token such as `native` or `public`). [full prose: /api/v1/openapi.json]","enum":["us-central1"],"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Region","type":"string"},"access_policy_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Access Policy Ref","type":"string"}},"required":["schema","artifact_id","lineage_id","revision_id","digest_sha256","modality","mime_or_schema","byte_length","source_ref","region","access_policy_ref"],"title":"ArtifactRevisionRef","type":"object"},"CandidateAction":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_candidate_action.v1","title":"Schema","type":"string"},"action_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Action Id","type":"string"},"action_schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Action Schema","type":"string"},"parameters_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Parameters Ref","type":"string"},"parameters_digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Parameters Digest Sha256","type":"string"},"support":{"$ref":"#/$defs/ActionSupport"},"side_effect":{"$ref":"#/$defs/SideEffectMetadata"},"execution_authority":{"const":false,"title":"Execution Authority","type":"boolean"}},"required":["schema","action_id","action_schema","parameters_ref","parameters_digest_sha256","support","side_effect","execution_authority"],"title":"CandidateAction","type":"object"},"ConversationIdentity":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.conversation_identity.v1","title":"Schema","type":"string"},"conversation_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Conversation Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"}},"required":["schema","conversation_id","revision_sha256"],"title":"ConversationIdentity","type":"object"},"DeclaredForkContext":{"additionalProperties":false,"description":"Declared fork display grounding + the measured now-state label.","properties":{"schema":{"const":"seaotter.ocean_fork_context.v1","default":"seaotter.ocean_fork_context.v1","title":"Schema","type":"string"},"status":{"const":"declared","title":"Status","type":"string"},"now_state_label":{"maxLength":80,"minLength":1,"title":"Now State Label","type":"string"},"futures":{"items":{"$ref":"#/$defs/ForkFutureDisplay"},"maxItems":3,"minItems":2,"title":"Futures","type":"array"}},"required":["status","now_state_label","futures"],"title":"DeclaredForkContext","type":"object"},"DestinationBinding":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.destination_binding.v1","title":"Schema","type":"string"},"destination_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Destination Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"},"completion_predicate_revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Completion Predicate Revision Sha256","type":"string"},"authority":{"enum":["user_confirmed","policy_confirmed"],"title":"Authority","type":"string"},"confirmed_at":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Confirmed At","type":"string"},"evidence_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Evidence Ref","type":"string"}},"required":["schema","destination_id","revision_sha256","completion_predicate_revision_sha256","authority","confirmed_at","evidence_ref"],"title":"DestinationBinding","type":"object"},"ExactTargetBinding":{"additionalProperties":false,"properties":{"binding_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Binding Id","type":"string"},"application":{"$ref":"#/$defs/ApplicationIdentity"},"session":{"$ref":"#/$defs/SessionIdentity"},"project":{"$ref":"#/$defs/ProjectIdentity"},"conversation":{"$ref":"#/$defs/ConversationIdentity"},"context_revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Context Revision Sha256","type":"string"},"consent_generation":{"minimum":1,"title":"Consent Generation","type":"integer"},"primary_artifact_revision_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Primary Artifact Revision Id","type":"string"},"observed_at":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Observed At","type":"string"},"valid_until":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Valid Until","type":"string"},"schema":{"const":"seaotter.exact_target_binding.v1","title":"Schema","type":"string"},"target_identity_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Target Identity Sha256","type":"string"}},"required":["binding_id","application","session","project","conversation","context_revision_sha256","consent_generation","primary_artifact_revision_id","observed_at","valid_until","schema","target_identity_sha256"],"title":"ExactTargetBinding","type":"object"},"ForkFutureDisplay":{"additionalProperties":false,"description":"Client-declared display grounding for ONE candidate route. [full prose: /api/v1/openapi.json]","properties":{"action_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Action Id","type":"string"},"title":{"maxLength":80,"minLength":1,"title":"Title","type":"string"},"consequence":{"maxLength":160,"minLength":1,"title":"Consequence","type":"string"},"then_step":{"maxLength":120,"minLength":1,"title":"Then Step","type":"string"}},"required":["action_id","title","consequence","then_step"],"title":"ForkFutureDisplay","type":"object"},"IdentityProof":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_identity_proof.v1","title":"Schema","type":"string"},"proof_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Proof Id","type":"string"},"subject_kind":{"enum":["application","session","project","conversation","destination","topology","primary_artifact","observation"],"title":"Subject Kind","type":"string"},"subject_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Subject Ref","type":"string"},"subject_revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Subject Revision Sha256","type":"string"},"evidence_digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Evidence Digest Sha256","type":"string"},"receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Receipt Ref","type":"string"},"source":{"enum":["app_driver","connector","mcp","browser","server_observer","human_confirmation","artifact_store"],"title":"Source","type":"string"},"consent_generation":{"minimum":1,"title":"Consent Generation","type":"integer"},"measured_at":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Measured At","type":"string"},"valid_until":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Valid Until","type":"string"}},"required":["schema","proof_id","subject_kind","subject_ref","subject_revision_sha256","evidence_digest_sha256","receipt_ref","source","consent_generation","measured_at","valid_until"],"title":"IdentityProof","type":"object"},"LiveConsultProvenance":{"additionalProperties":false,"description":"An explicitly declared live consult over a fresh observed state.","properties":{"schema":{"const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1","title":"Schema","type":"string"},"provenance":{"const":"live","title":"Provenance","type":"string"}},"required":["provenance"],"title":"LiveConsultProvenance","type":"object"},"ModalityProjectionRef":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.modality_projection_ref.v1","title":"Schema","type":"string"},"projection_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Projection Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"},"artifact_revision_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Artifact Revision Id","type":"string"},"modality":{"enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"],"title":"Modality","type":"string"},"projection_kind":{"enum":["structural_text","document_chunks","image_regions","visual_embedding","video_keyframes","temporal_features","audio_features","transcript_ref","page_slide_sheet_structure","accessibility_dom_scene","verifier_findings"],"title":"Projection Kind","type":"string"},"projection_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Projection Ref","type":"string"},"digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Digest Sha256","type":"string"},"model_visible":{"const":true,"title":"Model Visible","type":"boolean"},"raw_artifact_included":{"const":false,"title":"Raw Artifact Included","type":"boolean"}},"required":["schema","projection_id","revision_sha256","artifact_revision_id","modality","projection_kind","projection_ref","digest_sha256","model_visible","raw_artifact_included"],"title":"ModalityProjectionRef","type":"object"},"PresentScenarioContext":{"additionalProperties":false,"description":"A known real-world scenario, \u00a78g-library-shaped.","properties":{"schema":{"const":"seaotter.study_scenario_context.v1","default":"seaotter.study_scenario_context.v1","title":"Schema","type":"string"},"status":{"const":"present","title":"Status","type":"string"},"scenario_ref":{"anyOf":[{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","type":"string"},{"type":"null"}],"title":"Scenario Ref"},"persona":{"anyOf":[{"enum":["novice","power_user"],"type":"string"},{"type":"null"}],"title":"Persona"},"embedded_agent":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"title":"Embedded Agent"},"task_class":{"anyOf":[{"maxLength":64,"minLength":1,"pattern":"^[a-z0-9][a-z0-9._-]{0,63}$","type":"string"},{"type":"null"}],"title":"Task Class"},"app_context":{"anyOf":[{"$ref":"#/$defs/ScenarioAppContext"},{"type":"null"}]},"complications":{"default":[],"items":{"enum":["parallel_agents","attention_elsewhere","app_switch_mid_task","agent_error_mid_task","agent_stall","interruption","multi_agent_supervision"],"type":"string"},"maxItems":7,"title":"Complications","type":"array"}},"required":["status"],"title":"PresentScenarioContext","type":"object"},"PriorObservedTransition":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.observed_transition_ref.v1","title":"Schema","type":"string"},"transition_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Transition Id","type":"string"},"action_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Action Id","type":"string"},"state_before_digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"State Before Digest Sha256","type":"string"},"state_after_digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"State After Digest Sha256","type":"string"},"authority":{"const":"observed","title":"Authority","type":"string"},"executed_at":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Executed At","type":"string"},"action_receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Action Receipt Ref","type":"string"},"observation_receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Observation Receipt Ref","type":"string"}},"required":["schema","transition_id","action_id","state_before_digest_sha256","state_after_digest_sha256","authority","executed_at","action_receipt_ref","observation_receipt_ref"],"title":"PriorObservedTransition","type":"object"},"ProcessingScope":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_model_processing_scope.v1","title":"Schema","type":"string"},"model_processing_allowed":{"const":true,"title":"Model Processing Allowed","type":"boolean"},"training_allowed":{"title":"Training Allowed","type":"boolean"},"raw_personal_content_included":{"const":false,"title":"Raw Personal Content Included","type":"boolean"},"consent_generation":{"minimum":1,"title":"Consent Generation","type":"integer"},"region":{"description":"Data-processing region of the assembled state (never a client-surface token such as `native` or `public`). [full prose: /api/v1/openapi.json]","enum":["us-central1"],"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Region","type":"string"},"scope_receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Scope Receipt Ref","type":"string"},"allowed_modalities":{"items":{"enum":["text","image","video","audio","document","deck","spreadsheet","code","app_state","mixed"],"type":"string"},"maxItems":10,"minItems":1,"title":"Allowed Modalities","type":"array"}},"required":["schema","model_processing_allowed","training_allowed","raw_personal_content_included","consent_generation","region","scope_receipt_ref","allowed_modalities"],"title":"ProcessingScope","type":"object"},"ProjectIdentity":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.project_identity.v1","title":"Schema","type":"string"},"project_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Project Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"}},"required":["schema","project_id","revision_sha256"],"title":"ProjectIdentity","type":"object"},"ReplayConsultProvenance":{"additionalProperties":false,"description":"A declared replay consult over a HISTORICAL trusted observed state. [full prose: /api/v1/openapi.json]","properties":{"schema":{"const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1","title":"Schema","type":"string"},"provenance":{"const":"replay","title":"Provenance","type":"string"},"replay_source_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Replay Source Ref","type":"string"}},"required":["provenance","replay_source_ref"],"title":"ReplayConsultProvenance","type":"object"},"ResponseBudget":{"additionalProperties":false,"properties":{"max_branches":{"maximum":3,"minimum":1,"title":"Max Branches","type":"integer"},"max_output_tokens":{"maximum":65536,"minimum":1,"title":"Max Output Tokens","type":"integer"},"max_latency_ms":{"maximum":600000,"minimum":1,"title":"Max Latency Ms","type":"integer"},"max_cost_usd":{"maximum":1000000.0,"minimum":0.0,"title":"Max Cost Usd","type":"number"},"currency":{"const":"USD","title":"Currency","type":"string"}},"required":["max_branches","max_output_tokens","max_latency_ms","max_cost_usd","currency"],"title":"ResponseBudget","type":"object"},"ScenarioAppContext":{"additionalProperties":false,"description":"The lived app neighborhood \u2014 the promote-moment ``app_context`` shape. [full prose: /api/v1/openapi.json]","properties":{"prev_app_id":{"anyOf":[{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","type":"string"},{"type":"null"}],"title":"Prev App Id"},"prev_app_name":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"title":"Prev App Name"},"next_app_id":{"anyOf":[{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","type":"string"},{"type":"null"}],"title":"Next App Id"},"next_app_name":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"title":"Next App Name"},"workflow_node":{"anyOf":[{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","type":"string"},{"type":"null"}],"title":"Workflow Node"}},"title":"ScenarioAppContext","type":"object"},"SessionIdentity":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.session_identity.v1","title":"Schema","type":"string"},"session_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Session Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"}},"required":["schema","session_id","revision_sha256"],"title":"SessionIdentity","type":"object"},"SideEffectMetadata":{"additionalProperties":false,"properties":{"side_effect_class":{"enum":["none","read_only","reversible_write","external_write","publish","destructive"],"title":"Side Effect Class","type":"string"},"approval_required":{"title":"Approval Required","type":"boolean"},"reversible":{"title":"Reversible","type":"boolean"},"side_effect_receipt_required":{"title":"Side Effect Receipt Required","type":"boolean"}},"required":["side_effect_class","approval_required","reversible","side_effect_receipt_required"],"title":"SideEffectMetadata","type":"object"},"UndeclaredConsultProvenance":{"additionalProperties":false,"description":"The typed pre-provenance-client marker \u2014 today's behavior, declared. [full prose: /api/v1/openapi.json]","properties":{"schema":{"const":"seaotter.ocean_consult_provenance.v1","default":"seaotter.ocean_consult_provenance.v1","title":"Schema","type":"string"},"provenance":{"const":"undeclared","title":"Provenance","type":"string"}},"required":["provenance"],"title":"UndeclaredConsultProvenance","type":"object"},"WorkflowState":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_state.v1","title":"Schema","type":"string"},"state_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"State Id","type":"string"},"canonical_digest_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Canonical Digest Sha256","type":"string"},"assembly_identity_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Assembly Identity Sha256","type":"string"},"authority":{"const":"observed","title":"Authority","type":"string"},"observation_receipt_ref":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Observation Receipt Ref","type":"string"},"observed_at":{"description":"RFC 3339 timestamp with an explicit UTC offset (e.g. 2026-07-19T10:00:00Z); offset-naive values are rejected.","format":"date-time","title":"Observed At","type":"string"},"destination":{"$ref":"#/$defs/DestinationBinding"},"target":{"$ref":"#/$defs/ExactTargetBinding"},"topology":{"$ref":"#/$defs/WorkflowTopologyBinding"},"artifacts":{"items":{"$ref":"#/$defs/ArtifactRevisionRef"},"maxItems":16,"minItems":1,"title":"Artifacts","type":"array"},"modality_projections":{"items":{"$ref":"#/$defs/ModalityProjectionRef"},"maxItems":16,"title":"Modality Projections","type":"array"},"prior_transitions":{"items":{"$ref":"#/$defs/PriorObservedTransition"},"maxItems":8,"title":"Prior Transitions","type":"array"},"processing_scope":{"$ref":"#/$defs/ProcessingScope"},"identity_proofs":{"items":{"$ref":"#/$defs/IdentityProof"},"maxItems":8,"minItems":8,"title":"Identity Proofs","type":"array"}},"required":["schema","state_id","canonical_digest_sha256","assembly_identity_sha256","authority","observation_receipt_ref","observed_at","destination","target","topology","artifacts","processing_scope","identity_proofs"],"title":"WorkflowState","type":"object"},"WorkflowTopologyBinding":{"additionalProperties":false,"properties":{"schema":{"const":"seaotter.workflow_topology_binding.v1","title":"Schema","type":"string"},"topology_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Topology Id","type":"string"},"revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Revision Sha256","type":"string"},"current_node_id":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/@#=+~-]{0,511}$","title":"Current Node Id","type":"string"},"destination_revision_sha256":{"maxLength":64,"minLength":64,"pattern":"^[0-9a-f]{64}$","title":"Destination Revision Sha256","type":"string"}},"required":["schema","topology_id","revision_sha256","current_node_id","destination_revision_sha256"],"title":"WorkflowTopologyBinding","type":"object"}}}