curl --request PUT \
--url https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"limits": {
"single": {
"amount": 123
},
"daily": {
"amount": 123,
"count": 123
},
"weekly": {
"amount": 123,
"count": 123
},
"monthly": {
"amount": 123,
"count": 123
},
"annual": {
"amount": 123,
"count": 123
}
},
"confirmation": "<unknown>",
"reason": "<string>"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits"
payload = {
"limits": {
"single": { "amount": 123 },
"daily": {
"amount": 123,
"count": 123
},
"weekly": {
"amount": 123,
"count": 123
},
"monthly": {
"amount": 123,
"count": 123
},
"annual": {
"amount": 123,
"count": 123
}
},
"confirmation": "<unknown>",
"reason": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
limits: {
single: {amount: 123},
daily: {amount: 123, count: 123},
weekly: {amount: 123, count: 123},
monthly: {amount: 123, count: 123},
annual: {amount: 123, count: 123}
},
confirmation: '<unknown>',
reason: '<string>'
})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits', 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}/transaction-limits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'limits' => [
'single' => [
'amount' => 123
],
'daily' => [
'amount' => 123,
'count' => 123
],
'weekly' => [
'amount' => 123,
'count' => 123
],
'monthly' => [
'amount' => 123,
'count' => 123
],
'annual' => [
'amount' => 123,
'count' => 123
]
],
'confirmation' => '<unknown>',
'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}/transaction-limits"
payload := strings.NewReader("{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"limits": {
"category": "<string>",
"limitProfile": "<string>",
"enforced": {
"outbound": true,
"inbound": true
},
"asOf": "<string>",
"outbound": {
"single": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"daily": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"weekly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"monthly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"annual": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
}
},
"inbound": {
"single": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"daily": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"weekly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"monthly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"annual": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
}
}
}
}
}{
"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>"
}{
"success": false,
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}Set the customer's own transaction limits
Replaces the customer’s own outbound limits with the ones sent: a window left out has no limit of theirs, and the profile’s applies. A limit above their profile’s is refused. Lowering one takes effect immediately; raising one, or removing one, needs step-up proof in confirmation and is refused with SCA_MISSING without it. Inbound has no customer limits: nobody can cap what reaches them. Back office can set them 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. Staff must send a reason, and raising or removing a limit needs the STAFF member’s own step-up - their TOTP (with their access token) or a passkey assertion from the back-office tenant, never a PIN - just as lowering one needs none. The change history records who made it, as the customer or as staff with their role.
curl --request PUT \
--url https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"limits": {
"single": {
"amount": 123
},
"daily": {
"amount": 123,
"count": 123
},
"weekly": {
"amount": 123,
"count": 123
},
"monthly": {
"amount": 123,
"count": 123
},
"annual": {
"amount": 123,
"count": 123
}
},
"confirmation": "<unknown>",
"reason": "<string>"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits"
payload = {
"limits": {
"single": { "amount": 123 },
"daily": {
"amount": 123,
"count": 123
},
"weekly": {
"amount": 123,
"count": 123
},
"monthly": {
"amount": 123,
"count": 123
},
"annual": {
"amount": 123,
"count": 123
}
},
"confirmation": "<unknown>",
"reason": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
limits: {
single: {amount: 123},
daily: {amount: 123, count: 123},
weekly: {amount: 123, count: 123},
monthly: {amount: 123, count: 123},
annual: {amount: 123, count: 123}
},
confirmation: '<unknown>',
reason: '<string>'
})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits', 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}/transaction-limits",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'limits' => [
'single' => [
'amount' => 123
],
'daily' => [
'amount' => 123,
'count' => 123
],
'weekly' => [
'amount' => 123,
'count' => 123
],
'monthly' => [
'amount' => 123,
'count' => 123
],
'annual' => [
'amount' => 123,
'count' => 123
]
],
'confirmation' => '<unknown>',
'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}/transaction-limits"
payload := strings.NewReader("{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/transaction-limits")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"limits\": {\n \"single\": {\n \"amount\": 123\n },\n \"daily\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"weekly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"monthly\": {\n \"amount\": 123,\n \"count\": 123\n },\n \"annual\": {\n \"amount\": 123,\n \"count\": 123\n }\n },\n \"confirmation\": \"<unknown>\",\n \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"limits": {
"category": "<string>",
"limitProfile": "<string>",
"enforced": {
"outbound": true,
"inbound": true
},
"asOf": "<string>",
"outbound": {
"single": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"daily": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"weekly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"monthly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"annual": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
}
},
"inbound": {
"single": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"daily": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"weekly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"monthly": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
},
"annual": {
"amount": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
},
"count": {
"profile": 123,
"override": 123,
"effective": 123,
"used": 123,
"available": 123
}
}
}
}
}
}{
"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>"
}{
"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
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
The customer's own outbound limits, per window. A window left out has no limit of theirs.
Show child attributes
Show child attributes
Step-up proof: a passkey assertion, a 2FA code, or a PIN. From back office, the staff member's own TOTP or passkey; a PIN is not accepted
Kept on the change history, for support. Required from back office, for the audit
500