Kortext · OpenAPI Overlay 1.0.0
API Evangelist enhancements for the Kortext Labs AI Study Tools API
10 actions
10 updates
servers
extends
../openapi/kortext-labs-api-openapi.json
Generated by API Evangelist
Written by API Evangelist tooling for Kortext's API. It is a proposal applied on top of the contract, not a document Kortext publishes.
What the actions change
descriptionx-reversibilityx-api-evangelist-noteserverstagsx-idempotencyx-streamingx-transport-note
Targets 9
$.info
$
$.components.securitySchemes.HTTPBearer
$.paths['/podcast/v1/content/{content_id}/podcast'].post
$.paths['/tutor/v1/content/{content_id}/index'].post
$.paths['/tutor/v1/quiz/session'].post
$.paths['/chat/v1/all/stream'].post
$.paths['/tutor/v1/content/ws/{content_id}'].post
$.paths['/chat/v1/test/hello'].get
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for the Kortext Labs AI Study Tools API
version: 1.0.0
extends: ../openapi/kortext-labs-api-openapi.json
x-provenance:
generated: '2026-08-23'
method: generated
source: >-
Derived from openapi/kortext-labs-api-openapi.json (fetched verbatim from
https://api-demo.labs.kortext.com/openapi.json, HTTP 200, 2026-08-23) plus the API Evangelist
artifacts in this repository. This overlay records API Evangelist's OWN enhancements and is
never applied to the original spec; the original is preserved untouched in openapi/_original/.
note: >-
Every action below adds documentation or metadata that Kortext's FastAPI-generated spec omits.
No operation, parameter, schema or response is invented — the overlay only annotates what is
already there.
actions:
- target: $.info
description: >-
Add the description, contact, licence and terms metadata the generated spec omits entirely.
info carries only title "labsapi" and a build number.
update:
description: >-
The service behind Kortext's AI study features: quiz generation from content, a URL or
pasted text; content indexing and retrieval-augmented chat over a student's Kortext
bookshelf and uploaded files; flashcards, mnemonics, idea compass, reading plans, Mermaid
visualisations and extract-wisdom summarisation; podcast generation; and per-content study
analytics. Auth is HTTP bearer (JWT). ANNOTATION ADDED BY API EVANGELIST — not a Kortext
statement.
x-api-evangelist-note: >-
This contract is served from Kortext's labs demo and QA hosts. No production host serves it,
and Kortext publishes no developer documentation for it.
- target: $
description: >-
Add the servers[] block the generated spec omits. FastAPI emits no servers[], so a client
cannot resolve a base URL from the contract alone. Both hosts observed serving this identical
document are recorded, flagged as non-production.
update:
servers:
- url: https://api-demo.labs.kortext.com
description: >-
Labs demo host — observed serving this exact document (HTTP 200, 84,874 bytes) on
2026-08-23. NON-PRODUCTION. Added by API Evangelist from the fetch location, not declared
by Kortext.
- url: https://api-qa.labs.kortext.com
description: >-
Labs QA host — serves a byte-identical copy of this document. NON-PRODUCTION. Added by API
Evangelist.
- target: $
description: >-
Declare the tags the spec uses but never defines. Nine tag values appear on operations
(Chat, Content, Health Checks, Labs, Podcast, Quiz, Reading List, Test, podcast) and the
root tags[] array is absent, so no tag carries a description.
update:
tags:
- name: Quiz
description: Quiz session lifecycle — create a session from content, a URL or text; generate questions; submit and amend answer attempts.
- name: Content
description: Content indexing and AI study-artifact generation over an indexed piece of content.
- name: Chat
description: >-
Retrieval-augmented conversation over a student's whole shelf, a single content item or an
uploaded file, with streaming variants.
- name: Podcast
description: Two-voice AI podcast generation from a piece of content, with listing and deletion.
- name: Reading List
description: Streaming chat scoped to a reading list.
- name: Labs
description: Cross-cutting study analytics.
- name: Health Checks
description: Unauthenticated Kubernetes-style liveness and readiness probes.
- name: Test
description: Non-production test operations that should not be relied on by an integrator.
- target: $.components.securitySchemes.HTTPBearer
description: Document where the bearer token comes from. The scheme declares the mechanism but not the issuer.
update:
description: >-
HTTP bearer JWT. Tokens are issued by the Kortext platform at
https://app.kortext.com/account/token (returns 401 unauthenticated). ANNOTATION ADDED BY API
EVANGELIST from Kortext's published front-end runtime configuration at
https://vle.kortext.com/assets/config.json — Kortext does not document this in the contract.
- target: $.paths['/podcast/v1/content/{content_id}/podcast'].post
description: >-
Flag the reversibility of the most expensive write in the API. See
conventions/kortext-conventions.yml.
update:
x-reversibility:
reversible: true
reversal_operation_id: delete_podcast_podcast_v1_podcasts__podcast_id__delete
reversal_path: DELETE /podcast/v1/podcasts/{podcast_id}
window: null
window_source: null
grade: documented
note: >-
A reversal path exists but Kortext states no window and no retention policy. Added by API
Evangelist; no window is asserted because none is published.
- target: $.paths['/tutor/v1/content/{content_id}/index'].post
description: Flag the reversibility of content indexing.
update:
x-reversibility:
reversible: true
reversal_operation_id: delete_index_tutor_v1_content__content_id__delete_index_post
reversal_path: POST /tutor/v1/content/{content_id}/delete-index
window: null
window_source: null
grade: documented
- target: $.paths['/tutor/v1/quiz/session'].post
description: Record that no idempotency key is available on this write, per conventions/.
update:
x-idempotency:
supported: false
header: null
note: >-
No header parameters are declared anywhere in this contract. A retried request creates a
second quiz session. Added by API Evangelist.
- target: $.paths['/chat/v1/all/stream'].post
description: >-
Record the streaming behaviour the contract cannot express. The 200 is typed application/json
but the operation streams.
update:
x-streaming:
streams: true
declared_media_type: application/json
note: >-
This operation and its five siblings (/chat/v1/user/shelf/stream, /chat/v1/files/stream,
/chat/v1/uploaded-file/stream, /chat/v1/test/stream, /chat/v1/reading-list/stream) stream
their response. The frame format is not described in the contract, so an agent cannot
consume them from the spec alone. Added by API Evangelist.
- target: $.paths['/tutor/v1/content/ws/{content_id}'].post
description: Record that this operation implies a WebSocket the OpenAPI document cannot describe.
update:
x-transport-note: >-
Named "ws" and declared as a plain POST. Whether a WebSocket upgrade is involved cannot be
determined from the contract. Added by API Evangelist.
- target: $.paths['/chat/v1/test/hello'].get
description: Mark the test operations so an integrator does not build on them.
update:
x-stability: test-only