Skip to main content
POST
/
api
/
transactions
Create a transaction
curl --request POST \
  --url http://localhost/api/api/transactions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "transaction_currency_id": "<string>",
  "client_transaction_id": "<string>",
  "transaction_type": "<string>",
  "transaction_timestamp": "2023-11-07T05:31:56Z",
  "amount": 123,
  "populate_buckets": [],
  "cp_a_id": "<string>",
  "cp_b_id": "<string>",
  "alt_currency_id": "<string>",
  "cp_a_country": "<string>",
  "cp_b_country": "<string>",
  "cp_a_bank": "<string>",
  "cp_b_bank": "<string>",
  "amount_in_alt_currency": 123,
  "payment_mode": "<string>",
  "purpose_of_transfer": "<string>",
  "notes": "<string>"
}
'
import requests

url = "http://localhost/api/api/transactions"

payload = {
"transaction_currency_id": "<string>",
"client_transaction_id": "<string>",
"transaction_type": "<string>",
"transaction_timestamp": "2023-11-07T05:31:56Z",
"amount": 123,
"populate_buckets": [],
"cp_a_id": "<string>",
"cp_b_id": "<string>",
"alt_currency_id": "<string>",
"cp_a_country": "<string>",
"cp_b_country": "<string>",
"cp_a_bank": "<string>",
"cp_b_bank": "<string>",
"amount_in_alt_currency": 123,
"payment_mode": "<string>",
"purpose_of_transfer": "<string>",
"notes": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
transaction_currency_id: '<string>',
client_transaction_id: '<string>',
transaction_type: '<string>',
transaction_timestamp: '2023-11-07T05:31:56Z',
amount: 123,
populate_buckets: [],
cp_a_id: '<string>',
cp_b_id: '<string>',
alt_currency_id: '<string>',
cp_a_country: '<string>',
cp_b_country: '<string>',
cp_a_bank: '<string>',
cp_b_bank: '<string>',
amount_in_alt_currency: 123,
payment_mode: '<string>',
purpose_of_transfer: '<string>',
notes: '<string>'
})
};

