APM API Integration Notes

The general API workflow consists of following:

  • Postman Guide
  • Payment API
  • Status API
  • Payout API
  • Balance API
  • Payout Sandbox

Postman Guide

FieldData Description
Request methodPOST
Additional Request header‘apikey’
Payment Request URLhttps:///api/v1/external/payment/hosted
Payout Request URLhttps:///api/v5/external/payout/s2s
Data formatAll data is sent and received in the JSON format.
Content-Typeapplication/json
iFrameThe payment url for customers does not work in iframe

Postman Headers

Payment API

Payment Request Table

Field NameData DescriptionTypeMinMaxExampleRequired
amountfloat data typeNU3750000.00

NOTE: currencies/solutions that do not support decimal values;
THB - True Money
IDR - all solutions
VND - all solutions
PHP - Maya, Gcash & Grabpay
INR - all solutions
CNY - all solutions
KRW - all solutions
yes
currencyISO 4217 numeric codeCH33PKRyes
callbackUrlUrl where payment callback will be sentURLhttps://send-here.comyes
countryISO 3166-1-alpha-2CH22PKyes
emailValid email formatAN6120name@email.comyes
ipCustomer’s IPIP123.13.43.23yes
methodMethods supported, see table below.CHWALLETSyes
midIdFor technical purposes.NU1187yes
returnUrlUrl to redirect after paymentURLhttps://return-here.comyes
orderIdMerchant Order IDAN150abc123456 (For IDR & BRL PIX channels, length is between 6-32 char)yes

Payment statuses

TX TypeEventStatus
Received:TemporaryPENDING
currencyISO 4217 numeric codeSUCCESS
callbackUrlUrl where payment callback will be sentREJECTED, FAIL

ASIA

CurrencyCountryMethod ParameterSolution
🇧🇩 BDTBangladeshBANK_TRANSFERbKash, Nagad, Rocket, uPay
🇨🇳 CNYChinaBANK_TRANSFERCard To Card
🇮🇩 IDRIndonesiaBANK_TRANSFERCIMB Niaga, Permata
🇮🇩 IDRIndonesiaWALLETSDana, Indonesia Mobile Apps, Link-Aja,
🇮🇩 IDRIndonesiaQR_CODEscan QR code,OVO
🇮🇩 IDRIndonesiaVIRTUAL_ACCOUNTBank Transfer via Virtual Account, OVO
🇮🇳 INRIndiaBANK_TRANSFERNetbanking
🇮🇳 INRIndiaUPIQR, INTENT
🇯🇵 JPYJapanBANK_TRANSFERCurfex Japan
🇰🇷 KRWSouth KoreaVIRTUAL_ACCOUNTVirtual Account Payment Korea
🇰🇷 KRWSouth KoreaBANK_TRANSFEROnline Banking payment Korea Korea
🇲🇾 MYRMalaysiaBANK_TRANSFEROnline Bank transfer payment
🇲🇾 MYRMalaysiaQR_CODEBoost, DuitNow QR Pay, GrabPay, MY banking apps, ShopeePay, TouchNGo
🇲🇾 MYRMalaysiaFPXOnline Banking payment via FPX
🇲🇾 MYRMalaysiaDUITNOWOnline Banking payment via DUITNOW
🇵🇭 PHPPhilippinesWALLETSGCASH, MAYA, QRPH, Grabpay
🇵🇭 PHPPhilippinesBANK_TRANSFEROnline Bank transfer payment
🇸🇬 SGDSingaporeBANK_TRANSFERVarious Banks
🇹🇼 TWDTaiwanVIRTUAL_ACCOUNTVirtual Account Payment Taiwan
🇹🇭 THBThailandBANK_TRANSFEROnline Bank transfer payment
🇹🇭 THBThailandQR_CODEThai QR Payment
🇹🇭 THBThailandTRUEMONEYTruemoney
🇰🇭 USDCambodiaBANK_TRANSFEROnline Bank transfer payment
🇻🇳 VNDVietnamBANK_TRANSFEROnline Bank transfer payment
🇻🇳 VNDVietnamMOMOPAYMoMo
🇻🇳 VNDVietnamQR_CODEBank payment via QR code

AFRICA

