Service Intents Search Guide
This document explains how to call:
POST /api/app/travel-services/service-intents
and how to build ServiceIntentsRequestDto for each serviceType.
Endpoint
POST /api/app/travel-services/service-intents
Content-Type: application/json
Authentication is not required by this endpoint.
Request DTO
{
"serviceType": 0,
"tripContext": {
"items": {
"system.tripOrigination": "JOR",
"system.tripDestination": "USA",
"system.tripFrom": "2026-01-10",
"system.tripTo": "2026-01-17"
},
"travelerContexts": []
},
"inputRestrictionMode": "ByPassOnMissing",
"serviceIntentKeysFilter": [],
"continuationToken": null
}
serviceType values
0=Visa1=Insurance2=AirportLounge3=FastTrack4=Esim5=FlightItineraryLetter6=HotelItineraryLetter
Note: even though
Esimexists in enum, search is currently not supported in practice (provider returns empty intents).
Core behavior rules in POST /api/app/travel-services/service-intents
serviceTypeis required when noserviceIntentKeysFilteris provided.- If
serviceIntentKeysFilteris provided, key-based resolution is used. continuationTokencannot be used together withserviceIntentKeysFilter.- When destination is missing, returned intents may be shuffled; otherwise normal fee ordering applies.
Required tripContext.items by serviceType
1) Visa (serviceType = 0)
Required/used keys:
system.tripOriginationsystem.tripDestination(can be empty in some flows)system.exemptions(optional list of exemption IDs)system.tripFrom/system.tripTo(used by downstream disability checks)
About system.exemptions:
- It is an array of exemption IDs (numbers).
- It is used only for visa search.
- It can make additional visa intents eligible when the traveler has qualifying documents (for example residence permit / third-country visa conditions configured in Fluxir).
- If omitted or empty, visa results include only normally eligible visas.
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 0,
"tripContext": {
"items": {
"system.tripOrigination": "JOR",
"system.tripDestination": "SAU",
"system.tripFrom": "2026-02-01",
"system.tripTo": "2026-02-10",
"system.exemptions": [101, 205]
},
"travelerContexts": []
},
"inputRestrictionMode": "ByPassOnMissing"
}'
How to get exemption IDs (system.exemptions)
Use the exemptions API first, then pass selected IDs into system.exemptions.
Endpoint:
GET /api/app/visa-type/exemptions?originationCountryCode={ISO3}&destinationCountryCode={ISO3?}
cURL (origination + destination):
curl -G "https://<host>/api/app/visa-type/exemptions" \
--data-urlencode "originationCountryCode=PSE" \
--data-urlencode "destinationCountryCode=ALB"
cURL (origination only):
curl -G "https://<host>/api/app/visa-type/exemptions" \
--data-urlencode "originationCountryCode=PSE"
Typical response item:
{
"id": 101,
"originationCountryCode": "PSE",
"documentType": "ResidencePermit",
"documentCountryCode": "ARE",
"documentSubtype": null,
"conditionsText": "Valid UAE residence permit",
"isActive": true
}
2) Insurance (serviceType = 1)
Provider: TamkeenInsuranceTravelServiceProvider
Required/used keys:
system.tripOrigination(must bePSEorJORto return intents)system.tripDestination(optional; affects Plan A/Plan B selection)system.tripFromsystem.tripTo
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 1,
"tripContext": {
"items": {
"system.tripOrigination": "JOR",
"system.tripDestination": "USA",
"system.tripFrom": "2026-03-01",
"system.tripTo": "2026-03-12"
},
"travelerContexts": []
},
"inputRestrictionMode": "FailOnMissing"
}'
3) Airport Lounge (serviceType = 2)
Required/used keys:
cityis required unlessserviceIntentKeysFilteris provided.
If city is missing:
ByPassOnMissing=> empty provider resultFailOnMissing=> validation error
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 2,
"tripContext": {
"items": {
"city": "Dubai"
},
"travelerContexts": []
},
"inputRestrictionMode": "ByPassOnMissing"
}'
4) Fast Track (serviceType = 3)
Required/used keys:
cityis required unlessserviceIntentKeysFilteris provided.
If city is missing:
ByPassOnMissing=> empty provider resultFailOnMissing=> validation error
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 3,
"tripContext": {
"items": {
"city": "Abu Dhabi"
},
"travelerContexts": []
},
"inputRestrictionMode": "ByPassOnMissing"
}'
5) eSIM (serviceType = 4) — currently not supported for search
Current behavior: returns an empty list.
So serviceType = Esim is technically callable but currently returns no searchable intents.
6) Flight Itinerary Letter (serviceType = 5)
Required keys:
Global context:
cityOriginationcityDestinationtripFrom/system.tripFromtripTo/system.tripTo
Traveler context (each traveler):
traveler.dateOfBirthtraveler.fullName
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 5,
"tripContext": {
"items": {
"cityOrigination": "AMM",
"cityDestination": "DXB",
"system.tripFrom": "2026-04-10",
"system.tripTo": "2026-04-18"
},
"travelerContexts": [
{
"personId": 1001,
"items": {
"traveler.dateOfBirth": "1990-05-11",
"traveler.fullName": "John Doe"
}
}
]
},
"inputRestrictionMode": "FailOnMissing"
}'
7) Hotel Itinerary Letter (serviceType = 6)
Required keys:
Global context:
cityDestinationtripFrom/system.tripFromtripTo/system.tripTo
Traveler context (each traveler):
traveler.dateOfBirthtraveler.fullName
cURL example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 6,
"tripContext": {
"items": {
"cityDestination": "DXB",
"system.tripFrom": "2026-05-01",
"system.tripTo": "2026-05-07"
},
"travelerContexts": [
{
"personId": 1001,
"items": {
"traveler.dateOfBirth": "1990-05-11",
"traveler.fullName": "John Doe"
}
}
]
},
"inputRestrictionMode": "FailOnMissing"
}'
Key-based lookup example (serviceIntentKeysFilter)
Use this when you already have intent keys and want exact resolution.
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 0,
"tripContext": {
"items": {
"system.tripOrigination": "JOR",
"system.tripDestination": "SAU"
},
"travelerContexts": []
},
"serviceIntentKeysFilter": [
"<existing-service-intent-key>"
]
}'
Important:
- Do not send
continuationTokenin the same request withserviceIntentKeysFilter. - Each key must belong to the same requested
serviceType, otherwise validation error is returned.
Continuation token example
curl -X POST "https://<host>/api/app/travel-services/service-intents" \
-H "Content-Type: application/json" \
-d '{
"serviceType": 5,
"tripContext": {
"items": {
"cityOrigination": "AMM",
"cityDestination": "DXB",
"system.tripFrom": "2026-04-10",
"system.tripTo": "2026-04-18"
},
"travelerContexts": [
{
"personId": 1001,
"items": {
"traveler.dateOfBirth": "1990-05-11",
"traveler.fullName": "John Doe"
}
}
]
},
"continuationToken": "11111111-2222-3333-4444-555555555555"
}'
Use the continuationToken returned by previous response.