curl --request POST \
--url https://api.examplebank.com/meridian/v1/credits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"amount": {
"value": "1500.00",
"currency": "PHP"
},
"recipient": {
"account": {
"accountNumber": "001234567890"
},
"firstName": "Maria",
"lastName": "Santos"
},
"sender": {
"firstName": "Juan",
"lastName": "Cruz",
"dateOfBirth": "1990-01-15",
"address": {
"addressLines": [
"123 Test Street"
],
"city": "Taguig",
"stateProvince": "Metro Manila",
"postalCode": "1634",
"country": "PH"
}
},
"metadata": {
"reference": "R9x8k2m4p6w1c3v5b7n9q0z2"
}
}
'import requests
url = "https://api.examplebank.com/meridian/v1/credits"
payload = {
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"amount": {
"value": "1500.00",
"currency": "PHP"
},
"recipient": {
"account": { "accountNumber": "001234567890" },
"firstName": "Maria",
"lastName": "Santos"
},
"sender": {
"firstName": "Juan",
"lastName": "Cruz",
"dateOfBirth": "1990-01-15",
"address": {
"addressLines": ["123 Test Street"],
"city": "Taguig",
"stateProvince": "Metro Manila",
"postalCode": "1634",
"country": "PH"
}
},
"metadata": { "reference": "R9x8k2m4p6w1c3v5b7n9q0z2" }
}
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({
transactionId: 'mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27',
amount: {value: '1500.00', currency: 'PHP'},
recipient: {
account: {accountNumber: '001234567890'},
firstName: 'Maria',
lastName: 'Santos'
},
sender: {
firstName: 'Juan',
lastName: 'Cruz',
dateOfBirth: '1990-01-15',
address: {
addressLines: ['123 Test Street'],
city: 'Taguig',
stateProvince: 'Metro Manila',
postalCode: '1634',
country: 'PH'
}
},
metadata: {reference: 'R9x8k2m4p6w1c3v5b7n9q0z2'}
})
};
fetch('https://api.examplebank.com/meridian/v1/credits', 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.examplebank.com/meridian/v1/credits",
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' => 'mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27',
'amount' => [
'value' => '1500.00',
'currency' => 'PHP'
],
'recipient' => [
'account' => [
'accountNumber' => '001234567890'
],
'firstName' => 'Maria',
'lastName' => 'Santos'
],
'sender' => [
'firstName' => 'Juan',
'lastName' => 'Cruz',
'dateOfBirth' => '1990-01-15',
'address' => [
'addressLines' => [
'123 Test Street'
],
'city' => 'Taguig',
'stateProvince' => 'Metro Manila',
'postalCode' => '1634',
'country' => 'PH'
]
],
'metadata' => [
'reference' => 'R9x8k2m4p6w1c3v5b7n9q0z2'
]
]),
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 := "https://api.examplebank.com/meridian/v1/credits"
payload := strings.NewReader("{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\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("https://api.examplebank.com/meridian/v1/credits")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.examplebank.com/meridian/v1/credits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"status": "RECEIVED"
}{
"errorCode": "VALIDATION_ERROR",
"errorMessage": "amount.value must be a decimal string with at most 2 decimal places."
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}Create a credit
Register a credit instruction with the bank ahead of validation and execution.
curl --request POST \
--url https://api.examplebank.com/meridian/v1/credits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"amount": {
"value": "1500.00",
"currency": "PHP"
},
"recipient": {
"account": {
"accountNumber": "001234567890"
},
"firstName": "Maria",
"lastName": "Santos"
},
"sender": {
"firstName": "Juan",
"lastName": "Cruz",
"dateOfBirth": "1990-01-15",
"address": {
"addressLines": [
"123 Test Street"
],
"city": "Taguig",
"stateProvince": "Metro Manila",
"postalCode": "1634",
"country": "PH"
}
},
"metadata": {
"reference": "R9x8k2m4p6w1c3v5b7n9q0z2"
}
}
'import requests
url = "https://api.examplebank.com/meridian/v1/credits"
payload = {
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"amount": {
"value": "1500.00",
"currency": "PHP"
},
"recipient": {
"account": { "accountNumber": "001234567890" },
"firstName": "Maria",
"lastName": "Santos"
},
"sender": {
"firstName": "Juan",
"lastName": "Cruz",
"dateOfBirth": "1990-01-15",
"address": {
"addressLines": ["123 Test Street"],
"city": "Taguig",
"stateProvince": "Metro Manila",
"postalCode": "1634",
"country": "PH"
}
},
"metadata": { "reference": "R9x8k2m4p6w1c3v5b7n9q0z2" }
}
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({
transactionId: 'mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27',
amount: {value: '1500.00', currency: 'PHP'},
recipient: {
account: {accountNumber: '001234567890'},
firstName: 'Maria',
lastName: 'Santos'
},
sender: {
firstName: 'Juan',
lastName: 'Cruz',
dateOfBirth: '1990-01-15',
address: {
addressLines: ['123 Test Street'],
city: 'Taguig',
stateProvince: 'Metro Manila',
postalCode: '1634',
country: 'PH'
}
},
metadata: {reference: 'R9x8k2m4p6w1c3v5b7n9q0z2'}
})
};
fetch('https://api.examplebank.com/meridian/v1/credits', 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.examplebank.com/meridian/v1/credits",
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' => 'mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27',
'amount' => [
'value' => '1500.00',
'currency' => 'PHP'
],
'recipient' => [
'account' => [
'accountNumber' => '001234567890'
],
'firstName' => 'Maria',
'lastName' => 'Santos'
],
'sender' => [
'firstName' => 'Juan',
'lastName' => 'Cruz',
'dateOfBirth' => '1990-01-15',
'address' => [
'addressLines' => [
'123 Test Street'
],
'city' => 'Taguig',
'stateProvince' => 'Metro Manila',
'postalCode' => '1634',
'country' => 'PH'
]
],
'metadata' => [
'reference' => 'R9x8k2m4p6w1c3v5b7n9q0z2'
]
]),
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 := "https://api.examplebank.com/meridian/v1/credits"
payload := strings.NewReader("{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\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("https://api.examplebank.com/meridian/v1/credits")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.examplebank.com/meridian/v1/credits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"transactionId\": \"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27\",\n \"amount\": {\n \"value\": \"1500.00\",\n \"currency\": \"PHP\"\n },\n \"recipient\": {\n \"account\": {\n \"accountNumber\": \"001234567890\"\n },\n \"firstName\": \"Maria\",\n \"lastName\": \"Santos\"\n },\n \"sender\": {\n \"firstName\": \"Juan\",\n \"lastName\": \"Cruz\",\n \"dateOfBirth\": \"1990-01-15\",\n \"address\": {\n \"addressLines\": [\n \"123 Test Street\"\n ],\n \"city\": \"Taguig\",\n \"stateProvince\": \"Metro Manila\",\n \"postalCode\": \"1634\",\n \"country\": \"PH\"\n }\n },\n \"metadata\": {\n \"reference\": \"R9x8k2m4p6w1c3v5b7n9q0z2\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transactionId": "mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27",
"status": "RECEIVED"
}{
"errorCode": "VALIDATION_ERROR",
"errorMessage": "amount.value must be a decimal string with at most 2 decimal places."
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}{
"errorCode": "<string>",
"errorMessage": "<string>"
}Authorizations
Assume OAuth 2.0 client credentials issued by the bank, presented as a bearer token. Meridian can adapt to the bank's preferred authentication scheme during onboarding.
Body
A credit (payout) instruction from Meridian to the bank.
Meridian's unique identifier for this credit and the idempotency key. Stable across retries and across the validate/commit/status lifecycle of one transaction.
64"mrdn-9f2c1e4a-71bd-4c5e-a2f3-8d6b0c9e1a27"
Show child attributes
Show child attributes
The customer being credited at the home bank.
Show child attributes
Show child attributes
Originator of the funds (KYC data). Included on commit for compliance screening. Field-level availability is confirmed during onboarding, and some corridors add further compliance fields (for example the sender's relationship to the recipient, or source of income) that Meridian agrees with the bank at that time.
Show child attributes
Show child attributes
Human-readable purpose / remittance information for the transfer.
140"Wallet withdrawal payout"
Additional key/value context supplied by Meridian (e.g. a customer-facing reference to print on statements). Banks should persist and echo these where their core allows, but must not require fields beyond those agreed at onboarding.
Show child attributes
Show child attributes
Response
Instruction registered (or already registered with an identical payload).
Acknowledgement that the instruction was registered. No recipient checks have run and no
funds have moved, so the only status this endpoint reports is RECEIVED.