CurrencyCountryMethod ParameterSolution
🇳🇬 NGNNigeriaBANK_TRANSFERBank Transfer,Opay
🇳🇬 NGNNigeriaMOBILE_MONEYCards,Bank Account, NIBSS-QR, eNaira, USSD
🇿🇦 ZARSouth AfricaBANK_TRANSFER1Voucher, Bank Transfer
🇿🇦 ZARSouth AfricaMOBILE_MONEYCards
🇰🇪 KESKenyaBANK_TRANSFERBank Transfer
🇰🇪 KESKenyaMOBILE_MONEYM-pesa
🇬🇭 GHSGhanaBANK_TRANSFERBank Transfer
🇬🇭 GHSGhanaMOBILE_MONEYCards
🇺🇬 UGXUgandaBANK_TRANSFERBank Transfer
🇺🇬 UGXUgandaMOBILE_MONEYCards
🇷🇼 RWFRwandaBANK_TRANSFERBank Transfer
🇷🇼 RWFRwandaMOBILE_MONEYCards
🇿🇲 ZMWZambiaBANK_TRANSFERBank Transfer
🇪🇬 EG EGPEgyptMOBILE_MONEYCards, Etisalat, Orange Money, Vodafone
🇪🇬 EG EGPEgyptBANK_TRANSFERInstapay, Telegram
🇪🇬 EG EGPEgyptCASHFawry Pay
🇪🇬 EG EGPEgyptMOBILE_MONEYCards
🇨🇲 CM XAFCameroonMOBILE_MONEYCards
🇹🇿 TZ TZSTanzaniaMOBILE_MONEYCards
🇨🇮 CI XOFCôte d'IvoireMOBILE_MONEYCards
🇲🇦 MA MADMoroccoMOBILE_MONEYCashPlus, Inwi Money, Jibi, MTCash, Orang Money
🇲🇦 MA MADMoroccoBANK_TRANSFERWire Transfer

LATAM

CurrencyCountryMethod ParameterSolution
🇦🇷 ARSArgentinaBANK_TRANSFER,CASHBank Transfer,Cash
🇧🇷 BRLBrazilPIX, BANK_TRANSFERPIX,BANK TRANSFER
🇨🇴 COPColombiaBANK_TRANSFER,CASHBank Transfer,Cash
🇨🇷 CRCCosta RicaBANK_TRANSFER,CASHBank Transfer,Cash
🇬🇹 GTQGuatemalaBANK_TRANSFER,CASHBank Transfer,Cash
🇲🇽 MXNMexicoBANK_TRANSFER,CASHBank Transfer,Cash
🇵🇪 PENPeruBANK_TRANSFER,CASHBank Transfer,Cash
🇪🇨 USDEcuadorBANK_TRANSFER,CASHBank Transfer,Cash
🇵🇦 USDPanamaBANK_TRANSFER,CASHBank Transfer,Cash
🇸🇻 USDEl SalvadorBANK_TRANSFER,CASHBank Transfer,Cash

OTHERS

CurrencyCountryMethod ParameterSolution
🇺🇸 USDTCryptoBEP20Binance Blockchain
🇺🇸 USDTCryptoERC20Ethereum Blockchain
🇺🇸 USDTCryptoTRC20Tron Blockchain
🇪🇺 EUREuropeOPEN_BANKINGOpen Banking
🇬🇧 UK GBPUKOPEN_BANKINGOpen Banking
🇨🇦 CA CADCANADABANK_TRANSFERInterac

Deposit Request Body & Response Sample

Request

Response

{
  "paymentUrl": "https://payment-url.com",
  "status": "PENDING",
  "message": "Transaction is being processed",
  "id": "e10a0ab0-fa57-40c8-9312-666369dff389",
  "orderId": "tr-d1111122327557544456647"
}

Payment Request Optional Data Field Table

Field NameData DescriptionTypeMinMaxExampleRequired
addressCustomer addressCH1Testshington Streetno
bankCodeCustomer bank codeCH1DBSno
cityCustomer cityCH1Cityno
lastNameCustomer last nameCH1Doeno
mobileNumberCustomer mobile numberCH15467756764no
nameCustomer first nameCH1Johnno
postalCodeCustomer postal codeCH1435645no
stateCustomer stateCH1STno

Payout Request Table