fetch('http://localhost/api/api/transactions', 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 => "http://localhost/api/api/transactions",
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([
'transaction_currency_id' => '<string>',
'client_transaction_id' => '<string>',
'transaction_type' => '<string>',
'transaction_timestamp' => '2023-11-07T05:31:56Z',
'amount' => 123,
'populate_buckets' => [

],
'cp_a_id' => '<string>',
'cp_b_id' => '<string>',
'alt_currency_id' => '<string>',
'cp_a_country' => '<string>',
'cp_b_country' => '<string>',
'cp_a_bank' => '<string>',
'cp_b_bank' => '<string>',
'amount_in_alt_currency' => 123,
'payment_mode' => '<string>',
'purpose_of_transfer' => '<string>',
'notes' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$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 := "http://localhost/api/api/transactions"

payload := strings.NewReader("{\n \"transaction_currency_id\": \"<string>\",\n \"client_transaction_id\": \"<string>\",\n \"transaction_type\": \"<string>\",\n \"transaction_timestamp\": \"2023-11-07T05:31:56Z\",\n \"amount\": 123,\n \"populate_buckets\": [],\n \"cp_a_id\": \"<string>\",\n \"cp_b_id\": \"<string>\",\n \"alt_currency_id\": \"<string>\",\n \"cp_a_country\": \"<string>\",\n \"cp_b_country\": \"<string>\",\n \"cp_a_bank\": \"<string>\",\n \"cp_b_bank\": \"<string>\",\n \"amount_in_alt_currency\": 123,\n \"payment_mode\": \"<string>\",\n \"purpose_of_transfer\": \"<string>\",\n \"notes\": \"<string>\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
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("http://localhost/api/api/transactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"transaction_currency_id\": \"<string>\",\n \"client_transaction_id\": \"<string>\",\n \"transaction_type\": \"<string>\",\n \"transaction_timestamp\": \"2023-11-07T05:31:56Z\",\n \"amount\": 123,\n \"populate_buckets\": [],\n \"cp_a_id\": \"<string>\",\n \"cp_b_id\": \"<string>\",\n \"alt_currency_id\": \"<string>\",\n \"cp_a_country\": \"<string>\",\n \"cp_b_country\": \"<string>\",\n \"cp_a_bank\": \"<string>\",\n \"cp_b_bank\": \"<string>\",\n \"amount_in_alt_currency\": 123,\n \"payment_mode\": \"<string>\",\n \"purpose_of_transfer\": \"<string>\",\n \"notes\": \"<string>\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("http://localhost/api/api/transactions")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"transaction_currency_id\": \"<string>\",\n \"client_transaction_id\": \"<string>\",\n \"transaction_type\": \"<string>\",\n \"transaction_timestamp\": \"2023-11-07T05:31:56Z\",\n \"amount\": 123,\n \"populate_buckets\": [],\n \"cp_a_id\": \"<string>\",\n \"cp_b_id\": \"<string>\",\n \"alt_currency_id\": \"<string>\",\n \"cp_a_country\": \"<string>\",\n \"cp_b_country\": \"<string>\",\n \"cp_a_bank\": \"<string>\",\n \"cp_b_bank\": \"<string>\",\n \"amount_in_alt_currency\": 123,\n \"payment_mode\": \"<string>\",\n \"purpose_of_transfer\": \"<string>\",\n \"notes\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": 123,
  "bucket_loading_status": "Transaction loaded into [ORDINARY] and requested buckets",
  "cp_a": {
    "client_subject_id": "<string>",
    "subject_name": "<string>",
    "unique_identification_number": "<string>",
    "account_holder": true,
    "address": "<string>",
    "customer_segment": "<string>",
    "date_and_place_of_birth": "<string>",
    "country_of_birth_or_incorporation": "<string>",
    "nationality": "<string>",
    "account_type": "<string>",
    "account_type_ii": "<string>",
    "account_opening_date": "<string>",
    "account_opening_date_ii": "<string>",
    "customer_aml_risk_rating": "<string>",
    "customer_account": "<string>",
    "customer_account_ii": "<string>",
    "customer_opening_date": "<string>",
    "source_of_funds": "<string>",
    "average_monthly_income": "<string>",
    "cif_status": "<string>",
    "occupation": "<string>",
    "industry": "<string>",
    "purpose_of_account": "<string>",
    "contact_number": "<string>",
    "email_address": "<string>",
    "risk_assessment_score": "<string>",
    "created_by": 123,
    "modified_by": 123
  },
  "cp_b": {
    "client_subject_id": "<string>",
    "subject_name": "<string>",
    "unique_identification_number": "<string>",
    "account_holder": true,
    "address": "<string>",
    "customer_segment": "<string>",
    "date_and_place_of_birth": "<string>",
    "country_of_birth_or_incorporation": "<string>",
    "nationality": "<string>",
    "account_type": "<string>",
    "account_type_ii": "<string>",
    "account_opening_date": "<string>",
    "account_opening_date_ii": "<string>",
    "customer_aml_risk_rating": "<string>",
    "customer_account": "<string>",
    "customer_account_ii": "<string>",
    "customer_opening_date": "<string>",
    "source_of_funds": "<string>",
    "average_monthly_income": "<string>",
    "cif_status": "<string>",
    "occupation": "<string>",
    "industry": "<string>",
    "purpose_of_account": "<string>",
    "contact_number": "<string>",
    "email_address": "<string>",
    "risk_assessment_score": "<string>",
    "created_by": 123,
    "modified_by": 123
  },
  "transaction_currency": {
    "currency": "<string>",
    "alphabetic_code": "<string>",
    "active_indicator": true,
    "numeric_code": "<string>"
  },
  "alt_currency": {
    "currency": "<string>",
    "alphabetic_code": "<string>",
    "active_indicator": true,
    "numeric_code": "<string>"
  },
  "modified_by": {
    "id": 123
  },
  "created_by": {
    "id": 123
  },
  "client_transaction_id": "<string>",
  "transaction_type": "<string>",
  "transaction_timestamp": "2023-11-07T05:31:56Z",
  "amount": 123,
  "cp_a_country": "<string>",
  "cp_b_country": "<string>",
  "cp_a_bank": "<string>",
  "cp_b_bank": "<string>",
  "amount_in_alt_currency": 123,
  "payment_mode": "<string>",
  "purpose_of_transfer": "<string>",
  "notes": "<string>"
}
To upload your transactions into Athena, perform the following API call with the given sample request bodies. Transaction type must conform to one of the following types
  • PAY
  • WITHDRAW
  • DEPOSIT
Requirements before posting a transaction
  • cp_a_id and cp_b_id needs to be one of the Subjects enrolled via the Subjects API.
  • If transaction_type is PAY, both cp_a_id and cp_b_id must be present.
  • If transaction_type is DEPOSIT, at least cp_b_id must be present.
  • If transaction_type is WITHDRAW, at least cp_a_id needs to be present.
  • transaction_currency_id must be the currency set as the master currency..
  • cp_a_country and cp_b_country, where provided, must be a valid three letter country code.
  • transaction_timestamp cannot be dated in the future.
  • If provided, the “populate_buckets” field must contain a list of bucket names, all of which are available at the time of transaction upload. Otherwise, the record will be rejected and not provided to Athena.
transaction_timestamp must conform to one of the following time formats
  • 2020-08-20T13:31:02.777 (YYYY-MM-DDTHH:MM:SS.SSS)
  • 2020-08-20T13:31:02 (YYYY-MM-DDTHH:MM:SS)
  • 2020-08-20T13:31 (YYYY-MM-DDTHH:MM)
Sample Request Body (Mandatory Fields):
{
	"transaction_currency_id":"SGD"
	"client_transaction_id":"SAMPLE-TXN-001",
	"transaction_type":"PAY",
	"cp_a_id":"AS0001Y"
	"cp_b_id":"AS0002Y"
	"transaction_timestamp":"2020-12-12T12:12:12"
	"amount":"5000.00"
}
Sample Request (All Fields):
{
     "client_transaction_id":"ID10001",
     "transaction_type":"PAY",
     "cp_a_id":"AS001Y",
     "cp_a_country": "SGP",
     "cp_a_bank": "DBS Bank Pte. Ltd",
     "cp_b_id":"AS002Y",
     "cp_b_country": "SGP",
     "cp_b_bank": "DBS Bank Pte. Ltd",
     "transaction_timestamp":"2020-08-20T13:31",
     "transaction_currency_id":"SGD",
     "amount":123456.78,
     "alt_currency_id":"IDR",
     "amount_in_alt_currency":"500000",
     "payment_mode":"PayLah",
     “purpose_of_transfer”: “Purchase of goods”,
     "populate_buckets":["BucketName1","sampleBucket","anotherBucketName"]
}
Note: For cp_a_country and cp_b_country, it must be a valid three letter country code. Please refer to the link below. ISO 3166 - 3 Digit Code and Full Country Spelling

Authorizations

Authorization
string
header
required

JWT token obtained from AWS Cognito or custom authentication service

Body

A ModelSerializer that takes an additional fields argument that controls which fields should be displayed.

transaction_currency_id
string
required
write-only
Minimum string length: 1
client_transaction_id
string
required
Required string length: 1 - 255
transaction_type
string
required
Required string length: 1 - 255
transaction_timestamp
string<date-time>
required
amount
number<double>
required
populate_buckets
string[]
write-only
Minimum string length: 1
cp_a_id
string
write-only
Minimum string length: 1
cp_b_id
string
write-only
Minimum string length: 1
alt_currency_id
string
write-only
Minimum string length: 1
cp_a_country
string
Maximum string length: 60
cp_b_country
string
Maximum string length: 60
cp_a_bank
string
Maximum string length: 255
cp_b_bank
string
Maximum string length: 255
amount_in_alt_currency
number<double> | null
payment_mode
string
Maximum string length: 255
purpose_of_transfer
string
Maximum string length: 255
notes
string
Maximum string length: 255

Response

201 - application/json

A ModelSerializer that takes an additional fields argument that controls which fields should be displayed.

id
integer
required
read-only
bucket_loading_status
string
default:Transaction loaded into [ORDINARY] and requested buckets
required
read-only
cp_a
object
required
cp_b
object
required
transaction_currency
object
required
alt_currency
object
required
modified_by
object
required
created_by
object
required
client_transaction_id
string
required
Maximum string length: 255
transaction_type
string
required
Maximum string length: 255
transaction_timestamp
string<date-time>
required
amount
number<double>
required
cp_a_country
string
Maximum string length: 60
cp_b_country
string
Maximum string length: 60
cp_a_bank
string
Maximum string length: 255
cp_b_bank
string
Maximum string length: 255
amount_in_alt_currency
number<double> | null
payment_mode
string
Maximum string length: 255
purpose_of_transfer
string
Maximum string length: 255
notes
string
Maximum string length: 255