curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "<string>"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel"
payload = { "reason": "<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({reason: '<string>'})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel', 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.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel",
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([
'reason' => '<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 := "https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel"
payload := strings.NewReader("{\n \"reason\": \"<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("https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel")
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 \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"review": {
"reviewId": "<string>",
"status": "<string>",
"kind": "OUTGOING_PAYMENT",
"direction": "<string>",
"amount": 123,
"currency": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"cutoffAt": "<string>",
"submissions": [
{
"note": "<string>",
"documents": [
"<string>"
],
"at": "<string>",
"downloads": [
{
"document": "<string>",
"url": "<string>",
"expiresAt": "<string>"
}
],
"withPayment": true
}
],
"accountId": "<string>",
"payer": {
"name": "<string>",
"iban": "<string>",
"accountNumber": "<string>"
},
"payee": {
"name": "<string>",
"iban": "<string>",
"accountNumber": "<string>"
},
"reference": "<string>",
"askedAt": "<string>",
"decidedAt": "<string>",
"message": "<string>"
}
}
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}Cancel a payment waiting for review
For money going out: the customer pulls the payment back rather than wait. Refused on money arriving - cancelling a held credit would leave it with nowhere to go. The payment is then failed and its reserved funds released - moments later, not in this response. A direct debit (kind DIRECT_DEBIT) is the exception: cancelling the review does not itself refuse the collection. It stays reserved until the review’s cutoffAt and is refused there, which releases it (the response says The collection will be refused at its cutoff), unless it is refused before then another way, such as the customer cancelling it with Cancel a direct debit collection. If compliance decides at the same moment, whichever reaches the review first stands and the other is refused (409). Back office can do this for the customer too, with ?programId= naming a program its token’s programs claim allows, the customer read within that program only; a custodian (guardian-bound) role only for a customer whose application is bound to it. Anything outside that is the 404, never a 403. The review’s history records who acted, as the customer or as staff with their role (actor).
curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "<string>"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel"
payload = { "reason": "<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({reason: '<string>'})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel', 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.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel",
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([
'reason' => '<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 := "https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel"
payload := strings.NewReader("{\n \"reason\": \"<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("https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/limit-reviews/{reviewId}/cancel")
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 \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"review": {
"reviewId": "<string>",
"status": "<string>",
"kind": "OUTGOING_PAYMENT",
"direction": "<string>",
"amount": 123,
"currency": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"cutoffAt": "<string>",
"submissions": [
{
"note": "<string>",
"documents": [
"<string>"
],
"at": "<string>",
"downloads": [
{
"document": "<string>",
"url": "<string>",
"expiresAt": "<string>"
}
],
"withPayment": true
}
],
"accountId": "<string>",
"payer": {
"name": "<string>",
"iban": "<string>",
"accountNumber": "<string>"
},
"payee": {
"name": "<string>",
"iban": "<string>",
"accountNumber": "<string>"
},
"reference": "<string>",
"askedAt": "<string>",
"decidedAt": "<string>",
"message": "<string>"
}
}
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}Authorizations
The user's token from a completed sign-in. The program and environment come from the token.
Path Parameters
The customer
1The review. It must belong to customerId.
1Query Parameters
The program to act on. Ignored for customer tokens.
Only when the token carries no sandbox claim: which environment to act in.
true, false Body
Why staff are doing this for the customer. Required from back office, for the audit; the customer sends nothing
500