Field NameData DescriptionTypeMinMaxExampleRequired
accountBeneficiary AccountCH1abc123yes
amountfloat data typeNU3750000.00yes
currencyCurrency code. 4 lettersCH34PKRyes
callbackUrlUrl where payment callback will be sentURLhttps://send-here.comyes
countryISO 3166-1-alpha-2CH22PKyes
emailCustomer’s emailAN6120name@email.comyes
dataFor additional parameters for payoutOBJdata{
"name":"John Doe"
}
Please refer to the payout request payload section for the additional required parameters
midIdFor technical purposes. Must be provided.NU1187yes
orderIdMerchant Order IDAN150abc123456yes
ipCustomer’s IPIP123.13.43.23yes

Payout Request Optional Data Field Table

The payout request “data" field contains possible additional parameters, which are provider dependent. If the parameters are missing, the required values will be asked (via web form) from the customer.

Field NameData DescriptionTypeMinMaxExampleRequired
ifscBeneficiary ifsc numberCH1BSBN0001234yes(for INR only)
accountNameBeneficiary nameCH1Johny CashPlease refer to the payout request payload section if required
bankCodeBeneficiary bank codeCH1BSBN0001111Please refer to the payout request payload section if required
bankNameBeneficiary bankCH1BSBN BankPlease refer to the payout request payload section if required
bankBranchBeneficiary bank branchCH1BBPlease refer to the payout request payload section if required
bankAddressBeneficiary bank addressCH1BAPlease refer to the payout request payload section if required
bankCityBeneficiary bank cityCH1Bank AreaPlease refer to the payout request payload section if required
bankStateBeneficiary bank stateCH1Bank ProvincePlease refer to the payout request payload section if required
mobileBeneficiary mobile numberCH15467756764Please refer to the payout request payload section if required

Response Fields

DescriptionFormatExplanation
IdStringSystem Transaction ID
messageStringPayment response message
statusStringTransaction status
orderIdStringMerchant Order ID

Payout Statuses

TX TypeEventStatus
Received:TemporaryPENDING
Approved:FinalSUCCESS
Failed:FinalREJECTED, FAIL

Payout Postbacks

Each postback is a general HTTP POST request with a retry mechanism of maximum 5 attempts with a retry possibility every 3 minutes.

We only consume one unique orderId per merchant. After that, all transactions with the same ID will be rejected.

Payout Postback Table

TitleFormatExplanation
idStringSystem Transaction ID
orderIdStringMerchant Order ID
statusStringTransaction status
hashStringData signature for encryption

Payout Postback Sample

header name ‘apikey’, header value <merchant-apikey>

{
  "id": "912z-1zs4-acvb-1bre3",
  "orderId": "merchtx12345",
  "status": "SUCCESS",
  "hash": "<system-generated-hash>"
}

Data Signature of Payment & Payout

Encryption VariablesValues and Explanations
apikey<confidential>
Secret key<confidential> + additional symbols ('0') to make it length of 16
Encryption formatConcatenated and signed by using SHA-256 algorithm
Parameter orderThe order must be in exact order as per below sample
Parameter exampleRefer to the sample code in Java how to calculate the signature below.
Result stringWill be signed using SHA-256

How do you calculate signature for Payment/Payout request?

  • ONLY use the fields specified in docs.t365.io documentation for signature generation. Below you can find example code in Java how to calculate the signature.

Postman Headers

Status API

It is possible to get transaction status via the Status API:

FieldData Description
Payment Status Request URLhttps:///api/v2/external/payment/status
Payout Status Request URLhttps:///api/v2/external/payout/status
Data format:All data is sent and received in the JSON format.
Content-Type:application/json
Headers:‘apikey’:

Status API Request Fields

Provide id or orderId.

FieldDescription
idSystem Transaction ID
orderIdMerchant Order ID

Status API Response Fields

FieldDescription
statusPayment status
idSystem Transaction ID
orderIdMerchant Order ID
amountPayment amount
currencyPayment currency
createdAtPayment created date
paidAtPayment paid date

Balance API

Enquire the available MID balance by adding midId into the request path as a parameter.

Balance API information

FieldData Description
Balance Request URLhttps:///api/v1/external/balance/status/{midId}
Data format:All data is sent and received in the JSON format.
Content-Type:application/json
Headers:‘apikey’:

Balance API Request Fields

Merchant must provide midId.

FieldDescription
midIdMID ID

Balance API Response Fields

FieldDescription
balanceBalance of the MID

Balance API Response Sample

{
  "balance": "double"
}

Sandbox Response

