VOOR RESERVERINGSPLATFORMEN & PLUGINS

Allergieën mee.
In jullie boekingsflow.

Laat je gast inloggen met Allergie-ID en een eigen profiel of groep kiezen. Jullie ontvangen één object, voegen dat toe aan de reservering en sturen het mee naar het restaurant.

JULLIE BESTAANDE RESERVERINGSOBJECT
{ …jullie reserveringsgegevens, allergieId: { people: [ … ], summary: { … }, language: "nl" }}

Dezelfde reservering, inclusief de selectie van de gast, naar jullie restaurant.

01 / GAST

Inloggen. Kiezen. Bevestigen.

Op Allergie-ID kiest de gast een persoon of eigen groep. Alleen aangevinkte personen, beperkingen en optionele notities worden gedeeld.

02 / JULLIE BACKEND

Deelcode naar één object.

Controleer de code met de verwachte website-origin en conceptreferentie. Voeg de API-uitvoer toe als reservation.allergieId.

03 / RESTAURANT

Meesturen én zichtbaar maken.

Stuur het object mee via jullie bestaande reserveringskanaal. Toon alle personen apart in het restaurantdashboard en het keukenticket.

BEKIJK HET ZONDER IN TE LOGGEN

Vijf situaties.
Steeds hetzelfde object.

Interactieve voorbeelden met fictieve gegevens. Verander de selectie en zie hoe het gegevensobject en het keukenticket meeveranderen.

FICTIEVE VOORBEELDGEGEVENS

De eigen kaart van de gast.

Mar deelt melk en pinda’s, een opgegeven ernstige reactie en een verzoek voor de keuken.

Persoonlijke kaart

01 De gast kiest

1 van 1 persoon geselecteerd

02 Het restaurant ziet

MarPersoon 1
  • MelkTe vermijden
  • Pinda’sErnstige reactie gemeld

Gebruik schoon keukengerei en een aparte pan.

Namen zijn ingekort. Reactieaanduidingen zijn opgegeven door de gast. Persoonlijke verzoeken blijven in hun oorspronkelijke taal.

Het extra veld in jullie reserveringsobject
JSON · fictieve momentopname
{
  "allergieId": {
    "schema": "allergieid.share/1",
    "id": "VOORBEELD_persoon",
    "status": "active",
    "type": "user",
    "name": "Mar",
    "language": "nl",
    "snapshot": true,
    "notesIncluded": true,
    "partner": {
      "origin": "https://boeken.example",
      "name": "Voorbeeldplatform",
      "reference": "draft_voorbeeld"
    },
    "createdAt": "2026-10-21T18:55:12.368Z",
    "expiresAt": "2026-11-20T18:55:12.368Z",
    "people": [
      {
        "name": "Mar",
        "language": "nl",
        "requests": [
          "Gebruik schoon keukengerei en een aparte pan."
        ],
        "items": [
          {
            "code": "Milk",
            "kind": "allergen",
            "eu14": 7,
            "eu14Key": "milk",
            "severity": null,
            "label": "Melk",
            "labelLanguage": "nl"
          },
          {
            "code": "Pindas",
            "kind": "allergen",
            "eu14": 5,
            "eu14Key": "peanuts",
            "severity": "severe",
            "label": "Pinda’s",
            "labelLanguage": "nl"
          }
        ]
      }
    ],
    "summary": {
      "peopleCount": 1,
      "eu14": [
        5,
        7
      ],
      "eu14Keys": [
        "peanuts",
        "milk"
      ],
      "codes": [
        "Milk",
        "Pindas"
      ],
      "diets": [],
      "hasSevere": true
    }
  }
}
Dezelfde selectie als tekst voor een keukenticket
Allergieën – Allergie-ID
Melk, Pinda’s (ERNSTIG) · Verzoek: Gebruik schoon keukengerei en een aparte pan.

Dit is een tekstweergave van de selectie. Jullie platform bepaalt de uiteindelijke opmaak van het ticket.

OOK ALS HET EVEN MISGAAT

Zo handel je een fout af.

Voorbeelden van de foutrespons, de vervolgstap en een duidelijke melding in jullie interface.

Allergie-ID APIHTTP 404
{
  "message": "Not found"
}

Deze selectie hoort niet bij dit reserveringsconcept.

