API-koppelingen in de console¶
Het concept achter tools staat in Tools.
Onder Tools > API-koppelingen registreer je een eigen HTTP-endpoint als tool. Een
API-koppeling is een eigen endpoint dat Core aanroept met de argumenten die het model heeft
aangeleverd. Elke koppeling levert één tool op, api__<identifier>, die in het
Overzicht staat en in een toolset past.
Je hebt een beheerdersaccount van de organisatie nodig, en de capability tooling moet in het
plafond van de organisatie aanstaan. De host van het adres moet bij de toegestane
hosts van de organisatie staan.
Sleutels van de organisatie kunnen deze tools aanbieden in een beurt, voor zover hun beleid dit toestaat. Zie Tools via de API voor API-voorbeelden.
Een koppeling toevoegen¶

De lijst toont per koppeling zijn naam als api__<identifier>, de versie, het verzoek als methode en
host, de soort credential (met ingesteld als er een geheim is opgeslagen), de labels en de regio,
en waar de koppeling vandaan komt. Typ in Filter op naam of label om de lijst te verkleinen. Kies
een rij om de pagina van de koppeling te openen.
Kies Koppeling toevoegen in de balk. Er opent een pagina; vul deze velden in en kies Opslaan in de balk onderaan, die zegt dat opslaan v1 maakt:
| Veld | Wat je invult |
|---|---|
| Identifier | hoe het model deze tool noemt (api__<identifier>); kan later niet meer wijzigen. Het veld zet zelf om naar kleine letters, cijfers, - en _, maximaal 48 tekens |
| URL | het adres dat Core aanroept, moet met http:// of https:// beginnen |
| Regio | waar het adres draait, zie Waar de host draait; mag leeg blijven |
| Omschrijving | wat de tool doet, zoals het model het te zien krijgt, maximaal 1024 tekens |
| Parameters (JSON Schema) | een JSON-object dat de argumenten beschrijft. Leeg betekent: geen argumenten. Bouw het veld voor veld in de weergave Visueel, plak het in de weergave JSON, of laat Beschrijf wat je nodig hebt er een voorzet voor maken. De omschrijving van een veld is wat het model leest |
| Authenticatie | hoe Core zich bij het adres legitimeert, zie Een credential opslaan |
| Eigen verzoek | uit: Core stuurt een vast verzoek. Aan: Core stuurt het verzoek dat je zelf samenstelt, zie Het verzoek instellen |
Met Eigen verzoek uit stuurt Core de argumenten met een POST naar het adres hierboven en geeft
het antwoord terug aan de beurt. Een tool die je eigen applicatie zelf uitvoert, beschrijf je op het
verzoek zelf als function-tool; die hoef je hier niet te registreren.
De naam van een koppeling kan niet worden bewerkt: het is wat beleidsregels, verbruiksregels en het auditspoor vastleggen. Maak een andere koppeling aan als je een andere naam nodig hebt.
Onder de parameters staat een voorbeeld van het exacte verzoek dat het adres ontvangt, opgebouwd uit
het schema terwijl je typt: tool, arguments, response_id en call_id, met een voorbeeldwaarde
per eigenschap. Het toont de vorm, geen gevalideerde inhoud.
Op een telefoon lees je de lijst en de pagina's; toevoegen en bewerken doe je op een groter scherm.
Verwijderen doe je in de gevarenzone op de pagina van de koppeling, of met Verwijderen in het regelmenu. De bevestiging noemt de toolsets en aliassen die de tool kwijtraken: een toolset waarvan een regel de tool bereikt, komt op minder uit, en een alias die erop wijst, wordt niet beschikbaar. Noemt de nieuwste versie van een agent de tool, dan weigert Core het verwijderen en noemt het venster die agents; haal de tool daar eerst weg.
De host moet zijn toegestaan. Core roept het adres pas aan als de host bij de toegestane hosts van de organisatie staat, en dat geldt ook voor het token-endpoint van een OAuth-credential. Staat een host er niet, of blokkeert de omgeving hem, dan staat in de lijst host geblokkeerd in het rood, en zegt de pagina van de koppeling dat Core hem niet aanroept tot dat verandert, met Naar toegestane hosts; die link opent de kaart Toegestane hosts.
Waar de host draait¶
Regio zegt waar de host van deze koppeling draait: eu, us, global, in-cluster of een
landcode van twee kleine letters zoals nl. Het telt alleen voor een sleutel waarvan het beleid
de regio's beperkt (policy.settings.regions_allow): zo'n sleutel bereikt deze koppeling alleen als
zijn lijst deze regio noemt of een regio waar die in ligt (nl ligt in eu, en alles in global),
en heeft voor de host dan geen eigen opgave nodig — al wint een regel in host_regions van het
beleid van de sleutel of de organisatie die de host ruimer plaatst. Elke koppeling
zegt het voor zichzelf, dus de ene kan in de EU draaien en de andere in de VS. Laat je het veld
leeg, dan plaatst elke sleutel de host met zijn eigen policy.settings.host_regions; maak je het
leeg bij een bestaande koppeling, dan vervalt de opgeslagen regio. De lijst toont de regio in de kolom
Labels · regio. Zie Toegestane bestemmingen.
Het verzoek instellen¶
Zet Eigen verzoek aan als je endpoint dat vaste verzoek niet accepteert — als hij een GET wil,
zijn eigen pad, een querystring, eigen headers of een body met een eigen vorm.
| Veld | Wat je invult |
|---|---|
| Methode | GET, POST, PUT, PATCH of DELETE |
| Queryparameters | per regel een naam en een waarde. De naam is letterlijke tekst; in de waarde mag een argument |
| Headers | hetzelfde, één regel per header |
| Body (JSON) | zichtbaar bij de methoden die een body meesturen. Laat leeg om geen body te sturen |
| Time-out (seconden) | hoe lang deze aanroep mag duren. Core gebruikt de kortste van deze en zijn eigen budget |
Een argument schrijf je als {naam} in het pad van de URL, de query van de URL, een querywaarde, een
headerwaarde of waar dan ook in de body. Een waarde die precies één {naam} is, houdt het type
van dat argument: "{aantal}" met het getal 3 stuurt 3 en niet "3". Een argument midden in een
langere tekst wordt als tekst ingevuld. Een letterlijke {naam} versturen kan niet.
Drie regels zijn het waard om te kennen voor je begint:
- een argument in de URL mag alleen in het pad of de query staan, nooit in het schema, de host of de poort — het adres dat Core belt ligt vast bij registratie;
- elke
{naam}moet een eigenschap uit Parameters zijn; een argument in de URL of midden in een langere tekst moet daar bovendien verplicht (required) zijn, want een stuk pad of een stuk zin kan niet wegvallen; - een credential hoort bij Authenticatie: typ hier nooit een vast token in een header.
Cookie,Proxy-Authorizationen een header die Core zelf zet worden geweigerd.Authorizationwordt alleen opgeslagen zolang Authenticatie op Geen staat, voor een token dat per verzoek verschilt; zo'n token is een geheime aanroepvariabele (Waarden die je applicatie meestuurt, De headerAuthorization).
Onder de velden staat per argument een label dat zegt of dit verzoek hem gebruikt. Een rood label is
een {naam} die je parameters niet declareren — los dat op, anders kun je de koppeling niet opslaan.
Daaronder toont Voorbeeld van het verzoek het hele verzoek met voorbeeldwaarden uit het schema:
dat is precies wat je endpoint ontvangt.
Waarden die je één keer vastlegt¶
Sommige waarden horen bij de koppeling en niet bij een aanroep: een regio, een account-id, een
paginagrootte. Schrijf zo'n waarde als {$naam} -- met een $ -- in het pad of de query van de
URL, een querywaarde, een headerwaarde of de body, zoals https://your-app.example/{$regio}/tickets.
Zodra de URL of het verzoek er een bevat, verschijnt Invulwaarden met een rij per {$naam}, met
het token zelf als label. Elke rij heeft dezelfde velden als een invulwaarde bij een
prompt: Soort (Tekst, Getal of Keuze),
je waarde, de Toegestane waarden van een keuze, en een Omschrijving.
Core vult deze waarden in vóór de argumenten, dus het model ziet ze nooit en kan ze niet instellen.
Voorbeeld van het verzoek toont het verzoek met je invulwaarden al ingevuld; een token waarvan
de waarde nog niet compleet is, blijft staan zoals je het typte. In de body houdt een waarde die
precies één {$naam} is zijn soort, dus een Getal stuurt 50 en niet "50".
Het blok weigert wat Core zou weigeren:
- een
{$naam}in het schema, de host of de poort van de URL (Een invulwaarde mag in het pad of de query van de URL staan, nooit in het schema, de host of de poort.), of in een sleutel van de query of de body; - een naam die ook een argument in Parameters is (Deze naam is al een argument dat het model krijgt. Geef de invulwaarde een andere naam.);
- een lege waarde, een waarde met
{of}, en.of..als waarde in het pad van de URL.
Een invulwaarde van de soort Tekst, Getal of Keuze is geen geheim: wie de koppeling
kan lezen, leest hem terug. Een credential die voor iedereen gelijk is, hoort onder
Authenticatie. Heeft het eindpunt naast die credential nog een ander nodig, kies dan de soort
Geheim: de rij wordt een wachtwoordveld, Core bewaart de tekst versleuteld en toont hem nooit
meer. Bewerk je de koppeling later, dan staat bij de rij Ingesteld en blijft het veld leeg; laat
het leeg om de bewaarde waarde te houden, of typ een nieuwe tekst om hem te vervangen. Een geheim mag
alleen in een headerwaarde of een string in de body staan; het formulier weigert het in de URL of
een querywaarde (Een geheime invulwaarde mag alleen in een headerwaarde of een string in de body
staan, nooit in de URL of een querywaarde: die komen in logbestanden terecht.), en Voorbeeld van
het verzoek toont het als ••••••. Deel je de koppeling via een publicatie, dan wordt elke gewone
invulwaarde een parameter van de bundel, en vult wie hem installeert zijn eigen waarde in (zie
Tekst die de installeerder invult).
Waarden die je applicatie meestuurt¶
Een waarde die per verzoek verschilt in plaats van per koppeling, zoals het account-id of het eigen
token van je klant, is een aanroepvariabele. Schrijf hem als {@naam} op dezelfde plekken als een
invulwaarde, en onder Bij de aanroep verschijnt een rij per {@naam}. Een rij heeft:
| Veld | Betekenis |
|---|---|
| Soort | Tekst, Getal, Geheel getal of Ja of nee |
| Verplicht | een verzoek zonder waarde wordt geweigerd; uit, en niet te kiezen, zodra de variabele een standaardwaarde heeft |
| Geheim | voor het eigen token van een klant: tekst zonder standaardwaarde of lijst, versleuteld bewaard en afgeschermd in het resultaat van de tool |
| Omschrijving van de variabele | wat de applicatie moet meegeven, voor wie de tool aanroept |
| Toegestane waarden | één per regel; leeg laat elke waarde van de soort toe |
| Standaardwaarde | de waarde die de tool krijgt als het verzoek er geen meegeeft |
Je applicatie stuurt de waarden mee in tool_variables (Een waarde van je klant aan een tool
meegeven). Het model ziet ze nooit. Naast Voorbeeld van het verzoek typ je per
variabele een voorbeeldwaarde om te zien welk verzoek je eindpunt dan krijgt; een geheime variabele
heeft er geen en staat als ••••••. Het voorbeeld bestaat alleen op dit scherm: het wordt niet
opgeslagen.
Het formulier weigert wat Core zou weigeren: een {@naam} in het schema, de host of de poort van de
URL of in een sleutel, een naam die ook een argument of invulwaarde is, een standaardwaarde die niet
past bij de soort of de toegestane waarden, en een geheim in de URL of een querywaarde.
Een credential opslaan¶
Authenticatie zegt hoe Core zich bij deze bron legitimeert. Het is hetzelfde blok bij een API-koppeling en bij een MCP-server, omdat het dezelfde opgeslagen credential is.
| Soort | Wat je invult | Wat Core stuurt |
|---|---|---|
| Geen | — | niets, en een opgeslagen credential wordt gewist |
| Token in een header | een header en het token | het token, precies zoals je het invult, onder die header |
| API-sleutel | header of query, een naam en de sleutel | één header, of één queryparameter |
| Gebruikersnaam en wachtwoord | beide | Authorization: Basic … |
| OAuth (client credentials) | token-endpoint, client id, client secret, scopes, audience | Authorization: Bearer <access token>, opgehaald bij het token-endpoint |
| OAuth (de persoon logt zelf in) | inlog-endpoint, token-endpoint, client id, client secret (optioneel), scopes, audience | het toegangstoken van één persoon, zie De persoon logt zelf in |
Een MCP-server biedt alles behalve de API-sleutel en de gebruikersnaam met wachtwoord: zijn transport kent headers en geen eigen querystring.
Een token gaat precies mee zoals het is opgeslagen — Core zet er niets voor. Verwacht je API
Authorization: Bearer abc, vul dan Bearer abc in. Wil hij een kaal token in die header, vul dan
het kale token in. Zo blijven Token, ApiKey en elk ander schema bereikbaar zonder eigen instelling.
Een credential mag geen header gebruiken die Core zelf zet, zoals Idempotency-Key of User-Agent.
Het geheim wordt versleuteld bewaard en nooit meer getoond, ook niet aan jou. Bewerk je een bron die er een heeft, dan is het veld leeg en staat eronder dat er een credential is opgeslagen:
- laat het leeg om de opgeslagen credential te behouden;
- vul een nieuwe waarde in om de hele credential te vervangen;
- kies Geen om hem te verwijderen.
Wissel je van soort, dan vraagt het formulier altijd om het geheim van die soort, want een credential wordt in zijn geheel vervangen.
Bij OAuth (client credentials) haalt Core een token op wanneer het nodig is en bewaart het alleen in het geheugen van het proces; het token-endpoint moet net zo goed een toegestane bestemming zijn als het adres van de tool zelf.
De persoon logt zelf in¶
De vijf soorten hierboven legitimeren de organisatie: één credential, voor iedereen dezelfde. OAuth (de persoon logt zelf in) legitimeert één persoon. De registratie bevat niets dat uit zichzelf iets kan aanroepen, alleen hoe je het iemand vraagt, en Core bewaart per bron één grant per persoon. Zowel API-koppelingen als MCP-servers accepteren hem.
| Veld | Wat je invult |
|---|---|
| Inlog-endpoint | waar de browser van de persoon naartoe gaat. Core opent dat adres nooit |
| Token-endpoint | waar Core de code inwisselt, en later het refresh-token |
| Client id | de client die je bij de provider hebt geregistreerd |
| Client secret | optioneel: laat leeg voor een public client. Core gebruikt hoe dan ook PKCE |
| Scopes | wat je de persoon vraagt goed te keuren |
| Audience | alleen als de provider erom vraagt |
Onder die velden toont het formulier het pad van de redirect-URI, /api/v1/oauth/callback, met
een kopieerknop. Registreer dat bij je provider met de publieke basis-URL van je Core-omgeving
ervoor — de waarde van CORE_PUBLIC_URL in de omgeving. Dat is het enige adres dat Core zonder
credential bedient, en daar stuurt de provider de persoon heen terug.
Wie die persoon is, komt van de applicatie en niet uit deze console: een applicatie die Core
aanroept stuurt per verzoek een eigen, betekenisloze user mee, en Core zoekt de grant van die
persoon daarmee op. Draait een tool van deze bron voor iemand zonder grant, dan krijgt het model een
zin met een inlog-URL om aan die persoon te geven. Wil een applicatie mensen liever vooraf koppelen,
dan vraagt ze diezelfde URL op via de authorizations-routes; beide staan in Tools via de API.
Een bron van een andere soort antwoordt op die routes met een foutmelding, en nergens wordt een opgeslagen grant teruggelezen.
De pagina van een koppeling¶
De pagina van een koppeling leest wat hij doet, zonder iets te wijzigen:
| Kaart | Wat erop staat |
|---|---|
| Verzoek | de methode en de URL met elke {naam} gemarkeerd, de query en de headers (of het vaste contract als er geen eigen verzoek is), de invulwaarden, de authenticatie en de time-out |
| Versies | zie Versies |
| Toegang | de labels, de regio en waar de tool wordt gebruikt |
| Proberen | de opgeslagen versie aanroepen namens een sleutel, zoals een tool proberen |
Wijzigen doe je met Bewerken in de balk: dat opent hetzelfde formulier als bij toevoegen, met de identifier vast. Een koppeling die uit een publicatie is geïnstalleerd heeft geen Bewerken; een koppeling uit een verzegelde publicatie toont bovendien zijn verzoek en schema niet.
Versies¶
Elke koppeling heeft een versie, te zien in de lijst en op zijn pagina. Sla je een wijziging op van de omschrijving, de URL, de parameters, het verzoek of de invulwaarden, dan legt Core dat vast als nieuwe versie; wijzig je alleen de authenticatie of de regio, dan niet, want die horen bij de registratie en niet bij wat de koppeling doet.
De kaart Versies op de pagina van de koppeling toont ze, nieuwste eerst, met wanneer elke versie is gemaakt en zijn omschrijving; Tonen toont de URL en wie hem maakte. Een versie verandert nooit meer en er valt hier niets te activeren of terug te zetten: een oudere versie gebruik je door hem vast te pinnen op een verzoek, zie Tools via de API.
Asynchrone tool¶
De sectie Asynchrone tool op het formulier bepaalt of het model deze koppeling mag starten als taak: een aanroep die doorloopt nadat de beurt is afgelopen, en waarvan het resultaat later terugkomt in het gesprek. Ze hoort bij de versie, dus een wijziging opslaan legt een nieuwe vast.
Dezelfde sectie, met dezelfde velden, staat op het formulier van een MCP-server, waar ze voor elke tool van de server geldt, op de formulieren voor een nieuw script en voor zijn volgende versie, en op de formulieren voor een nieuwe agent en voor zijn volgende versie.
| Veld | Wat je kiest |
|---|---|
| Op de achtergrond starten | Nooit (de standaard): elke aanroep wacht op het antwoord. Toegestaan: het model mag hem op de achtergrond starten, naast het gewoon aanroepen. Altijd: een directe aanroep start hem op de achtergrond en geeft een verwijzing naar de taak terug |
| Langste looptijd (seconden) | hoe lang een taak mag lopen, een heel getal van minstens 1. Laat leeg voor de grens die het platform zelf stelt; die grens is ook het maximum |
| Veilig om opnieuw te sturen | bij een koppeling, een MCP-server en een script; niet bij een agent. Aan: Core mag dezelfde aanroep opnieuw sturen na een onderbreking, met dezelfde Idempotency-Key. Zet dit alleen aan als de andere kant een herhaling net zo afhandelt als de eerste aanroep. Uit: een onderbroken taak eindigt als onderbroken |
Een koppeling of server met de authenticatie OAuth (de persoon logt zelf in) toont de sectie uitgeschakeld, met de zin Meldt zich aan als persoon en wordt daarom nooit op de achtergrond gestart.
De sectie staat er, of de organisatie de capability tasks nu heeft of niet. Zonder die capability
wordt de instelling bewaard en start er niets op de achtergrond: elke aanroep wacht op het antwoord.
Wat het model met de instelling doet, wat er na een onderbreking gebeurt, de grenzen en de routes waarmee je een taak leest, staan op Een tool op de achtergrond draaien.
Labels¶
Een koppeling draagt Labels: de eigen indeling van je organisatie, waarover de regels voor personen worden geschreven. De lijst heeft er een kolom voor en het formulier van een koppeling een veld.
De tool van de koppeling draagt dit label. Een koppeling salaris met department: payroll
maakt haar tool api__salaris tot een tool van de loonadministratie, en een regel over Tools in
de policy van een sleutel (Regels over een persoon)
beslist daarna op dat label. Een tool die een persoon niet mag zien staat niet in GET /tools, en
een tool die ze niet mag gebruiken wordt niet aan het model aangeboden. Dezelfde regel beslist ook
over de koppeling zelf, voor een verzoek van een sleutel dat een persoon noemt: GET
/api_connectors toont alleen de koppelingen waarvan ze de tool mag zien, wijzigen vraagt see en
write op haar tool, en verwijderen see en delete
(Registraties). De console toont elke koppeling.
Zie Bouwen voor personen.
Lege lijsten en toegangsbeperkingen¶
“Nog geen API-koppelingen” geeft aan dat de lijst leeg is. Kon de lijst niet laden, dan zegt de pagina dat met de status van Core en een knop Opnieuw.
Zie je tooling staat uit voor deze organisatie, dan staat Tools en MCP-servers aanroepen uit in het plafond van de organisatie. De beheerder van de organisatie erboven zet het aan bij Toegestane capabilities op Instellingen; voor een organisatie zonder bovenliggende organisatie doet je operator dat. Dat geldt voor elk onderdeel onder Tools.