TRIPS API Airline & Road Ticketing Vending System
Hash Key to Enhance API Security
How to validate the "Hash" property
Combine MerchantKey, ConfirmationCode and NewPriceWhole in this exact format: {MerchantKey}{ConfirmationCode}{NewPriceWhole}
Hash the concatenated string using the SHA-512 algorithm.
Convert the resulting hash to a hexadecimal string.
Compare your calculated hex string with the "Hash" property in the API response. If they match, the response integrity is verified.
Note: Your MerchantKey is confidential and only known to you — you are solely responsible for validation.
International Flights
Base Flight Search API (all environments referenced in this doc use the same Search endpoint): https://api.staging.trips.ng/api/Flight/SearchFlight
Below are samples for One-Way, Round-Trip and Multi-City flows: search → confirm price → ticket issue.
International Flight (One-Way)
Sample request headers: Authorization: Bearer 194E1578816955B8DB4602383D32947C1E5ED1730F83BDF479D9829921139CA73B6765F3BE79CE107A2E7E8707B4D0AD502B9BD693E00FC7E070369FEB49096A Content-Type: application/json MerchantCode: ACCESS
Sample Flight Search request payload:
{
"FlightRoutes": [
{
"DepartureDate": "2023-07-28",
"OriginLocationCode": "LOS",
"DestinationLocationCode": "LHR"
}
],
"FlightPassengers": [
{ "Code": "ADT", "Quantity": 1 },
{ "Code": "CHD", "Quantity": 0 },
{ "Code": "INF", "Quantity": 0 }
],
"FlightClasses": [{ "Name": "Economy" }],
"Currency": "NGN",
"EnsureAgentUnicityForRoutes": false,
"OrderbyFlightTime": "asc",
"OrderbyPrice": "asc",
"PageSize": 50,
"From": 0
}Sample (truncated) response excerpt (search returns itineraries, prices, properties such as SessionId, AgentId, GdsId, CombinationID and RecommendationID — use these in price confirmation):
{
"SessionId": "0cfb0155d1d1461ca4cc4753a17d4b68",
"TotalCount": 50,
"ResultList": [
{
"FlightDetails": [ /* ... */ ],
"AgentId": 5,
"GDSId": 2,
"Currency": "NGN",
"BaseFare": 585008.0,
"TotalFare": 844519.0,
"Properties": {
"CombinationID": 0,
"RecommendationID": 0,
"TripsSessionId": "0cfb0155d1d1461ca4cc4753a17d4b68",
"GdsSessionId": "a34ac44c18a94ddc874b863543c061dd"
}
}
]
}Confirm Ticket Price (One-Way)
Price Confirmation API: https://api.staging.trips.ng/api/Flight/ConfirmTicketPrice
Sample request (use SessionId, AgentID, GdsID, CombinationID, RecommendationID to identify itinerary):
{
"CombinationID": 0,
"RecommendationID": 6,
"FlightRouteIndex": 0,
"AgentID": 5,
"GdsID": 2,
"SessionID": "b05dfe9cdebc4f5eb2269d35ec5215e4",
"BillingAddress": {
"ContactName": "Azee AsimI",
"ContactEmail": ["[email protected]"],
"ContactMobileNo": "08034030758",
"AddressLine1": "Airport",
"AddressLine2": "",
"City": "Lagos",
"CountryCode": "KE"
},
"AirTravellers": [
{
"Gender": "Male",
"PassengerTypeCode": "ADT",
"LastName": "Obiseh",
"FirstName": "Emman",
"BirthDate": "1990-01-01",
"NamePrefix": "MR",
"Email": ["[email protected]"],
"Address": {
"ContactName": "sssss",
"AddressLine1": "30, Ishola Daniel Street",
"AddressLine2": "",
"City": "Oshodi",
"CountryCode": "NG"
},
"Documents": [
{
"DocType": "DOCS",
"DocID": "1111111111",
"EffectiveDate": "2010-02-02",
"ExpiryDate": "2030-02-02",
"InnerDocType": "PASSPORT",
"IssueLocation": "NG",
"BirthCountryCode": "NG",
"IssueCountryCode": "NG",
"BirthDate": "2000-07-22"
},
{
"DocType": "DOCO",
"DocID": "2222222222",
"EffectiveDate": "2010-02-02",
"ExpiryDate": "2030-02-02",
"InnerDocType": "VISA",
"IssueLocation": "NG",
"BirthCountryCode": "NG",
"IssueCountryCode": "NG",
"BirthDate": "2000-07-22"
}
]
}
]
}Sample success response (relevant fields):
{
"ConfirmationCode": "37269|5K5JRW",
"TicketTimeLimit": "2023-09-08T06:09:46+01:00",
"OldPrice": 2031364.0,
"NewPrice": 2031364.0,
"OldPriceWhole": 2031364,
"NewPriceWhole": 2031364,
"Errors": [],
"Warnings": [],
"PassengerDetails": { /* ... */ },
"Hash": "64fd876238ceff4081d03ca68b30cb45845559abe761e3d086f7e2c8908c63d9f734c941d37a9e7eae02384e03bef2ec9f25f05c078d401ec685747c043cbb6b"
}Use NewPriceWhole when creating the string to hash (MerchantKey_ConfirmationCode_NewPriceWhole).
If confirm returns null ConfirmationCode (failed), check Errors array.
Ticket Issue (One-Way)
Ticket Issue API: https://api.staging.trips.ng/api/v2/ticketing/issue
Request example (use SessionId from PassengerDetails in confirm response):
{
"SessionId": "8646790ccb9a4d0997a6b52693287256",
"TripType": "International",
"TripMode": "Flight"
}Sample response:
{
"Pnr": "RE6MIK",
"IsSuccessful": true,
"Message": "Successful",
"BookingStatus": "TicketPending"
}Check Booking & Re-query
MyBooking API (GET): https://api.staging.trips.ng/api/Flight/MyBookings?pnr=ZZZKJE&from=0&pageSize=10
Parameters: pnr, email, phone, from (default 0), pageSize (default 10).
Re-query / Check Booking Status API: https://api.staging.trips.ng/api/Flight/GetBookingStatus
Sample request:
{
"ConfirmationCode": "36516|12QFDT",
"Surname": "Adama"
}Sample success response when found:
{
"StatusCode": 3,
"StatusDescription": "TicketPending",
"ErrorList": []
}If booking not found:
{
"StatusCode": 100,
"StatusDescription": "Error",
"ErrorList": ["No Valid booking found for the given record"]
}Business reversal rules:
Reverse payment only when response is 200 OK and status = 0 or 1 or 11.
Reverse payment also when response is 400 Bad Request AND GetBookingStatus shows status = 0 or 1 or 11.
International Flight (Round-Trip)
Use the same Search endpoint as One-Way. Example request includes two flight routes (outbound and return) and similar request body structure. ConfirmTicketPrice and ticketing flows are identical to One-Way but may include multiple FlightRoutes.
Confirm Ticket Price endpoint (same): https://api.staging.trips.ng/api/Flight/ConfirmTicketPrice
Sample success response includes NewPriceWhole and Hash — validate with MerchantKey as described earlier.
Ticket Issue API: https://api.staging.trips.ng/api/v2/ticketing/issue
International Flight (Multi-City)
Search endpoint supports multiple FlightRoutes (multi-city). The flow remains:
Search → ConfirmTicketPrice (use CombinationID, RecommendationID, SessionId etc.) → Ticket Issue.
Confirm and Ticket Issue responses include Hash values — validate as above.
Domestic Flights
Domestic search and flows use separate endpoints under /api/Flight/Domestic.
Domestic Search API: https://api.staging.trips.ng/api/Flight/Domestic/SearchFlight
Domestic Confirm Ticket Price: https://api.staging.trips.ng/api/Flight/Domestic/ConfirmTicketPrice
Notes:
SelectedFlights array may contain more than one item (e.g., round-trip or different airlines).
FlightRouteIndex indicates leg: going = 1, return = 2 (where applicable).
Confirm responses frequently return an array of confirmations (one per selected flight); each item includes NewPriceWhole and Hash — validate each using your MerchantKey and corresponding ConfirmationCode.
Domestic Ticket Issue API: https://api.staging.trips.ng/api/v2/ticketing/issue
Example ticket issue request:
{
"SessionId": "f542ee09fc7b49fdbaf94fc67b11a113",
"TripType": "Domestic",
"TripMode": "Flight"
}Response example:
{
"Pnr": "JVAEJR-BOBKZH",
"IsSuccessful": true,
"Message": "Successful",
"BookingStatus": "TicketIssued"
}Flight Rules API
Endpoint: https://api.staging.trips.ng/api/Flight/FlightRules
Sample request:
{
"AgentId": 25,
"GDSId": 41,
"CombinationID": 0,
"RecommendationID": 0,
"PassengerTypeCode": "ADT",
"SessionId": "90533405d1724503a85290009"
}Response contains FlightRules, FlightRulePenalties and TermsAndConditions (some HTML content).
Road Transport (Bus) — Vendor Integration
Vendors receive a MerchantKey and MerchantCode. Authentication uses a bearer token which is SHA512(MerchantKey:MerchantCode). The API requires the following headers:
Authorization: Bearer {SHA512(MerchantKey:MerchantCode)} (you can generate/test hashes at https://passwordsgenerator.net/sha512-hash-generator/ — do not change the URL)
MerchantKey: {merchantkey}
MerchantCode: {merchantcode}
Content-Type: application/json
BUS Search API: https://api.staging.trips.ng/api/Bus/SearchBus
Sample request:
{
"Parameter": {
"TravelRoute": {
"DepartureId": 72,
"ArrivalId": 51,
"DepartureDate": "2024-08-30"
},
"PassengerTypes": [{ "Code": "ADT", "Quantity": 1 }],
"IsRoundTrip": false,
"Currency": "NGN",
"OrderbyDepartureTime": "ASC",
"OrderByPrice": "ASC"
},
"PageSize": 5000,
"From": 0
}Sample response contains FirstLeg, SecondLeg (for round trips), SessionId (TripsSessionId), CombinationId, RecommendationId, AvailableBuses and seat inventories. Selected items return ReservationId, AvailableSeats, SeatNumbers and pricing.
Bus Price Confirmation
BUS Price Confirmation API: https://api.staging.trips.ng/api/Bus/ConfirmTicketPrice
Sample request (one-way):
{
"SessionId": "25fe6b49e3794f4585a0ba4c6f40f2a5",
"Travellers": [
{
"PassengerTypeCode": "ADT",
"FirstName": "Francis",
"LastName": "Ibeh",
"NamePrefix": "Mr",
"SeatNumbers": ["11"]
}
],
"NumberOfSeats": 1,
"IsRoundTrip": false,
"SelectedBuses": [
{
"RecommendationID": 0,
"CombinationID": 1,
"GdsId": 103,
"AgentId": 169,
"BusRouteIndex": 0
}
],
"BillingAddress": {
"ContactName": "Francis Ibeh",
"ContactEmail": ["[email protected]"],
"ContactPhoneNumber": "+2348098988789",
"AddressLine1": "",
"NextOfKinDetails": {
"Name": "Daniel Ibeh",
"Email": ["[email protected]"],
"PhoneNumber": "+2348097889877"
}
}
}Sample Price Confirmation response (includes ConfirmationCode, NewPriceWhole and Hash):
[
{
"ConfirmationCode": "37656|6C6E44D1AGEJ",
"TicketTimeLimit": "2024-08-28T13:40:09+01:00",
"OldPrice": 21678.0,
"NewPrice": 21678.0,
"OldPriceWhole": 21678,
"NewPriceWhole": 21678,
"PassengerDetails": { /* ... */ },
"Hash": "bd8c260d1e327cfad1811b068926b0dfbb94d65ef44463a325825701579fb18c6aa32f7227e346c4dbd87fca333fff247548f896dd451d831058a48e1ecd6c31"
}
]Validate Hash using MerchantKey_ConfirmationCode_NewPriceWhole and SHA-512 hex string comparison.
Bus Ticket Issue
Ticket Issue API (bus): https://api.staging.trips.ng/api/v2/ticketing/issue
Request example:
{
"SessionId": "25fe6b49e3794f4585a0ba4c6f40f2a5",
"TripType": "Domestic",
"TripMode": "Road"
}Sample response:
{
"Pnr": "6C6E44D1AGEJ",
"IsSuccessful": true,
"Message": "Successful",
"BookingStatus": "TicketPending"
}Cancel Ticket Booking (Bus)
Cancel API: https://api.staging.trips.ng/api/Bus/CancelTicketBooking
Request payload:
{
"PNRNumber": "94674A93AGEJ",
"Surname": "Mike",
"CancelType": 0
}Sample response:
{
"WarningMessageList": ["Booking Cancelation Successful"],
"IsSuccess": true
}My Reservation (Bus)
Endpoint: https://api.staging.trips.ng/api/Bus/MyReservation
Sample request:
{
"BookingReferenceId": "1EA30721AGEJ",
"BookingReferenceType": 10,
"Surname": "Mike",
"ETicketNumber": ""
}Sample response includes travellers, seats, totals and booking status.
Fare/Travel Rules (Bus)
Endpoint: https://api.staging.trips.ng/api/Bus/TravelRules
Request example:
{
"AgentId": 168,
"GDSId": 102,
"CombinationID": 0,
"RecommendationID": 0,
"SessionId": "717d0f85a4d44e269cb87ea979a529af"
}Response includes HTML Terms and Conditions and textual rules.
Notes & Reminders
Always use the exact concatenation format: {MerchantKey}{ConfirmationCode}{NewPriceWhole} when computing the SHA-512 hash.
Do not share your MerchantKey. Hash validation occurs on your backend.
All URLs in this document must be used verbatim (do not modify query params or endpoints).
Many confirmation endpoints return arrays (especially domestic multi-leg or round-trip scenarios); validate the Hash for each returned confirmation entry independently.
Last updated