Status Endpoint

API Endpoint:(/api/v5/external/payout/s2s)
Use “email" parameterResponse
rejected@test.comREJECTED
success@test.comSUCCESS
fail@test.comFAILED

Common API Errors

Deposit Transactions

Error MessagePossible Root CauseResolution
Unexpected error: Payment not supportedSetup should be checked with T365.Contact Merchant Support Team
"status":"REJECTED","message":"Transaction rejected by processor"Missing value or invalid data in parametersContact Merchant Support Team
ERROR: platform not settingSetup should be checked with T365.Contact Merchant Support Team
Unexpected error occurred: . Please contact support team.Missing value or invalid data in parametersContact Merchant Support Team
Technical error in bank's systemSetup should be checked with T365.Contact Merchant Support Team
ERROR: No MID with given ID foundMID setup should be checked to T365.Contact Merchant Support Team

Withdrawal Transactions

Error MessagePossible Root CauseResolution
ERROR: Insufficient Payout Balance. Please contact your account manager.Amount sent for payout transaction is greater than the current balance.Contact Merchant Support Team
Do payout through api error: Payout is disabled!Payout setup is disabled.Contact Merchant Support Team
Source of request not in IP whitelist.Merchant IP address is not whitelisted on the connection.Contact Merchant Support Team and provide Merchant IP address
ERROR: No MID with given ID foundMID setup should be checked to T365.Contact Merchant Support Team

API Integration Per Region

Latin America (LATAM)

This section provides sample request payload for several payment methods for Latin America region. The countries covered are the following:

  • Argentina
  • Brazil
  • Chile
  • Columbia
  • Costa Rica
  • Ecuador
  • El Salvador
  • Guatemala
  • Mexico
  • Panama
  • Peru

This section provides sample PAYOUT request payload Latin America (LATAM) region. The countries covered are the following:

  • Brazil

ASIA

This section provides sample request payload for several payment methods for Asia region. The countries covered are the following:

  • Philippines
  • Cambodia
  • South Korea
  • Indonesia
  • Vietnam
  • Thailand
  • Malaysia
  • India
  • Hong kong
  • China
  • Bangladesh
  • Singapore

This section provides sample PAYOUT request payload ASIA region. The countries covered are the following:

  • India
  • Vietnam
  • Indonesia
  • Malaysia
  • Thailand
  • Philippines
  • China
  • South Korea
  • Hong kong
  • Cambodia

AFRICA

This section provides sample request payload for several payment methods for South Africa region. The countries covered are the following:

  • Nigeria
  • South Africa
  • Tanzania
  • Kenya
  • Zambia
  • Ghana
  • Rwanda
  • Burkina
  • Senegal
  • Egypt
  • Morocco

This section provides sample PAYOUT request payload AFRICA region. The countries covered are the following:

  • Nigeria
  • South Africa
  • Ghana
  • Egypt
  • Morocco

OTHER Region

This section provides sample request payload for several payment methods for other regions. The countries covered are the following:

  • Canada
  • Europe

NOTE: Please refer to Annex 1 for the required parameters found under shopper attribute

Annex 1

NOTE: tax_id: 1.234.567.890

Countrytax_id_type
BRAZILBRA_CPF
BRA_CNPJ
CHILECHL_RUT
RUT
PERUDNI
COLOMBIACOL_PSP
COL_CDC
COL_CDE
COL_NIT
COL_RCN
COL_TI
COL_CC
COL_TE
COL_CE
COL_DIE
COL_ICE
ALL_Pasprt

Remarks: Person tax ID Type | String (Required only for Brazil, Chile and Colombia)

GET Bank Codes API

Instructions on how to Bank Lists using GET method on postman:

Sample URL: https://prod50.t365.io/api/v1/external/bank-codes/123/PHP/list

a. prod50 - <merchant’s prod number>
b. 123 - <merchant’s midID>
c. PHP - <merchant’s currency>


Step 1: Under Authorization tab, select Auth Type section to OAuth 2.0

Postman Headers

Step 2: Under Authorization tab, fill in details for the following fields under Configure New Token section:

Callback URL: - < webhook URL >
Client ID: - < to be provided >
Client Secret: - < to be provided >

Postman Headers

Step 3: Under Headers tab, fill in details for the following fields:

apikey: < to be provided >
Content-Type: application/json

Postman Headers