UATP Card Processing
  • 07 Mar 2025
  • 5 Minutes to read
  • Dark
    Light

UATP Card Processing

  • Dark
    Light

Article summary

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-Small Cropped.png 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 AUTHpayload 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.

AirlineDetails Attributes

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.



Was this article helpful?