curl --request GET \
--url https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}', 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://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "txn_01JMERCRYPTOACH01",
"type": "DEPOSIT",
"createdAt": "2026-04-30T15:00:00Z",
"updatedAt": "2026-04-30T15:02:00Z",
"completedAt": "2026-04-30T15:05:00Z",
"status": "COMPLETED",
"statusReason": null,
"externalId": null,
"depositReconciliationId": null,
"referenceNumber": "dep-20260430-1001",
"relatedTransactionId": null,
"debitAmount": "7250.00",
"netDebitAmount": "7250.00",
"debitCurrency": "USD",
"debitParty": {
"partyType": "PAYER",
"payer": {
"displayName": "Northwind Realty LLC",
"accountNumber": "****1098",
"institutionName": "Northwind Bank",
"bankCode": "021000021"
}
},
"debitRail": "US.USD.ACH",
"debitMemo": "INV-23014",
"debitEntryDescriptor": "PAYROLL",
"debitInstrument": null,
"creditAmount": "7250.00",
"creditCurrency": "USD",
"creditParty": null,
"creditRail": null,
"creditInstrument": {
"instrumentType": "ACCOUNT",
"account": {
"id": "acc_01JMERUSDCRYPTO01",
"displayName": "US crypto funding account",
"currency": "USD"
}
},
"fees": [],
"exchangeRate": "1",
"tags": []
}Get Transaction by ID
Returns the transaction details for the authenticated Meridian account.
curl --request GET \
--url https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}', 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://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.va.meridianpay.com/v1/transactions/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "txn_01JMERCRYPTOACH01",
"type": "DEPOSIT",
"createdAt": "2026-04-30T15:00:00Z",
"updatedAt": "2026-04-30T15:02:00Z",
"completedAt": "2026-04-30T15:05:00Z",
"status": "COMPLETED",
"statusReason": null,
"externalId": null,
"depositReconciliationId": null,
"referenceNumber": "dep-20260430-1001",
"relatedTransactionId": null,
"debitAmount": "7250.00",
"netDebitAmount": "7250.00",
"debitCurrency": "USD",
"debitParty": {
"partyType": "PAYER",
"payer": {
"displayName": "Northwind Realty LLC",
"accountNumber": "****1098",
"institutionName": "Northwind Bank",
"bankCode": "021000021"
}
},
"debitRail": "US.USD.ACH",
"debitMemo": "INV-23014",
"debitEntryDescriptor": "PAYROLL",
"debitInstrument": null,
"creditAmount": "7250.00",
"creditCurrency": "USD",
"creditParty": null,
"creditRail": null,
"creditInstrument": {
"instrumentType": "ACCOUNT",
"account": {
"id": "acc_01JMERUSDCRYPTO01",
"displayName": "US crypto funding account",
"currency": "USD"
}
},
"fees": [],
"exchangeRate": "1",
"tags": []
}Authorizations
Bearer token authentication, for client-server calls.
Send the access token issued by POST /v1/auth/token as Authorization: Bearer {token}. The token carries its own program and user context, so the X-Meridian-* headers are not required. See Authentication.
Headers
Server-to-server (HMAC) requests only. Partner API key issued by Meridian during provisioning.
Server-to-server (HMAC) requests only. Current time in milliseconds since the Unix epoch. Must be within 60 seconds of the request.
Server-to-server (HMAC) requests only. Identifies the program context for the request.
Server-to-server (HMAC) requests only. Identifies the Meridian user targeted by the request. Required for MULTI_USER integrations; omit for SINGLE_USER.
Path Parameters
ID of the transaction to fetch — the id returned by GET /v1/transactions.
Response
The transaction details for the authenticated account
A Meridian transaction
Unique identifier of the transaction
"txn_01JMERCRYPTOACH01"
Type of transaction
TRANSFER, DEPOSIT, WITHDRAWAL, REFUND, PARTIAL_REFUND "DEPOSIT"
Current status of the transaction
"COMPLETED"
Reference number of the transaction
"dep-20260430-1001"
Amount debited as a decimal string
"7250.00"
ISO 4217 currency code on the debit side
"USD"
Amount credited as a decimal string
"7250.00"
ISO 4217 currency code on the credit side
"USD"
Fees applied to the transaction
Show child attributes
Show child attributes
Exchange rate applied
"1"
Tags associated with the transaction
Finer-grained classification of the transaction. INTERNAL_SWEEP marks the internal movement from a sub-balance to its parent account rather than a transfer the user made
AUTOSWEEP, CASH_IN, P2P, MERCHANT, MANUAL, AUTOPAY, DIRECT_DEBIT, INTERNAL_SWEEP, REWARD, YIELD_FUNDING, YIELD_PAYOUT, null "INTERNAL_SWEEP"
Timestamp when the transaction was created
"2026-04-30T15:00:00Z"
Timestamp when the transaction was last updated
"2026-04-30T15:02:00Z"
Timestamp when the transaction reached a settled state; absent while it is still in flight
"2026-04-30T15:05:00Z"
Reason for the current status
Machine-readable code for the current status, suitable for branching on. Prefer this over statusReason, which is free text
"INSUFFICIENT_FUNDS"
External identifier of the transaction
Deposit reconciliation identifier copied from the destination account for deposit transactions
ID of a related transaction
Amount debited net of fees, as a decimal string. Absent when the transaction carries no stored net figure, which is not the same as a net of zero
"7249.00"
External party on the credit side, present on a payout to a beneficiary and absent on a deposit. The authenticated user's own side of the transaction is always in debitInstrument or creditInstrument rather than here
Show child attributes
Show child attributes
Payment rail used on the debit side
"US.USD.ACH"
Remittance information the sender attached to the payment. Wire and SWIFT carry it; ACH has no such field, so this is absent on ACH deposits. A sandbox simulated deposit may report its reference here, depending on the backing provider. For the payer's own reference, see debitReference
"INV-23014"
Reference supplied by the payer on the debit leg, as opposed to referenceNumber, which Meridian generates. For an on-chain debit this is the settling blockchain transaction hash; for a fiat rail it is that rail's own reference. Read debitRail to tell the two apart. A sandbox simulated deposit reports its reference here
"0xabcdef"
Descriptor Meridian presents to the paying bank for the debit leg, which the payer may see on their own statement. Absent when the transaction carries none
"PAYROLL"
Meridian (balance) account instrument
- Account Instrument
- Bank Account Instrument
- Virtual Account Instrument
- External Wallet Instrument
Show child attributes
Show child attributes
External party on the credit side, present on a payout to a beneficiary and absent on a deposit. The authenticated user's own side of the transaction is always in debitInstrument or creditInstrument rather than here
Show child attributes
Show child attributes
Payment rail used on the credit side
Meridian (balance) account instrument
- Account Instrument
- Bank Account Instrument
- Virtual Account Instrument
- External Wallet Instrument
Show child attributes
Show child attributes
Meridian's own rate for the currency pair, before any spread, at full stored precision so that creditAmount can be reconciled against debitAmount and this rate
"56.50"
FX spread applied, as a decimal string. Reported separately from fees so that summing fees keeps its existing meaning
"0.02"
Payment purpose
PAYMENT_FOR_SERVICES, PAYMENT_FOR_SOFTWARE, PAYMENT_FOR_IMPORTED_GOODS, TRAVEL_SERVICES, VENDOR_CONTRACTOR_PAYOUTS, TRANSFER_TO_OWN_ACCOUNT, INVESTMENT_IN_SHARES, PURCHASE_OF_PROPERTY, REPAYMENT_OF_LOANS, SALARY, PAYMENT_OF_PROPERTY_RENTAL, INFORMATION_SERVICE_CHARGES, ADVERTISING_AND_PUBLIC_RELATIONS_EXPENSES, ROYALTY_TRADEMARK_PATENT_AND_COPYRIGHT_FEES, BROKER_FRONTEND_GUARANTEE_AND_CUSTODIAN_FEES, ADVISOR_TECHNICAL_AND_ACADEMIC_FEES, REPRESENTATIVE_OFFICE_EXPENSES, TAX_PAYMENT, TRANSPORTATION_FEES_FOR_GOODS, CONSTRUCTION_COSTS, INSURANCE_PREMIUM, GENERAL_GOODS_TRADES_OFFLINE, INSURANCE_CLAIMS_PAYMENT, FAMILY_MAINTENANCE, EDUCATION_RELATED_EXPENSES, MEDICAL_TREATMENT, DONATIONS, MUTUAL_FUND_INVESTMENT, CURRENCY_EXCHANGE, USER_WITHDRAWAL, ADVANCE_PAYMENTS_FOR_GOODS, VENDOR_CONTRACTOR_PAYOUTS_SOFTWARE_DEVELOPMENT, MERCHANT_SETTLEMENT, REPATRIATION_FUND_SETTLEMENT, PERSONAL_REMITTANCE, RETURN_OF_FUNDS, null