Global Travel Monitor (GTM) - REST API

Dokumentation REST API

https://stage-api.global-travel-monitor.eu

Authentifizierung

Authorization: Bearer {API_TOKEN}

Den Token erhalten Sie von Ihrem Ansprechpartner bei Global Travel Monitor.

Bearer Token

Event API

Events abrufen, erstellen und verwalten. Unterstützt Multi-Scope-Abfragen und Event-Gruppen.

  • GET /v1/events
  • POST /v1/events
  • GET /v1/events/{uuid}
  • PUT /v1/events/{uuid}
  • DEL /v1/events/{uuid}
  • GET /v1/event-types
  • GET /v1/countries
Bearer Token

Folder Import API

Import von Reisedaten mit Hotels, Flügen, Kreuzfahrten und Mietwagen. Queue-basierte Verarbeitung.

  • POST /v1/folders/import
  • GET /v1/folders
  • GET /v1/folders/{id}
Öffentlich

Feed API

RSS/Atom-Feeds für aktuelle Sicherheits- und Reiserisiko-Events. Keine Authentifizierung erforderlich.

  • GET https://global-travel-monitor.eu/feed/events
  • GET https://global-travel-monitor.eu/feed/countries
  • GET https://global-travel-monitor.eu/feed/events/meta.json

Event API – Anleitung

Übersicht

Die Event API ermöglicht es externen Partnern, Events auf dem Risk Management Dashboard abzurufen sowie — bei entsprechender Freischaltung — eigene Events zu erstellen und zu verwalten.

Wichtig: Das Erstellen, Aktualisieren und Löschen von Events erfordert eine separate Freischaltung Ihres Accounts durch Global Travel Monitor. Ohne diese Freischaltung können Sie die API nur zum Lesen von Events nutzen. Bei einem Versuch ohne Freischaltung erhalten Sie einen 403 Forbidden Response.


Authentifizierung

Alle API-Aufrufe erfordern einen Bearer-Token im HTTP-Header:

Authorization: Bearer {API_TOKEN}

Den Token erhalten Sie von Ihrem Ansprechpartner bei Global Travel Monitor. Er ist 1 Jahr gültig.


Base-URL

https://stage-api.global-travel-monitor.eu/v1

Rate Limit

Standardmäßig sind 60 Requests pro Minute erlaubt. Bei Überschreitung erhalten Sie einen 429 Too Many Requests Response.


Referenzdaten

Bevor Sie Events erstellen, fragen Sie die gültigen Event-Typen und Ländercodes ab.

Event-Typen abrufen

GET /v1/event-types

Beispiel:

curl -H "Authorization: Bearer {TOKEN}" \
  https://stage-api.global-travel-monitor.eu/v1/event-types

Response:

{
  "success": true,
  "data": [
    {
      "code": "earthquake",
      "name": "Erdbeben",
      "color": "#FF0000",
      "icon": "fa-house-crack"
    },
    {
      "code": "flood",
      "name": "Überschwemmung",
      "color": "#0066CC",
      "icon": "fa-water"
    }
  ]
}

Länder abrufen

GET /v1/countries

Beispiel:

curl -H "Authorization: Bearer {TOKEN}" \
  https://stage-api.global-travel-monitor.eu/v1/countries

Response:

{
  "success": true,
  "data": [
    {
      "iso_code": "DE",
      "iso3_code": "DEU",
      "name_de": "Deutschland",
      "name_en": "Germany"
    },
    {
      "iso_code": "TH",
      "iso3_code": "THA",
      "name_de": "Thailand",
      "name_en": "Thailand"
    }
  ]
}

Events

Event erstellen

Erfordert Freischaltung der Event-Erstellung für Ihren Account.

POST /v1/events

Request-Body (JSON):

FeldTypPflichtBeschreibung
titlestringJaTitel des Events (max. 255 Zeichen)
descriptionstringNeinBeschreibung (max. 10.000 Zeichen, HTML erlaubt: p, br, strong, em, ul, ol, li, a)
prioritystringNeinPriorität: info, low, medium (Standard), high
start_datedatetimeJaStartdatum (ISO 8601, z.B. 2026-02-11T08:00:00Z)
end_datedatetimeNeinEnddatum (muss gleich oder nach start_date liegen)
event_type_codesarrayJaEvent-Typ-Codes (mindestens 1, aus /event-types)
country_codesarrayJaISO-2-Ländercodes (mindestens 1, z.B. ["DE", "AT"])
latitudenumberNeinBreitengrad (-90 bis 90)
longitudenumberNeinLängengrad (-180 bis 180)
tagsarrayNeinSchlagwörter (z.B. ["flooding", "bangkok"])
external_idstringNeinIhre interne Referenz-ID (max. 255 Zeichen)

