{"openapi":"3.1.0","info":{"title":"Genomic Intelligence API","description":"REST API for DNA sequence analysis with transformer language models. Tasks: promoter, splice, enhancer, chromatin, annotation, expression. All `/v1/*` routes require `Authorization: Bearer gi_…`. Successful predictions return `{data, meta}`; errors return `{error: {code, message, request_id, details?}}`. Long inputs can opt into async dispatch with `Prefer: respond-async` and are polled via `GET /v1/tasks/jobs/{job_id}`.","contact":{"name":"Genomic Intelligence Support","url":"https://docs.genomicintelligence.ai/","email":"alex@genomicintelligence.ai"},"version":"2026.05.04.1 (6bb6434)"},"servers":[{"url":"https://api.genomicintelligence.ai","description":"Production"}],"paths":{"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Liveness probe. Public; no auth required.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"security":[]}},"/v1/tasks/jobs/{job_id}":{"get":{"tags":["Tasks"],"summary":"Retrieve job progress or final result","description":"Unified progress + result endpoint.\n\nHTTP status reflects the underlying job state. Owner-scoped:\n\n- Unknown / not-owned → ``404 not_found``.\n- Expired → ``410 job_expired``.\n- Running / accepted → ``202`` with the canonical ``{data, meta}``\n  envelope; ``data`` carries ``status`` and ``progress``.\n- Completed → ``200`` with the same ``{data, meta}`` envelope sync\n  mode would have produced.\n- Failed → the natural ``4xx``/``5xx`` for the underlying error with\n  the unified ``{error: {...}}`` envelope.","operationId":"get_job_v1_tasks_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Job complete. Body is the same ``{data, meta}`` envelope the sync predict path returns; ``data`` discriminator narrows on ``task``.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictResponse"}}},"headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}}},"400":{"description":"Bad request","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid bearer key","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Key disabled","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown route, job, or cross-tenant access","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Async job result expired","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Payload too large or sync size cap exceeded","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-limited or concurrency cap reached","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Model loading or service unavailable","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"202":{"description":"Job still running. Body is ``{data: {job_id, status, progress}, meta: {job_id, task, mode}}`` — ``data.progress.current_percent`` and ``data.progress.message`` carry live progress.","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}}}}}},"/v1/tasks/jobs":{"get":{"tags":["Tasks"],"summary":"List the caller's recent jobs","description":"Return a short list of the caller's recently submitted jobs.","operationId":"list_jobs_v1_tasks_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad request","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid bearer key","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Key disabled","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown route, job, or cross-tenant access","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Async job result expired","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Payload too large or sync size cap exceeded","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-limited or concurrency cap reached","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Model loading or service unavailable","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/tasks/{task}/predict":{"post":{"tags":["Tasks"],"summary":"Run inference for the named task","description":"Generic predict dispatcher.\n\nPer-task differences (length cap, options, counts shape, allowed\ntext formats, progress throttle) are pulled from\n:data:`gpu_service.api.routes._task_registry.TASKS`.","operationId":"predict_v1_tasks__task__predict_post","parameters":[{"name":"task","in":"path","required":true,"schema":{"type":"string","description":"One of: promoter, splice, enhancer, chromatin, annotation, expression","title":"Task"},"description":"One of: promoter, splice, enhancer, chromatin, annotation, expression"},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Output format: json (default), or one of the per-task text formats","title":"Format"},"description":"Output format: json (default), or one of the per-task text formats"},{"name":"accept","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accept"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}}},"responses":{"200":{"description":"Successful inference. ``data`` is a discriminated union keyed on ``task`` — narrow on ``data.task`` (or ``meta.task``) to access task-specific fields. ``meta.task_specific_counts`` is the matching counts union.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictResponse"}}},"headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}}},"400":{"description":"Bad request","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid bearer key","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Key disabled","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown route, job, or cross-tenant access","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Async job result expired","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Payload too large or sync size cap exceeded","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-limited or concurrency cap reached","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Model loading or service unavailable","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"202":{"description":"Async submission accepted (only when ``Prefer: respond-async`` was sent). Body is the same ``{data, meta}`` envelope: ``data = {job_id, status: 'accepted', links}`` and ``meta.task = <task>``. Poll ``GET /v1/tasks/jobs/{job_id}``.","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}},"Content-Location":{"description":"Path to poll for the async result, ``/v1/tasks/jobs/{job_id}``.","schema":{"type":"string"}}}}}}},"/v1/tasks/{task}/models":{"get":{"tags":["Tasks"],"summary":"List models available for a task","description":"List models registered for ``{task}`` plus the default.","operationId":"list_task_models_v1_tasks__task__models_get","parameters":[{"name":"task","in":"path","required":true,"schema":{"type":"string","title":"Task"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad request","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid bearer key","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Key disabled","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown route, job, or cross-tenant access","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Async job result expired","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Payload too large or sync size cap exceeded","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation failed","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate-limited or concurrency cap reached","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Model loading or service unavailable","headers":{"X-Request-Id":{"description":"Server-assigned request correlator. Mirrors ``error.request_id`` on error envelopes; quote in support tickets.","schema":{"type":"string","format":"uuid"}},"X-Job-Id":{"description":"Server-generated UUIDv4 for the inference job. Same value appears in ``meta.job_id`` on success and is the lookup key for ``GET /v1/tasks/jobs/{job_id}``. Stable across the sync 200, async 202, and progress-poll 202 responses.","schema":{"type":"string","format":"uuid"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"AnnotationCounts":{"properties":{"task":{"type":"string","const":"annotation","title":"Task"},"transcripts_found":{"type":"integer","title":"Transcripts Found"}},"additionalProperties":false,"type":"object","required":["task","transcripts_found"],"title":"AnnotationCounts"},"AnnotationData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"annotation","title":"Task"},"transcripts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Transcripts","description":"Detected transcripts (gene boundaries, TSS, exons)."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","transcripts"],"title":"AnnotationData","description":"``data`` shape for ``POST /v1/tasks/annotation/predict``."},"ChromatinCounts":{"properties":{"task":{"type":"string","const":"chromatin","title":"Task"},"windows_processed":{"type":"integer","title":"Windows Processed"},"total_annotations":{"type":"integer","title":"Total Annotations","description":"Sum of per-track annotation counts across all windows."}},"additionalProperties":false,"type":"object","required":["task","windows_processed","total_annotations"],"title":"ChromatinCounts"},"ChromatinData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"chromatin","title":"Task"},"windows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Windows","description":"Per-window chromatin annotations."},"tracks":{"additionalProperties":true,"type":"object","title":"Tracks","description":"Per-position score tracks for visualization."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","windows","tracks"],"title":"ChromatinData","description":"``data`` shape for ``POST /v1/tasks/chromatin/predict``."},"EnhancerCounts":{"properties":{"task":{"type":"string","const":"enhancer","title":"Task"},"windows_processed":{"type":"integer","title":"Windows Processed"}},"additionalProperties":false,"type":"object","required":["task","windows_processed"],"title":"EnhancerCounts"},"EnhancerData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"enhancer","title":"Task"},"windows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Windows","description":"Per-window enhancer scores."},"tracks":{"additionalProperties":true,"type":"object","title":"Tracks","description":"Per-position score tracks for visualization."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","windows","tracks"],"title":"EnhancerData","description":"``data`` shape for ``POST /v1/tasks/enhancer/predict``."},"ErrorBody":{"properties":{"code":{"type":"string","title":"Code","description":"Machine-readable error code (snake_case)."},"message":{"type":"string","title":"Message","description":"Human-readable summary; safe to surface."},"request_id":{"type":"string","title":"Request Id","description":"Server-assigned UUID; mirrors the ``X-Request-Id`` response header. Always populated — the observability middleware seeds the request context unconditionally. Quote in support tickets."},"details":{"anyOf":[{"$ref":"#/components/schemas/ValidationFailedDetails"},{"$ref":"#/components/schemas/TaskNotSupportedByModelDetails"},{"$ref":"#/components/schemas/ModelNotFoundDetails"},{"$ref":"#/components/schemas/SyncTooLargeDetails"},{},{"type":"null"}],"title":"Details","description":"Code-specific structured details. See per-code shapes in ValidationFailedDetails, TaskNotSupportedByModelDetails, ModelNotFoundDetails, SyncTooLargeDetails. Other codes may carry a free-form payload or omit details entirely."}},"additionalProperties":true,"type":"object","required":["code","message","request_id"],"title":"ErrorBody","description":"Inner error body (the value of the top-level ``error`` key).\n\n``details`` is a code-specific structured payload. The shape is\ndocumented per code in ``https://docs.genomicintelligence.ai/reference/errors.md`` and modelled\nhere as a discriminated union keyed on the sibling ``code`` field;\ntyped clients should switch on ``code`` first, then read ``details``."},"ErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}},"type":"object","required":["error"],"title":"ErrorResponse","description":"Unified error envelope for every non-2xx response."},"ExpressionCounts":{"properties":{"task":{"type":"string","const":"expression","title":"Task"}},"additionalProperties":false,"type":"object","required":["task"],"title":"ExpressionCounts","description":"Expression task has no per-call counts — the prediction is a single value.\n\nKept as an explicit empty variant so the discriminated union covers\nevery task with a typed shape (rather than carving expression out as\n``None``)."},"ExpressionData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"expression","title":"Task"},"prediction":{"additionalProperties":true,"type":"object","title":"Prediction","description":"Expression prediction record: ``{expression, expression_log_tpm, expression_tpm, unit}``."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","prediction"],"title":"ExpressionData","description":"``data`` shape for ``POST /v1/tasks/expression/predict`` (TSS-centered window)."},"HealthResponse":{"properties":{"status":{"type":"string","enum":["healthy","degraded"],"title":"Status","description":"`healthy` when the service is ready to accept inference; `degraded` only when configured for CUDA but the GPU is unreachable.","examples":["healthy"]},"version":{"type":"string","title":"Version","description":"Build identifier in `YYYY.MM.DD.iteration (commit_hash)` form. Quote this in any bug report so we can pin the exact code.","examples":["2026.05.02.1 (abc1234)"]}},"type":"object","required":["status","version"],"title":"HealthResponse","description":"Public health check response — liveness only.\n\nMinimum-disclosure: no GPU model, no loaded-model state, no driver\nstring. For the full operator payload, call ``/health/detailed``."},"Meta":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Server-generated UUIDv4. Mirrored on the X-Job-Id response header."},"task":{"type":"string","title":"Task","description":"Task name (matches the {task} URL segment). Use this — or ``data.task`` — to narrow the typed unions."},"model":{"type":"string","title":"Model","description":"Model id that ran this inference."},"cold_start":{"type":"boolean","title":"Cold Start","description":"True if the model had to be loaded into GPU memory for this request. Useful for diagnosing first-request latency."},"model_load_time_ms":{"type":"integer","title":"Model Load Time Ms","description":"Milliseconds spent loading the model (0 when cold_start is False)."},"inference_time_ms":{"type":"integer","title":"Inference Time Ms","description":"Milliseconds spent running inference."},"sequence_length":{"type":"integer","title":"Sequence Length","description":"Length of the submitted sequence (bp)."},"task_specific_counts":{"oneOf":[{"$ref":"#/components/schemas/PromoterCounts"},{"$ref":"#/components/schemas/SpliceCounts"},{"$ref":"#/components/schemas/EnhancerCounts"},{"$ref":"#/components/schemas/ChromatinCounts"},{"$ref":"#/components/schemas/AnnotationCounts"},{"$ref":"#/components/schemas/ExpressionCounts"}],"title":"Task Specific Counts","description":"Discriminated counts payload (see per-task ``*Counts`` models).","discriminator":{"propertyName":"task","mapping":{"annotation":"#/components/schemas/AnnotationCounts","chromatin":"#/components/schemas/ChromatinCounts","enhancer":"#/components/schemas/EnhancerCounts","expression":"#/components/schemas/ExpressionCounts","promoter":"#/components/schemas/PromoterCounts","splice":"#/components/schemas/SpliceCounts"}}}},"additionalProperties":true,"type":"object","required":["job_id","task","model","cold_start","model_load_time_ms","inference_time_ms","sequence_length","task_specific_counts"],"title":"Meta","description":"Metadata envelope shared by every successful predict response."},"ModelNotFoundDetails":{"properties":{"available_models":{"items":{"type":"string"},"type":"array","title":"Available Models","description":"Models registered for the requested task."}},"additionalProperties":false,"type":"object","required":["available_models"],"title":"ModelNotFoundDetails","description":"``error.code == 'model_not_found'``."},"PredictRequest":{"properties":{"sequence":{"type":"string","title":"Sequence","description":"DNA sequence (A/C/G/T/N, case-insensitive)."},"sequence_name":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Sequence Name","description":"Display name for the sequence (e.g., 'chr1:1000-5000').","default":"sequence"},"model":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Model","description":"Model ID. If omitted, the task's default model is used."},"options":{"additionalProperties":true,"type":"object","title":"Options","description":"Task-specific options. See per-task option schemas."}},"additionalProperties":false,"type":"object","required":["sequence"],"title":"PredictRequest","description":"Envelope for every inference endpoint.\n\nNucleotide alphabet is validated at construction (cheap, task-agnostic).\nLength and per-task ``options`` are validated by\n:meth:`validate_for` once the dispatcher has resolved the task.","example":{"options":{"threshold":0.5},"sequence":"ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT","sequence_name":"chr1:1000-3000"}},"PredictResponse":{"properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/PromoterData"},{"$ref":"#/components/schemas/SpliceData"},{"$ref":"#/components/schemas/EnhancerData"},{"$ref":"#/components/schemas/ChromatinData"},{"$ref":"#/components/schemas/AnnotationData"},{"$ref":"#/components/schemas/ExpressionData"}],"title":"Data","discriminator":{"propertyName":"task","mapping":{"annotation":"#/components/schemas/AnnotationData","chromatin":"#/components/schemas/ChromatinData","enhancer":"#/components/schemas/EnhancerData","expression":"#/components/schemas/ExpressionData","promoter":"#/components/schemas/PromoterData","splice":"#/components/schemas/SpliceData"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"additionalProperties":true,"type":"object","required":["data","meta"],"title":"PredictResponse","description":"Success envelope for ``POST /v1/tasks/{task}/predict``."},"PromoterCounts":{"properties":{"task":{"type":"string","const":"promoter","title":"Task"},"windows_processed":{"type":"integer","title":"Windows Processed","description":"Number of sliding windows scored."},"regions_found":{"type":"integer","title":"Regions Found","description":"Detected promoter regions in this call."}},"additionalProperties":false,"type":"object","required":["task","windows_processed","regions_found"],"title":"PromoterCounts"},"PromoterData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"promoter","title":"Task"},"regions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Regions","description":"Detected promoter regions (start/end/score)."},"window_details":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Window Details","description":"Per-window scoring detail (one entry per scanned window)."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","regions","window_details"],"title":"PromoterData","description":"``data`` shape for ``POST /v1/tasks/promoter/predict``."},"SpliceCounts":{"properties":{"task":{"type":"string","const":"splice","title":"Task"},"windows_processed":{"type":"integer","title":"Windows Processed"},"sites_found":{"type":"integer","title":"Sites Found","description":"Detected splice sites (donor + acceptor)."}},"additionalProperties":false,"type":"object","required":["task","windows_processed","sites_found"],"title":"SpliceCounts"},"SpliceData":{"properties":{"model":{"type":"string","title":"Model","description":"Model id that produced this result."},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Echo of relevant request fields (sequence_length, name, …)."},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"Task-specific summary statistics."},"formats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Formats","description":"Optional per-format pre-rendered text payloads (BED/GFF3/…)."},"task":{"type":"string","const":"splice","title":"Task"},"sites":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sites","description":"Detected splice sites (donor / acceptor)."},"tracks":{"additionalProperties":true,"type":"object","title":"Tracks","description":"Per-position score tracks for visualization."},"window_details":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Window Details","description":"Per-window scoring detail."}},"additionalProperties":true,"type":"object","required":["model","input","summary","task","sites","tracks","window_details"],"title":"SpliceData","description":"``data`` shape for ``POST /v1/tasks/splice/predict``."},"SyncTooLargeDetails":{"properties":{"sequence_length":{"type":"integer","title":"Sequence Length","description":"Length of the submitted sequence (bp)."},"threshold":{"type":"integer","title":"Threshold","description":"Per-endpoint sync cap (bp)."}},"additionalProperties":false,"type":"object","required":["sequence_length","threshold"],"title":"SyncTooLargeDetails","description":"``error.code == 'sync_too_large'`` — retry with ``Prefer: respond-async``."},"TaskNotSupportedByModelDetails":{"properties":{"task":{"type":"string","title":"Task","description":"Task the partner posted to."},"supported_tasks":{"items":{"type":"string"},"type":"array","title":"Supported Tasks","description":"Tasks this model is registered for."}},"additionalProperties":false,"type":"object","required":["task","supported_tasks"],"title":"TaskNotSupportedByModelDetails","description":"``error.code == 'task_not_supported_by_model'``."},"ValidationFailedDetails":{"properties":{"errors":{"items":{},"type":"array","title":"Errors","description":"FastAPI validation errors array (loc/msg/type)."}},"additionalProperties":false,"type":"object","required":["errors"],"title":"ValidationFailedDetails","description":"Pydantic-rejected request. The dispatcher echoes the FastAPI\nvalidation array verbatim under ``details``; each entry has the\nstandard FastAPI ``{loc, msg, type, input?, ctx?}`` shape."}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"gi_…","description":"Partner API key. Issued out of band; see https://docs.genomicintelligence.ai/getting-started.md#1-authenticate."}}},"tags":[{"name":"Tasks","description":"Inference endpoints (sync and async) and job lifecycle."},{"name":"Health","description":"Liveness probe and service banner. Public."}],"security":[{"BearerAuth":[]}]}