Jullie backend controleert de vaste website-origin en de eigen conceptreferentie. Laat de gast opnieuw kiezen voor dit concept.

VOORBEELDMELDING IN JULLIE INTERFACE

Je allergiegegevens konden niet bij deze reservering worden gevonden. Selecteer je kaart opnieuw.

Vervolgactie: Opnieuw selecteren
PROBEER DE HELE OVERDRACHT

Van de gast naar de keuken.

Dit voorbeeld gebruikt de echte widget en API. Log in met je eigen account, kies een persoon of groep en bekijk het object dat jullie platform kan meesturen.

01 / IN JULLIE RESERVERINGSFORMULIER

Allergieën of dieetwensen?

Laat de gast het juiste account gebruiken en zelf kiezen wat er meegaat.

Geen boeking en geen bericht naar een echt restaurant. De server controleert jullie deelcode; hieronder zie je de daadwerkelijke API-uitvoer. Er wordt een intrekbare deellink aangemaakt in je account.

02 / ZO KAN HET RESTAURANT HET TONEN

De gekozen gegevens verschijnen hier.

Eerst kiest de gast. Daarna haalt jullie backend de gegevens op. Geen namen, allergieën of accountgegevens vooraf.

Bekijk het reserveringsobject (nog leeg)
{
  "allergieId": null
}
VAN WIDGET TOT OVERDRACHT

Knop aan de voorkant.
Controle aan de achterkant.

De widget levert de selectie en een deelcode. De browser is voor de voorvertoning; jullie backend haalt de officiële momentopname op. Jullie hoeven geen login, groepskiezer of allergievertalingen te bouwen.

Browser · na laden van het script
<div id="allergie-id"
  data-allergieid
  data-delivery="object"
  data-partner="Jullie reserveringsplatform"
  data-reference="draft_123"
  data-lang="nl" data-ui="auto"
></div>
<input type="hidden" name="allergieIdToken" id="allergie-token">
<script src="https://allergieid.nl/widget.js" defer></script>
<script>
// Replace draft_123 with the draft ID issued by YOUR backend.
// Listen before the guest interacts; the SDK mounts automatically.
document.getElementById("allergie-id").addEventListener(
  "allergieid:share", ({ detail }) => {
    document.getElementById("allergie-token").value = detail.token;
    // detail.allergieId.people is available for your preview.
    // Submit ONLY the token with your existing booking form.
  }
);
</script>

Vervang draft_123 door de conceptreferentie van jullie backend. Een reservering zonder gekozen Allergie-ID blijft jullie normale flow. Is er wél een deelcode maar mislukt de controle? Toon de fout en laat de gast opnieuw kiezen; laat de allergiegegevens niet stilzwijgend weg. De gewone accounttoken of het wachtwoord gaat nooit naar jullie platform.

HET CONTRACT

Eén extra object.
Elke persoon apart.

Dit is alleen het extra veld in jullie bestaande reserveringsobject. De overige reserveringsgegevens veranderen niet. Het voorbeeld hieronder is fictief; de demo hierboven gebruikt jullie echte selectie.

people
Gekozen personen met ingekorte of verborgen namen, allergieën, dieetwensen, intoleranties en notities.
items
Stabiele code, vertaald label, categorie, eventuele EU-14-code en door de gebruiker opgegeven reactie.
summary
Totaaloverzicht voor filters en signalering. Houd daarnaast altijd de uitsplitsing per persoon zichtbaar.
language
Taal van de allergielabels. labelLanguage maakt terugval op een andere taal zichtbaar. Vrije notities blijven in hun oorspronkelijke taal.
snapshot
Een bewuste momentopname, met aanmaakdatum en verloopdatum. Wijzigingen vragen om opnieuw selecteren.
{
  "allergieId": {
    "schema": "allergieid.share/1",
    "id": "01_EXAMPLE_SHARE",
    "status": "active",
    "type": "group",
    "name": "Samen uit eten",
    "language": "nl",
    "snapshot": true,
    "notesIncluded": true,
    "partner": {
      "origin": "https://boeken.example",
      "name": "Jullie platform",
      "reference": "draft_123"
    },
    "createdAt": "2026-10-21T10:00:00Z",
    "expiresAt": "2026-11-20T10:00:00Z",
    "people": [
      {
        "name": "Mar",
        "language": "nl",
        "items": [
          {
            "code": "Milk",
            "label": "Melk",
            "labelLanguage": "nl",
            "kind": "allergen",
            "eu14": 7,
            "eu14Key": "milk",
            "severity": null
          }
        ],
        "requests": [
          "Gebruik schoon keukengerei."
        ]
      },
      {
        "name": "Noo",
        "language": "nl",
        "items": [
          {
            "code": "Egg",
            "label": "Ei",
            "labelLanguage": "nl",
            "kind": "allergen",
            "eu14": 3,
            "eu14Key": "eggs",
            "severity": "reaction"
          }
        ],
        "requests": []
      }
    ],
    "summary": {
      "peopleCount": 2,
      "eu14": [
        3,
        7
      ],
      "eu14Keys": [
        "eggs",
        "milk"
      ],
      "codes": [
        "Milk",
        "Egg"
      ],
      "diets": [],
      "hasSevere": false
    }
  }
}
DE LAATSTE STAP HOORT BIJ JULLIE PLATFORM