Beispiel:

curl -X POST https://stage-api.global-travel-monitor.eu/v1/events \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Überschwemmung Bangkok",
    "description": "<p>Schwere Überschwemmungen im Großraum Bangkok.</p>",
    "priority": "high",
    "start_date": "2026-02-11T08:00:00Z",
    "end_date": "2026-02-18T08:00:00Z",
    "event_type_codes": ["flood"],
    "country_codes": ["TH"],
    "latitude": 13.7563,
    "longitude": 100.5018,
    "tags": ["flooding", "bangkok"],
    "external_id": "EXT-2026-001"
  }'

Response (201 Created):

{
  "success": true,
  "message": "Event created and published successfully.",
  "data": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Überschwemmung Bangkok",
    "description": "Schwere Überschwemmungen im Großraum Bangkok.",
    "priority": "high",
    "start_date": "2026-02-11T08:00:00+00:00",
    "end_date": "2026-02-18T08:00:00+00:00",
    "latitude": 13.7563,
    "longitude": 100.5018,
    "review_status": "approved",
    "is_active": true,
    "tags": ["flooding", "bangkok"],
    "event_types": [
      {
        "code": "flood",
        "name": "Überschwemmung",
        "color": "#0066CC",
        "icon": "fa-water"
      }
    ],
    "countries": [
      {
        "iso_code": "TH",
        "name_de": "Thailand",
        "name_en": "Thailand"
      }
    ],
    "created_at": "2026-02-11T10:30:00+00:00",
    "updated_at": "2026-02-11T10:30:00+00:00"
  }
}

Hinweis: Wenn für Ihren Account die Auto-Freigabe nicht aktiviert ist, lautet der review_status pending_review und is_active ist false. Das Event wird erst nach manueller Freigabe durch das Global-Travel-Monitor-Team auf dem Dashboard sichtbar.


Eigene Events auflisten

GET /v1/events

Standardmäßig werden nur eigene Events zurückgegeben — also Events, die über Ihren API-Token erstellt wurden. Mit dem Parameter scope können Sie zusätzlich Global-Travel-Monitor-Events und Events von Partner-Gruppen abrufen.

Der scope-Parameter unterstützt kommagetrennte Werte, um mehrere Quellen gleichzeitig abzufragen.

Query-Parameter:

ParameterTypBeschreibung
scopestringKommagetrennte Liste von Scope-Werten (Standard: own)
per_pageintegerEinträge pro Seite (Standard: 25)
pageintegerSeitennummer

Scope-Werte:

WertBeschreibung
ownNur Ihre eigenen Events (Standard)
passolutionNur von Global Travel Monitor bereitgestellte Events (aktiv und freigegeben)
allIhre eigenen Events + Global-Travel-Monitor-Events zusammen
{gruppen-slug}Events der API-Kunden in der angegebenen Event-Gruppe (aktiv, freigegeben, nicht archiviert). Wenn die Gruppe include_passolution_events aktiviert hat, werden zusätzlich Global-Travel-Monitor-Events mitgeliefert.

Hinweis: Partner-Events (über Gruppen) und Global-Travel-Monitor-Events werden nur angezeigt, wenn sie aktiv, freigegeben und nicht archiviert sind.

Beispiele:

# Eigene Events (Standard)
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?per_page=10&page=1"

# Nur Global-Travel-Monitor-Events
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?scope=passolution"

# Alle Events (eigene + Global Travel Monitor)
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?scope=all"

# Eigene + Global Travel Monitor (kommagetrennt, entspricht scope=all)
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?scope=own,passolution"

# Events einer Partner-Gruppe
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?scope=meine-partner-gruppe"

# Eigene Events + Partner-Gruppe kombiniert
curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/events?scope=own,meine-partner-gruppe"

Einzelnes Event anzeigen

GET /v1/events/{uuid}

Beispiel:

curl -H "Authorization: Bearer {TOKEN}" \
  https://stage-api.global-travel-monitor.eu/v1/events/a1b2c3d4-e5f6-7890-abcd-ef1234567890

Event aktualisieren

Erfordert Freischaltung der Event-Erstellung für Ihren Account.

PUT /v1/events/{uuid}

