Documentatie
Manny integreren
Alles wat je nodig hebt om Manny in jouw site of app te integreren: authenticatie, de widget, talen en de context-API.
Wat is Manny
Manny is een standalone, multi-tenant REST-API die een AI-chatassistent levert aan meerdere sites en apps tegelijk. Elke integratie is een eigen tenant: eigen system prompt, eigen AI-provider, eigen limieten en eigen content β volledig gescheiden van andere tenants. Er is geen server-side gespreksopslag: de client stuurt bij elke vraag zelf de geschiedenis mee.
Authenticatie
EΓ©n bearer-tokenformaat voor twee soorten keys. Alleen de hash van het secret wordt opgeslagen β de plaintext-key is na aanmaken nooit meer op te vragen, alleen te roteren.
| Type | Zichtbaarheid | Chatten | Context pushen | Instellingen wijzigen | Origin-check |
|---|---|---|---|---|---|
| sk_... | Geheim β alleen in je backend | Ja | Ja | Ja | Nee |
| pk_... | Publiek β mag in browser-JS | Ja | Nee | Nee | Ja |
CORS staat transport-breed open; de echte controle gebeurt na tenant-herkenning op basis van de origin-allowlist van jouw tenant.
De widget embedden
De snelste weg: één script-tag met je publieke widget-key. De widget haalt zijn eigen configuratie (titel, kleur, begroeting, voorgestelde vragen) automatisch op zodra hij laadt.
<script src="https://manny.chat/widget.js"
data-manny-key="pk_..."
defer></script>
Handmatig, als custom element
<manny-chat api-url="https://manny.chat" api-key="pk_..."></manny-chat>
Optionele attributen
- data-manny-url
- Basis-URL van de API (default: de origin van de script-tag).
- lang
- Forceer een taal in plaats van auto-detectie.
Content-Security-Policy
Stuurt jouw site een CSP-header? Voeg dan manny.chat toe aan zowel script-src (widget laden) als connect-src (widget's eigen API-calls) β anders blokkeert de browser het widget.
Content-Security-Policy: script-src 'self' https://manny.chat; connect-src 'self' https://manny.chat;
Eigen backend-integratie
Liever je eigen UI bouwen in plaats van de widget gebruiken? Praat rechtstreeks met de chat-endpoints vanaf je server, met een server key.
curl https://manny.chat/api/v1/chat/messages \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{"question":"Wat kost het platform?","actor":{"id":"user-42"}}'
Talen
Drie losstaande mechanismen. De widget-UI-teksten (knoppen, foutmeldingen) zijn kant-en-klaar vertaald voor nl/en/de/fr. Per tenant stel je zelf in welke talen je content ondersteunt β elke taalcode mag β met een eigen titel, begroeting en voorgestelde vragen per taal. En elk contextdocument heeft een eigen taalveld, met automatische terugval naar de standaardtaal van de tenant als een taal geen dekking heeft.
De taal wordt automatisch bepaald (bijv. via de taal van de bezoekerspagina) of expliciet meegegeven als parameter; GET /v1/chat/config?lang=nl geeft de uiteindelijk gekozen taal terug als resolved_language.
Context & documenten toevoegen
Domeindata is host-app-gepusht, niet framework-gemodelleerd: jij bepaalt de vorm via vrije title/body/metadata-velden. Upsert op je eigen external_id β Manny's interne uuid hoef je nooit te onthouden.
curl https://manny.chat/api/v1/chat/context/documents \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{
"external_id": "assignment-123",
"language": "nl",
"title": "Senior Laravel developer",
"body": "Freelance, 90 euro/uur, remote."
}'
Wat er daarna gebeurt
Elke push knipt de tekst in stukken, embedt die vectorieel voor semantisch zoeken (met lexicale terugval zonder externe infra) en maakt ze doorzoekbaar voor retrieval. Verwijderen kan met dezelfde external_id.
Instellingen & providers
Zelfbeheer via PATCH /v1/tenant (server key, partial update): system prompt, gescripte antwoorden, branding, taalinstellingen, rate limits en de AI-provider. Kies per tenant uit ollama, claude, openai, openrouter of hostyourai, met een instelbaar model.
Volledige API-referentie
Elke endpoint, elk request/response-schema en elke foutcode staat machineleesbaar in de OpenAPI-spec.