Reverse Credit Funds
curl --request POST \
--url https://api.example.com/client-interfaces/vna/reverse-credit-funds \
--header 'Content-Type: application/json' \
--header 'User-Agent: <user-agent>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"TransactionId": "<string>",
"AccountIdentifier": "<string>",
"CreditTrackingNumber": "<string>"
}
'import requests
url = "https://api.example.com/client-interfaces/vna/reverse-credit-funds"
payload = {
"TransactionId": "<string>",
"AccountIdentifier": "<string>",
"CreditTrackingNumber": "<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>',
AccountIdentifier: '<string>',
CreditTrackingNumber: '<string>'
})
};
fetch('https://api.example.com/client-interfaces/vna/reverse-credit-funds', 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/vna/reverse-credit-funds",
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>',
'AccountIdentifier' => '<string>',
'CreditTrackingNumber' => '<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/vna/reverse-credit-funds"
payload := strings.NewReader("{\n \"TransactionId\": \"<string>\",\n \"AccountIdentifier\": \"<string>\",\n \"CreditTrackingNumber\": \"<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/vna/reverse-credit-funds")
.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 \"AccountIdentifier\": \"<string>\",\n \"CreditTrackingNumber\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/client-interfaces/vna/reverse-credit-funds")
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 \"AccountIdentifier\": \"<string>\",\n \"CreditTrackingNumber\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"Success": true,
"TrackingIdentifier": "<string>",
"ResponseDescription": "<string>"
}POST request to:
[Base-URL]/ReverseCreditFunds.
[Base-URL]; the resource segment /ReverseCreditFunds, 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.Success: false, indicating the reason in ResponseDescription.
Expected behavior:
Order for total reversal of a previous credit movement associated with a CreditTrackingNumber. This usually occurs in case of cancellations, failures in the operation chain, or financial readjustments. The Partner must return the funds from the specified account and confirm success by returning Success as true.
Success: true response MUST carry a TrackingIdentifier. As with Credit Funds, it is the Platform’s only record of the reversal movement and it cannot be recovered afterwards. A successful reversal returned without one leaves the Platform holding a credit it believes was undone but cannot evidence, and the movement has to be reconciled by hand with the Partner.If the reversal cannot be applied, return Success: false with the reason in ResponseDescription; that path does not require a TrackingIdentifier.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.
An Id representing the External Account Object for the Partner.
The TrackingIdentifier the Partner returned in the Credit Funds response — that is, the identifier of the credit movement being referred to.
Response
Ok
True if the reversal is Successful / False if the reversal is not supported or Failed.
Identifier assigned by the Partner to the reversal movement. Mandatory whenever Success is true — a successful reversal returned without it makes the Platform report the operation as failed even though the funds were already returned.
If the reversal is not successful, the reason should be indicated in this field.