Es müssen nur die zu ändernden Felder gesendet werden.

Beispiel:

curl -X PUT https://stage-api.global-travel-monitor.eu/v1/events/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Überschwemmung Bangkok - Entwarnung",
    "priority": "low"
  }'

Response (200 OK):

{
  "success": true,
  "message": "Event updated successfully.",
  "data": { ... }
}

Event löschen

Erfordert Freischaltung der Event-Erstellung für Ihren Account.

DELETE /v1/events/{uuid}

Beispiel:

curl -X DELETE https://stage-api.global-travel-monitor.eu/v1/events/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer {TOKEN}"

Response (200 OK):

{
  "success": true,
  "message": "Event deleted successfully."
}

Fehlercodes

HTTP-CodeBedeutung
200Erfolgreich
201Erfolgreich erstellt
401Nicht authentifiziert (Token fehlt oder ungültig)
403Zugriff verweigert (Token hat keine Berechtigung oder Account deaktiviert)
404Event nicht gefunden
422Validierungsfehler (ungültige Daten)
429Rate Limit überschritten
500Serverfehler

Beispiel Validierungsfehler (422):

{
  "message": "The title field is required.",
  "errors": {
    "title": ["The title field is required."],
    "event_type_codes": ["At least one event type code is required."]
  }
}

Review-Workflow

Je nach Konfiguration Ihres Accounts gibt es zwei Modi:

  1. Auto-Freigabe aktiviert: Events werden sofort veröffentlicht (review_status: approved, is_active: true)
  2. Auto-Freigabe deaktiviert: Events werden zur Prüfung eingereicht (review_status: pending_review, is_active: false) und erst nach Freigabe durch das Global-Travel-Monitor-Team sichtbar

Logo auf dem Dashboard

Wenn ein Firmenlogo in Ihrem API-Account hinterlegt ist, wird dieses als Quellen-Logo neben Ihren Events auf dem Dashboard angezeigt. Ohne Logo erscheint Ihr Firmenname als Text.


Support

Bei Fragen zur API wenden Sie sich an Ihren Ansprechpartner bei Global Travel Monitor.

Folder Import API – Anleitung

Übersicht

Die Folder Import API ermöglicht den Import von Reisedaten (Folders) mit Hotels, Flügen, Kreuzfahrten und Mietwagen. Der Import läuft queue-basiert im Hintergrund und bietet automatisches Airport-Matching, Country-Matching, Timeline-Generierung und Geocoding.


Authentifizierung

Alle API-Aufrufe erfordern einen Bearer-Token im HTTP-Header:

Authorization: Bearer {API_TOKEN}

Token generieren

Der Token wird über die Web-Oberfläche generiert (erfordert eine aktive Session):

POST /customer/api-tokens/generate

Response:

{
  "success": true,
  "token": "2|RHej0fNgjGSzvPrEcSuY7nMGI7fldCnOMoBrpl2T173373b5",
  "message": "API Token erfolgreich generiert"
}

Wichtig: Speichern Sie den Token sicher ab. Er wird nur einmal im Klartext angezeigt.


Base-URL

https://stage-api.global-travel-monitor.eu

Folder importieren

POST /v1/folders/import

Importiert einen kompletten Folder mit allen zugehörigen Daten. Der Import wird in eine Queue eingereiht und im Hintergrund verarbeitet. Die Response enthält eine log_id zum Status-Tracking.

Request-Struktur

FeldTypPflichtBeschreibung
sourcestringJaImport-Quelle: api, file, manual
providerstringJaName des Datenlieferanten (max. 128 Zeichen)
dataobjectJaDie eigentlichen Reisedaten (siehe unten)
mapping_configobjectNeinOptionale Mapping-Konfiguration

Daten-Struktur (data)

FeldTypPflichtBeschreibung
folderobjectJaVorgangsdaten
customerobjectNeinKundendaten
participantsarrayNeinReiseteilnehmer
itinerariesarrayJaReiseleistungen (Hotels, Flüge, etc.)

Folder (Vorgangsdaten)

