Développeurs
Documentation de l'API B2B
L'API B2B derrière nwp.ae : chiffrez et réservez au net pour vos clients, émettez des bons, gérez un comptoir d'hôtel, le transport d'entreprise et des programmes DMC, avec vos tarifs, relevés et factures au même endroit. Accès anticipé : les clés sandbox répondent avec des données de test signalées comme telles, et les clés live sont délivrées après approbation.
StatutAccès anticipé · sandbox uniquement
La sandbox vérifie de vraies requêtes par rapport au vrai schéma et répond avec des données de test. Rien n'est réservé, aucun véhicule n'est bloqué et aucun prix n'est renvoyé. La sandbox ne comporte aucun engagement de niveau de service, et les clés de production sont délivrées aux partenaires approuvés à l'ouverture de l'API.
Demander un accès anticipéVue d'ensemble
JSON sur HTTPS. Envoyez Content-Type: application/json. Chaque réponse est au format JSON et comporte un en-tête x-request-id à communiquer à notre service agences ; les réponses de la sandbox comportent aussi x-nwp-environment: sandbox.
| URL de base | — |
|---|---|
| Sandbox | https://nwp.ae/api/b2b/sandbox |
| Production | https://nwp.ae/api/b2b/v1Pas encore ouverte · Nécessite une clé live — délivrée après approbation |
API B2B v1
Une seule API pour tout ce que fait un compte : transport terrestre et excursions et activités au prix de vos conditions commerciales (tarif net, commission ou tarif convenu), réservations pour vos clients, bons et pancartes nominatives, comptoir d'hôtel, transport d'entreprise, programmes DMC, widget de réservation, utilisateurs, avis, relevés et factures. Les clés sandbox (nwp_test_…) sont ouvertes aux demandeurs : elles répondent sur chaque endpoint avec des données de test marquées sandbox: true et ne réservent jamais ni ne modifient votre compte. Les clés live (nwp_live_…) sont délivrées après approbation et fonctionnent dès que NWP a activé l'accès live de votre compte. Chaque POST accepte un Idempotency-Key, chaque réponse porte x-request-id et chaque clé a sa propre limite par minute.
Le document OpenAPI 3.1: /api/b2b/v1/openapi.json
Transport terrestre
POST/api/b2b/v1/transport/quotePrix selon vos conditions
Portée:
transport:readPOST/api/b2b/v1/transport/bookingsRéserver
Portée:
transport:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/transport/bookings/{id}État de la réservation et conditions d'annulation
Portée:
transport:readPOST/api/b2b/v1/transport/bookings/{id}/cancelAnnuler selon la politique
Portée:
transport:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/transport/bookings/{id}/voucherBon à votre marque (HTML ou PDF)
Portée:
transport:read
Excursions et activités
GET/api/b2b/v1/activities/productsProduits en vente, par personne ou par véhicule
Portée:
activities:readGET/api/b2b/v1/activities/products/{id}/availabilityDisponibilités par jour
Portée:
activities:readPOST/api/b2b/v1/activities/quotePrix selon vos conditions
Portée:
activities:readPOST/api/b2b/v1/activities/bookingsRéserver
Portée:
activities:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/activities/bookings/{id}État de la réservation et conditions d'annulation
Portée:
activities:readPOST/api/b2b/v1/activities/bookings/{id}/cancelAnnuler selon la politique
Portée:
activities:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/activities/bookings/{id}/voucherBon à votre marque (HTML ou PDF)
Portée:
activities:read
Croisières
GET/api/b2b/v1/cruise/sailingsDéparts
Portée:
cruise:readPas encore disponible : répond 501 tant qu'aucun fournisseur de croisières n'est connectéPOST/api/b2b/v1/cruise/quotePrix selon vos conditions
Portée:
cruise:readPas encore disponible : répond 501 tant qu'aucun fournisseur de croisières n'est connectéPOST/api/b2b/v1/cruise/bookingsRéserver
Portée:
cruise:writePas encore disponible : répond 501 tant qu'aucun fournisseur de croisières n'est connectéGET/api/b2b/v1/cruise/bookings/{id}État de la réservation et conditions d'annulation
Portée:
cruise:readPas encore disponible : répond 501 tant qu'aucun fournisseur de croisières n'est connectéPOST/api/b2b/v1/cruise/bookings/{id}/cancelAnnuler selon la politique
Portée:
cruise:writePas encore disponible : répond 501 tant qu'aucun fournisseur de croisières n'est connecté
Guides d’accueil
GET/api/b2b/v1/guides/propertiesVos logements
Portée:
guides:readPOST/api/b2b/v1/guides/propertiesAjouter un logement
Portée:
guides:writeGET/api/b2b/v1/guides/properties/{id}Guide, lien et fichiers d’un logement
Portée:
guides:readPATCH/api/b2b/v1/guides/properties/{id}Modifier un logement
Portée:
guides:writePOST/api/b2b/v1/guides/properties/{id}/statusSuspendre ou réactiver un guide
Portée:
guides:writePOST/api/b2b/v1/guides/properties/{id}/linkRemplacer le lien invité
Portée:
guides:writeGET/api/b2b/v1/guides/properties/{id}/wifiRelire le Wi-Fi
Portée:
guides_wifi:readPOST/api/b2b/v1/guides/properties/{id}/wifiDéfinir le Wi-Fi
Portée:
guides_wifi:writeGET/api/b2b/v1/guides/properties/{id}/qrQR code (PNG ou SVG)
Portée:
guides:readGET/api/b2b/v1/guides/properties/{id}/cardCarte imprimable (PDF ou HTML)
Portée:
guides:readGET/api/b2b/v1/guides/statsScans, vues, réservations et votre part
Portée:
guides:read
Compte
GET/api/b2b/v1/whoamiVérifier une clé
Portée:
account:readGET/api/b2b/v1/openapi.jsonCette API en OpenAPI 3.1
Affiliés
GET/api/b2b/v1/affiliate/statsStatistiques sur une période : clics, réservations, conversion, gains
Portée:
affiliate:readGET/api/b2b/v1/affiliate/linksVos liens de suivi, avec codes QR
Portée:
affiliate:readPOST/api/b2b/v1/affiliate/linksCréer un lien de suivi avec UTM
Portée:
affiliate:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/affiliate/links/{code}/qrCode QR d'un lien (SVG ou PNG)
Portée:
affiliate:readGET/api/b2b/v1/affiliate/performanceClics, réservations et gains par lien
Portée:
affiliate:readGET/api/b2b/v1/affiliate/payoutsSolde à verser et demandes de versement
Portée:
affiliate:readPOST/api/b2b/v1/affiliate/payoutsDemander un versement, effectué par virement bancaire
Portée:
affiliate:writeNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/affiliate/payouts/{reference}/cancelRetirer une demande de versement
Portée:
affiliate:writeNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/affiliate/bank-detailsEnregistrer les coordonnées bancaires (écriture seule)
Portée:
affiliate:writeNécessite une clé live — délivrée après approbationGET/api/b2b/v1/affiliate/widgetRéglages et extrait de code du widget
Portée:
affiliate:readPOST/api/b2b/v1/affiliate/widgetConfigurer le widget de réservation
Portée:
affiliate:writeNécessite une clé live — délivrée après approbation
Réservations pour vos clients
POST/api/b2b/v1/bookings/quotePrix selon vos conditions
Portée:
bookings:createPOST/api/b2b/v1/bookingsRéserver
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/bookingsLister
Portée:
bookings:viewGET/api/b2b/v1/bookings/creditedRéservations créditées à votre compte
Portée:
bookings:viewGET/api/b2b/v1/bookings/{ref}Détails
Portée:
bookings:viewPOST/api/b2b/v1/bookings/{ref}/cancelAnnuler selon la politique
Portée:
bookings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/bookings/{ref}/amendmentsDemander une modification au service agences
Portée:
bookings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/bookings/{ref}/brandVotre marque, ou aucune, sur ses documents
Portée:
bookings:manageNécessite une clé live — délivrée après approbationGET/api/b2b/v1/bookings/{ref}/voucherBon à votre marque (HTML ou PDF)
Portée:
bookings:viewGET/api/b2b/v1/bookings/{ref}/name-boardPancarte nominative du chauffeur (HTML)
Portée:
bookings:viewGET/api/b2b/v1/requestsDemandes de modification et de service, avec les réponses du service
Portée:
bookings:viewPOST/api/b2b/v1/requests/{id}/withdrawRetirer une demande en cours
Portée:
bookings:manageNécessite une clé live — délivrée après approbation
Comptoir d'hôtel
POST/api/b2b/v1/desk/salesVente rapide au comptoir
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/desk/days/{date}Les ventes d'une journée, ou leur arrêté en CSV ou PDF
Portée:
statements:readPOST/api/b2b/v1/desk/days/{date}/closeClôturer la journée et figer son arrêté
Portée:
statements:readNécessite une clé live — délivrée après approbation
Transport d'entreprise
GET/api/b2b/v1/corporate/cost-centresLister
Portée:
bookings:viewPOST/api/b2b/v1/corporate/cost-centresCréer ou modifier
Portée:
settings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/corporate/cost-centres/{id}/approversCréer ou modifier
Portée:
settings:manageNécessite une clé live — délivrée après approbationGET/api/b2b/v1/corporate/requestsLister
Portée:
bookings:viewPOST/api/b2b/v1/corporate/requestsRéserver
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/corporate/requests/{id}/decisionApprouver ou refuser
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/corporate/shuttlesLister
Portée:
bookings:viewPOST/api/b2b/v1/corporate/shuttlesCréer ou modifier
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/corporate/shuttles/{id}/statusChanger son statut
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/corporate/shuttles/{id}/schedulePlanifier un mois de trajets
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/corporate/shuttles/{id}/repriceAppliquer un tarif nouvellement convenu
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/corporate/usageUtilisation par centre de coût (JSON ou CSV)
Portée:
statements:read
Programmes DMC
GET/api/b2b/v1/dmc/programmesLister
Portée:
bookings:viewPOST/api/b2b/v1/dmc/programmesCréer ou modifier
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/dmc/programmes/{id}Détails
Portée:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/versionsEnregistrer une version chiffrée
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/dmc/programmes/{id}/statusChanger son statut
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/dmc/programmes/{id}/brandVotre marque, ou aucune, sur ses documents
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/dmc/programmes/{id}/acceptAccepter une version et la réserver
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/dmc/programmes/{id}/proposalProposition client (HTML)
Portée:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/linksÉmettre un lien client à durée limitée
Portée:
bookings:createNécessite une clé live — délivrée après approbationGET/api/b2b/v1/dmc/programmes/{id}/linksLiens clients et qui a accepté
Portée:
bookings:viewPOST/api/b2b/v1/dmc/programmes/{id}/links/{link}/revokeRévoquer un lien client
Portée:
bookings:createNécessite une clé live — délivrée après approbation
Tarifs et demandes de devis
GET/api/b2b/v1/rates/catalogueCatalogue à vos tarifs (JSON, CSV ou PDF)
Portée:
rates:viewGET/api/b2b/v1/rates/sheetGrille tarifaire des services
Portée:
rates:viewPOST/api/b2b/v1/quote-requestsEnvoyer une demande de devis
Portée:
bookings:createNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/wholesale-requestsDemander de la capacité de véhicules
Portée:
bookings:createNécessite une clé live — délivrée après approbation
Widget de réservation
GET/api/b2b/v1/widgetRéglages et extrait de code du widget
Portée:
tracking:viewPOST/api/b2b/v1/widgetModifier le widget
Portée:
tracking:manageNécessite une clé live — délivrée après approbation
Utilisateurs
GET/api/b2b/v1/usersLister
Portée:
users:viewPOST/api/b2b/v1/usersInviter une personne
Portée:
users:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/users/{id}/roleChanger le rôle d'une personne
Portée:
users:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/users/{id}/deactivateRetirer l'accès d'une personne
Portée:
users:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/users/{id}/reactivateRétablir l'accès d'une personne
Portée:
users:manageNécessite une clé live — délivrée après approbation
Avis
GET/api/b2b/v1/inboxAvis concernant votre compte
Portée:
inbox:view
Relevés et factures
GET/api/b2b/v1/statementsRelevés, solde et factures en cours
Portée:
statements:readGET/api/b2b/v1/statements/{period}Relevé d'un mois (JSON ou PDF)
Portée:
statements:readGET/api/b2b/v1/invoices/{id}Une facture (JSON ou PDF)
Portée:
statements:read
Paramètres du compte
GET/api/b2b/v1/settingsInformations du compte, contacts et e-mail de facturation
Portée:
settings:viewPOST/api/b2b/v1/settings/billing-emailDéfinir l'e-mail de facturation
Portée:
settings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/settings/contactsAjouter ou modifier un contact
Portée:
settings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/settings/contacts/{id}/removeSupprimer un contact
Portée:
settings:manageNécessite une clé live — délivrée après approbationPOST/api/b2b/v1/settings/brandVotre marque, ou aucune, sur ses documents
Portée:
settings:manageNécessite une clé live — délivrée après approbation
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}'Authentification
Chaque appel à la sandbox exige un jeton bearer. Le handshake développeur en délivre un : un jeton au format JWT qui commence par nwp_sandbox_, reste valable 30 jours et donne accès aux données de test, et à rien d'autre.
1Demander un jeton sandbox
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"
}
}2Appeler la sandbox avec ce jeton
curl -X POST https://nwp.ae/api/b2b/sandbox/transfers \
-H 'Authorization: Bearer nwp_sandbox_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImVudiI6InNhbmRib3gifQ…' \
-H 'Content-Type: application/json' \
-d @transfer.jsonRequête de transfert
Envoyez les champs ci-dessous à l'endpoint des transferts de la sandbox. Les noms de champs appartiennent à l'API et restent en anglais dans toutes les langues.
pickup_locationObligatoire{ type: "airport" | "coordinates" | "hotel", … }Lieu de prise en charge du passager : un terminal d'aéroport (DXB_T1, DXB_T2, DXB_T3, DWC, SHJ), des coordonnées aux Émirats ou une référence d'hôtel.
dropoff_locationObligatoire{ type: "hotel" | "coordinates" | "airport", … }Lieu de dépose du passager : une référence d'hôtel sous forme de chaîne (votre propre code hôtel ou le nom de l'hôtel), des coordonnées ou un terminal d'aéroport.
flight_numberConditionnelstringLe vol d'arrivée, par exemple EK202. La prise en charge est calée sur l'heure d'atterrissage prévue du vol.
pickup_atConditionnelstring (ISO 8601)ISO 8601 avec décalage horaire. Obligatoire lorsque la prise en charge n'a pas lieu à un aéroport, ou lorsqu'une prise en charge à l'aéroport n'a pas de vol.
buffer_minutes_overrideFacultatifintegerAttente gratuite après l'atterrissage, en minutes, de 0 à 180. La valeur par défaut est 60 : l'attente gratuite que le site de transferts du groupe accorde déjà à chaque arrivée.
vehicle_classObligatoireenumL'une des valeurs suivantes : VIP_V_CLASS, EXECUTIVE_SEDAN ou LUXURY_COACH.
passengersFacultatifintegerRefusé s'il dépasse le nombre de places de la catégorie.
client_metadataFacultatifobjectInformations de marque blanche pour le voucher du voyageur : agency_name, logo_url (https uniquement), voucher_branding et agency_reference.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
pickup_location | { type: "airport" | "coordinates" | "hotel", … } | Obligatoire | Lieu de prise en charge du passager : un terminal d'aéroport (DXB_T1, DXB_T2, DXB_T3, DWC, SHJ), des coordonnées aux Émirats ou une référence d'hôtel. |
dropoff_location | { type: "hotel" | "coordinates" | "airport", … } | Obligatoire | Lieu de dépose du passager : une référence d'hôtel sous forme de chaîne (votre propre code hôtel ou le nom de l'hôtel), des coordonnées ou un terminal d'aéroport. |
flight_number | string | Conditionnel | Le vol d'arrivée, par exemple EK202. La prise en charge est calée sur l'heure d'atterrissage prévue du vol. |
pickup_at | string (ISO 8601) | Conditionnel | ISO 8601 avec décalage horaire. Obligatoire lorsque la prise en charge n'a pas lieu à un aéroport, ou lorsqu'une prise en charge à l'aéroport n'a pas de vol. |
buffer_minutes_override | integer | Facultatif | Attente gratuite après l'atterrissage, en minutes, de 0 à 180. La valeur par défaut est 60 : l'attente gratuite que le site de transferts du groupe accorde déjà à chaque arrivée. |
vehicle_class | enum | Obligatoire | L'une des valeurs suivantes : VIP_V_CLASS, EXECUTIVE_SEDAN ou LUXURY_COACH. |
passengers | integer | Facultatif | Refusé s'il dépasse le nombre de places de la catégorie. |
client_metadata | object | Facultatif | Informations de marque blanche pour le voucher du voyageur : agency_name, logo_url (https uniquement), voucher_branding et 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"
}
}Catégories de véhicules
| Catégorie | Véhicule | Places |
|---|---|---|
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 |
Chaque véhicule est loué avec son chauffeur agréé pour la prestation ; la catégorie détermine le type de véhicule et le nombre de places.
Réponse
Un devis sandbox reprend la requête et y ajoute la manière dont la prise en charge sera calée et dont le voucher sera personnalisé. Il ne contient jamais de prix.
{
"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"
}Horaires des vols
Aujourd'hui, la prise en charge est calée sur l'heure d'atterrissage indiquée dans la réservation, et le chauffeur attend gratuitement pendant la marge prévue ensuite. Si un vol change, prévenez notre service agences et la prise en charge est décalée en conséquence.
Un suivi automatisé des arrivées en temps réel via FlightAware ou AeroDataBox est prévu. Aucun des deux n'est encore connecté, et la sandbox renvoie live_arrival_tracking avec le statut prévu (planned).
Disponibilité signée
Le handshake renvoie une URL de disponibilité signée. La signature couvre la date, la catégorie de véhicule et l'expiration ; si l'un de ces éléments change, l'appel est refusé. Les statuts sont des exemples pour le développement.
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."
}Actions de compte
Envoyez un POST à l'endpoint d'orchestration avec une action. Une action qui demande à une personne de faire quelque chose est enregistrée et transmise à notre service agences avant que la réponse ne l'indique.
| Action | Ce qu'elle fait |
|---|---|
credit_line_application | Conditions Net-15, 30, 45 ou 60 pour une société immatriculée aux Émirats. Le numéro de licence commerciale et le TRN (15 chiffres, commençant par 100) sont obligatoires. Chaque demande est examinée par une personne, et les réservations sont prépayées jusqu'à l'approbation d'une ligne de crédit. |
wallet_topup | Un prépaiement sur votre compte. Le rechargement par carte n'est pas encore disponible : notre service agences vous facture donc par virement bancaire, et la réponse l'indique. |
account_payload | La matrice des devises de votre compte. L'AED est la devise de base et la seule dans laquelle quoi que ce soit est facturé ou gagné ; les autres devises sont des conversions d'affichage au taux journalier du site, de sorte qu'une marge ne varie jamais à la conversion. |
tracking_link | Une URL partenaire déterministe et un code QR pour les catégories locations de vacances et affiliés, avec une indication claire de l'endroit où elle est créditée aujourd'hui. |
developer_handshake | Un jeton sandbox, les endpoints de la sandbox et une URL de disponibilité signée. |
{
"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"
}Erreurs
Chaque erreur a la même structure : error.code, error.message et error.retryable, avec fields et issues en cas d'échec de validation.
| Statut | Code | Signification |
|---|---|---|
| 400 | invalid_json | Le corps n'est pas un JSON valide. |
| 401 | unauthenticated | Aucun jeton sandbox, ou un jeton mal formé, expiré ou mal signé. |
| 404 | not_found | L'endpoint n'existe pas sur cet hôte. |
| 405 | method_not_allowed | L'endpoint attend une autre méthode. |
| 413 | payload_too_large | Le corps dépasse 16 KB. |
| 422 | validation_failed | Un champ est manquant ou mal formé : voir fields et issues. |
| 429 | rate_limited | Trop de requêtes depuis cette adresse : réessayez après retry_after_seconds. |
| 500 | internal | Une erreur s'est produite de notre côté : indiquez l'identifiant de la requête. |
| 502 | upstream_unavailable | Un prestataire de paiement n'a pas répondu. |
| 503 | not_configured | La requête n'a pas pu être enregistrée : écrivez à notre service agences. |
Limites de débit
Les actions de compte sont limitées par adresse et par heure : credit_line_application : 5, wallet_topup : 10, account_payload : 60, tracking_link : 60 et developer_handshake : 10. Les appels à la sandbox sont limités à 120 par heure et par adresse.
Widget de réservation
Le widget de réservation est ouvert aux partenaires approuvés en accès anticipé : une balise script place les excursions et transferts de nwp.ae sur votre site au prix public, en douze langues, à votre nom, avec votre code partenaire sur chaque réservation. Il se configure via l'API : les endpoints du widget de réservation lisent et modifient ses réglages et renvoient l'extrait de code à coller.