Analyseren via de API
Als aanvulling op de CRUD-endpoints voor Documenten zijn er binnen onze JSON:API ook read-endpoints beschikbaar voor threads en runs. Deze endpoints zijn vooral bedoeld voor analyse, rapportage en kwaliteitscontrole van conversaties binnen je kennisbank.
Met deze endpoints kun je complete conversaties ophalen inclusief onderliggende vragen, of juist alleen vragen opvragen en deze verfijnen met filters, sortering, includes en paginering.
Binnen deze structuur geldt:
een
threadstaat voor een volledig gesprek of conversatieeen
runstaat voor een afzonderlijke vraag-antwoordinteractie binnen dat gesprekeen thread kan dus meerdere runs bevatten wanneer een gebruiker vervolgvragen stelt binnen dezelfde conversatie
Deze endpoints zijn in het bijzonder bruikbaar wanneer je:
conversaties en vragen over een bepaalde periode wilt analyseren
runs wilt uitsplitsen op systeem, agent, gebruiker, feedback of moderatie-status
trends of kwaliteitsinzichten wilt opbouwen op basis van individuele runs
een thread wilt terughalen om de context van een specifieke run te beoordelen
Authenticatie
Om HTTP-verzoeken naar ons systeem te authoriseren gebruiken we een zogeheten long lived Bearer token.
Voorbeeld van Authorization-header met een Bearer-token:
Authorization: Bearer 31090db4198c2bf9f9a7d768bf6107a40f102d47534cb122b0
De endpoints zijn per klant beschikbaar onder een eigen sub-domein, bijvoorbeeld:
https://{klant}.vragen.ai/api/v1/
De API verwacht bij elke request de volgende headers:
Accept: application/vnd.api+jsonContent-Type: application/vnd.api+json
Thread- en run-endpoints
Er zijn twee relevante endpoints beschikbaar:
1. Threads ophalen
GET https://{klant}.vragen.ai/api/v1/threads
Dit endpoint geeft conversaties terug op threadniveau. Een thread is de bovenliggende container van een gesprek en bevat de context van alle runs die binnen die conversatie zijn uitgevoerd.
Met include=runs kun je direct de bijbehorende runs meesturen in dezelfde response.
Als je een specifieke thread op interne JSON:API resource-ID wilt ophalen, gebruik je:
GET https://{klant}.vragen.ai/api/v1/threads/{id}
2. Runs ophalen
GET https://{klant}.vragen.ai/api/v1/runs
Dit endpoint geeft runs terug als losse records. Een run representeert doorgaans een enkele vraag met het bijbehorende antwoord binnen een thread.
Dit is bruikbaar wanneer je vooral wilt filteren op eigenschappen van individuele vragen, antwoorden, systemen, feedback of moderatie.
Als je een specifieke run op interne JSON:API resource-ID wilt ophalen, gebruik je:
GET https://{klant}.vragen.ai/api/v1/runs/{id}
Documenten ophalen die in een antwoord zijn gebruikt
Wanneer je wilt analyseren op welke bronnen een antwoord is gebaseerd, kun je bij een run ook de gebruikte documenten of documentfragmenten opvragen.
Hiervoor zijn met name de volgende includes relevant:
include=sourcesinclude=searchablesinclude=citedSearchables
Daarbij geldt:
sourcesgeeft de onderliggende bronrelaties van de run terugsearchablesgeeft de documenten of documentfragmenten terug die voor de run zijn gebruiktcitedSearchablesgeeft alleen de documenten of documentfragmenten terug die daadwerkelijk in het antwoord zijn geciteerd
Voorbeeld:
GET https://{klant}.vragen.ai/api/v1/runs/{id}?include=searchables,citedSearchables
Dit is vooral bruikbaar wanneer je:
wilt reconstrueren welke documenten zijn gebruikt om tot een antwoord te komen
alleen de geciteerde bronnen wilt tonen in een analyse- of reviewinterface
documentniveau en runniveau met elkaar wilt verbinden
Voorbeeld: gebruikte documenten bij een run ophalen
Onderstaand voorbeeld is gebaseerd op een echte API-call, maar de inhoud is geanonimiseerd.
Voorbeeld request:
GET https://{klant}.vragen.ai/api/v1/runs/501?include=sources,searchables,citedSearchables&fields[runs]=question,answer,sources,searchables,citedSearchables&fields[run-sources]=citation_reference,relevance_score,distance_score,is_cited&fields[semantic-searchables]=title,summary,url,relevance_score,distance
Voorbeeld response:
In dit voorbeeld:
sourceslaat zien welke bronrelaties aan de run gekoppeld zijnsearchablesbevat de documenten of documentfragmenten die voor het antwoord zijn gebruiktcitedSearchablesbevat de documenten of documentfragmenten die daadwerkelijk in het antwoord zijn geciteerdcitation_referencekoppelt de bronrelatie aan de referentie in het antwoord, zoals[1]
Threads ophalen met runs inbegrepen
Gebruik include=runs als je threads wilt ontvangen met de bijbehorende runs in de included sectie van de JSON:API response.
Voorbeeld:
GET https://{klant}.vragen.ai/api/v1/threads?include=runs
Wil je een specifieke thread op UUID ophalen inclusief runs, dan kun je filteren op uuid:
GET https://{klant}.vragen.ai/api/v1/threads?filter[uuid]=5d8f2d34-6a7a-4e41-8c4b-b4f4c2d8d913&include=runs
Algemene request-parameters
De volgende queryparameters zijn beschikbaar voor zowel threads als runs:
include
Type: string
Optioneel
Hiermee kun je gerelateerde resources opnemen in de response.
Voorbeelden:
include=runsbijthreadsinclude=threadbijruns
sort
Type: string
Optioneel
Sorteervelden worden komma-gescheiden opgegeven. Gebruik:
veldnaamvoor oplopende sortering-veldnaamvoor aflopende sortering+veldnaamexpliciet voor oplopende sortering
Voorbeelden:
?sort=-created_at?sort=created_at
page[offset]
Type: integer
Optioneel
Standaard: 0
Het aantal resultaten dat moet worden overgeslagen.
page[limit]
Type: integer
Optioneel
Standaard: 10
Het maximale aantal resultaten dat moet worden teruggegeven.
Voorbeeld:
?page[offset]=0&page[limit]=25
fields[...]
Type: sparse fieldset
Optioneel
Hiermee kun je het aantal responsevelden beperken.
Voor threads:
fields[threads]=uuid,initiator_type,initiator_origin,user_name,runs_count,completion_time_ms_total,owner_labels,created_at
Voor runs:
fields[runs]=uuid,run_index,status,system_type,question,answer,owner_type,owner_name,feedback,created_at
Als je include=runs gebruikt, kun je beide combineren:
fields[threads]=uuid,runs_count,created_at&fields[runs]=uuid,question,answer,status,created_at
Filters voor threads
Op het threads-endpoint kun je filteren met losse filtervelden.
Beschikbare filters:
filter[id]filter[uuid]filter[created_from]filter[created_until]filter[initiator_type]filter[system_type]
Betekenis van threadfilters
filter[uuid]
Zoekt een thread op UUID.
Voorbeeld:
?filter[uuid]=5d8f2d34-6a7a-4e41-8c4b-b4f4c2d8d913
filter[created_from] en filter[created_until]
Beperken threads op aanmaakdatum. De datum wordt toegepast op de created_at van de thread.
Voorbeeld:
?filter[created_from]=2026-05-01&filter[created_until]=2026-05-31
filter[initiator_type]
Filtert op het type initiator van de thread, bijvoorbeeld een gebruiker, bezoeker of systeem.
Voorbeeld:
?filter[initiator_type]=user
filter[system_type]
Geeft alleen threads terug die minimaal een run bevatten met het opgegeven system_type.
Voorbeeld:
?filter[system_type]=answerSystem
Filters voor runs
Op het runs-endpoint kun je filteren met losse filtervelden.
Beschikbare filters:
filter[id]filter[uuid]filter[thread_id]filter[thread_uuid]filter[created_from]filter[created_until]filter[tag_ids]filter[feedback]filter[flagged]filter[user_ids]filter[agent_ids]filter[system_ids]filter[system_type]
Betekenis van runfilters
filter[thread_uuid]
Geeft alleen runs terug die horen bij een thread met de opgegeven UUID.
Voorbeeld:
?filter[thread_uuid]=5d8f2d34-6a7a-4e41-8c4b-b4f4c2d8d913
filter[created_from] en filter[created_until]
Beperken runs op aanmaakdatum. De datum wordt toegepast op de created_at van de run.
Voorbeeld:
?filter[created_from]=2026-05-01&filter[created_until]=2026-05-31
filter[tag_ids]
Geeft alleen runs terug die een annotatie hebben met een of meer opgegeven tag-ID's.
Voorbeeld:
?filter[tag_ids][]=12&filter[tag_ids][]=19
filter[feedback]
Filtert runs op thumbs-feedback.
Ondersteunde waarden:
positivenegative
Voorbeeld:
?filter[feedback]=negative
filter[flagged]
Filtert op moderatie-status.
Ondersteunde waarden:
trueof weglaten van waarde voor alleen gemodereerde runsfalsevoor alleen niet-gemodereerde runsallvoor zowel gemodereerde als niet-gemodereerde runs
Voorbeelden:
?filter[flagged]=true?filter[flagged]=false?filter[flagged]=all
filter[user_ids]
Geeft alleen runs terug van threads die gekoppeld zijn aan een of meer gebruikers.
Voorbeeld:
?filter[user_ids][]=3&filter[user_ids][]=8
filter[agent_ids]
Geeft alleen runs terug die door een of meer specifieke agents zijn uitgevoerd.
Voorbeeld:
?filter[agent_ids][]=5
filter[system_ids]
Geeft alleen runs terug die horen bij een of meer specifieke systemen.
Voorbeeld:
?filter[system_ids][]=2
filter[system_type]
Geeft alleen runs terug met een bepaald systeemtype.
Voorbeeld:
?filter[system_type]=answerSystem
Sorteerbare velden
Niet ieder veld is sorteerbaar.
Voor threads
Beschikbaar:
created_at
Voorbeeld:
?sort=-created_at
Voor runs
Beschikbaar:
created_attime_to_first_token_mscompletion_time_ms
Voorbeeld:
?sort=-completion_time_ms
Voorbeeld requests
Voorbeeld 1: threads ophalen met runs inbegrepen
Onderstaand voorbeeld haalt de meest recente threads op, inclusief runs, en beperkt de responsevelden.
GET https://{klant}.vragen.ai/api/v1/threads?include=runs&sort=-created_at&page[offset]=0&page[limit]=10&fields[threads]=uuid,initiator_type,user_name,runs_count,created_at&fields[runs]=uuid,run_index,status,question,answer,created_at
Voorbeeld 2: een thread ophalen op UUID inclusief runs
GET https://{klant}.vragen.ai/api/v1/threads?filter[uuid]=5d8f2d34-6a7a-4e41-8c4b-b4f4c2d8d913&include=runs
Voorbeeld 3: alleen runs ophalen binnen een thread
GET https://{klant}.vragen.ai/api/v1/runs?filter[thread_uuid]=5d8f2d34-6a7a-4e41-8c4b-b4f4c2d8d913&sort=created_at
Voorbeeld 4: runs ophalen met meerdere filters
Onderstaand voorbeeld haalt runs op:
uit mei 2026
van systeemtype
answerSystemmet negatieve feedback
die niet door een moderator zijn gemarkeerd
GET https://{klant}.vragen.ai/api/v1/runs?filter[created_from]=2026-05-01&filter[created_until]=2026-05-31&filter[system_type]=answerSystem&filter[feedback]=negative&filter[flagged]=false&sort=-created_at&page[offset]=0&page[limit]=25
Voorbeeld response voor threads met runs
Wanneer je include=runs gebruikt, krijg je een JSON:API-collectie met threads in data en de bijbehorende runs in included.
Betekenis van responsevelden
Threadvelden
runs_count
Het aantal runs dat voor deze thread zichtbaar is via de JSON:API.
completion_time_ms_total
De totale verwerkingstijd van de zichtbare runs binnen deze thread, uitgedrukt in milliseconden.
owner_labels
Een lijst met unieke labels van de systemen of agents die binnen de thread runs hebben uitgevoerd.
Runvelden
run_index
De volgorde van de run binnen de thread.
question
De gebruikersvraag van de run.
answer
Het antwoord dat op deze run is teruggegeven.
owner_type
Geeft aan of de run door een system of agent is uitgevoerd.
owner_name
De naam van het systeem of de agent die eigenaar is van de run.
feedback
De thumbs-feedback op de run, voor zover aanwezig.
feedback_labels
Een genormaliseerde lijst met feedbacklabels die uit de feedback is afgeleid.
flagged_by_moderator
Geeft aan of de run door een moderator is gemarkeerd.
failure_reason
De foutreden van de run, voor zover aanwezig. Bij succesvolle runs is deze waarde null.
searchables en citedSearchables
Via deze relaties kun je de documenten of documentfragmenten ophalen die voor de run zijn gebruikt, of daadwerkelijk in het antwoord zijn geciteerd.
Praktische aandachtspunten
Gebruik
threads?include=runswanneer je complete conversaties wilt tonen.Gebruik
runswanneer je vooral analyse wilt doen op individueel vraagniveau.Gebruik
include=searchablesofinclude=citedSearchablesoprunswanneer je ook de gebruikte documenten of documentfragmenten wilt analyseren.Als je met UUID's werkt, gebruik dan
filter[uuid]offilter[thread_uuid]. De{id}in het pad is de interne JSON:API resource-ID.Voor filters met meerdere waarden, zoals
tag_ids,user_ids,agent_idsensystem_ids, gebruik je array-syntaxis zoalsfilter[tag_ids][]=12.De endpoints geven alleen runs terug die zichtbaar zijn binnen de inbox-JSON:API.
Zonder
includebevat een resource standaard alleenattributesenlinks;relationshipsenincludedverschijnen alleen als je die expliciet opvraagt.Runs zonder timingdata kunnen gewoon in dezelfde response voorkomen; bij sortering op timingvelden vallen deze records automatisch achter resultaten met een geldige timingwaarde.
Niet ieder zichtbaar responseveld is automatisch sorteerbaar.
Support
Aan de hand van bovenstaande informatie en voorbeelden zou je geen problemen moeten ondervinden om threads en runs via onze JSON:API op te halen. Als je nog vragen hebt, neem dan contact op met ons supportteam via info@vragen.ai.
