{
    "info": {
        "name": "DubaiLand Travel API",
        "description": "Generated from the live contract. Set `client_id` and `client_secret` on the collection, then send.",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "auth": {
        "type": "basic",
        "basic": [
            {
                "key": "username",
                "value": "{{client_id}}",
                "type": "string"
            },
            {
                "key": "password",
                "value": "{{client_secret}}",
                "type": "string"
            }
        ]
    },
    "variable": [
        {
            "key": "base_url",
            "value": "https://api.dubailandtravel.com/partner/v1"
        },
        {
            "key": "client_id",
            "value": "sk_test_\u2026"
        },
        {
            "key": "client_secret",
            "value": ""
        }
    ],
    "item": [
        {
            "name": "Account",
            "item": [
                {
                    "name": "The account at a glance",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/account",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "account"
                            ]
                        },
                        "description": "`balances` is null on a sandbox key, which moves no money, rather than a\nzero that would read as \"out of funds\"."
                    }
                },
                {
                    "name": "Usage for a closed or current period",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/account/usage",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "account",
                                "usage"
                            ]
                        },
                        "description": ""
                    }
                },
                {
                    "name": "Every movement on the account in a period, with a running balance",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/account/statement",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "account",
                                "statement"
                            ]
                        },
                        "description": "The running balance is what makes this reconcilable line by line rather\nthan only in total \u2014 a partner whose closing figure disagrees with ours\nneeds to find WHERE, not merely THAT.\n\nLive keys only: a sandbox key moves no money, so it has no statement and\nis refused with 403 `TB-PARTNER-3009`."
                    }
                }
            ]
        },
        {
            "name": "Flights",
            "item": [
                {
                    "name": "Search flights",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/flights/search",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "flights",
                                "search"
                            ]
                        },
                        "description": "Returns offers already priced for the calling partner. A supplier\nfailing degrades the search rather than failing it.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"slices\": [\n        {\n            \"origin\": \"BGW\",\n            \"destination\": \"DXB\",\n            \"date\": \"2026-12-12\"\n        }\n    ],\n    \"passengers\": {\n        \"adults\": 1\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Read a held search",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/flights/search/{{searchId}}/results",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "flights",
                                "search",
                                "{{searchId}}",
                                "results"
                            ]
                        },
                        "description": "Cheap \u2014 the offers were computed once. Returns every offer in the\nsearch, with no paging. Reading it again never costs another supplier\ncall or consumes the search rate limit."
                    }
                },
                {
                    "name": "Confirm a price",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/flights/offers/{{offerId}}/confirm-price",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "flights",
                                "offers",
                                "{{offerId}}",
                                "confirm-price"
                            ]
                        },
                        "description": "Mandatory before an order. Airfare moves between search and booking\noften enough that ordering from a held price is a chargeback waiting to\nhappen \u2014 and in B2B it would be the partner absorbing it, which is worse.\n\nReturns a token bound to the offer and its final amount. Ordering\nwithout one is refused."
                    }
                }
            ]
        },
        {
            "name": "Hotels",
            "item": [
                {
                    "name": "Search hotels",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/hotels/search",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "hotels",
                                "search"
                            ]
                        },
                        "description": "Returns rates already priced for the calling partner. A supplier failing\ndegrades the search rather than failing it.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"city_code\": \"DXB\",\n    \"check_in\": \"2026-12-12\",\n    \"check_out\": \"2026-12-15\",\n    \"rooms\": 1,\n    \"adults\": 2\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Read a held search",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/hotels/search/{{searchId}}/results",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "hotels",
                                "search",
                                "{{searchId}}",
                                "results"
                            ]
                        },
                        "description": "Cheap \u2014 the rates were computed once. Returns every rate in the search,\nwith no paging. Reading it again never costs another supplier call or\nconsumes the search rate limit."
                    }
                },
                {
                    "name": "Confirm a rate",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/hotels/offers/{{offerId}}/confirm-price",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "hotels",
                                "offers",
                                "{{offerId}}",
                                "confirm-price"
                            ]
                        },
                        "description": "Mandatory before an order, and for more than the price: a cancellation\npolicy that changed between search and booking is a promise we would\notherwise make and not keep \u2014 and in B2B it is the partner who would\nhave made it to their customer.\n\nReturns a token bound to the offer and its final amount. Ordering\nwithout one is refused."
                    }
                }
            ]
        },
        {
            "name": "Orders",
            "item": [
                {
                    "name": "Place an order",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/orders",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders"
                            ]
                        },
                        "description": "Requires an `Idempotency-Key`. Draws the total from the partner's\nbalance, creates the order with the supplier, and returns the\nconfirmation. A refusal at the supplier releases the hold immediately \u2014\nthe partner is never out of pocket for a booking that did not happen.\n\nOne item per order; add a room or a car afterwards with the hotels and\ntransfers endpoints of the order.\n\nA 402 means the balance and credit limit together do not cover it and\nthe account is not set to wait for approval; the body states the\nshortfall. A 409 `TB-PARTNER-3019` means the\nsupplier did not say whether it created the order: the hold stays and\nthe order must not be placed again.\n\nWhen the balance and credit limit do not cover the order, our team may\nstill approve it: the answer is then a 409 `TB-PARTNER-3020` with status\n`pending_approval`, and the order must not be placed again. Nothing is\ncharged meanwhile. Its outcome arrives as `order.confirmed`, or as\n`order.failed` (`TB-PARTNER-3001`) if it is rejected or not decided in\ntime; you may cancel it while it waits.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"items\": [\n        {\n            \"type\": \"flight\",\n            \"offer_id\": \"{{offer_id}}\",\n            \"price_confirmation_token\": \"{{price_confirmation_token}}\"\n        }\n    ],\n    \"passengers\": [\n        {\n            \"type\": \"ADT\",\n            \"first_name\": \"Dana\",\n            \"last_name\": \"Aziz\",\n            \"date_of_birth\": \"1990-04-02\",\n            \"gender\": \"F\",\n            \"nationality\": \"IQ\",\n            \"is_lead\": true,\n            \"document\": {\n                \"type\": \"passport\",\n                \"number\": \"A1234567\",\n                \"issuing_country\": \"IQ\",\n                \"expires_on\": \"2031-11-12\"\n            }\n        }\n    ],\n    \"contact\": {\n        \"email\": \"traveller@example.com\",\n        \"phone\": \"+9647701234567\"\n    },\n    \"partner_reference\": \"your-own-id\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "List orders",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/orders",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders"
                            ]
                        },
                        "description": ""
                    }
                },
                {
                    "name": "Read an order",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/orders/{{reference}}",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders",
                                "{{reference}}"
                            ]
                        },
                        "description": ""
                    }
                },
                {
                    "name": "Cancel an order",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/orders/{{reference}}/cancel",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders",
                                "{{reference}}",
                                "cancel"
                            ]
                        },
                        "description": "Returns the penalty the supplier actually charged and credits the\nremainder back to the partner's balance. On a prepaid model a refund is\na ledger entry rather than a gateway call that can fail, which is the\nsingle biggest operational advantage of settling this way.\n\nAn order still `pending_approval` was never charged: cancelling it\ncloses it with no penalty and nothing to refund.",
                        "body": {
                            "mode": "raw",
                            "raw": "[]",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Add a hotel to an order",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/orders/{{reference}}/hotels",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders",
                                "{{reference}}",
                                "hotels"
                            ]
                        },
                        "description": "Requires an `Idempotency-Key`: this changes what the partner owes, and a\nretry must not book the room twice.\n\nThe room is reserved and confirmed on its own. A property refusing\nleaves the flight exactly as it was \u2014 that is the whole reason items\ncarry independent lifecycles \u2014 and comes back as a 409 on the room\nrather than as a failure of the order.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"offer_id\": \"\",\n    \"price_confirmation_token\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Add a transfer to an order",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            },
                            {
                                "key": "Idempotency-Key",
                                "value": "{{$guid}}"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/orders/{{reference}}/transfers",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "orders",
                                "{{reference}}",
                                "transfers"
                            ]
                        },
                        "description": "Requires an `Idempotency-Key`: this changes what the partner owes, and a\nretry must not put a second car on the road.\n\nThe car is booked on its own. An operator refusing leaves the flight\nexactly as it was and comes back as a 410 on the transfer rather than a\nfailure of the order.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"offer_id\": \"\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "Transfers",
            "item": [
                {
                    "name": "Quote a transfer",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{base_url}}/transfers/search",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "transfers",
                                "search"
                            ]
                        },
                        "description": "Returns every vehicle an operator will put on the journey, already\npriced for the calling partner and already filtered to those that can\nactually carry the party.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"origin_id\": \"{{origin_id}}\",\n    \"destination_id\": \"{{destination_id}}\",\n    \"pickup_at\": \"2026-12-12 14:30\",\n    \"adults\": 2\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Read a held quote",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/transfers/search/{{searchId}}/results",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "transfers",
                                "search",
                                "{{searchId}}",
                                "results"
                            ]
                        },
                        "description": "Cheap \u2014 the quotes were computed once. Re-reading a result set a partner\nalready holds must never cost another operator call, and must never\nconsume their search rate limit either."
                    }
                },
                {
                    "name": "Places we can be driven to",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/transfers/locations",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "transfers",
                                "locations"
                            ]
                        },
                        "description": "Transfers are quoted between identifiers from an operator's catalogue,\nnot between addresses \u2014 so without this endpoint a partner has nothing\nvalid to put in a search. It is part of the product rather than a\nconvenience."
                    }
                }
            ]
        }
    ]
}