FeldTypPflichtBeschreibung
folder_numberstringNeinEindeutige Vorgangsnummer (wird automatisch generiert)
folder_namestringNeinName der Reise (max. 255 Zeichen)
travel_start_datedateNeinReisebeginn (YYYY-MM-DD)
travel_end_datedateNeinReiseende (YYYY-MM-DD)
primary_destinationstringNeinHauptreiseziel
statusstringNeindraft, confirmed, active, completed, cancelled (Standard: draft)
travel_typestringNeinbusiness, leisure, mixed (Standard: leisure)
agent_namestringNeinName des Bearbeiters
notesstringNeinNotizen
currencystringNeinWährung als ISO-Code (Standard: EUR)
custom_field_1_labelstringNeinLabel für eigenes Feld 1 (max. 100 Zeichen)
custom_field_1_valuestringNeinWert für eigenes Feld 1
custom_field_2_labelstringNeinLabel für eigenes Feld 2
custom_field_2_valuestringNeinWert für eigenes Feld 2
custom_field_3_labelstringNeinLabel für eigenes Feld 3
custom_field_3_valuestringNeinWert für eigenes Feld 3
custom_field_4_labelstringNeinLabel für eigenes Feld 4
custom_field_4_valuestringNeinWert für eigenes Feld 4
custom_field_5_labelstringNeinLabel für eigenes Feld 5
custom_field_5_valuestringNeinWert für eigenes Feld 5

Customer (Kundendaten)

FeldTypPflichtBeschreibung
salutationstringNeinAnrede: mr, mrs, diverse (auch Herr, Frau, Divers wird gemappt)
titlestringNeinTitel (max. 64 Zeichen)
first_namestringJaVorname (max. 128 Zeichen)
last_namestringJaNachname (max. 128 Zeichen)
emailstringNeinE-Mail-Adresse
phonestringNeinTelefonnummer
mobilestringNeinMobilnummer
streetstringNeinStraße
house_numberstringNeinHausnummer
postal_codestringNeinPostleitzahl
citystringNeinStadt
country_codestringNeinLändercode (ISO alpha-2, z.B. DE)
birth_datedateNeinGeburtsdatum (YYYY-MM-DD)
nationalitystringNeinStaatsangehörigkeit (ISO alpha-2)
notesstringNeinNotizen

Participant (Reiseteilnehmer)

FeldTypPflichtBeschreibung
salutationstringNeinmr, mrs, child, infant, diverse
titlestringNeinTitel
first_namestringJaVorname
last_namestringJaNachname
birth_datedateNeinGeburtsdatum
nationalitystringNeinStaatsangehörigkeit (ISO alpha-2)
passport_numberstringNeinReisepassnummer
passport_issue_datedateNeinAusstellungsdatum Pass
passport_expiry_datedateNeinAblaufdatum Pass
passport_issuing_countrystringNeinAusstellungsland Pass (ISO alpha-2)
emailstringNeinE-Mail-Adresse
phonestringNeinTelefonnummer
dietary_requirementsstringNeinErnährungsanforderungen
medical_conditionsstringNeinMedizinische Hinweise
notesstringNeinNotizen
is_main_contactbooleanNeinHauptansprechpartner (Standard: false)
participant_typestringNeinadult, child, infant (Standard: adult)

Itinerary (Reiseleistung)

FeldTypPflichtBeschreibung
booking_referencestringNeinBuchungsreferenz
itinerary_namestringNeinName der Leistung
start_datedateNeinStartdatum
end_datedateNeinEnddatum
statusstringNeinpending, confirmed, cancelled, completed (Standard: pending)
provider_namestringNeinAnbietername
provider_referencestringNeinAnbieterreferenz
currencystringNeinWährung (Standard: EUR)
notesstringNeinNotizen
hotelsarrayNeinHotels (siehe unten)
flightsarrayNeinFlüge (siehe unten)
shipsarrayNeinKreuzfahrten (siehe unten)
car_rentalsarrayNeinMietwagen (siehe unten)

Hotel

FeldTypPflichtBeschreibung
hotel_namestringJaHotelname
hotel_codestringNeinHotel-Code
hotel_code_typestringNeinTyp des Hotel-Codes
streetstringNeinStraße
postal_codestringNeinPostleitzahl
citystringNeinStadt
country_codestringNeinLändercode (ISO alpha-2)
latnumberNeinBreitengrad (-90 bis 90)
lngnumberNeinLängengrad (-180 bis 180)
check_in_datedateJaCheck-in-Datum
check_out_datedateJaCheck-out-Datum
nightsintegerNeinAnzahl Nächte
room_typestringNeinZimmertyp
room_countintegerNeinZimmeranzahl (Standard: 1)
board_typestringNeinVerpflegung (z.B. "All Inclusive")
booking_referencestringNeinBuchungsreferenz
total_amountnumberNeinGesamtbetrag
currencystringNeinWährung (Standard: EUR)
statusstringNeinpending, confirmed, cancelled (Standard: pending)
notesstringNeinNotizen

