Buchungs- und Teilnehmerangaben mit der Booking API erfassen

Availability
Beta
Last verified
Last verified 28. Sept. 2026

Veranstalter können für jede Buchung oder jedes Ticket Fragen stellen, zum Beispiel nach Teilnehmernamen, einem Geburtsdatum oder Ernährungswünschen. Mit dieser Anleitung zeigen Sie diese Fragen in Ihrem Checkout an und speichern die Antworten vor der Zahlung.

Die vor der Zahlung erforderlichen Fragen müssen beantwortet werden, bevor Sie den Checkout abschließen, auch wenn Sie die gehostete Zahlungsseite nutzen. Sollte Ihre Integration diese Angaben nicht erfassen können, nutzen Sie stattdessen den gehosteten Online-Shop des Veranstalters für die Buchung.

Bevor Sie beginnen

Prüfen, ob der Warenkorb Fragen enthält

Lesen Sie customFieldsCompletion am Warenkorb. Ist allRequiredComplete gleich false, sind noch Pflichtfragen offen. Fragen Sie in derselben Abfrage customFieldsCollectionToken ab; Sie brauchen dieses Token, um die Fragen zu lesen und zu beantworten. Jede Abfrage erzeugt ein neues Token. Fragen Sie es deshalb erst ab, wenn Sie mit dem Erfassen der Antworten beginnen, und nicht bei jeder Aktualisierung des Warenkorbs.

graphql
query CartQuestions($id: IdOrNumberOrToken!) {
  request(id: $id) {
    customFieldsCompletion {
      hasCustomFields
      allRequiredComplete
    }
    customFieldsCollectionToken(requiredByStage: BEFORE_PAYMENT)
  }
}

requiredByStage: BEFORE_PAYMENT umfasst alle Fragen, die vor der Zahlung beantwortet sein müssen. Das Token ist 24 Stunden gültig; lesen Sie danach ein neues.

Offene Fragen lesen

graphql
query OpenQuestions($token: Token!) {
  requestCustomFields(requestId: $token) {
    openCustomFields {
      customizableId
      customizableType
      offerableNameTranslated
      pricingNameTranslated
      customFieldSets {
        id
        legendTranslated
        descTranslated
        inputs {
          id
          labelTranslated
          descTranslated
          type
          required
          mapping
          options {
            value
            labelTranslated
          }
        }
      }
    }
  }
}

Jeder Eintrag in openCustomFields steht für einen Satz Antworten, den Sie erfassen:

customizableTypeGefragt für
REQUEST_ITEMEine Position im Warenkorb, einmal pro Buchung.
ATTENDANCEEin Ticket. Zeigen Sie pricingNameTranslated an, damit der Kunde weiß, für welches Ticket er antwortet.
CONTACTDen Kunden. Diese Fragen lassen sich noch nicht über die Booking API beantworten; siehe unten.

customFieldSets fasst die Fragen unter einer Überschrift aus legendTranslated zusammen. Zeigen Sie die Fragen in der zurückgegebenen Reihenfolge an.

Formular aufbauen

Wählen Sie das Formularelement anhand von type und senden Sie die Antwort als Text:

typeAntwort
TEXT, TEXTAREAFreitext.
EMAILEine E-Mail-Adresse.
TELEine Telefonnummer; sie wird für das Land des Veranstalters geprüft.
DATEEin Datum im Format YYYY-MM-DD. Bei mapping: DATE_OF_BIRTH darf es nicht in der Zukunft liegen.
SELECT, RADIODer value der gewählten Option. Zeigen Sie labelTranslated an.
CHECKBOXMit Optionen der value der gewählten Option, ohne Optionen ein Textwert.
FILE, WAIVERNoch nicht über die Booking API möglich; siehe unten.

mapping zeigt, ob eine Antwort eine Standardangabe zum Teilnehmer wie FIRST_NAME oder LAST_NAME füllt; CUSTOM ist eine vom Veranstalter definierte Frage.

Antworten speichern

Senden Sie die Antworten für jeweils einen Eintrag aus openCustomFields, mit einem Element pro Fragengruppe:

graphql
mutation SaveAnswers($input: RequestCustomFieldsCollectionSubmitInput!) {
  requestCustomFieldsCollectionSubmit(input: $input) {
    customFieldsResponses {
      id
      completionState
    }
    errors {
      key
      message
      messageTranslated
    }
  }
}
json
{
  "input": {
    "requestId": "<customFieldsCollectionToken>",
    "customFieldsResponses": [
      {
        "customizableId": "<customizableId>",
        "customizableType": "ATTENDANCE",
        "fieldSetId": "<customFieldSets.id>",
        "values": [{ "inputId": "<inputs.id>", "value": "Alex" }]
      }
    ]
  }
}

Sind die Antworten gespeichert, ist completionState gleich REQUIREMENTS_MET. Lesen Sie die offenen Fragen erneut und wiederholen Sie den Vorgang, bis openCustomFields leer ist. Schließen Sie dann den Checkout ab.

Enthält eine Position mehrere Tickets derselben Preiskategorie, erscheinen sie in openCustomFields als ein Eintrag. Jedes Speichern füllt das nächste Ticket aus. Lesen Sie die Liste deshalb nach jedem Speichern erneut, bis der Eintrag verschwindet.

Fragen, die die Booking API noch nicht beantworten kann

Datei-Uploads (FILE), Verzichtserklärungen (WAIVER) und Fragen zum Kunden (CONTACT) können nicht über die Booking API übermittelt werden. Sind diese vor der Zahlung erforderlich, unterstützt diese Konfiguration keinen vollständigen Headless-Checkout: Der Checkout gibt custom_fields_incomplete zurück und liefert weder eine Rechnung noch paymentLink.

Nutzen Sie für diese Buchungen von Beginn an den gehosteten Online-Shop des Veranstalters, damit der Kunde die erforderlichen Angaben vor dem Checkout machen kann. Schließen Sie den API-Checkout nicht in der Erwartung ab, dass ein Zahlungslink diese Angaben erfasst.

Fehler

SchlüsselCodeVorgehen
customFieldsResponses.0.values.0.valueinvalidDie Antwort passt nicht zum type der Frage, zum Beispiel eine ungültige E-Mail-Adresse oder eine unbekannte Option. Die Indizes verweisen auf Fragengruppe und Antwort.
customFieldsResponsesinvalidEine Pflichtantwort fehlt, oder die Antworten gehören zu mehr als einer Position oder einem Ticket. Prüfen Sie die Antworten und senden Sie sie erneut.
customFieldsResponsesalready_completedDie Fragen sind bereits beantwortet. Lesen Sie die offenen Fragen erneut.

Je nach Einstellungen des Veranstalters schlägt der Checkout mit custom_fields_incomplete fehl, solange Pflichtfragen offen sind. Beantworten Sie die Fragen und schließen Sie den Checkout erneut ab.

Verwandte Artikel

Bereit loszulegen?

Buchen Sie eine kostenlose Demo oder kontaktieren Sie uns — wir freuen uns auf Sie.