Разработчикам
Документация B2B API
B2B API, на котором работает nwp.ae: расчёт и бронирование для ваших клиентов по нетто-ценам, ваучеры, отельная стойка, корпоративный транспорт и программы DMC, а рядом ваши тарифы, выписки и счета. Ранний доступ: ключи песочницы отвечают помеченными тестовыми данными, боевые ключи выдаются после одобрения.
СтатусРанний доступ · только тестовая среда
Тестовая среда проверяет реальные запросы по реальной схеме и отвечает тестовыми данными. Ничего не бронируется, автомобиль не резервируется и цена не возвращается. Для тестовой среды нет обязательств по уровню сервиса, а рабочие ключи выдаются одобренным партнёрам после открытия API.
Запросить ранний доступОбзор
JSON по HTTPS. Отправляйте Content-Type: application/json. Каждый ответ — JSON с заголовком x-request-id, который нужно сообщать партнёрскому отделу; ответы тестовой среды также содержат x-nwp-environment: sandbox.
| Базовый URL | — |
|---|---|
| Тестовая среда | https://nwp.ae/api/b2b/sandbox |
| Рабочая среда | https://nwp.ae/api/b2b/v1Пока не открыта · Нужен боевой ключ — выдаётся после одобрения |
B2B API v1
Один API для всего, что делает аккаунт: наземный транспорт, экскурсии и активности с ценами по вашим коммерческим условиям (нетто-тариф, комиссия или фиксированный тариф), бронирования для ваших клиентов, ваучеры и таблички с именем, отельная стойка, корпоративный транспорт, программы DMC, виджет бронирования, пользователи, уведомления, выписки и счета. Ключи песочницы (nwp_test_…) доступны заявителям: они отвечают на каждом эндпоинте тестовыми данными с пометкой sandbox: true, никогда не бронируют и не меняют ваш аккаунт. Боевые ключи (nwp_live_…) выдаются после одобрения и работают, когда NWP включит боевой доступ для вашего аккаунта. Каждый POST принимает Idempotency-Key, каждый ответ содержит x-request-id, у каждого ключа свой лимит в минуту.
Документ OpenAPI 3.1: /api/b2b/v1/openapi.json
Наземный транспорт
POST/api/b2b/v1/transport/quoteЦена по вашим условиям
Область:
transport:readPOST/api/b2b/v1/transport/bookingsЗабронировать
Область:
transport:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/transport/bookings/{id}Статус бронирования и условия отмены
Область:
transport:readPOST/api/b2b/v1/transport/bookings/{id}/cancelОтмена по правилам
Область:
transport:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/transport/bookings/{id}/voucherВаучер с вашим брендом (HTML или PDF)
Область:
transport:read
Экскурсии и активности
GET/api/b2b/v1/activities/productsПродукты в продаже, за человека или за машину
Область:
activities:readGET/api/b2b/v1/activities/products/{id}/availabilityНаличие по дням
Область:
activities:readPOST/api/b2b/v1/activities/quoteЦена по вашим условиям
Область:
activities:readPOST/api/b2b/v1/activities/bookingsЗабронировать
Область:
activities:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/activities/bookings/{id}Статус бронирования и условия отмены
Область:
activities:readPOST/api/b2b/v1/activities/bookings/{id}/cancelОтмена по правилам
Область:
activities:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/activities/bookings/{id}/voucherВаучер с вашим брендом (HTML или PDF)
Область:
activities:read
Круизы
GET/api/b2b/v1/cruise/sailingsРейсы
Область:
cruise:readПока недоступно: отвечает 501, пока не подключён поставщик круизовPOST/api/b2b/v1/cruise/quoteЦена по вашим условиям
Область:
cruise:readПока недоступно: отвечает 501, пока не подключён поставщик круизовPOST/api/b2b/v1/cruise/bookingsЗабронировать
Область:
cruise:writeПока недоступно: отвечает 501, пока не подключён поставщик круизовGET/api/b2b/v1/cruise/bookings/{id}Статус бронирования и условия отмены
Область:
cruise:readПока недоступно: отвечает 501, пока не подключён поставщик круизовPOST/api/b2b/v1/cruise/bookings/{id}/cancelОтмена по правилам
Область:
cruise:writeПока недоступно: отвечает 501, пока не подключён поставщик круизов
Приветственные гиды
GET/api/b2b/v1/guides/propertiesВаши объекты
Область:
guides:readPOST/api/b2b/v1/guides/propertiesДобавить объект
Область:
guides:writeGET/api/b2b/v1/guides/properties/{id}Гид объекта, ссылка и файлы
Область:
guides:readPATCH/api/b2b/v1/guides/properties/{id}Изменить объект
Область:
guides:writePOST/api/b2b/v1/guides/properties/{id}/statusПриостановить или возобновить гид
Область:
guides:writePOST/api/b2b/v1/guides/properties/{id}/linkЗаменить гостевую ссылку
Область:
guides:writeGET/api/b2b/v1/guides/properties/{id}/wifiПрочитать данные Wi-Fi
Область:
guides_wifi:readPOST/api/b2b/v1/guides/properties/{id}/wifiЗадать Wi-Fi
Область:
guides_wifi:writeGET/api/b2b/v1/guides/properties/{id}/qrQR-код (PNG или SVG)
Область:
guides:readGET/api/b2b/v1/guides/properties/{id}/cardКарточка для печати (PDF или HTML)
Область:
guides:readGET/api/b2b/v1/guides/statsСканирования, просмотры, бронирования и ваша доля
Область:
guides:read
Аккаунт
GET/api/b2b/v1/whoamiПроверить ключ
Область:
account:readGET/api/b2b/v1/openapi.jsonЭтот API в формате OpenAPI 3.1
Аффилиаты
GET/api/b2b/v1/affiliate/statsСтатистика за период: клики, бронирования, конверсия, заработок
Область:
affiliate:readGET/api/b2b/v1/affiliate/linksВаши трекинговые ссылки с QR-кодами
Область:
affiliate:readPOST/api/b2b/v1/affiliate/linksСоздать трекинговую ссылку с UTM
Область:
affiliate:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/affiliate/links/{code}/qrQR-код ссылки (SVG или PNG)
Область:
affiliate:readGET/api/b2b/v1/affiliate/performanceКлики, бронирования и заработок по ссылкам
Область:
affiliate:readGET/api/b2b/v1/affiliate/payoutsБаланс к выплате и запросы на выплату
Область:
affiliate:readPOST/api/b2b/v1/affiliate/payoutsЗапросить выплату банковским переводом
Область:
affiliate:writeНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/affiliate/payouts/{reference}/cancelОтозвать запрос на выплату
Область:
affiliate:writeНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/affiliate/bank-detailsСохранить банковские реквизиты (только запись)
Область:
affiliate:writeНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/affiliate/widgetНастройки и код виджета
Область:
affiliate:readPOST/api/b2b/v1/affiliate/widgetНастроить виджет бронирования
Область:
affiliate:writeНужен боевой ключ — выдаётся после одобрения
Бронирования для ваших клиентов
POST/api/b2b/v1/bookings/quoteЦена по вашим условиям
Область:
bookings:createPOST/api/b2b/v1/bookingsЗабронировать
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/bookingsСписок
Область:
bookings:viewGET/api/b2b/v1/bookings/creditedБронирования, засчитанные вашему аккаунту
Область:
bookings:viewGET/api/b2b/v1/bookings/{ref}Подробности
Область:
bookings:viewPOST/api/b2b/v1/bookings/{ref}/cancelОтмена по правилам
Область:
bookings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/bookings/{ref}/amendmentsЗапросить изменение у партнёрского отдела
Область:
bookings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/bookings/{ref}/brandВаш бренд на документах или без бренда
Область:
bookings:manageНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/bookings/{ref}/voucherВаучер с вашим брендом (HTML или PDF)
Область:
bookings:viewGET/api/b2b/v1/bookings/{ref}/name-boardТабличка с именем для водителя (HTML)
Область:
bookings:viewGET/api/b2b/v1/requestsЗапросы на изменение и обслуживание с ответами отдела
Область:
bookings:viewPOST/api/b2b/v1/requests/{id}/withdrawОтозвать открытый запрос
Область:
bookings:manageНужен боевой ключ — выдаётся после одобрения
Отельная стойка
POST/api/b2b/v1/desk/salesБыстрая продажа на стойке
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/desk/days/{date}Продажи за день или итоговый расчёт в CSV или PDF
Область:
statements:readPOST/api/b2b/v1/desk/days/{date}/closeЗакрыть день и зафиксировать расчёт
Область:
statements:readНужен боевой ключ — выдаётся после одобрения
Корпоративный транспорт
GET/api/b2b/v1/corporate/cost-centresСписок
Область:
bookings:viewPOST/api/b2b/v1/corporate/cost-centresСоздать или изменить
Область:
settings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/corporate/cost-centres/{id}/approversСоздать или изменить
Область:
settings:manageНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/corporate/requestsСписок
Область:
bookings:viewPOST/api/b2b/v1/corporate/requestsЗабронировать
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/corporate/requests/{id}/decisionОдобрить или отклонить
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/corporate/shuttlesСписок
Область:
bookings:viewPOST/api/b2b/v1/corporate/shuttlesСоздать или изменить
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/corporate/shuttles/{id}/statusИзменить статус
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/corporate/shuttles/{id}/scheduleЗапланировать поездки на месяц
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/corporate/shuttles/{id}/repriceПрименить новый согласованный тариф
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/corporate/usageИспользование по центрам затрат (JSON или CSV)
Область:
statements:read
Программы DMC
GET/api/b2b/v1/dmc/programmesСписок
Область:
bookings:viewPOST/api/b2b/v1/dmc/programmesСоздать или изменить
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/dmc/programmes/{id}Подробности
Область:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/versionsСохранить версию с ценами
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/dmc/programmes/{id}/statusИзменить статус
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/dmc/programmes/{id}/brandВаш бренд на документах или без бренда
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/dmc/programmes/{id}/acceptПринять версию и забронировать
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/dmc/programmes/{id}/proposalПредложение для клиента (HTML)
Область:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/linksВыдать клиенту ссылку с ограниченным сроком
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияGET/api/b2b/v1/dmc/programmes/{id}/linksКлиентские ссылки и кто принял
Область:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/links/{link}/revokeОтозвать клиентскую ссылку
Область:
bookings:createНужен боевой ключ — выдаётся после одобрения
Тарифы и запросы расчёта
GET/api/b2b/v1/rates/catalogueКаталог по вашим тарифам (JSON, CSV или PDF)
Область:
rates:viewGET/api/b2b/v1/rates/sheetТарифный лист услуг
Область:
rates:viewPOST/api/b2b/v1/quote-requestsОтправить запрос расчёта
Область:
bookings:createНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/wholesale-requestsЗапросить транспорт на даты
Область:
bookings:createНужен боевой ключ — выдаётся после одобрения
Виджет бронирования
GET/api/b2b/v1/widgetНастройки и код виджета
Область:
tracking:viewPOST/api/b2b/v1/widgetИзменить виджет
Область:
tracking:manageНужен боевой ключ — выдаётся после одобрения
Пользователи
GET/api/b2b/v1/usersСписок
Область:
users:viewPOST/api/b2b/v1/usersПригласить сотрудника
Область:
users:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/users/{id}/roleИзменить роль сотрудника
Область:
users:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/users/{id}/deactivateЗакрыть доступ сотруднику
Область:
users:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/users/{id}/reactivateВернуть доступ сотруднику
Область:
users:manageНужен боевой ключ — выдаётся после одобрения
Уведомления
GET/api/b2b/v1/inboxУведомления о вашем аккаунте
Область:
inbox:view
Выписки и счета
GET/api/b2b/v1/statementsВыписки, баланс и неоплаченные счета
Область:
statements:readGET/api/b2b/v1/statements/{period}Выписка за месяц (JSON или PDF)
Область:
statements:readGET/api/b2b/v1/invoices/{id}Один счёт (JSON или PDF)
Область:
statements:read
Настройки аккаунта
GET/api/b2b/v1/settingsРеквизиты аккаунта, контакты и адрес для счетов
Область:
settings:viewPOST/api/b2b/v1/settings/billing-emailУказать адрес для счетов
Область:
settings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/settings/contactsДобавить или изменить контакт
Область:
settings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/settings/contacts/{id}/removeУдалить контакт
Область:
settings:manageНужен боевой ключ — выдаётся после одобренияPOST/api/b2b/v1/settings/brandВаш бренд на документах или без бренда
Область:
settings:manageНужен боевой ключ — выдаётся после одобрения
curl -X POST 'https://nwp.ae/api/b2b/v1/transport/quote' \
-H 'Authorization: Bearer nwp_test_…' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 7f1c2b0e-quote-1' \
-d '{"airport":"dxb","terminal":"t3","direction":"from_airport","place":"downtown","vehicle":"vclass","pickup_date":"2026-11-02","pickup_time":"14:30","passengers":3,"bags":3}'Аутентификация
Каждый вызов тестовой среды требует bearer-токен. Его выдаёт handshake разработчика: токен в формате JWT, который начинается с nwp_sandbox_, действует 30 дней и открывает только тестовые данные.
1Запросите токен тестовой среды
curl -X POST https://nwp.ae/api/b2b/orchestration \
-H 'Content-Type: application/json' \
-d '{
"action": "developer_handshake",
"platform_name": "Example Travel App",
"contact_email": "developers@example.com",
"use_case": "transfers"
}'{
"environment": "sandbox",
"status": "early-access",
"test_data": true,
"token_type": "Bearer",
"token": "nwp_sandbox_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImVudiI6InNhbmRib3gifQ…",
"expires_at": "2026-10-31T08:00:00.000Z",
"scopes": [
"sandbox:transfers.quote",
"sandbox:availability.read"
],
"endpoints": [
{
"method": "POST",
"url": "https://nwp.ae/api/b2b/sandbox/transfers"
},
{
"method": "GET",
"url": "https://nwp.ae/api/b2b/sandbox/availability"
},
{
"method": "GET",
"url": "https://nwp.ae/api/b2b/sandbox/status"
}
],
"production": {
"status": "not_open",
"request_access": "https://nwp.ae/register?type=institutional"
}
}2Вызовите с ним тестовую среду
curl -X POST https://nwp.ae/api/b2b/sandbox/transfers \
-H 'Authorization: Bearer nwp_sandbox_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImVudiI6InNhbmRib3gifQ…' \
-H 'Content-Type: application/json' \
-d @transfer.jsonЗапрос трансфера
Отправьте поля ниже на эндпоинт трансферов тестовой среды. Имена полей принадлежат API и остаются на английском на любом языке.
pickup_locationОбязательно{ type: "airport" | "coordinates" | "hotel", … }Где забирают пассажира: терминал аэропорта (DXB_T1, DXB_T2, DXB_T3, DWC, SHJ), координаты в пределах ОАЭ или ссылка на отель.
dropoff_locationОбязательно{ type: "hotel" | "coordinates" | "airport", … }Куда везут пассажира: строка-ссылка на отель (ваш собственный код отеля или название отеля), координаты или терминал аэропорта.
flight_numberПо условиюstringПрибывающий рейс, например EK202. Подача привязывается ко времени посадки рейса по расписанию.
pickup_atПо условиюstring (ISO 8601)ISO 8601 со смещением часового пояса. Обязательно, если подача не в аэропорту или если для подачи в аэропорту не указан рейс.
buffer_minutes_overrideНеобязательноintegerБесплатное ожидание после посадки, в минутах, от 0 до 180. По умолчанию 60: столько бесплатного ожидания трансферный сайт группы уже даёт при каждом прилёте.
vehicle_classОбязательноenumОдно из значений: VIP_V_CLASS, EXECUTIVE_SEDAN или LUXURY_COACH.
passengersНеобязательноintegerОтклоняется, если превышает число мест в классе.
client_metadataНеобязательноobjectДанные white label для ваучера путешественника: agency_name, logo_url (только https), voucher_branding и agency_reference.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
pickup_location | { type: "airport" | "coordinates" | "hotel", … } | Обязательно | Где забирают пассажира: терминал аэропорта (DXB_T1, DXB_T2, DXB_T3, DWC, SHJ), координаты в пределах ОАЭ или ссылка на отель. |
dropoff_location | { type: "hotel" | "coordinates" | "airport", … } | Обязательно | Куда везут пассажира: строка-ссылка на отель (ваш собственный код отеля или название отеля), координаты или терминал аэропорта. |
flight_number | string | По условию | Прибывающий рейс, например EK202. Подача привязывается ко времени посадки рейса по расписанию. |
pickup_at | string (ISO 8601) | По условию | ISO 8601 со смещением часового пояса. Обязательно, если подача не в аэропорту или если для подачи в аэропорту не указан рейс. |
buffer_minutes_override | integer | Необязательно | Бесплатное ожидание после посадки, в минутах, от 0 до 180. По умолчанию 60: столько бесплатного ожидания трансферный сайт группы уже даёт при каждом прилёте. |
vehicle_class | enum | Обязательно | Одно из значений: VIP_V_CLASS, EXECUTIVE_SEDAN или LUXURY_COACH. |
passengers | integer | Необязательно | Отклоняется, если превышает число мест в классе. |
client_metadata | object | Необязательно | Данные white label для ваучера путешественника: agency_name, logo_url (только https), voucher_branding и agency_reference. |
{
"pickup_location": {
"type": "airport",
"terminal": "DXB_T3"
},
"dropoff_location": {
"type": "hotel",
"hotel_ref": "EXAMPLE-HOTEL-DOWNTOWN"
},
"flight_number": "EK202",
"buffer_minutes_override": 60,
"vehicle_class": "VIP_V_CLASS",
"passengers": 4,
"client_metadata": {
"agency_name": "Example Travel",
"logo_url": "https://example.com/logo.png",
"voucher_branding": {
"mode": "white_label",
"accent_hex": "#0A0A0A"
},
"agency_reference": "EX-10442"
}
}Классы автомобилей
| Класс | Автомобиль | Мест |
|---|---|---|
VIP_V_CLASS | Mercedes-Benz V-Class or similar | 7 |
EXECUTIVE_SEDAN | Lexus ES 350 or a similar executive saloon | 3 |
LUXURY_COACH | Toyota Coaster or King Long coach | 30 |
Каждый автомобиль нанимается на заказ вместе с лицензированным водителем; класс определяет тип автомобиля и число мест.
Ответ
Тестовый расчёт повторяет запрос и добавляет, как будет рассчитано время подачи и как будет оформлен ваучер. Цены в нём никогда нет.
{
"environment": "sandbox",
"test_data": true,
"notice": "Sandbox response: test data only. Nothing is booked, no vehicle is held and no price is quoted. Production is not open yet.",
"quote_id": "SBX-WT5PCXWF",
"status": "sandbox_accepted",
"vehicle": {
"class": "VIP_V_CLASS",
"description": "Mercedes-Benz V-Class or similar",
"max_passengers": 7
},
"passengers": 4,
"pickup": {
"location": {
"type": "airport",
"terminal": "DXB_T3"
},
"timing": {
"mode": "flight_landing",
"flight_number": "EK202",
"driver_ready": "at the scheduled landing time",
"free_waiting_minutes": 60,
"live_arrival_tracking": "planned"
}
},
"dropoff": {
"location": {
"type": "hotel",
"hotel_ref": "EXAMPLE-HOTEL-DOWNTOWN"
}
},
"voucher": {
"branding": "white_label",
"agency_name": "Example Travel",
"logo_url": "https://example.com/logo.png",
"accent_hex": "#0A0A0A",
"footer_text": null,
"agency_reference": "EX-10442",
"shows_nwp_branding": false
},
"price": null,
"price_note": "Sandbox quotes carry no price. Net rates are issued to approved partners in the portal.",
"default_buffer_minutes": 60,
"created_at": "2026-10-01T08:00:00.000Z"
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid.",
"retryable": false,
"fields": [
"flight_number"
],
"issues": [
{
"path": "flight_number",
"message": "flight_number must be an airline flight number such as EK202."
}
]
},
"environment": "sandbox"
}Привязка к рейсам
Сейчас подача привязана ко времени посадки, указанному в бронировании, и водитель бесплатно ждёт в течение буфера после него. Если рейс переносится, сообщите партнёрскому отделу, и подача переносится вместе с ним.
Автоматическое отслеживание прилёта в реальном времени через FlightAware или AeroDataBox запланировано. Ни один из сервисов пока не подключён, и тестовая среда возвращает live_arrival_tracking со статусом planned (запланировано).
Подписанная доступность
Handshake возвращает подписанный URL доступности. Подпись охватывает дату, класс автомобиля и срок действия; если изменить любой из них, вызов отклоняется. Статусы — образцы для разработки.
curl 'https://nwp.ae/api/b2b/sandbox/availability?date=2026-10-15&vehicle_class=VIP_V_CLASS&expires=1760572800&sig=…'{
"environment": "sandbox",
"test_data": true,
"notice": "Sandbox response: test data only. Nothing is booked, no vehicle is held and no price is quoted. Production is not open yet.",
"date": "2026-10-15",
"vehicle_class": "VIP_V_CLASS",
"vehicle": {
"description": "Mercedes-Benz V-Class or similar",
"max_passengers": 7
},
"sample_status": "on_request",
"note": "A sample status for building against. Real availability is confirmed by the trade desk until the API opens."
}Действия с аккаунтом
Отправьте POST на эндпоинт оркестрации с действием. Действие, которое требует чего-то от человека, сохраняется и передаётся в партнёрский отдел до того, как ответ об этом сообщит.
| Действие | Что делает |
|---|---|
credit_line_application | Условия Net-15, 30, 45 или 60 для компании, зарегистрированной в ОАЭ. Нужны номер торговой лицензии и TRN (15 цифр, начинается со 100). Каждую заявку рассматривает сотрудник, а до одобрения кредитной линии бронирования оплачиваются заранее. |
wallet_topup | Предоплата на ваш аккаунт. Пополнение картой пока недоступно, поэтому партнёрский отдел выставляет вам счёт для оплаты банковским переводом, и ответ об этом сообщает. |
account_payload | Валютная матрица вашего аккаунта. AED — базовая и единственная валюта, в которой что-либо списывается или начисляется; другие валюты — конвертация для отображения по дневному курсу сайта, поэтому маржа при конвертации не меняется. |
tracking_link | Детерминированный партнёрский URL и QR-код для уровней краткосрочной аренды и аффилиатов, с ясным указанием, куда сейчас засчитываются бронирования. |
developer_handshake | Токен тестовой среды, эндпоинты тестовой среды и подписанный URL доступности. |
{
"action": "credit_line_application",
"company_legal_name": "Example Travel L.L.C.",
"trade_licence_number": "1234567",
"licence_authority": "Department of Economy and Tourism, Dubai",
"trn": "100000000000003",
"contact_name": "Finance Desk",
"contact_email": "finance@example.com",
"requested_terms": "NET_30",
"requested_limit_aed": 50000
}{
"action": "wallet_topup",
"company_name": "Example Travel L.L.C.",
"contact_email": "finance@example.com",
"amount_aed": 10000,
"purchase_order": "PO-2291"
}{
"action": "account_payload",
"company_name": "Example Travel L.L.C.",
"tier": "Tier_4_Regional_DMCs",
"display_currencies": [
"USD",
"EUR"
],
"lines": [
{
"label": "Your own city-tour package",
"net_aed": 400,
"sell_aed": 560
}
]
}{
"action": "tracking_link",
"partner_code": "HHO-EXAMPLE",
"tier": "Tier_1_Holiday_Homes",
"property_id": "marina-2104",
"destination": "dubaitransfers.ae"
}Ошибки
Все ошибки имеют одну форму: error.code, error.message и error.retryable, а при ошибке валидации — ещё fields и issues.
| Статус | Код | Значение |
|---|---|---|
| 400 | invalid_json | Тело запроса — невалидный JSON. |
| 401 | unauthenticated | Нет токена тестовой среды, либо токен искажён, просрочен или неверно подписан. |
| 404 | not_found | Такого эндпоинта на этом хосте нет. |
| 405 | method_not_allowed | Эндпоинт принимает другой метод. |
| 413 | payload_too_large | Тело запроса больше 16 KB. |
| 422 | validation_failed | Поле отсутствует или заполнено неверно: см. fields и issues. |
| 429 | rate_limited | Слишком много запросов с этого адреса: повторите через retry_after_seconds. |
| 500 | internal | Сбой на нашей стороне: сообщите идентификатор запроса. |
| 502 | upstream_unavailable | Платёжный провайдер не ответил. |
| 503 | not_configured | Запрос не удалось сохранить: напишите в партнёрский отдел. |
Лимиты запросов
Действия с аккаунтом ограничены для каждого адреса в час: credit_line_application: 5, wallet_topup: 10, account_payload: 60, tracking_link: 60 и developer_handshake: 10. Вызовы тестовой среды ограничены значением 120 в час с одного адреса.
Виджет бронирования
Виджет бронирования открыт одобренным партнёрам в раннем доступе: один тег script размещает экскурсии и трансферы nwp.ae на вашем сайте по публичной цене, на двенадцати языках, под вашим именем и с вашим партнёрским кодом в каждом бронировании. Настраивается он через API: эндпоинты виджета бронирования читают и меняют его настройки и возвращают фрагмент кода для вставки.