Flight (Flug)

FeldTypPflichtBeschreibung
booking_referencestringNeinBuchungsreferenz
service_typestringNeinoutbound, return, multi_leg (Standard: outbound)
airline_pnrstringNeinAirline PNR
ticket_numbersarrayNeinTicketnummern
total_amountnumberNeinGesamtbetrag
currencystringNeinWährung (Standard: EUR)
statusstringNeinpending, ticketed, cancelled (Standard: pending)
segmentsarrayJaFlugsegmente (mindestens 1)

Flight Segment:

FeldTypPflichtBeschreibung
segment_numberintegerNeinSegmentnummer (Standard: 1)
departure_airport_codestringJaIATA-Code Abflughafen (z.B. MUC) – automatisches Matching
departure_timedatetimeJaAbflugzeit
departure_terminalstringNeinTerminal
arrival_airport_codestringJaIATA-Code Zielflughafen (z.B. PMI) – automatisches Matching
arrival_timedatetimeJaAnkunftszeit
arrival_terminalstringNeinTerminal
airline_codestringNeinAirline-Code (z.B. LH)
flight_numberstringNeinFlugnummer
aircraft_typestringNeinFlugzeugtyp (z.B. A320)
duration_minutesintegerNeinFlugdauer in Minuten
booking_classstringNeinBuchungsklasse
cabin_classstringNeineconomy, premium_economy, business, first (Standard: economy)

Hinweis: departure_country_code, departure_lat, departure_lng, arrival_country_code, arrival_lat, arrival_lng werden automatisch aus den IATA-Codes ermittelt.


Ship (Kreuzfahrt)

FeldTypPflichtBeschreibung
ship_namestringJaSchiffsname
cruise_linestringNeinReederei
ship_codestringNeinSchiffs-Code
embarkation_datedateJaEinschiffungsdatum
disembarkation_datedateJaAusschiffungsdatum
nightsintegerNeinAnzahl Nächte
embarkation_portstringNeinEinschiffungshafen
embarkation_country_codestringNeinLändercode Einschiffung (ISO alpha-2)
embarkation_latnumberNeinBreitengrad Einschiffung
embarkation_lngnumberNeinLängengrad Einschiffung
disembarkation_portstringNeinAusschiffungshafen
disembarkation_country_codestringNeinLändercode Ausschiffung
disembarkation_latnumberNeinBreitengrad Ausschiffung
disembarkation_lngnumberNeinLängengrad Ausschiffung
cabin_numberstringNeinKabinennummer
cabin_typestringNeinKabinentyp
cabin_categorystringNeinKabinenkategorie
deckstringNeinDeck
booking_referencestringNeinBuchungsreferenz
total_amountnumberNeinGesamtbetrag
currencystringNeinWährung (Standard: EUR)
statusstringNeinpending, confirmed, cancelled (Standard: pending)
port_callsarrayNeinHafenstopps (siehe unten)
notesstringNeinNotizen

Port Call (Hafenstopp):

FeldTypPflichtBeschreibung
portstringNeinHafenname
countrystringNeinLändercode (ISO alpha-2)
arrivaldateNeinAnkunftsdatum
departuredateNeinAbreisedatum

Car Rental (Mietwagen)

FeldTypPflichtBeschreibung
rental_companystringNeinMietwagenfirma
booking_referencestringNeinBuchungsreferenz
pickup_locationstringJaAbholort
pickup_country_codestringNeinLändercode Abholung (ISO alpha-2)
pickup_latnumberNeinBreitengrad Abholung
pickup_lngnumberNeinLängengrad Abholung
pickup_datetimedatetimeJaAbholdatum/-zeit
return_locationstringJaRückgabeort
return_country_codestringNeinLändercode Rückgabe
return_latnumberNeinBreitengrad Rückgabe
return_lngnumberNeinLängengrad Rückgabe
return_datetimedatetimeJaRückgabedatum/-zeit
vehicle_categorystringNeinFahrzeugkategorie
vehicle_typestringNeinFahrzeugtyp
vehicle_make_modelstringNeinMarke/Modell
transmissionstringNeinmanual, automatic
fuel_typestringNeinpetrol, diesel, electric, hybrid
rental_daysintegerNeinMietdauer in Tagen
total_amountnumberNeinGesamtbetrag
currencystringNeinWährung (Standard: EUR)
insurance_optionsarrayNeinVersicherungsoptionen
extrasarrayNeinZusatzleistungen
statusstringNeinpending, confirmed, picked_up, returned, cancelled (Standard: pending)
notesstringNeinNotizen

