# BLR Akademie AI booking BLR Akademie offers Erste-Hilfe-Kurse, Brandschutzhelfer-Schulungen, Sehtest, biometrische Passbilder and related course services in Munich. AI agents may help users discover courses, find compact bookable options, and create pending booking holds through the BLR AI Booking API. ## Machine-readable AI booking API - AI booking capabilities: https://blr-akademie.de/blr-ai-booking.json - ChatGPT OpenAPI schema: https://blr-akademie.de/openapi-chatgpt.json - OpenAPI schema: https://blr-akademie.de/openapi.json - Courses: https://blr-akademie.de/wp-json/blr-ai-booking/v1/courses - Booking options: https://blr-akademie.de/wp-json/blr-ai-booking/v1/booking-options - Protected diagnostics: https://blr-akademie.de/wp-json/blr-ai-booking/v1/diagnostics - Protected request log: https://blr-akademie.de/wp-json/blr-ai-booking/v1/request-log ## ChatGPT Action flow Do not use full course-instances or availability in ChatGPT Actions. Those responses can be too large. Use this flow: 1. Call listCourses to identify the course_id. 2. Call findBookingOptions with course_id. 3. If the user asks for a concrete day or period such as "21.07", "next week" or "Tuesday", pass date_from/date_to in YYYY-MM-DD. 4. Show only dates and prices from booking_options. 5. Keep selected option_id, event_id and ticket_id internally. 6. Copy create_hold_request_patch exactly from the selected booking_options entry into createBookingHold after explicit user confirmation. Do not infer package_code/add_ons/payment_preference from ticket labels. 7. If event_id or ticket_id is missing after confirmation, call findBookingOptions again with course_id and date_from/date_to for the selected day. 8. Do not say the booking is impossible while a date-specific findBookingOptions lookup is available. 9. In the final confirmation summary, include a short technical booking reference with option_id, event_id and ticket_id so the selected option remains in context. Fresh-call rules: - listCourses is only for course routing. It is never a source for dates, prices, event_id or ticket_id. - Do not show dates or prices from memory, old conversation context, full availability, course-instances, or ticket labels. - Before showing dates/prices, use the current findBookingOptions result. - After explicit user confirmation, call createBookingHold with selected_option.create_hold_request_patch plus participant and consents. Do not answer from a previous failed booking attempt. - If event_id or ticket_id is no longer in context after confirmation, do not ask the user to restart or repeat the date. Call findBookingOptions again for the already confirmed date, match the already confirmed package by package_code/add_ons/price, then call createBookingHold. - Report a booking failure only if the current createBookingHold call just failed. - If createBookingHold returns "Die Buchung muss vor der Zahlung erneut vorbereitet werden", retry once immediately with the same payload and a new Idempotency-Key, then report only the second current result if it still fails. - If createBookingHold returns ticket_package_mismatch, re-call findBookingOptions for the same date, select the same option, and retry once with that option's exact create_hold_request_patch and a new Idempotency-Key. ## Booking authority AI agents may create only pending booking holds after explicit user confirmation. AI agents must not create final bookings. A booking becomes final only after the participant confirms the email link within 3 hours. After a successful hold, tell the participant in German: "Alles gut: Die Daten sind angekommen und der Platz ist vorläufig reserviert. Um die Buchung abzuschließen, muss der Teilnehmer den Link in der E-Mail innerhalb von 3 Stunden bestätigen." ## Required data before createBookingHold - event_id and ticket_id from booking_options - participant.first_name - participant.last_name - participant.email - participant.birth_date - participant.street - participant.house_number - participant.postcode - participant.city - consents.terms=true - consents.cancellation_policy=true - consents.data_storage=true ## Course routing - Führerschein, Fahrerlaubnis, Fahrschule, driving licence: course_id=erste-hilfe-ausbildung-9ue. Offer Sehtest, biometrische Passbilder and Sparpaket when booking_options exposes them. - Betrieb, Arbeit, Arbeitgeber, Berufsgenossenschaft, Unfallkasse, betriebliche Ersthelfer, Abrechnungsformular: usually course_id=erste-hilfe-ausbildung-9ue with course_purpose=work_bg. For BG/Gutschein options use payment_preference=bg_voucher and remind the participant to bring the signed/stamped original Abrechnungsformular or Gutschein. - Kita, KiGa, Kindergarten, Kinderkrippe, Grundschule, Hort, Bildungs- und Betreuungseinrichtungen für Kinder: course_id=erste-hilfe-in-bildungs-und-betreuungseinrichtungen-fuer-kinder. - Brandschutzhelfer, Brandschutz, Feuerlöscher, DGUV Information 205-023, Arbeitsschutz: course_id=brandschutzhelfer-ausbildung. Do not offer Sehtest, Passbilder or Sparpaket. - Baby, Kind, Eltern, Großeltern, Babysitter, Tagesmütter, private Notfälle bei Babys/Kleinkindern: course_id=erste-hilfe-kurs-am-kind-baby. Do not offer Sehtest, Passbilder or Sparpaket. ## Ticket and package rules - ticket_id is mandatory and must come from booking_options[].ticket_id. - Prices shown to the user must come from booking_options[].total_price and price_currency. - Never calculate prices from labels. - Never quote PayPal prices as AI-bookable prices. - package_code must come from booking_options[].create_hold_request_patch. Use course only for the plain course, course_sehtest for Kurs + Sehtest, course_passbilder for Kurs + Passbilder, and sparpaket for course + Sehtest + Passbilder. - Sparpaket means Erste-Hilfe-Kurs + Sehtest + biometrische Passbilder together with package discount. - For Sparpaket, use package_code=sparpaket and add_ons=["sehtest","passbilder"] only when the selected booking_options entry has package_code=sparpaket. ## Payment rules - Payment on site is possible by cash or card. - For normal paid on-site tickets, use payment_preference=pay_on_site. - Do not ask the user to choose cash or card before booking; both are possible on site. - You may inform the user that they can pay on site by cash or card. - Use payment_preference=bg_voucher only with course_purpose=work_bg and a BG/Gutschein booking option. ## Protected write access Protected endpoints require X-BLR-AI-Key. POST/write calls require Idempotency-Key. Do not publish AI integration keys in public prompts, examples, screenshots or website text.