API Reference

De Axoverna REST API laat je AI-powered product Q&A integreren in elke applicatie. Alle endpoints accepteren JSON en retourneren JSON.

Base URL: https://axoverna.com/api/v1

Quick Start

Start in drie stappen:

  1. 1Maak een account aan en genereer een API key via Settings.
  2. 2Voeg content toe via de dashboard of de Ingest API.
  3. 3Stel je eerste vraag via POST /v1/ask.
Quick Start
curl -X POST https://axoverna.com/api/v1/ask \
  -H "Authorization: Bearer nx_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Which supplement helps with joint pain?"
  }'

Authentication

Alle API requests vereisen een Bearer token in de Authorization header.

Authorization Header
Authorization: Bearer nx_live_YOUR_API_KEY

Er zijn drie typen API keys met verschillende toegangsniveaus:

Key PrefixScopeUse Case
nx_live_QueriesFrontend widget, /ask, /feedback
nx_ing_IngestionContent sync, /ingest/* endpoints
nx_adm_AdminFull access to all endpoints

POST

/v1/ask

Auth: nx_live_ or nx_adm_

Stel een vraag over je productcatalogus. Retourneert een AI-gegenereerd antwoord met bronvermeldingen en confidence score.

Request Parameters

FieldTypeRequiredDescription
querystringYesThe question to ask (max 500 chars)
sourcesstring[]NoFilter by item types (e.g. ["products", "manuals"])
session_idstringNoSession ID for conversation context
streambooleanNoEnable SSE streaming (default: false)
languagestringNoResponse language (ISO 639-1, e.g. "nl", "en")

Response

200 OK
{
  "answer": "Joint Formula with glucosamine, MSM, and vitamin C...",
  "confidence": 0.94,
  "sources": [
    { "type": "product", "id": "JF-001", "title": "Joint Formula", "score": 0.96 },
    { "type": "manual", "page": 12, "title": "Product Guide", "score": 0.91 }
  ],
  "tokens_used": 342,
  "session_id": "sess_abc123"
}

Streaming (SSE)

Wanneer stream: true, retourneert de API een Server-Sent Events stream:

SSE Stream
data: {"type":"chunk","text":"Joint Formula"}
data: {"type":"chunk","text":" with glucosamine..."}
data: {"type":"sources","sources":[...]}
data: {"type":"done","tokens_used":342}

POST

/v1/feedback

Auth: nx_live_ or nx_adm_

Stuur feedback over een antwoord. Wordt gebruikt om de kwaliteit te meten en het model te verbeteren.

Request Parameters

FieldTypeRequiredDescription
query_log_idstring (uuid)YesID of the query log entry to rate
rating1 | -1YesPositive (1) or negative (-1) feedback
session_idstringNoSession ID for deduplication
commentstringNoOptional feedback text (max 2000 chars)

Response

200 OK
{ "success": true }

POST

/v1/ingest/items

Auth: nx_ing_ or nx_adm_

Voeg items toe aan je knowledge base. Ondersteunt JSON batch (max 100 items) en multipart/form-data voor PDF uploads.

JSON Batch - Request Parameters

FieldTypeRequiredDescription
itemsobject[]YesArray of items to ingest (1-100)
items[].external_idstringNoYour unique identifier for the item
items[].typestringYesItem type (e.g. "product", "manual", "faq")
items[].titlestringYesItem title
items[].contentstringNoPlain text content
items[].metadataobjectNoArbitrary key-value metadata
items[].file_urlstring (url)NoURL to a PDF file for processing

JSON Batch - Response

202 Accepted
{
  "items_queued": 3,
  "job_ids": ["job_abc", "job_def", "job_ghi"],
  "status": "queued"
}

PDF Upload (multipart/form-data)

FieldTypeRequiredDescription
fileFileYesPDF file to upload
typestringYesItem type
titlestringYesItem title
external_idstringNoYour unique identifier
metadatastring (JSON)NoMetadata as JSON string
PDF Upload Example
curl -X POST https://axoverna.com/api/v1/ingest/items \
  -H "Authorization: Bearer nx_ing_YOUR_KEY" \
  -F "file=@product-guide.pdf" \
  -F "type=manual" \
  -F "title=Product Guide 2025"

POST

/v1/ingest/sync

Auth: nx_ing_ or nx_adm_

Synchroniseer je volledige catalogus. Items worden vergeleken op external_id. Nieuwe items worden toegevoegd, gewijzigde items geüpdatet, en ontbrekende items verwijderd.

Request Parameters

FieldTypeRequiredDescription
itemsobject[]YesComplete set of items to sync
items[].external_idstringYesRequired for sync - your unique identifier
items[].typestringYesItem type
items[].titlestringYesItem title
items[].contentstringNoPlain text content
items[].metadataobjectNoArbitrary key-value metadata
items[].file_urlstring (url)NoURL to a PDF file

Response

202 Accepted
{
  "to_add": 5,
  "to_update": 2,
  "to_delete": 1,
  "job_ids": ["job_abc", "job_def"],
  "status": "queued"
}

Items die niet in het request voorkomen maar wel in je workspace bestaan worden soft-deleted. Wijzigingen worden gedetecteerd op basis van content, title en metadata.


GET

/v1/jobs/:id

Auth: nx_live_, nx_ing_ or nx_adm_

Controleer de status van een ingestion job. Poll dit endpoint na het aanmaken van items om te weten wanneer de content geïndexeerd is.

Response

200 OK
{
  "id": "job_abc123",
  "type": "embed_item",
  "status": "done",
  "item_title": "Joint Formula",
  "item_type": "product",
  "attempts": 1,
  "error": null,
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-01-15T10:30:05Z"
}

Mogelijke statussen: queued, running, done, failed.


Widget Embed

Voeg de Axoverna chat widget toe aan je website met een enkel script tag. De widget is volledig aanpasbaar via data-attributen.

Embed Snippet
<script
  src="https://axoverna.com/widget.js"
  data-api-key="nx_live_YOUR_KEY"
  data-api-url="https://axoverna.com"
  data-title="Product Assistant"
  data-placeholder="Ask a question..."
  data-position="bottom-right"
  data-accent="#00D4C8"
></script>

Data Attributes

FieldTypeRequiredDescription
data-api-keystringYesYour live API key (nx_live_...)
data-api-urlstringNoAPI base URL (default: https://axoverna.com)
data-titlestringNoChat window title
data-placeholderstringNoInput field placeholder text
data-positionstringNo"bottom-right" (default) or "bottom-left"
data-accentstringNoAccent color in hex (e.g. #00D4C8)

Error Codes

De API retourneert standaard HTTP status codes. Foutresponses bevatten altijd een error veld.

Error Response
{
  "error": "Query limit exceeded for this billing period"
}
StatusCodeDescription
400Bad RequestInvalid JSON or missing required fields
401UnauthorizedMissing or invalid API key
403ForbiddenAPI key lacks permission for this endpoint
404Not FoundResource not found (e.g. job ID)
429Too Many RequestsRate limit or query limit exceeded
500Internal ErrorUnexpected server error

Rate Limiting

De API gebruikt een sliding window rate limiter. Limieten zijn afhankelijk van je plan en gelden per API key.

EndpointWindowLimit
/v1/ask1 minute60 requests
/v1/feedback1 minute120 requests
/v1/ingest/*1 minute30 requests
/v1/jobs/:id1 minute120 requests

Bij overschrijding ontvang je een 429 Too Many Requests response. De Retry-After header geeft aan hoeveel seconden je moet wachten.

Naast rate limiting geldt ook een maandelijks query budget op basis van je plan. Controleer je gebruik via het Usage dashboard.