Opgeslagen is nog niet afgeleverd.

Sla de reservering en een verzendtaak samen op. Laat jullie bestaande worker het volledige object naar het restaurant sturen. Bij een fout blijft de verzendtaak staan voor een nieuwe poging, met dezelfde reserveringsreferentie om dubbele boekingen te voorkomen.

Selectie ontvangenDoor backend gecontroleerdNaar restaurant verzonden

Het restaurantendpoint moet jullie idempotency key ondersteunen, of jullie ontvanger moet op reserverings-ID dedupliceren. Een geslaagde HTTP-overdracht is technische ontvangst. Het betekent niet dat de keuken de informatie al heeft gelezen of een gerecht heeft goedgekeurd. Maak mislukte overdrachten zichtbaar aan jullie medewerkers.

PRAKTISCHE VRAGEN

Zo blijft de flow duidelijk.

Moeten we gasten of tafels naar Allergie-ID sturen?

Nee. Jullie reserveringsobject blijft van jullie. De widget heeft alleen een ondoorzichtige conceptreferentie en de website-origin nodig om de deelactie aan de juiste reservering te binden. Jullie voegen het gecontroleerde allergieId-object toe aan jullie bestaande gegevens.

Wie stuurt de gegevens naar het restaurant?

Jullie platform. Allergie-ID levert de door de gast gekozen momentopname. Neem het volledige allergieId-object mee in jullie bestaande restaurantoverdracht en toon personen, beperkingen en notities ook in het restaurantdashboard of keukenticket. Alleen in jullie database opslaan is geen overdracht.

Wat gebeurt er bij intrekken of wijzigingen?

Een deelactie is een momentopname. Een latere profielwijziging verandert een eerder opgeslagen reservering niet. Een ingetrokken of verlopen deelcode kan niet opnieuw worden opgehaald. Al door jullie opgeslagen gegevens verdwijnen daardoor niet automatisch. Laat de gast opnieuw kiezen bij wijzigingen en vervang dan het hele allergieId-object.

Is dit dezelfde koppeling als ChatGPT OAuth?

De widget laat een gast één specifieke selectie delen tijdens jullie boeking. De MCP-koppeling geeft een AI-assistent beperkte toegang tot profieltools na OAuth-toestemming. Een reserveringsplugin kan de widget gebruiken voor selectie; jullie platform blijft verantwoordelijk voor het opslaan en doorgeven van de reservering.

Statuscodes en herstel

404: deelcode onbekend of website/concept klopt niet. 410: verlopen of ingetrokken. 422: ongeldige invoer. 429: te veel verzoeken. Bij netwerkfouten opnieuw proberen; bij 404/410 opnieuw kiezen. Haal een deelcode uitsluitend op via het vaste Allergie-ID-API-adres, nooit via een URL uit het formulier.

Bestaand opmerkingenveld of een externe iframe?

De objectroute is voor platformbouwers. Voor een eigen tekstveld kan de SDK ook delivery: "form" met een target gebruiken; delivery: "copy" zet tekst klaar om zelf te kopiëren. Een widget buiten een iframe van een ander reserveringsplatform kan de reservering daarin niet aanpassen. De eigenaar van dat platform moet de integratie inbouwen.

Even bevestigen