openapi: 3.1.0 info: title: Robot rollout verifier Archive Captions API version: 0.1.0 tags: - name: Captions paths: /api/captions: post: summary: Captions Endpoint description: 'Live action-caption track for one clip. Tasks with an approved taxonomy get the track DERIVED from the Yondu interval labels (one vocabulary everywhere; no model call) — answered with pending_labels while the labeling loop is still running, and the card re-asks once the labels land. Everything else gets the Opus narration track, computed ONCE per clip and cached to captions.json inside the clip dir, so the track the player maps currentTime onto never changes between replays (the determinism the caption strip promises). Runs in parallel with /api/opus and /api/subtasks in phase 2.' operationId: captions_endpoint_api_captions_post requestBody: content: application/json: schema: $ref: '#/components/schemas/CaptionsReq' required: true responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' tags: - Captions components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError CaptionsReq: properties: task: type: string title: Task clip_id: type: string title: Clip Id name: anyOf: - type: string - type: 'null' title: Name type: object required: - task - clip_id title: CaptionsReq