{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/primos-fahrservice.de"
        }
    ],
    "info": {
        "name": "Primos LP-API v1",
        "_postman_id": "06cd6430-6316-4914-abf2-7180cc224196",
        "description": "REST-Schnittstelle f\u00fcr Landingpages zur Angebots- und Buchungsanfrage von Fahrten bei Primos.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Angebote",
            "description": "",
            "item": [
                {
                    "name": "Angebot anfragen",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/quotes",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/quotes"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"type\":\"airport\",\"pickup\":{\"airport_iata\":\"fra\",\"place_id\":\"ChIJ7cv00DwsDogRAMDACa2m4K8\",\"formatted_address\":\"Bahnhofstra\u00dfe 1, 65552 Limburg an der Lahn, Deutschland\",\"street\":\"Bahnhofstra\u00dfe\",\"house_number\":\"1\",\"postal_code\":\"65552\",\"city\":\"Limburg an der Lahn\"},\"destination\":{\"airport_iata\":\"fra\",\"place_id\":\"ChIJeflCVHQLvUcRMfP4IU3YdIo\",\"formatted_address\":\"Zeil 1, 60313 Frankfurt am Main, Deutschland\",\"street\":\"Zeil\",\"house_number\":\"1\",\"postal_code\":\"60313\",\"city\":\"Frankfurt am Main\"},\"pickup_time\":\"2026-07-10T14:30:00+02:00\",\"roundtrip\":false,\"passengers\":1,\"child_seats\":0,\"flight_number\":\"LH123\",\"options\":{\"sign_service\":false}}"
                        },
                        "description": "Berechnet f\u00fcr die angegebene Strecke die verf\u00fcgbaren Fahrzeuge samt Distanz und Preisen\nund legt ein zeitlich begrenztes Angebot an.\n\n**Locator-Regeln (identisch zum Website-Rechner):** Jede Seite (`pickup`\/`destination`) ist\nentweder eine **Adresse** oder ein **Flughafen**.\n\n- **Adress-Seite:** `place_id` **(Pflicht, aus Google Places Autocomplete)** plus\n  `formatted_address`, `street` und `house_number`. Es wird ausschlie\u00dflich \u00fcber die `place_id`\n  geroutet \u2013 reine Koordinaten oder Freitext-Adressen werden nicht akzeptiert, damit Distanz und\n  Preis exakt mit der Website \u00fcbereinstimmen und keine Abweichungen entstehen.\n- **Flughafen-Seite:** ausschlie\u00dflich `airport_iata` aus `GET \/api\/v1\/airports`. place_id,\n  Koordinaten und Anzeigename l\u00f6st Primos serverseitig auf.\n\nBei `type=airport` muss **genau eine** Seite ein `airport_iata` enthalten (die andere ist eine\nAdress-Seite); bei `type=transfer` sind beide Seiten Adress-Seiten und `airport_iata` ist nicht erlaubt."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"data\": {\n    \"quote_id\": \"9b1f2c34-1a2b-4c3d-8e9f-000000000000\",\n    \"type\": \"transfer\",\n    \"distance_km\": 42,\n    \"roundtrip\": true,\n    \"currency\": \"EUR\",\n    \"expires_at\": \"2026-07-15T14:30:00+02:00\",\n    \"vehicles\": [\n      {\"vehicle_id\": 3, \"name\": \"Business Van\", \"passengers\": 7, \"luggage\": 7, \"child_seats\": 3, \"image\": \"vehicles\/van.jpg\", \"price\": {\"amount\": 189.0, \"currency\": \"EUR\", \"roundtrip_included\": true}}\n    ]\n  },\n  \"meta\": {\"quote_token\": \"einmalig-sichtbarer-token\"}\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Angebot abrufen",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/quotes\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/quotes\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "019f435c-eb4e-732a-8a53-03b2e1a7f6f6",
                                    "description": "The ID of the quote."
                                },
                                {
                                    "id": "quote",
                                    "key": "quote",
                                    "value": "9b1f2c34-1a2b-4c3d-8e9f-000000000000",
                                    "description": "Die quote_id des Angebots."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Liefert ein zuvor erstelltes Angebot erneut (ohne das einmalige Token)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"quote_id\": \"9b1f2c34-1a2b-4c3d-8e9f-000000000000\",\n    \"type\": \"transfer\",\n    \"distance_km\": 42,\n    \"roundtrip\": true,\n    \"currency\": \"EUR\",\n    \"expires_at\": \"2026-07-15T14:30:00+02:00\",\n    \"vehicles\": [\n      {\"vehicle_id\": 3, \"name\": \"Business Van\", \"passengers\": 7, \"luggage\": 7, \"child_seats\": 3, \"image\": \"vehicles\/van.jpg\", \"price\": {\"amount\": 189.0, \"currency\": \"EUR\", \"roundtrip_included\": true}}\n    ]\n  }\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Quote].\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Authentifizierung",
            "description": "",
            "item": [
                {
                    "name": "Eigene Auftragsquelle",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/me",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/me"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Gibt die zum Token geh\u00f6rende Auftragsquelle samt Berechtigungen zur\u00fcck \u2013 n\u00fctzlich als Token-Check."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"name\": \"LP Flughafentransfer FFM\",\n    \"slug\": \"lp-ffm\",\n    \"contact_email\": \"dev@lp.example.com\",\n    \"is_active\": true,\n    \"abilities\": [\"quote\", \"book\"]\n  }\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Buchungen",
            "description": "",
            "item": [
                {
                    "name": "Fahrt buchen",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "abc-123"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"quote_id\":\"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",\"quote_token\":\"architecto\",\"vehicle_id\":16,\"customer\":{\"firstname\":\"b\",\"lastname\":\"n\",\"email\":\"ashly64@example.com\",\"phone\":\"v\"},\"payment_method\":\"paypal\",\"billing\":{\"different\":true,\"name\":\"d\",\"street\":\"l\",\"house_number\":\"j\",\"postal_code\":\"nikhwaykcmyuwpwl\",\"city\":\"v\"},\"notes\":\"q\",\"reference\":\"w\"}"
                        },
                        "description": "Bucht ein zuvor erstelltes Angebot und legt im CRM eine Fahrt an (Status \u201eAnfrage\"),\nwodurch die Automatismen (Benachrichtigungen, Kalender) ausgel\u00f6st werden. Der Preis\nwird immer aus dem Angebot \u00fcbernommen \u2013 ein im Request gesendeter Preis wird ignoriert.\n\nOptionaler Header `Idempotency-Key`: Wird derselbe Schl\u00fcssel erneut gesendet, wird die\nbereits erstellte Buchung zur\u00fcckgegeben (Status 200 statt 201), ohne eine zweite Fahrt anzulegen."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"data\": {\n    \"booking_id\": 12345,\n    \"status\": \"inquiry\",\n    \"type\": \"transfer\",\n    \"vehicle\": {\"vehicle_id\": 3, \"name\": \"Business Van\"},\n    \"pickup_time\": \"2026-07-15T14:30:00+02:00\",\n    \"roundtrip\": true,\n    \"external_reference\": \"LP-ORDER-5567\",\n    \"price\": {\"amount\": 189.0, \"currency\": \"EUR\"},\n    \"created_at\": \"2026-07-08T12:00:00+02:00\"\n  }\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\": \"Angebot ist abgelaufen oder wurde bereits gebucht.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Buchungsstatus abrufen",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings\/:drive_id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings\/:drive_id",
                            "variable": [
                                {
                                    "id": "drive_id",
                                    "key": "drive_id",
                                    "value": 40,
                                    "description": "The ID of the drive."
                                },
                                {
                                    "id": "drive",
                                    "key": "drive",
                                    "value": 12345,
                                    "description": "Die booking_id (Fahrt-ID)."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Liefert den aktuellen Status einer Buchung (z. B. inquiry, confirmed, booked, done)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"booking_id\": 12345,\n    \"status\": \"confirmed\",\n    \"type\": \"transfer\",\n    \"vehicle\": {\"vehicle_id\": 3, \"name\": \"Business Van\"},\n    \"pickup_time\": \"2026-07-15T14:30:00+02:00\",\n    \"roundtrip\": true,\n    \"external_reference\": \"LP-ORDER-5567\",\n    \"price\": {\"amount\": 189.0, \"currency\": \"EUR\"},\n    \"created_at\": \"2026-07-08T12:00:00+02:00\"\n  }\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Fahrzeuge",
            "description": "",
            "item": [
                {
                    "name": "Fahrzeugkatalog",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/vehicles",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/vehicles"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Liefert die aktuell angebotenen Fahrzeuge (ohne Preise \u2013 Preise entstehen erst im Angebot)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\"vehicle_id\": 3, \"name\": \"Business Van\", \"description\": \"Bis zu 7 Personen\", \"passengers\": 7, \"luggage\": 7, \"child_seats\": 3, \"image\": \"vehicles\/van.jpg\"},\n    {\"vehicle_id\": 1, \"name\": \"Business Limousine\", \"description\": \"Mercedes E-Klasse o. \u00e4.\", \"passengers\": 3, \"luggage\": 3, \"child_seats\": 1, \"image\": \"vehicles\/limo.jpg\"}\n  ]\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Flugh\u00e4fen",
            "description": "",
            "item": [
                {
                    "name": "Flugh\u00e4fen",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/airports",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/airports"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Liefert die aktuell bedienten Flugh\u00e4fen. Der zur\u00fcckgegebene `iata`-Wert ist exakt der Wert,\nder bei `type=airport`-Angeboten als `pickup.airport_iata` bzw. `destination.airport_iata`\ngesendet werden muss. Bitte diese Liste als einzige Quelle f\u00fcr g\u00fcltige IATA-Codes nutzen und\ndie Werte unver\u00e4ndert \u00fcbernehmen (der Vergleich erfolgt case-sensitive) \u2013 so entstehen keine\nAbweichungen zwischen Landingpage und Angebotsanfrage.\n\nDie mitgelieferten Koordinaten (`lat`\/`lng`) und die Google-`place_id` entsprechen dem, was\nPrimos serverseitig f\u00fcr die Distanzberechnung verwendet, und k\u00f6nnen f\u00fcr ein eigenes\nGoogle-Maps-Autocomplete genutzt werden."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\"iata\": \"fra\", \"name\": \"Frankfurt International Airport\", \"lat\": 50.0353788, \"lng\": 8.5518391, \"place_id\": \"ChIJeflCVHQLvUcRMfP4IU3YdIo\"}\n  ]\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Status",
            "description": "",
            "item": [
                {
                    "name": "Public liveness endpoint.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/health",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/health"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "x-ratelimit-limit",
                                    "value": "60"
                                },
                                {
                                    "key": "x-ratelimit-remaining",
                                    "value": "59"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 200,
                            "body": "{\"status\":\"ok\",\"api\":\"primos-lp\",\"version\":\"v1\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}