Skip to content

platform-api reference

Generated from the live spec at https://api.v2.nairon.xyz/openapi.json (version 0.2.5 at time of writing). Full machine-readable spec: platform-api.openapi.json.

Every route except /health accepts a secret API key as either:

  • Authorization: Bearer nrn_sk_...
  • x-api-key: nrn_sk_...

OpenAI chat-completions-compatible. Unknown fields pass through to the upstream provider.

Request (ChatCompletionRequest):

FieldTypeNotes
modelstring, requiredA catalogue model tag, or "auto".
messagesChatMessage[], required{ role, content }content may be a string or content-part array.
streamboolean, default falseSSE streaming.
reasoning"turbo" | "fast" | "balanced" | "smart", optionalConsulted only when model == "auto"; never forwarded upstream.

OpenAI /v1/audio/speech-compatible.

FieldTypeNotes
inputstring, requiredText to synthesize.
voicestring, optionalA Nairon agent_voices id or name.
modelstring, optional
response_formatstring, default "wav"
speednumber, optional
streamboolean, default trueStreamed chunked audio.

Multipart upload.

FieldTypeNotes
filebinary, required
modelstring, default "auto"
languagestring, optional
response_formatstring, default "json""json" guarantees only text; "verbose_json" adds segments/language/duration.

Response (TranscriptionResponse): { text, ... }.

Method & pathPurpose
GET /v1/storesList stores.
POST /v1/storesCreate a store — { name, description? }.
GET /v1/stores/{store_id}Get a store.
DELETE /v1/stores/{store_id}Delete a store.
POST /v1/stores/{store_id}/informationAdd content — { name, sourceType: "website"|"file", source, description?, crawlMode? }.
GET /v1/stores/{store_id}/informationList content items.
DELETE /v1/stores/{store_id}/information/{information_id}Remove a content item.
POST /v1/stores/{store_id}/querySimilarity search — { query, top_k? (default 6, max 50), score_threshold? (default 0.35) }{ chunks: [{ text, score, metadata }] }.

StoreResponse: { id, name, description?, status, createdAt, updatedAt }. InformationResponse: { id, knowledgeBaseId, name, sourceType, source, crawlMode, indexingStatus, indexingProgress, createdAt, updatedAt }.

Method & pathPurpose
POST /v1/filesUpload a file (multipart) for batch input.
GET /v1/filesList files.
GET /v1/files/{file_id}Get file metadata.
DELETE /v1/files/{file_id}Delete a file.
GET /v1/files/{file_id}/contentDownload file content (e.g. batch output JSONL).
POST /v1/batchesCreate a batch — { input_file_id, endpoint, completion_window? (default "24h"), metadata? }.
GET /v1/batchesList batches.
GET /v1/batches/{batch_id}Get batch status.
POST /v1/batches/{batch_id}/cancelCancel a batch.

Batch lifecycle follows the OpenAI Batch object model: validating → in_progress → completed/failed/expired/cancelled.

There is no realtime path in the OpenAPI document (it’s a WebSocket upgrade, not a documented REST route) — see Developer guide → Realtime for how to connect.

Method & pathPurpose
GET /healthLiveness check.
GET /v1/meWhoAmIResponse: { apiKeyId, projectId, organizationId, keyType } for the presented key.