{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "http:\/\/localhost:8100"
        }
    ],
    "info": {
        "name": "gf-cars API",
        "_postman_id": "bf723dbe-8b3d-47ac-a6e8-5a810c3f19e9",
        "description": "Multi-brand car-rental aggregator API with per-tenant credentials and rate pools.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Auth",
            "description": "",
            "item": [
                {
                    "name": "Health check",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/ping",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/ping"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Lightweight liveness probe. Returns the current server time in ISO-8601 so\nmonitoring tooling can also assert clock drift. No authentication required.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"pong\": \"2026-04-18T11:22:45+00:00\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Who am I",
                    "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": "Returns the tenant (`client`) the current API key resolves to. Use this as\na smoke test before driving the booking flow \u2014 a 401 here means the key\nis wrong or has been rotated."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"client\": {\"id\": 1, \"name\": \"Movix (demo)\", \"slug\": \"movix\"}}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Bookings",
            "description": "",
            "item": [
                {
                    "name": "Create booking",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"brand\":11,\"pickup_location\":\"AACGH\",\"dropoff_location\":\"AACGH\",\"pickup_date\":\"2026-05-15T10:00:00\",\"dropoff_date\":\"2026-05-18T10:00:00\",\"rate\":\"011880\",\"vehicle_code\":\"B\",\"tokenc\":\"836c7fb31f624ca2a8b5a519f26825d2\",\"coupon_code\":\"SUMMER25\",\"customer\":{\"name\":\"Joao\",\"lastname\":\"Silva\",\"email\":\"joao@example.com\",\"age\":30,\"cpf\":\"12345678901\",\"document_number\":\"AB123456\",\"address\":{\"country_code\":\"BR\"},\"telephone\":{\"phone_number\":\"11987654321\",\"area_code\":\"11\"}},\"airline\":{\"iata\":\"n\",\"flight_number\":\"gzmiyv\"},\"frequent_flyer\":{\"iata\":\"d\",\"number\":\"l\"},\"mail_notification\":true,\"sms_notification\":false}"
                        },
                        "description": "Step 3 of the booking flow. Consumes a `tokenc` minted by `\/fleet\/show`,\nsubmits the reservation to the underlying GDS, persists a `Booking` + `Sale`\n(and optional `DiscountCouponUsage`), and queues voucher emission + a\nconfirmation email. Voucher PDF is available at\n`\/bookings\/{code}\/voucher` once the queue worker has processed the job.\n\nWave 3 \u2014 discount coupons: when `coupon_code` is supplied the controller\nruns a pre-flight `\/coupons\/validate`-equivalent check (same service,\nsame error codes) BEFORE calling the GDS so a bad coupon never burns a\nprovider booking. On success, the discount amount is subtracted from\nthe persisted `Sale.estimated_total_amount`, a `DiscountCouponUsage`\nrow is written, and the booking row is hydrated with\n`discount_coupon_id` \/ `discount_coupon_code` \/ `discount_amount` \/\n`discount_currency`. Cancelling the booking via DELETE rolls all of\nthat back via `DiscountCouponService::revertOnCancellation()`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"data\": {\n    \"uuid\": \"01935f1e-9b0a-7c88-b9e3-3f7c8e9d1a02\",\n    \"booking_code\": \"BR-1234567\",\n    \"local_number\": \"XCL2026000042\",\n    \"brand\": \"LOCALIZA\",\n    \"name\": \"Joao\",\n    \"last_name\": \"Silva\",\n    \"voucher\": {\"status\": \"queued\"}\n  }\n}",
                            "name": "booking confirmed (LOCALIZA)"
                        },
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"data\": {\n    \"uuid\": \"01935f1e-9b0a-7c88-b9e3-3f7c8e9d1a02\",\n    \"booking_code\": \"BR-1234568\",\n    \"local_number\": \"XCL2026000043\",\n    \"brand\": \"LOCALIZA\",\n    \"name\": \"Joao\",\n    \"last_name\": \"Silva\",\n    \"voucher\": {\"status\": \"queued\"},\n    \"discount_amount\": 68.09,\n    \"discount_currency\": \"BRL\",\n    \"discount_coupon_code\": \"SUMMER25\"\n  }\n}",
                            "name": "booking confirmed with discount coupon applied"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": {\"message\": \"RATE NOT AVAILABLE FOR THIS CAR CLASS\"}}",
                            "name": "GDS rejected the rate"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_validation_failed\", \"reason\": \"coupon_expired\"}",
                            "name": "coupon validation failed (pre-flight)"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The brand field is required. (and 11 more errors)\",\n  \"errors\": {\n    \"brand\": [\"The brand field is required.\"],\n    \"tokenc\": [\"The tokenc field is required.\"],\n    \"customer.email\": [\"The customer.email field is required.\"],\n    \"customer.address.country_code\": [\"The customer.address.country_code field is required.\"]\n  }\n}",
                            "name": "missing required fields"
                        }
                    ]
                },
                {
                    "name": "View booking",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings\/:code",
                            "query": [
                                {
                                    "key": "lastname",
                                    "value": "Silva",
                                    "description": "Customer's last name (must match the booking).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings\/:code?lastname=Silva",
                            "variable": [
                                {
                                    "id": "code",
                                    "key": "code",
                                    "value": "BR-1234567",
                                    "description": "Booking code or local number."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"lastname\":\"architecto\"}"
                        },
                        "description": "Retrieve a booking by `booking_code` or `local_number`. A matching `lastname`\nquery param is required as a lightweight integrity check. The upstream GDS\nis queried live and returned under `data.gds`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"uuid\": \"01935f1e-9b0a-7c88-b9e3-3f7c8e9d1a02\",\n    \"booking_code\": \"BR-1234567\",\n    \"local_number\": \"XCL2026000042\",\n    \"status\": \"RESERVED\",\n    \"pickup_date\": \"2026-05-15 10:00:00\",\n    \"dropoff_date\": \"2026-05-18 10:00:00\",\n    \"gds\": {\"booking_code\": \"BR-1234567\", \"status\": \"RESERVED\", \"...\": \"vendor-specific shape\"}\n  }\n}",
                            "name": "booking found"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Booking].\"}",
                            "name": "wrong lastname \/ code"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The lastname field is required.\",\n  \"errors\": {\"lastname\": [\"The lastname field is required.\"]}\n}",
                            "name": "missing lastname"
                        }
                    ]
                },
                {
                    "name": "Cancel booking",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings\/:code",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings\/:code",
                            "variable": [
                                {
                                    "id": "code",
                                    "key": "code",
                                    "value": "BR-1234567",
                                    "description": "Booking code or local number."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Cancels the booking on the upstream GDS and marks the local record +\nassociated Sale as canceled. A cancellation email is dispatched to the\ncustomer; mail failures are non-fatal."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"success\": true,\n    \"booking_code\": \"BR-1234567\",\n    \"local_number\": \"XCL2026000042\"\n  }\n}",
                            "name": "cancellation confirmed"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Booking].\"}",
                            "name": "unknown booking for this tenant"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": {\"message\": \"DRIVER LAST NAME DOES NOT MATCH\"}}",
                            "name": "GDS rejected the cancel"
                        }
                    ]
                },
                {
                    "name": "Download voucher PDF",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings\/:code\/voucher",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings\/:code\/voucher",
                            "variable": [
                                {
                                    "id": "code",
                                    "key": "code",
                                    "value": "BR-1234567",
                                    "description": "Booking code or local number."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Streams the latest active voucher PDF for the given booking. `{code}` can be\neither the `booking_code` (from the GDS) or the tenant-local `local_number`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"_\": \"Content-Type: application\/pdf \u2014 body is the raw PDF bytes, named voucher-{number}.pdf via Content-Disposition.\"}",
                            "name": "voucher found (binary PDF stream)"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Booking].\"}",
                            "name": "booking not found for tenant"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Voucher].\"}",
                            "name": "no active voucher yet (queue still pending)"
                        }
                    ]
                },
                {
                    "name": "Resend voucher email",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/bookings\/:code\/voucher\/resend",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/bookings\/:code\/voucher\/resend",
                            "variable": [
                                {
                                    "id": "code",
                                    "key": "code",
                                    "value": "BR-1234567",
                                    "description": "Booking code or local number."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Re-sends the latest voucher email for a booking. If no voucher exists yet\n(e.g. the initial emission failed), a fresh one is generated synchronously."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"voucher_number\": \"XCL2026000042\",\n    \"emailed_at\": \"2026-05-15T10:12:03+00:00\"\n  }\n}",
                            "name": "voucher (re-)sent"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\": \"No query results for model [App\\\\Models\\\\Booking].\"}",
                            "name": "unknown booking"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Coupons",
            "description": "",
            "item": [
                {
                    "name": "Validate coupon",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/coupons\/validate",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/coupons\/validate"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"code\":\"SUMMER25\",\"brand\":11,\"rate\":\"011880\",\"country_id\":31,\"days\":3}"
                        },
                        "description": "Check whether a coupon code is currently usable for the given brand (and\noptionally rate + country). Returns discount metadata so the frontend can\npreview the discount before the booking step.\n\nResponse shape (Wave 3):\n  `code`            \u2014 the matched coupon code (echo of the request).\n  `discount_type`   \u2014 `percentage` | `fixed`.\n  `discount_value`  \u2014 number; percent (0-100) or fixed-amount in `currency`.\n  `currency`        \u2014 ISO-4217 (only for `fixed`); null for percentage.\n  `discount_code`   \u2014 per-brand GDS upstream code (when the coupon's\n                      `discount_coupon_brands` row carries one). Forwarded\n                      to the GDS as `discount_number` on `\/fleet\/show`.\n  `stackable`       \u2014 whether this coupon can stack with brand-level promo\n                      pricing (UI hint; the backend always honours this)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"code\": \"SUMMER25\",\n    \"discount_type\": \"percentage\",\n    \"discount_value\": 25.0,\n    \"currency\": null,\n    \"discount_code\": \"S25BR\",\n    \"stackable\": false\n  }\n}",
                            "name": "valid percentage coupon"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"code\": \"WELCOME10\",\n    \"discount_type\": \"fixed\",\n    \"discount_value\": 10.0,\n    \"currency\": \"BRL\",\n    \"discount_code\": null,\n    \"stackable\": true\n  }\n}",
                            "name": "valid fixed-amount coupon"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"error\": \"coupon_not_found\"}",
                            "name": "unknown code"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_not_valid\"}",
                            "name": "expired or out-of-window"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_brand_or_rate_mismatch\"}",
                            "name": "brand or rate mismatch"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_country_mismatch\"}",
                            "name": "country mismatch"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_days_out_of_range\"}",
                            "name": "rental days outside the coupon's min\/max window"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The code field is required. (and 1 more error)\",\n  \"errors\": {\"code\": [\"The code field is required.\"], \"brand\": [\"The brand field is required.\"]}\n}",
                            "name": "missing required fields"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Endpoints",
            "description": "",
            "item": [
                {
                    "name": "GET \/api\/v1\/tenancy\/brands",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the full brand catalog plus a boolean `active` flag per brand\nindicating whether the current client has it enabled.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 401,
                            "body": "{\"message\":\"API key missing\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "PUT \/api\/v1\/tenancy\/brands\/{brandId}",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands\/:brandId",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands\/:brandId",
                            "variable": [
                                {
                                    "id": "brandId",
                                    "key": "brandId",
                                    "value": "564",
                                    "description": ""
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"active\":true}"
                        },
                        "description": "Upsert a single ClientBrand row \u2014 toggles whether this client can use\nthe given brand. Creates the row on first call.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": []
                },
                {
                    "name": "GET \/api\/v1\/tenancy\/brands\/{brandId}\/countries",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands\/:brandId\/countries",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands\/:brandId\/countries",
                            "variable": [
                                {
                                    "id": "brandId",
                                    "key": "brandId",
                                    "value": "564",
                                    "description": ""
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns all selectable countries with a per-client `active` flag for\nthe given brand. Used to populate the country drill-down.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 401,
                            "body": "{\"message\":\"API key missing\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "PUT \/api\/v1\/tenancy\/brands\/{brandId}\/countries\/{countryId}",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId",
                            "variable": [
                                {
                                    "id": "brandId",
                                    "key": "brandId",
                                    "value": "564",
                                    "description": ""
                                },
                                {
                                    "id": "countryId",
                                    "key": "countryId",
                                    "value": "564",
                                    "description": ""
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"active\":false}"
                        },
                        "description": "Toggle a (client, brand, country) triple. Creates the row on first call.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": []
                },
                {
                    "name": "GET \/api\/v1\/tenancy\/brands\/{brandId}\/countries\/{countryId}\/rates",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId\/rates",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId\/rates",
                            "variable": [
                                {
                                    "id": "brandId",
                                    "key": "brandId",
                                    "value": "564",
                                    "description": ""
                                },
                                {
                                    "id": "countryId",
                                    "key": "countryId",
                                    "value": "564",
                                    "description": ""
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the rates available for (brand, country) in the catalog plus the\nper-client `active` flag and `priority`. Clients without a row for a\ngiven rate come back as `active=false, priority=999`.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 401,
                            "body": "{\"message\":\"API key missing\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "PUT \/api\/v1\/tenancy\/brands\/{brandId}\/countries\/{countryId}\/rates",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId\/rates",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tenancy\/brands\/:brandId\/countries\/:countryId\/rates",
                            "variable": [
                                {
                                    "id": "brandId",
                                    "key": "brandId",
                                    "value": "564",
                                    "description": ""
                                },
                                {
                                    "id": "countryId",
                                    "key": "countryId",
                                    "value": "564",
                                    "description": ""
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Bulk upsert the rate configuration for a (brand, country). Body is an\narray of `{rate_id, active, priority}` objects; any rate not in the\npayload is left untouched. Priority is stored as-is (lower = sooner).",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Fleet",
            "description": "",
            "item": [
                {
                    "name": "Fleet list (multi-brand availability)",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/fleet\/list",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/fleet\/list"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"pickup_location\":\"AACGH\",\"dropoff_location\":\"AACGH\",\"pickup_date\":\"2026-05-15\",\"pickup_time\":\"10:00\",\"dropoff_date\":\"2026-05-18\",\"dropoff_time\":\"10:00\",\"passenger_country_code\":\"BR\",\"passenger_age\":30,\"brand\":11,\"brands\":[11,12],\"include_unbookable\":false}"
                        },
                        "description": "Step 1 of the booking flow. Iterates the tenant's enabled brands (or just the\none in `brand`), fans out per-brand rate searches, and normalises each row into\na flat `cars[]` array so clients don't have to care which vendor produced it.\n\nCars are deduplicated by vehicle_code per brand: when an adapter returns N rows\n(one per rate) we collapse them into a single row whose `rates[]` array carries\nevery rate the upstream returned. The legacy `rate_code` field is kept for\nback-compat but is deprecated \u2014 clients should iterate `rates[]`.\n\nResponses are cached under tags `fleet` + `client:{id}` for 2 minutes. Use\n`php artisan cache:flush fleet` (or `cache:flush client:{id}`) to invalidate."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"cars\": [\n    {\n      \"brand_id\": 11,\n      \"brand_code\": \"LOCALIZA\",\n      \"brand_name\": \"LOCALIZA\",\n      \"rate_code\": \"011880\",\n      \"vehicle_code\": \"B\",\n      \"vehicle_name\": \"Fiat Mobi 1.0\",\n      \"category\": null,\n      \"transmission\": \"Manual\",\n      \"fuel\": null,\n      \"seats\": 4,\n      \"doors\": 2,\n      \"luggage\": 4,\n      \"price\": {\"currency\": \"BRL\", \"total\": 272.3775, \"daily\": null},\n      \"rates\": [\n        {\"code\": \"011880\", \"currency\": \"BRL\", \"total_amount\": 236.85, \"estimated_total_amount\": 272.3775, \"type\": null},\n        {\"code\": \"011880P\", \"currency\": \"BRL\", \"total_amount\": 236.85, \"estimated_total_amount\": 272.3775, \"type\": null}\n      ],\n      \"bookable\": true,\n      \"bookable_reason\": null,\n      \"pickup_office\": null,\n      \"dropoff_office\": null,\n      \"_raw\": {\"...\": \"truncated\"}\n    }\n  ],\n  \"offices\": [\n    {\"id\": 27712, \"code\": \"AACGH\", \"name\": \"AGENCIA AEROPORTO CONGONHAS\", \"brand_id\": 11, \"country_id\": 31, \"city\": \"SAO PAULO\", \"state\": \"SP\", \"is_airport\": true, \"latitude\": -23.620612, \"longitude\": -46.6653852}\n  ],\n  \"places\": {\n    \"pickup\": [{\"uuid\": \"bdb35d57-fa14-4d04-b722-d2249c618225\", \"name\": \"Moema\", \"place_type_id\": 2, \"latitude\": -23.61, \"longitude\": -46.665, \"city\": \"S\u00e3o Paulo\", \"state\": \"SP\"}],\n    \"dropoff\": [{\"uuid\": \"bdb35d57-fa14-4d04-b722-d2249c618225\", \"name\": \"Moema\", \"place_type_id\": 2, \"latitude\": -23.61, \"longitude\": -46.665, \"city\": \"S\u00e3o Paulo\", \"state\": \"SP\"}]\n  },\n  \"groups\": [\n    {\"id\": null, \"name\": \"Uncategorised\", \"description\": null, \"icon\": null, \"image\": null, \"categories\": [{\"id\": 11, \"name\": \"Economy\", \"image\": null, \"display_order\": null}]}\n  ],\n  \"days_calc\": 3,\n  \"brand_ratings\": [\n    {\"brand_id\": 11, \"country_id\": null, \"score\": 4.3, \"count\": 15600, \"source\": \"manual_seed\"}\n  ],\n  \"meta\": {\n    \"LOCALIZA\": {\"count\": 22, \"bookable_count\": 22, \"unbookable_count\": 0, \"ms\": 1404, \"rate_codes\": [\"011880\", \"011880P\"]}\n  },\n  \"errors\": {},\n  \"cached\": false\n}",
                            "name": "success (LOCALIZA, AACGH 3-day rental)"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"cars\": [],\n  \"offices\": [],\n  \"places\": {\"pickup\": [], \"dropoff\": []},\n  \"groups\": [],\n  \"days_calc\": 3,\n  \"brand_ratings\": [],\n  \"meta\": {\"LOCALIZA\": {\"count\": 22, \"bookable_count\": 22, \"unbookable_count\": 0, \"ms\": 4, \"original_ms\": 1404, \"rate_codes\": [\"011880\"]}},\n  \"errors\": {},\n  \"cached\": true\n}",
                            "name": "cache hit (note original_ms)"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The pickup location field is required. (and 7 more errors)\",\n  \"errors\": {\n    \"pickup_location\": [\"The pickup location field is required.\"],\n    \"pickup_date\": [\"The pickup date field is required.\"],\n    \"passenger_country_code\": [\"The passenger country code field is required.\"]\n  }\n}",
                            "name": "missing required fields"
                        }
                    ]
                },
                {
                    "name": "Fleet show (single vehicle detail + tokenc)",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/fleet\/show",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/fleet\/show"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"brand\":11,\"pickup_location\":\"AACGH\",\"dropoff_location\":\"AACGH\",\"pickup_date\":\"2026-05-15\",\"pickup_time\":\"10:00\",\"dropoff_date\":\"2026-05-18\",\"dropoff_time\":\"10:00\",\"rate\":\"011880\",\"vehicle_code\":\"B\",\"passenger_country_code\":\"BR\",\"passenger_age\":30,\"coupon_code\":\"SUMMER25\",\"tokenc\":\"836c7fb31f624ca2a8b5a519f26825d2\"}"
                        },
                        "description": "Step 2 of the booking flow. Replays a per-brand availability for the chosen\nvehicle_code + rate and returns a normalised `car` payload plus a `tokenc`\n(UUID) that the subsequent `POST \/bookings` call must echo back.\n\nThe tokenc is cached for 3 hours alongside the detailed quote (prices,\nquote_token, ABG vehicle_type\/class\/group, HDT reference, etc.) so the\nbooking step can reconstruct the upstream OTA envelope exactly."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"car\": {\n    \"brand_id\": 11,\n    \"brand_code\": \"LOCALIZA\",\n    \"brand_name\": \"LOCALIZA\",\n    \"rate_code\": \"011880\",\n    \"vehicle_code\": \"B\",\n    \"vehicle_name\": \"Fiat Mobi 1.0\",\n    \"category\": null,\n    \"transmission\": \"Manual\",\n    \"fuel\": null,\n    \"seats\": 4,\n    \"doors\": 2,\n    \"luggage\": 4,\n    \"price\": {\"currency\": \"BRL\", \"total\": 272.3775, \"daily\": null},\n    \"rates\": [{\"code\": \"011880\", \"currency\": \"BRL\", \"total_amount\": 236.85, \"estimated_total_amount\": 272.3775, \"type\": null}],\n    \"bookable\": true,\n    \"bookable_reason\": null,\n    \"pickup_office\": null,\n    \"dropoff_office\": null,\n    \"_raw\": {\"...\": \"truncated\"}\n  },\n  \"tokenc\": \"836c7fb31f624ca2a8b5a519f26825d2\"\n}",
                            "name": "success (LOCALIZA Fiat Mobi, no coupon)"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"car\": {\n    \"brand_id\": 11,\n    \"brand_code\": \"LOCALIZA\",\n    \"brand_name\": \"LOCALIZA\",\n    \"rate_code\": \"011880\",\n    \"vehicle_code\": \"B\",\n    \"vehicle_name\": \"Fiat Mobi 1.0\",\n    \"price\": {\n      \"currency\": \"BRL\",\n      \"total\": 204.28,\n      \"daily\": null,\n      \"with_discount\": 204.28,\n      \"original_total\": 272.3775,\n      \"discount_amount\": 68.09\n    },\n    \"rates\": [{\"code\": \"011880\", \"currency\": \"BRL\", \"total_amount\": 236.85, \"estimated_total_amount\": 272.3775, \"type\": null}],\n    \"bookable\": true\n  },\n  \"tokenc\": \"836c7fb31f624ca2a8b5a519f26825d2\",\n  \"coupon_applied\": {\n    \"code\": \"SUMMER25\",\n    \"discount_code\": \"S25BR\",\n    \"amount\": 68.09,\n    \"currency\": \"BRL\"\n  }\n}",
                            "name": "success with coupon applied (Wave 3 \u2014 SUMMER25, 25% off)"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"error\": \"coupon_validation_failed\", \"reason\": \"coupon_not_found\"}",
                            "name": "coupon validation failed (pre-flight)"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The rate field is required.\",\n  \"errors\": {\"rate\": [\"The rate field is required.\"]}\n}",
                            "name": "missing rate"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Places",
            "description": "",
            "item": [
                {
                    "name": "Nearby places search",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/places\/search",
                            "query": [
                                {
                                    "key": "lat",
                                    "value": "-23.6273",
                                    "description": "Latitude (-90..90).",
                                    "disabled": false
                                },
                                {
                                    "key": "lng",
                                    "value": "-46.6566",
                                    "description": "Longitude (-180..180).",
                                    "disabled": false
                                },
                                {
                                    "key": "radius_km",
                                    "value": "25",
                                    "description": "Search radius in km (max 500, default 50).",
                                    "disabled": false
                                },
                                {
                                    "key": "country_id",
                                    "value": "31",
                                    "description": "Restrict to a country.",
                                    "disabled": false
                                },
                                {
                                    "key": "q",
                                    "value": "Congonhas",
                                    "description": "Free-text filter on `places.name` (ilike).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/places\/search?lat=-23.6273&lng=-46.6566&radius_km=25&country_id=31&q=Congonhas"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"lat\":-89,\"lng\":-179,\"radius_km\":7,\"country_id\":16,\"q\":\"n\"}"
                        },
                        "description": "Radius search over `places` using PostGIS `ST_DWithin` on the pre-computed\n`location` geography column. Results are ordered by distance (km) and\ninclude the pivoted offices (with brand) so a caller can jump straight\ninto `\/fleet\/list`.\n\nResponses are cached under the `places` tag with a 30-minute TTL keyed on\nthe full request shape. Flush with `php artisan cache:flush places`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": [\n    {\n      \"uuid\": \"c31ec1ee-3fdf-4cb2-8445-6d07e82dacd0\",\n      \"name\": \"Congonhas Airport\",\n      \"latitude\": -23.62799975,\n      \"longitude\": -46.65703389,\n      \"distance_km\": 0.089,\n      \"place_type\": 1,\n      \"offices\": [\n        {\"code\": \"AACGH\", \"name\": \"AGENCIA AEROPORTO CONGONHAS\", \"brand_id\": 11, \"distance_km\": 0.142}\n      ]\n    },\n    {\n      \"uuid\": \"bdb35d57-fa14-4d04-b722-d2249c618225\",\n      \"name\": \"Moema\",\n      \"latitude\": -23.61,\n      \"longitude\": -46.665,\n      \"distance_km\": 2.099,\n      \"place_type\": 2,\n      \"offices\": []\n    }\n  ]\n}",
                            "name": "success \u2014 Congonhas Airport (3 closest places)"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\": \"Invalid API key\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The lat field is required.\",\n  \"errors\": {\n    \"lat\": [\"The lat field is required.\"],\n    \"lng\": [\"The lng field is required.\"]\n  }\n}",
                            "name": "missing or invalid coordinates"
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}