- 07 Mar 2025
- 5 Minutes to read
- Print
- DarkLight
UATP Card Processing
- Updated on 07 Mar 2025
- 5 Minutes to read
- Print
- DarkLight
Universal Air Travel Plan (UATP) is a global payment network designed primarily for the airline and travel industry. It serves as a payment solution that enables corporations, travel agencies, and other entities to streamline their travel-related expenses while providing airlines and travel merchants with a low-cost payment acceptance alternative.
Supported Transaction Types
Authorisation1
AUTH
Capture2
CAPT
Purchase
PURC
Refund3
PARTIALREFUND
Void4
GENERALVOID
Payouts
ORIGINALCREDIT
Recurring
PURC
1Authorizations are processed/declined instantly depending on response from UATP. Captures are automatically initiated through daily batches and use the transaction data of the AUTH Transaction. UATP Authorization supports only 15 digit card numbers
2Refunds and Captures are processed on a daily basis in batch, covering the preceding 24-hour period. Once the transaction data is Authorised successfully then it is processed for Capture and it is transmitted to UATP for processing. The transactions with type Capture will become visible within the Apcopay portal with a PENDING state once the transaction has been sent to UATP for processing. Subsequently transaction states are changed to PROCESSED once UATP confirms the received transactions.
3For Refund Transactions, the merchant has to first initiate the Refund transaction through DirectConnect, adding the PspId of the Captured Transaction (Not the Authorised Transaction). Similarly to the Capture, Refund requested are processed in batch via a scheduler and will get set to PENDING state when these are sent to UATP for processing. Subsequently transaction states are changed to PROCESSED once UATP confirms the received transactions.
4UATP only supports a Void of a successfully Authorised transaction within a 24hr period of the processed Authorisation request.
Integrations Supported
Deposit - Authorisation / Purchase
Hosted Payment Page
Direct Connect ( server-to-server)
Capture, Void, Refunds, Payouts, Recurring
Hosted Payment Page
Direct Connect ( server-to-server)
Airline Ready - Follow link for further information related to required Airline Details specific to this Acquirer.
Currencies & Countries Supported
Title | Description |
---|---|
Currencies Supported | Most major currencies |
Additional attributes to process Deposits
You must include the following JSON Attributes to the payload. These attributes inform us to proceed with the redirection to UATP to finalize the payment process.
if you are using our Hosted Payment Page please populate the minimum set of attributes.
Description | Hosted Payment Page |
---|---|
Transaction Type | "TransactionType": "AUTH" |
Force Transaction Routing (Use this to route on acquirer at request time) | “Routing”:{ "ForceBank": "UATP” } |
Client Details | "Client": { "Email": "test@testmail.com", "FirstName": "Apco", "LastName": "Test", "City": "Valletta", "Country": "MLT" } |
Airline Details - Populate Node as per details in link | "AirlineDetails": { "PassengerDetails": [ { "title": "MR", "firstName": "John", "lastName": "Doe" } ], "ReservationDetails": { "pnrCode": "FRZGBK", "ticketNumber": "7199332025", "flightDateUTC": "2025-06-17", "issueDate": "2025-01-01", "travelAgencyName": "ApcoAirlines", "travelAgencyCode": "12345678", "travelAgentCity": "City" } } } |
Test Indicator | "isTest”: true |
Sample requests using our Hosted Payment Page can be viewed here.
{
"TransactionType": "AUTH",
"Amount": 10,
"Currency": "EUR",
"IsTest": true,
"OrderReference": "ApcoTest123",
"Language": "mt",
"RedirectionURL": "https://yourURL.com/Redirect",
"FailRedirectionURL": null,
"CallBackURL": "https://yourUrl.com/CallBack",
"Client": {
"Email": "joebloggs@testjb.com",
"ClientAccount": "CliAcc01002",
"FirstName": "John",
"LastName": "Doe",
"Country": "MLT",
"MobileNo": "00441234567",
"Street": "High Street",
"City": "MagicCity",
"ZIPCode": "BGGC1234",
"State": "UK",
"DateOfBirth": "2924-12-31",
"IPAddress": "1.1.1.1"
},
"Routing": {
"ForceBank": "UATP"
},
"UDF": {
"Gym": "Yoga",
"Beer": "Cerveza",
"Bar": "Open",
"Zebra": "Striped",
"Dog": "Schnauser"
},
"Configuration": {
"CardHolderNameEdit": "true"
},
"AirlineDetails": {
"FlightLegDetails": [
{
"flightArrivalDate": "2025-06-18",
"flightDepartureDate": "2025-06-17",
"flightDepartureTime": "14:47",
"paymentType": "online",
"airlineCode": "643",
"airlineFlightNumber": "123",
"departureCountry": "Malta",
"departureCity": "Luqa",
"departureAirport": "MLA",
"destinationCountry": "UK",
"destinationCity": "London",
"destinationAirport": "LON",
"stopOverCode": "X",
"fareBasisCode": "YHAP30",
"serviceClass": "A"
}
],
"PassengerDetails": [
{
"title": "MR",
"firstName": "John",
"lastName": "Doe",
"middleName": "Joe"
}
],
"ReservationDetails": {
"pnrCode": "FRZGBK",
"ticketNumber": "7199332025",
"flightDateUTC": "2025-06-17",
"issueDate": "2025-01-01",
"travelAgencyName": "ApcoAirlines",
"travelAgencyCode": "12345678",
"travelAgentCity": "City"
}
}
}
Requesting a Void
Using our direct integration, below are the mandatory fields required to process a GENERALVOID
. Refund are only possible up to the original deposit amount.
Description | |
---|---|
Transaction Type | "TransactionType": "GENERALVOID" |
Transaction or Payment Reference4 | "PspID": "154474” |
Test Indicator | "isTest”: true |
4 For Void Transactions, the PspId of the Authorised Transaction has to be used (Not the Captured Transaction). Similarly to the Capture, Refund requested are processed in batch via a scheduler and will get set to PENDING state when these are sent to UATP for processing. Subsequently transaction states are changed to PROCESSED once UATP confirms the received transactions.
Sample refund request below
{
"TransactionType": "GENERALVOID",
"Amount": "1.00",
"OrderReference": "REF0017283_Refund",
"UniqueReference": "4fe126cb-146b-426c-8234c-c8ca12e5072f",
"RedirectionURL": "https://www.yourURLhere.com/Redirect/",
"CallBackURL": "https://www.yourURLhere.com/Listener",
"PspId" : "154474",
"IsTest": true
}
Requesting a Refund
Using our direct integration, below are the mandatory fields required to process a refund
. Refund are only possible up to the original deposit amount.
Description | |
---|---|
Transaction Type | "TransactionType": "PARTIALREFUND" |
Transaction or Payment Reference3 | "PspID": "342342” |
Test Indicator | "isTest”: true |
3 For Refund Transactions, the merchant has to first initiate the Refund transaction through DirectConnect, adding the PspId of the Captured Transaction (Not the Authorised Transaction). Similarly to the Capture, Refund requested are processed in batch via a scheduler and will get set to PENDING state when these are sent to UATP for processing. Subsequently transaction states are changed to PROCESSED once UATP confirms the received transactions.
Sample refund request below
{
"TransactionType": "PARTIALREFUND",
"Amount": "1.00",
"OrderReference": "REF0017283_Refund",
"UniqueReference": "4fe126cb-146b-426c-8234c-c8ca12e5072f",
"RedirectionURL": "https://www.yourURLhere.com/Redirect/",
"CallBackURL": "https://www.yourURLhere.com/Listener",
"PspId" : "153574",
"IsTest": true
}
Airline Details
When processing payment transactions in the context of airline bookings, one needs to include additional booking information captured under a dedicated JSON node within the main AUTH
payload termed AirlineDetails
. This object encapsulates flight-related, passenger, and reservation details for airline related payment transactions. To facilitate cross provider implementations, the entire JSON object needs to be implemented however supplying the minimum required values as per Acquirer specific guidelines hereunder. In addition this would help future proofing the integration since some attributes may become enforceable over time.
NOTE: Empty string values should be supplied for non required values.
| eTicket |
---|---|
AirlineDetails:{ | |
FlightLegDetails: [ | |
{ | |
flightArrivalDate | NOT REQUIRED |
flightArrivalTime | NOT REQUIRED |
flightDepartureDate | NOT REQUIRED |
flightDepartureTime | NOT REQUIRED |
airlineCode | NOT REQUIRED |
airlineFlightNumber | NOT REQUIRED |
paymentType | NOT REQUIRED |
departureCountry | NOT REQUIRED |
departureCity | NOT REQUIRED |
departureAirport | NOT REQUIRED |
destinationCountry | NOT REQUIRED |
destinationCity | NOT REQUIRED |
destinationAirport | NOT REQUIRED |
stopOverCode | NOT REQUIRED |
fareBasisCode | NOT REQUIRED |
serviceClass | NOT REQUIRED |
} | |
], | |
PassengerDetails: [ | |
{ | |
passportNumber | NOT REQUIRED |
title | REQUIRED |
firstName | REQUIRED |
lastName | REQUIRED |
passengerName | NOT REQUIRED |
middleName | NOT REQUIRED |
dateOfBirth | NOT REQUIRED |
countryCode | NOT REQUIRED |
} | |
], | |
ReservationDetails: { | |
pnrCode | REQUIRED |
bookingSystemUniqueId | NOT REQUIRED |
computerizedReservationSystem | NOT REQUIRED |
ticketNumber | REQUIRED |
documentType | NOT REQUIRED |
flightDateUTC | REQUIRED |
issueDate | REQUIRED |
travelAgencyName | REQUIRED |
travelAgencyCode | REQUIRED |
travelAgentCity | REQUIRED |
issuingCarrierCode | NOT REQUIRED |
restrictedTicket | NOT REQUIRED |
salesSource | NOT REQUIRED |
} | |
} |
Sample Request - Hosted Payment Page
{
"TransactionType": "PURC",
"Currency": "EUR",
"Amount": 1.0,
"OrderReference": "Order2321",
"UniqueReference": "4b8da4f0-d3b4-44ae-8019-8c66905ffad7",
"RedirectionURL": "https://www.yourURLhere.com/Redirect/",
"CallBackURL": "https://www.yourURLhere.com/Listener",
"FailRedirectionURL": "https://www.yourURLhere.com/Redirect/",
"IsTest": true,
"Client": {
"Email": "apcotest@gmail.com",
"ClientAccount": "testing",
"FirstName": "Apco",
"LastName": "Test",
"Country": "MLT",
"Street": "Street1",
"City": "City",
"State": "State",
"IPAddress": "214.21.134.79"
},
"AirlineDetails": {
"FlightLegDetails": [
{
"flightArrivalDate": "",
"flightArrivalTime": "",
"flightDepartureDate": "",
"flightDepartureTime": "",
"airlineCode": "",
"airlineFlightNumber": "",
"paymentType": "",
"departureCountry": "",
"departureCity": "",
"departureAirport": "",
"destinationCountry": "",
"destinationCity": "",
"destinationAirport": "",
"stopOverCode": "",
"fareBasisCode": "",
"serviceClass": ""
}
],
"PassengerDetails": [
{
"passportNumber": "A12345678",
"title": "Mr",
"firstName": "John",
"lastName": "Doe",
"passengerName": "John Doe",
"middleName": "Michael",
"dateOfBirth": "",
"countryCode": ""
}
],
"ReservationDetails": {
"pnrCode": "XYZ123",
"bookingSystemUniqueId": "BOOK123456789",
"computerizedReservationSystem": "Amadeus",
"ticketNumber": "0012345678901",
"documentType": "TKT",
"flightDateUTC": "2024-12-24 16:30:00",
"issueDate": "2024-12-01",
"travelAgencyName": "",
"travelAgencyCode": "",
"travelAgentCity": "",
"issuingCarrierCode": "",
"restrictedTicket": "",
"salesSource": ""
}
}
}
Test Credentials
Test Card details below. You must use a future expiry date and use “Frictionless Processed” as the cardholder name. For more test information on different card use cases here.