Beispiele

Minimaler Import (nur Hotel)

curl -X POST https://stage-api.global-travel-monitor.eu/v1/folders/import \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "api",
    "provider": "Test System",
    "data": {
      "folder": {
        "folder_name": "Test Reise",
        "travel_start_date": "2026-06-01",
        "travel_end_date": "2026-06-14"
      },
      "customer": {
        "first_name": "Max",
        "last_name": "Mustermann"
      },
      "participants": [
        {
          "first_name": "Max",
          "last_name": "Mustermann",
          "is_main_contact": true
        }
      ],
      "itineraries": [
        {
          "itinerary_name": "Hauptreise",
          "hotels": [
            {
              "hotel_name": "Test Hotel",
              "check_in_date": "2026-06-01",
              "check_out_date": "2026-06-14"
            }
          ]
        }
      ]
    }
  }'

Vollständiger Import (Hotel + Flug)

curl -X POST https://stage-api.global-travel-monitor.eu/v1/folders/import \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "api",
    "provider": "TUI Reisebüro München",
    "data": {
      "folder": {
        "folder_name": "Mallorca Sommerurlaub 2026",
        "travel_start_date": "2026-07-15",
        "travel_end_date": "2026-07-29",
        "primary_destination": "Palma, Spanien",
        "travel_type": "leisure",
        "status": "confirmed",
        "currency": "EUR",
        "custom_field_1_label": "TUI Buchungsnummer",
        "custom_field_1_value": "TUI-2026-12345"
      },
      "customer": {
        "salutation": "Frau",
        "first_name": "Anna",
        "last_name": "Müller",
        "email": "anna.mueller@example.com",
        "phone": "+49 89 12345678",
        "city": "München",
        "country_code": "DE"
      },
      "participants": [
        {
          "salutation": "Frau",
          "first_name": "Anna",
          "last_name": "Müller",
          "birth_date": "1985-03-15",
          "nationality": "DE",
          "passport_number": "C01X12345",
          "is_main_contact": true,
          "participant_type": "adult"
        }
      ],
      "itineraries": [
        {
          "itinerary_name": "Mallorca Hauptreise",
          "start_date": "2026-07-15",
          "end_date": "2026-07-29",
          "status": "confirmed",
          "booking_reference": "MAL-2026-001",
          "currency": "EUR",
          "hotels": [
            {
              "hotel_name": "Hotel Paraíso del Mar",
              "city": "Palma",
              "country_code": "ES",
              "lat": 39.5699,
              "lng": 2.6509,
              "check_in_date": "2026-07-15",
              "check_out_date": "2026-07-29",
              "nights": 14,
              "room_type": "Superior Doppelzimmer",
              "board_type": "All Inclusive",
              "booking_reference": "HTL-001",
              "total_amount": 2450.00,
              "status": "confirmed"
            }
          ],
          "flights": [
            {
              "booking_reference": "LH-PMI-001",
              "service_type": "outbound",
              "status": "ticketed",
              "segments": [
                {
                  "segment_number": 1,
                  "departure_airport_code": "MUC",
                  "departure_time": "2026-07-15 10:00:00",
                  "arrival_airport_code": "PMI",
                  "arrival_time": "2026-07-15 12:15:00",
                  "airline_code": "LH",
                  "flight_number": "1802",
                  "cabin_class": "economy"
                }
              ]
            }
          ]
        }
      ]
    }
  }'

Response (202 Accepted):

{
  "success": true,
  "message": "Import queued successfully",
  "log_id": "019bef38-f2bc-73fc-bdbc-228ff5a8421e"
}

Import-Status abfragen

Status eines einzelnen Imports

GET /v1/folders/imports/{log_id}/status

Beispiel:

curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/folders/imports/019bef38-f2bc-73fc-bdbc-228ff5a8421e/status"

Response (200 OK):

{
  "success": true,
  "data": {
    "id": "019bef38-f2bc-73fc-bdbc-228ff5a8421e",
    "status": "completed",
    "folder_id": "019bef39-a1b2-c3d4-e5f6-789012345678",
    "records_imported": 5,
    "records_failed": 0,
    "error_message": null,
    "started_at": "2026-06-01T10:00:01Z",
    "completed_at": "2026-06-01T10:00:03Z",
    "duration_seconds": 2
  }
}

