Tx Authorization
curl --request POST \
--url https://api.example.com/client-interfaces/pmo/tx-authorization \
--header 'Content-Type: application/json' \
--header 'User-Agent: <user-agent>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"TransactionId": "<string>",
"SenderPersonalData": {
"FirstName": "<string>",
"LastName": "<string>",
"Gender": "<string>",
"Address": {
"Address1": "<string>",
"ZipCode": "<string>",
"City": "<string>",
"CountryCode": "<string>",
"StateCode": "<string>",
"Address2": "<string>"
},
"PhoneNumber": "<string>",
"Email": "<string>",
"MiddleName": "<string>",
"LastName2": "<string>",
"BirthDate": "<string>"
},
"ReceiverPersonalData": {
"FirstName": "<string>",
"LastName": "<string>",
"Gender": "<string>",
"Address": {
"CountryCode": "<string>",
"StateCode": "<string>",
"Address1": "<string>",
"Address2": "<string>",
"ZipCode": "<string>",
"City": "<string>"
},
"PhoneNumber": "<string>",
"Email": "<string>",
"MiddleName": "<string>",
"LastName2": "<string>",
"BirthDate": "<string>"
},
"Amount": 123,
"Currency": "<string>",
"ExchangeRate": 123,
"AccountIdentifier": "<string>",
"TrackingNumber": "<string>"
}
'import requests
url = "https://api.example.com/client-interfaces/pmo/tx-authorization"
payload = {
"TransactionId": "<string>",
"SenderPersonalData": {
"FirstName": "<string>",
"LastName": "<string>",
"Gender": "<string>",
"Address": {
"Address1": "<string>",
"ZipCode": "<string>",
"City": "<string>",
"CountryCode": "<string>",
"StateCode": "<string>",
"Address2": "<string>"
},
"PhoneNumber": "<string>",
"Email": "<string>",
"MiddleName": "<string>",
"LastName2": "<string>",
"BirthDate": "<string>"
},
"ReceiverPersonalData": {
"FirstName": "<string>",
"LastName": "<string>",
"Gender": "<string>",
"Address": {
"CountryCode": "<string>",
"StateCode": "<string>",
"Address1": "<string>",
"Address2": "<string>",
"ZipCode": "<string>",
"City": "<string>"
},
"PhoneNumber": "<string>",
"Email": "<string>",
"MiddleName": "<string>",
"LastName2": "<string>",
"BirthDate": "<string>"
},
"Amount": 123,
"Currency": "<string>",
"ExchangeRate": 123,
"AccountIdentifier": "<string>",
"TrackingNumber": "<string>"
}
headers = {
"X-Timestamp": "<x-timestamp>",
"X-Signature": "<x-signature>",
"User-Agent": "<user-agent>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Timestamp': '<x-timestamp>',
'X-Signature': '<x-signature>',
'User-Agent': '<user-agent>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
TransactionId: '<string>',
SenderPersonalData: {
FirstName: '<string>',
LastName: '<string>',
Gender: '<string>',
Address: {
Address1: '<string>',
ZipCode: '<string>',
City: '<string>',
CountryCode: '<string>',
StateCode: '<string>',
Address2: '<string>'
},
PhoneNumber: '<string>',
Email: '<string>',
MiddleName: '<string>',
LastName2: '<string>',
BirthDate: '<string>'
},
ReceiverPersonalData: {
FirstName: '<string>',
LastName: '<string>',
Gender: '<string>',
Address: {
CountryCode: '<string>',
StateCode: '<string>',
Address1: '<string>',
Address2: '<string>',
ZipCode: '<string>',
City: '<string>'
},
PhoneNumber: '<string>',
Email: '<string>',
MiddleName: '<string>',
LastName2: '<string>',
BirthDate: '<string>'
},
Amount: 123,
Currency: '<string>',
ExchangeRate: 123,
AccountIdentifier: '<string>',
TrackingNumber: '<string>'
})
};
fetch('https://api.example.com/client-interfaces/pmo/tx-authorization', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/client-interfaces/pmo/tx-authorization",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'TransactionId' => '<string>',
'SenderPersonalData' => [
'FirstName' => '<string>',
'LastName' => '<string>',
'Gender' => '<string>',
'Address' => [
'Address1' => '<string>',
'ZipCode' => '<string>',
'City' => '<string>',
'CountryCode' => '<string>',
'StateCode' => '<string>',
'Address2' => '<string>'
],
'PhoneNumber' => '<string>',
'Email' => '<string>',
'MiddleName' => '<string>',
'LastName2' => '<string>',
'BirthDate' => '<string>'
],
'ReceiverPersonalData' => [
'FirstName' => '<string>',
'LastName' => '<string>',
'Gender' => '<string>',
'Address' => [
'CountryCode' => '<string>',
'StateCode' => '<string>',
'Address1' => '<string>',
'Address2' => '<string>',
'ZipCode' => '<string>',
'City' => '<string>'
],
'PhoneNumber' => '<string>',
'Email' => '<string>',
'MiddleName' => '<string>',
'LastName2' => '<string>',
'BirthDate' => '<string>'
],
'Amount' => 123,
'Currency' => '<string>',
'ExchangeRate' => 123,
'AccountIdentifier' => '<string>',
'TrackingNumber' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"User-Agent: <user-agent>",
"X-Signature: <x-signature>",
"X-Timestamp: <x-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/client-interfaces/pmo/tx-authorization"
payload := strings.NewReader("{\n \"TransactionId\": \"<string>\",\n \"SenderPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"Address1\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\",\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address2\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"ReceiverPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address1\": \"<string>\",\n \"Address2\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"Amount\": 123,\n \"Currency\": \"<string>\",\n \"ExchangeRate\": 123,\n \"AccountIdentifier\": \"<string>\",\n \"TrackingNumber\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Timestamp", "<x-timestamp>")
req.Header.Add("X-Signature", "<x-signature>")
req.Header.Add("User-Agent", "<user-agent>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/client-interfaces/pmo/tx-authorization")
.header("X-Timestamp", "<x-timestamp>")
.header("X-Signature", "<x-signature>")
.header("User-Agent", "<user-agent>")
.header("Content-Type", "application/json")
.body("{\n \"TransactionId\": \"<string>\",\n \"SenderPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"Address1\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\",\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address2\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"ReceiverPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address1\": \"<string>\",\n \"Address2\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"Amount\": 123,\n \"Currency\": \"<string>\",\n \"ExchangeRate\": 123,\n \"AccountIdentifier\": \"<string>\",\n \"TrackingNumber\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/client-interfaces/pmo/tx-authorization")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Timestamp"] = '<x-timestamp>'
request["X-Signature"] = '<x-signature>'
request["User-Agent"] = '<user-agent>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"TransactionId\": \"<string>\",\n \"SenderPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"Address1\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\",\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address2\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"ReceiverPersonalData\": {\n \"FirstName\": \"<string>\",\n \"LastName\": \"<string>\",\n \"Gender\": \"<string>\",\n \"Address\": {\n \"CountryCode\": \"<string>\",\n \"StateCode\": \"<string>\",\n \"Address1\": \"<string>\",\n \"Address2\": \"<string>\",\n \"ZipCode\": \"<string>\",\n \"City\": \"<string>\"\n },\n \"PhoneNumber\": \"<string>\",\n \"Email\": \"<string>\",\n \"MiddleName\": \"<string>\",\n \"LastName2\": \"<string>\",\n \"BirthDate\": \"<string>\"\n },\n \"Amount\": 123,\n \"Currency\": \"<string>\",\n \"ExchangeRate\": 123,\n \"AccountIdentifier\": \"<string>\",\n \"TrackingNumber\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"Authorized": true,
"TrackingIdentifier": "<string>",
"AccountIdentifier": "<string>",
"DisplayName": "<string>",
"NonAuthorizedReason": "None"
}POST request to:
[Base-URL]/TxAuthorization.
[Base-URL]; the resource segment /TxAuthorization, the POST method and the JSON body are fixed by this contract and are case-sensitive.Every request travels signed. It carries the X-Timestamp and X-Signature headers with the HMAC-SHA256 signature of the raw body. The Partner must validate the signature before processing the request.TrackingIdentifier) or denied for a specific reason in NonAuthorizedReason.Headers
UTC timestamp in ISO-8601 format with milliseconds (yyyy-MM-ddTHH:mm:ss.fffZ), generated at send time. Its exact string value is part of the signed message, so it cannot be altered, and it lets the Partner reject stale requests (replay protection). See Data Integrity.
HMAC-SHA256 signature of the request, Base64-encoded (standard alphabet). It is computed over bytes(X-Timestamp) + bytes(".") + rawBodyBytes using the shared secret agreed for the integration. The Partner MUST validate it — with a constant-time comparison and over the raw body, before any deserialization — and reject the request if it does not match. See Data Integrity.
Fixed value VNA. Sent on every request. Some Partners' WAFs reject requests without a User-Agent, so the Platform always sets it explicitly; if the Partner filters by this header, this is the value to allow.
Body
Unique identifier of the request, used as an idempotency key. It is derived deterministically from the operation, the Partner and the action, so a retry of the same action arrives with the same value: the Partner MUST process it only once and return the original outcome on repeats.
Personal Data of the sender of the transaction. For this role the address is always complete: Address1, City and ZipCode are guaranteed to be present in addition to CountryCode and StateCode.
Show child attributes
Show child attributes
Personal Data of the Person where the funds of the transaction are destined. For this role at least one of PhoneNumber or Email is present, but the address may be partial: only CountryCode and StateCode are guaranteed — Address1, City and ZipCode may be absent.
Show child attributes
Show child attributes
Amount of the transaction, with TWO decimals.
Currency of the transaction, per ISO 4217. String of 3 chars.
Exchange rate applied to the transaction.
An Id representing the External Account Object for the Partner. This field will be Null if Leap Financial does not have an External Account Object already associated.
Optional tracking number for the transaction, sent only when configured for the Partner.
Response
Ok
True if the Transaction is Authorized / False if it is not Authorized.
Identifier assigned by the Partner to this authorization. The Platform stores it and sends it back in the AuthTrackingIdentifier field of Credit Funds so the Partner can tie the credit to the authorization that preceded it.
The Id representing the External Account Object for the Partner that was referenced in the request. Null or empty if the Account is not found in the Partner systems. If Null or empty, Authorized will be ignored.
A String with the displayName for the Account, to be presented to the end-user. Max 10 characters, only these chars -> [-_a-zA-Z0-9]. If Null, empty or invalid, it will be Partner Prefix (configured in backend) + last four Account numbers (e.g. PRTN-0141).
If the Transaction is not Authorized, the reason should be sent, otherwise not sent. The text must be one of the fixed possible values.
None— no reason; the transaction was not denied for any of the reasons belowAccountBlocked— the transaction has been denied because the external account object is blockedAccountBlockedByLaw— the transaction has been denied because the external account object is blocked by legal reasons (e.g. litigation)AccountBlockedByGovernment— the transaction has been denied because the external account object is blocked due to government mandated reasons (e.g. fiscal)ByVelocity— the transaction has been denied because the external account object has reached the velocity limit defined in the Partner, this is, the amount of transactions in a specific lapse of time allowed by the partnerByAmountLimit— the transaction has been denied because the external account object has reached the transaction amount limit defined in the Partner systemByAccumulateAmountLimit— the transaction has been denied because the external account object has reached the accumulated amount limit defined in the Partner systemInvalidAccount— the transaction has been denied because the account referenced is invalidInvalidParameter— the transaction has been denied because a parameter of the request is invalidInvalidCurrency— the transaction has been denied because the currency of the request is invalidInvalidSenderData— the transaction has been denied because the sender's personal data is invalidInvalidDestinationData— the transaction has been denied because the receiver's personal data is invalidInvalidExchangeRate— the transaction has been denied because the exchange rate provided is invalidInvalidAmount— the transaction has been denied because the amount is invalidNonMatchingCurrencyAccount— the transaction has been denied because the currency does not match the account's currency
None, AccountBlocked, AccountBlockedByLaw, AccountBlockedByGovernment, ByVelocity, ByAmountLimit, ByAccumulateAmountLimit, InvalidAccount, InvalidParameter, InvalidCurrency, InvalidSenderData, InvalidDestinationData, InvalidExchangeRate, NonMatchingCurrencyAccount, InvalidAmount