Manny

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.

← Terug naar home