Mögliche Status-Werte:

StatusBeschreibung
pendingImport wartet auf Verarbeitung
processingImport wird gerade verarbeitet
completedImport erfolgreich abgeschlossen
failedImport fehlgeschlagen (siehe error_message)

Liste aller Imports

GET /v1/folders/imports

Query-Parameter:

ParameterTypBeschreibung
per_pageintegerEinträge pro Seite (Standard: 15, Maximum: 100)

Beispiel:

curl -H "Authorization: Bearer {TOKEN}" \
  "https://stage-api.global-travel-monitor.eu/v1/folders/imports?per_page=10"

Fehlercodes

HTTP-CodeBedeutung
202Import erfolgreich in Queue eingereiht
200Statusabfrage erfolgreich
401Nicht authentifiziert (Token fehlt oder ungültig)
404Import-Log nicht gefunden
422Validierungsfehler (ungültige Daten)
500Serverfehler

Beispiel Validierungsfehler (422):

{
  "success": false,
  "errors": {
    "source": ["The source field is required."],
    "data.folder.folder_name": ["The folder name must not exceed 255 characters."]
  }
}

Automatische Features


Support

Bei Fragen zur API wenden Sie sich an Ihren Ansprechpartner bei Global Travel Monitor.

Feed API – Anleitung

Übersicht

Die Feed API stellt aktuelle Sicherheits- und Reiserisiko-Events sowie Länderinformationen als RSS/Atom-Feeds bereit. Die Feeds können in Feed-Reader, CMS-Systeme oder eigene Anwendungen eingebunden werden.

Keine Authentifizierung erforderlich – alle Feed-Endpunkte sind öffentlich zugänglich.


Base-URL

https://global-travel-monitor.eu/feed

Caching

Feed-Antworten werden serverseitig gecacht. Die Cache-Dauer beträgt standardmäßig 1 Stunde (3600 Sekunden). Bei neuen oder geänderten Events wird der Cache automatisch invalidiert.


Metadaten

Verfügbare Priorities und Event-Typen

GET /feed/events/meta.json

Gibt die gültigen Werte für Priority-Filter und Event-Typ-Filter als JSON zurück.

Beispiel:

curl https://global-travel-monitor.eu/feed/events/meta.json

Response:

{
  "priorities": [
    { "code": "high", "name_de": "Hoch", "name_en": "High" },
    { "code": "medium", "name_de": "Mittel", "name_en": "Medium" },
    { "code": "low", "name_de": "Niedrig", "name_en": "Low" },
    { "code": "info", "name_de": "Information", "name_en": "Info" }
  ],
  "event_types": [
    {
      "code": "earthquake",
      "name": "Erdbeben",
      "description": "...",
      "icon": "fa-house-crack",
      "color": "#FF0000"
    }
  ]
}

Event-Feeds

Alle Event-Feeds liefern nur aktive, nicht-archivierte Events, deren Startdatum in der Vergangenheit liegt. Maximal 100 Events pro Feed, sortiert nach Startdatum (neueste zuerst).

Alle Events

FormatURL
RSS 2.0/feed/events/all.xml
Atom 1.0/feed/events/all.atom

Beispiel:

curl https://global-travel-monitor.eu/feed/events/all.xml

Events nach Priorität

GET /feed/events/priority/{priority}.xml
ParameterGültige Werte
priorityhigh, medium, low, info

Beispiel:

curl https://global-travel-monitor.eu/feed/events/priority/high.xml

Events nach Land

GET /feed/events/countries/{code}.xml
ParameterBeschreibung
codeISO 3166-1 alpha-2 (z.B. de) oder alpha-3 (z.B. deu), case-insensitive

Beispiel:

curl https://global-travel-monitor.eu/feed/events/countries/de.xml

Events nach Event-Typ

GET /feed/events/types/{type}.xml
ParameterBeschreibung
typeEvent-Typ-Code (aus meta.json), case-insensitive

Beispiel:

curl https://global-travel-monitor.eu/feed/events/types/earthquake.xml

Events nach Region

GET /feed/events/regions/{region}.xml
ParameterBeschreibung
regionNumerische Region-ID

Beispiel:

curl https://global-travel-monitor.eu/feed/events/regions/3.xml

RSS-Struktur (Events)

Jedes Event-Item im Feed enthält folgende Elemente:

Standard-RSS-Elemente

