Ga naar inhoud

API-referentie

De referentie beschrijft elke aanroep die je met een API-sleutel kunt doen: het verzoek, het antwoord en de statussen die je terug kunt krijgen. Wat een beheerder in de console doet staat er niet in, want dat bereik je niet met een sleutel. Je vindt de referentie op twee plekken bij je installatie, met dezelfde inhoud in een andere vorm.

Lezen

ReDoc toont de hele API op één pagina: per route de parameters, het request-schema, elk antwoord en de velden daarin. Gebruik deze vorm om op te zoeken wat een route verwacht en wat je terugkrijgt. De voorbeelden zijn gericht aan het Core-adres waarmee je installatie deze gids publiceert.

Uitproberen

Swagger UI doet dezelfde routes, maar voert ze ook uit. De pagina roept het adres aan dat bij Servers staat, en dat vult je installatie zelf in: controleer of het het adres is waarvoor je sleutel is uitgegeven en pas het aan als dat niet zo is. Klik daarna op Authorize, plak de secret van je sleutel en kies Try it out bij een route. Het antwoord dat je ziet komt van je eigen installatie. Je sleutel werkt daar alleen omdat dit de eigen gidspagina van je installatie is: een sleutel die een andere webpagina stuurt, wordt geweigerd (Een token voor de browser).

Het contract zelf

/api/openapi.json is het OpenAPI-document waar beide pagina's op draaien. Gebruik het om een client te genereren voor je eigen taal.

Basis-URL

Elke route in deze referentie roep je aan op één adres: het adres van je installatie, gevolgd door /api/v1.

https://<jouw-installatie>/api/v1

<jouw-installatie> is de host waarvoor je API-sleutel is uitgegeven. De beheerder van je organisatie kan je vertellen welke dat is. Voor de ontwikkelomgeving van Artific is de basis-URL https://build.dev.artific.nl/api/v1.

Waar deze gids een route schrijft als GET /key, roep je de basis-URL aan met dat pad erachter:

curl -s "https://<jouw-installatie>/api/v1/key" -H "Authorization: Bearer ack_..."

GET /key geeft de organisatie, de capabilities en het beleid van je sleutel terug en verandert niets. Zo controleer je een adres en een sleutel in één aanroep. De andere voorbeelden in deze gids bewaren de basis-URL in CORE_URL en de secret in CORE_KEY, die je instelt in Je eerste aanroep.

Deze gids heeft bij elke installatie dezelfde tekst, dus op de pagina's staat de plaatshouder. De twee verkenners hierboven tonen wel het adres van je eigen installatie. Swagger UI toont het in het veld Servers, zonder /api/v1, omdat elk pad in de lijst daar al mee begint. ReDoc toont het als je de methode en het pad van een route openklapt, als het volledige adres van die route.

Eén client krijgt een korter adres. De client van Anthropic plakt er zelf /v1/messages achter, dus zijn base_url eindigt op /api; zie De Anthropic-SDK gebruiken.

De OpenAI-SDK gebruiken

POST /responses antwoordt met het Responses-object van OpenAI, dus de officiële openai-client bereikt Core ongewijzigd: zet base_url op de /api/v1 van je installatie en geef de secret van je sleutel mee als api_key, die de client als bearer-token verstuurt. Ook fouten komen terug in de envelop van OpenAI, dus openai.APIStatusError bevat de melding, de param met het veld en de code.

from openai import OpenAI

client = OpenAI(base_url="https://<jouw-installatie>/api/v1", api_key="ack_...")
response = client.responses.create(model="<jouw-model>", input="Hallo", store=True)
print(response.output_text, response.conversation.id)

Drie dingen zijn goed om te weten. conversation is de thread waarop de beurt is opgeslagen, en dat is hetzelfde id dat de thread-routes verwachten. Een tool die Core voor je uitvoert komt terug als een mcp_call-item — zo noemt de Responses-API een tool die de server namens jou aanriep; een function-tool die je zelf uitvoert komt terug als function_call, precies zoals bij OpenAI. En een veld van OpenAI waar Core niets mee doet, wordt op een van drie manieren behandeld. Een hint die niet verandert wat het antwoord betekent — service_tier, include, prompt_cache_key — wordt aangenomen en genegeerd. Een veld dat een modelleverancier kan aannemen — top_p, parallel_tool_calls, een afgedwongen tool — wordt doorgegeven, en bij naam geweigerd met 400 als het model dat je noemde het niet kan aannemen. Een veld dat Core niet kan waarmaken — truncation: "auto", een gehost tooltype zoals web_search — wordt bij naam geweigerd met 400, zodat een aanroep die slaagt nooit minder betekent dan je schreef. Een codeeragent aansluiten noemt de velden per klasse.

Een opgeslagen agent bereik je zonder extra veld in de body: geef agent:<naam> (of het agt_-id) mee als model, en client.models.list() noemt de agents die je sleutel mag gebruiken naast de modellen. Je instructions gaan voor die van de agent, en response.model is het model waarop de agent draaide.

response = client.responses.create(model="agent:triage", instructions="Wees kort.", input="Hoi")

De typen van de SDK kennen de uitbreidingen van Core op de body niet. Geef een tool van Core, tools=[{"type": "tool", "name": "..."}], mee als gewone lijst of via extra_body, en een veld zoals helper via extra_body: extra_body={"helper": "acme.summary"}.

Authenticatie

Elke route buiten de beheerroutes verwacht de secret van je API-sleutel als bearer-token:

Authorization: Bearer ack_...

Zie Je eerste aanroep voor een sleutel aanvragen en je eerste verzoek versturen.

De Anthropic-SDK gebruiken

Core beantwoordt de Messages-API van Anthropic op /api/v1/messages, dus de eigen client van Anthropic werkt zonder aanpassing. Wijs hem naar je installatie en geef de secret van je sleutel mee als api_key, zoals de voorbeelden van Anthropic zelf doen; auth_token werkt ook en stuurt dezelfde secret als bearer-token:

import anthropic

client = anthropic.Anthropic(base_url="https://<jouw-installatie>/api", api_key="ack_...")
message = client.messages.create(
    model="<een model dat je sleutel mag gebruiken>",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Vat de tickets van deze week samen."}],
)

Het antwoord is het message-object van Anthropic. Een veld dat Core niet kan waarmaken — mcp_servers, container, een vast thinking.budget_tokens en een paar andere — wordt met naam geweigerd in plaats van genegeerd, zodat een verzoek nooit stilletjes minder betekent dan je schreef. top_p, top_k, stop_sequences en een afgedwongen tool gaan door naar het model; kan het model dat je noemde er een niet aan, dan noemt de weigering dat veld. Een hint die niet verandert wat het antwoord betekent, zoals cache_control of de header anthropic-beta, wordt aangenomen en genegeerd (Een codeeragent aansluiten). Het id dat je terugkrijgt is een Core-response-id: dezelfde waarde werkt op GET /responses/{id} en op GET /artifacts?response_id=.