ElementBeschreibung
<title>Titel des Events
<link>URL zur Event-Detailseite
<guid>Permanenter Link (identisch mit <link>)
<description>Kurzübersicht: Typ, Zeitraum, Priorität, Länder
<content:encoded>Vollständige Beschreibung
<pubDate>Erstellungsdatum (RFC 2822)
<category>Priorität und Event-Typen
<dc:creator>Ersteller (falls vorhanden)
<source>Quellenangabe mit URL
<enclosure>Länderbild (JPEG, falls vorhanden)

Benutzerdefinierte Elemente: article:data

<article:data>
  <article:start_date>Mon, 11 Feb 2026 08:00:00 +0000</article:start_date>
  <article:end_date>Tue, 18 Feb 2026 08:00:00 +0000</article:end_date>
  <article:priority>high</article:priority>
  <article:event_type code="earthquake">Erdbeben</article:event_type>
</article:data>
ElementBeschreibung
article:start_dateStartdatum des Events
article:end_dateEnddatum des Events
article:priorityPrioritätsstufe: high, medium, low, info
article:event_typeEvent-Typ mit code-Attribut und Name als Inhalt (mehrere möglich)

Benutzerdefinierte Elemente: country:data

Pro betroffenem Land wird ein <country:data>-Block ausgegeben:

<country:data>
  <country:name_de>Thailand</country:name_de>
  <country:name_en>Thailand</country:name_en>
  <country:iso_code>TH</country:iso_code>
  <country:iso3_code>THA</country:iso3_code>
  <country:is_eu_member>false</country:is_eu_member>
  <country:is_schengen_member>false</country:is_schengen_member>
  <country:continent>Asien</country:continent>
  <country:currency_code>THB</country:currency_code>
  <country:phone_prefix>+66</country:phone_prefix>
  <country:capital>
    <country:capital_name>Bangkok</country:capital_name>
    <geo:lat>13.7563</geo:lat>
    <geo:long>100.5018</geo:long>
  </country:capital>
</country:data>
ElementBeschreibung
country:name_deLändername (deutsch)
country:name_enLändername (englisch)
country:iso_codeISO 3166-1 alpha-2 Code
country:iso3_codeISO 3166-1 alpha-3 Code
country:is_eu_membertrue / false
country:is_schengen_membertrue / false
country:continentKontinent (deutsch)
country:currency_codeISO 4217 Währungscode
country:phone_prefixInternationale Telefonvorwahl
country:capital_nameName der Hauptstadt
geo:latBreitengrad der Hauptstadt
geo:longLängengrad der Hauptstadt

XML-Namespaces

<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:country="http://global-travel-monitor.eu/ns/country"
  xmlns:article="http://global-travel-monitor.eu/ns/article"
  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">

Länder-Feeds

Die Länder-Feeds liefern Verzeichnisse mit Länderdetails (Name, ISO-Codes, EU/Schengen-Status, Kontinent, Währung, Hauptstadt mit Koordinaten).

Alle Länder

GET /feed/countries/names/all.xml

Länder nach Kontinent

GET /feed/countries/continent/{code}.xml
ParameterGültige Werte
codeEU (Europa), AS (Asien), AF (Afrika), NA (Nordamerika), SA (Südamerika), OC (Ozeanien), AN (Antarktis)

Beispiel:

curl https://global-travel-monitor.eu/feed/countries/continent/EU.xml

EU-Mitgliedsstaaten

GET /feed/countries/eu.xml

Schengen-Staaten

GET /feed/countries/schengen.xml

Endpunkt-Übersicht

EndpunktFormatBeschreibung
/feed/events/meta.jsonJSONVerfügbare Priorities und Event-Typen
/feed/events/all.xmlRSS 2.0Alle aktiven Events
/feed/events/all.atomAtom 1.0Alle aktiven Events
/feed/events/priority/{priority}.xmlRSS 2.0Events nach Priorität
/feed/events/countries/{code}.xmlRSS 2.0Events nach Land
/feed/events/types/{type}.xmlRSS 2.0Events nach Event-Typ
/feed/events/regions/{region}.xmlRSS 2.0Events nach Region
/feed/countries/names/all.xmlRSS 2.0Alle Länder
/feed/countries/continent/{code}.xmlRSS 2.0Länder nach Kontinent
/feed/countries/eu.xmlRSS 2.0EU-Mitgliedsstaaten
/feed/countries/schengen.xmlRSS 2.0Schengen-Staaten

Support

Bei Fragen zur Feed API wenden Sie sich an Ihren Ansprechpartner bei Global Travel Monitor.