CardHolderLimit
A cardholder's spending limits.
Operations
Every route this entity exposes. Each route links to its own reference on this page.
| Method | Route | SDK operation | Returns |
|---|---|---|---|
GET |
/spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits |
list |
Cardholder spend limits |
DELETE |
/spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits |
remove |
Spend limits removed. No response body |
PATCH |
/spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits |
update |
Updated cardholder spend limits. See Retrieve cardholder limits |
Examples
One example per SDK, generated from the API model. The argument names are the parameters and fields of this entity, and the values are placeholders. The examples are not compiled or executed.
Golang
Construct client as shown in the Golang setup, then call the operations:
card_holder_limits, err := client.CardHolderLimit(nil).List(map[string]any{"card_holder_profile_id": 1, "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(card_holder_limits)
updated, err := client.CardHolderLimit(nil).Update(map[string]any{"card_holder_profile_id": 1, "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(updated)
removed, err := client.CardHolderLimit(nil).Remove(map[string]any{"card_holder_profile_id": 1, "profile_id": 1}, nil)
if err != nil {
panic(err)
}
fmt.Println(removed)
Lua
Construct client as shown in the Lua setup, then call the operations:
local card_holder_limits, err = client:CardHolderLimit():list({ card_holder_profile_id = 1, profile_id = 1 })
local updated, err = client:CardHolderLimit():update({ card_holder_profile_id = 1, profile_id = 1 })
local removed, err = client:CardHolderLimit():remove({ card_holder_profile_id = 1, profile_id = 1 })
PHP
Construct client as shown in the PHP setup, then call the operations:
$card_holder_limits = $client->CardHolderLimit()->list(["card_holder_profile_id" => 1, "profile_id" => 1]);
$updated = $client->CardHolderLimit()->update(["card_holder_profile_id" => 1, "profile_id" => 1]);
$client->CardHolderLimit()->remove(["card_holder_profile_id" => 1, "profile_id" => 1]);
Python
Construct client as shown in the Python setup, then call the operations:
card_holder_limits = client.CardHolderLimit().list({"card_holder_profile_id": 1, "profile_id": 1})
updated = client.CardHolderLimit().update({"card_holder_profile_id": 1, "profile_id": 1})
client.CardHolderLimit().remove({"card_holder_profile_id": 1, "profile_id": 1})
Ruby
Construct client as shown in the Ruby setup, then call the operations:
card_holder_limits = client.CardHolderLimit.list({ "card_holder_profile_id" => 1, "profile_id" => 1 })
updated = client.CardHolderLimit.update({ "card_holder_profile_id" => 1, "profile_id" => 1 })
client.CardHolderLimit.remove({ "card_holder_profile_id" => 1, "profile_id" => 1 })
TypeScript
Construct client as shown in the TypeScript setup, then call the operations:
const card_holder_limits = await client.CardHolderLimit().list({ card_holder_profile_id: 1, profile_id: 1 })
const updated = await client.CardHolderLimit().update({ card_holder_profile_id: 1, profile_id: 1 })
await client.CardHolderLimit().remove({ card_holder_profile_id: 1, profile_id: 1 })
Fields
| Field | Type | Required | Description |
|---|---|---|---|
aggregateWindow |
object |
Yes | The limits to set, per aggregation window. |
spendLimits |
array |
No | Spend limits configured for this cardholder. |
type |
string |
Yes | The category of spending the limit applies to. |
list
GET /spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits
Operation ID: spendLimitsCardHolderGet.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
businessProfileId |
path |
integer (int64) |
Yes | The business profile ID. |
cardHolderProfileId |
path |
integer (int64) |
Yes | The personal profile ID of the cardholder. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
200: Cardholder spend limits
application/json
| Property | Type | Required | Description |
|---|---|---|---|
spendLimits |
array of object |
No | Spend limits configured for this cardholder. These limits apply to the cardholder's combined spending across all cards belonging to them, rather than to an individual card or the entire business profile. Empty when no cardholder limits are configured. Currently contains at most one entry, representing the PURCHASE limit type. |
spendLimits[].aggregateWindow |
object |
No | The limits per aggregation window. A window is null when no limit is configured for it. |
spendLimits[].aggregateWindow.daily |
object,null |
No | |
spendLimits[].aggregateWindow.daily.resetAt |
string (date-time) |
No | When the usage resets. This is the end of the current day in the business profile's timezone, expressed as a UTC timestamp. A profile with no timezone configured defaults to UTC. For example, a Singapore profile's daily window ends at 23:59:59.999+08:00, serialised as 2023-07-31T15:59:59.999Z. |
spendLimits[].aggregateWindow.daily.usage |
object |
No | The total authorised amount during the daily window, across all cards belonging to the cardholder. |
spendLimits[].aggregateWindow.daily.usage.amount |
number |
No | |
spendLimits[].aggregateWindow.daily.usage.currency |
string |
No | |
spendLimits[].aggregateWindow.daily.value |
object |
No | Daily limit. |
spendLimits[].aggregateWindow.daily.value.amount |
number |
No | |
spendLimits[].aggregateWindow.daily.value.currency |
string |
No | |
spendLimits[].aggregateWindow.monthly |
object,null |
No | |
spendLimits[].aggregateWindow.monthly.resetAt |
string (date-time) |
No | When the usage resets. This is the end of the current month in the business profile's timezone, expressed as a UTC timestamp. A profile with no timezone configured defaults to UTC. For example, a Singapore profile's daily window ends at 23:59:59.999+08:00, serialised as 2023-07-31T15:59:59.999Z. |
spendLimits[].aggregateWindow.monthly.usage |
object |
No | The total authorised amount during the monthly window, across all cards belonging to the cardholder. |
spendLimits[].aggregateWindow.monthly.usage.amount |
number |
No | |
spendLimits[].aggregateWindow.monthly.usage.currency |
string |
No | |
spendLimits[].aggregateWindow.monthly.value |
object |
No | Monthly limit. |
spendLimits[].aggregateWindow.monthly.value.amount |
number |
No | |
spendLimits[].aggregateWindow.monthly.value.currency |
string |
No | |
spendLimits[].type |
enum: PURCHASE |
No | The category of spending the limit applies to. |
403: The client lacks the CARDS_API_VIEW_SPENDING_LIMITS permission on the business profile, or the cardholder profile is not accessible to it
application/json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
Yes | The error code. |
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"code": "unauthorized",
"detail": "Operation is unauthorized",
"status": 403,
"type": "/errors/types/access"
}
422: A path parameter references a profile of the wrong type. businessProfileId must reference a business profile and cardHolderProfileId must reference a personal profile
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
Yes | The individual validation errors. |
errors[].code |
string |
Yes | The validation error code. |
errors[].detail |
string |
Yes | A description of the validation error. |
errors[].ref |
string |
Yes | The parameter or field that caused the error. |
instance |
string |
Yes | The API path associated with the error. |
status |
integer |
Yes | The HTTP status code. |
title |
string |
Yes | A short summary of the error. |
type |
string |
Yes | A URI identifying the error type. |
Example response:
{
"errors": [
{
"code": "invalid_value",
"detail": "businessProfileId must reference a business profile",
"ref": "businessProfileId"
}
],
"instance": "/v4/spend/profiles/12345/card-holder-profiles/67890/spend-limits",
"status": 422,
"title": "Validation error",
"type": "/errors/types/validation"
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
500: An unexpected error occurred
application/json
| Property | Type | Required | Description |
|---|---|---|---|
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"detail": "An unexpected error occurred",
"status": 500,
"type": "/errors/types/server"
}
remove
DELETE /spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits
Operation ID: spendLimitsCardHolderDelete.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
businessProfileId |
path |
integer (int64) |
Yes | The business profile ID. |
cardHolderProfileId |
path |
integer (int64) |
Yes | The personal profile ID of the cardholder. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Responses
204: Spend limits removed. No response body
403: The client lacks the CARDS_API_MANAGE_SPENDING_LIMITS permission on the business profile, or the cardholder profile is not accessible to it
application/json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
Yes | The error code. |
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"code": "unauthorized",
"detail": "Operation is unauthorized",
"status": 403,
"type": "/errors/types/access"
}
422: A path parameter references a profile of the wrong type. businessProfileId must reference a business profile and cardHolderProfileId must reference a personal profile
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
Yes | The individual validation errors. |
errors[].code |
string |
Yes | The validation error code. |
errors[].detail |
string |
Yes | A description of the validation error. |
errors[].ref |
string |
Yes | The parameter or field that caused the error. |
instance |
string |
Yes | The API path associated with the error. |
status |
integer |
Yes | The HTTP status code. |
title |
string |
Yes | A short summary of the error. |
type |
string |
Yes | A URI identifying the error type. |
Example response:
{
"errors": [
{
"code": "invalid_value",
"detail": "businessProfileId must reference a business profile",
"ref": "businessProfileId"
}
],
"instance": "/v4/spend/profiles/12345/card-holder-profiles/67890/spend-limits",
"status": 422,
"title": "Validation error",
"type": "/errors/types/validation"
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
500: An unexpected error occurred
application/json
| Property | Type | Required | Description |
|---|---|---|---|
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"detail": "An unexpected error occurred",
"status": 500,
"type": "/errors/types/server"
}
update
PATCH /spend/profiles/{businessProfileId}/card-holder-profiles/{cardHolderProfileId}/spend-limits
Operation ID: spendLimitsCardHolderUpdate.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
businessProfileId |
path |
integer (int64) |
Yes | The business profile ID. |
cardHolderProfileId |
path |
integer (int64) |
Yes | The personal profile ID of the cardholder. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
aggregateWindow |
object |
Yes | The limits to set, per aggregation window. At least one of daily or monthly must be provided. |
aggregateWindow.daily |
object |
No | |
aggregateWindow.daily.value |
object |
No | The amount allowed to be spent daily. |
aggregateWindow.daily.value.amount |
number |
No | |
aggregateWindow.daily.value.currency |
string |
No | |
aggregateWindow.monthly |
object |
No | |
aggregateWindow.monthly.value |
object |
No | The amount allowed to be spent monthly. |
aggregateWindow.monthly.value.amount |
number |
No | |
aggregateWindow.monthly.value.currency |
string |
No | |
type |
enum: PURCHASE |
Yes | The category of spending the limit applies to. |
Example request body:
{
"aggregateWindow": {
"daily": {
"value": {
"amount": 1000,
"currency": "GBP"
}
},
"monthly": {
"value": {
"amount": 3000,
"currency": "GBP"
}
}
},
"type": "PURCHASE"
}
Responses
200: Updated cardholder spend limits. See Retrieve cardholder limits
application/json
| Property | Type | Required | Description |
|---|---|---|---|
spendLimits |
array of object |
No | Spend limits configured for this cardholder. These limits apply to the cardholder's combined spending across all cards belonging to them, rather than to an individual card or the entire business profile. Empty when no cardholder limits are configured. Currently contains at most one entry, representing the PURCHASE limit type. |
spendLimits[].aggregateWindow |
object |
No | The limits per aggregation window. A window is null when no limit is configured for it. |
spendLimits[].aggregateWindow.daily |
object,null |
No | |
spendLimits[].aggregateWindow.daily.resetAt |
string (date-time) |
No | When the usage resets. This is the end of the current day in the business profile's timezone, expressed as a UTC timestamp. A profile with no timezone configured defaults to UTC. For example, a Singapore profile's daily window ends at 23:59:59.999+08:00, serialised as 2023-07-31T15:59:59.999Z. |
spendLimits[].aggregateWindow.daily.usage |
object |
No | The total authorised amount during the daily window, across all cards belonging to the cardholder. |
spendLimits[].aggregateWindow.daily.usage.amount |
number |
No | |
spendLimits[].aggregateWindow.daily.usage.currency |
string |
No | |
spendLimits[].aggregateWindow.daily.value |
object |
No | Daily limit. |
spendLimits[].aggregateWindow.daily.value.amount |
number |
No | |
spendLimits[].aggregateWindow.daily.value.currency |
string |
No | |
spendLimits[].aggregateWindow.monthly |
object,null |
No | |
spendLimits[].aggregateWindow.monthly.resetAt |
string (date-time) |
No | When the usage resets. This is the end of the current month in the business profile's timezone, expressed as a UTC timestamp. A profile with no timezone configured defaults to UTC. For example, a Singapore profile's daily window ends at 23:59:59.999+08:00, serialised as 2023-07-31T15:59:59.999Z. |
spendLimits[].aggregateWindow.monthly.usage |
object |
No | The total authorised amount during the monthly window, across all cards belonging to the cardholder. |
spendLimits[].aggregateWindow.monthly.usage.amount |
number |
No | |
spendLimits[].aggregateWindow.monthly.usage.currency |
string |
No | |
spendLimits[].aggregateWindow.monthly.value |
object |
No | Monthly limit. |
spendLimits[].aggregateWindow.monthly.value.amount |
number |
No | |
spendLimits[].aggregateWindow.monthly.value.currency |
string |
No | |
spendLimits[].type |
enum: PURCHASE |
No | The category of spending the limit applies to. |
400: The request could not be processed. Returned when a required field is absent (type, aggregateWindow, or a window's value), when aggregateWindow contains neither daily nor monthly, when a path parameter is not a valid integer, or when the body cannot be parsed. Field-level detail is provided in errors where available; for unparseable bodies the array is empty
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
Yes | The individual validation errors. |
errors[].code |
string |
Yes | The validation error code. |
errors[].detail |
string |
Yes | A description of the validation error. |
errors[].ref |
string |
Yes | The parameter or field that caused the error. |
instance |
string |
Yes | The API path associated with the error. |
status |
integer |
Yes | The HTTP status code. |
title |
string |
Yes | A short summary of the error. |
type |
string |
Yes | A URI identifying the error type. |
403: The client lacks the CARDS_API_MANAGE_SPENDING_LIMITS permission on the business profile, or the cardholder profile is not accessible to it
application/json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
Yes | The error code. |
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"code": "unauthorized",
"detail": "Operation is unauthorized",
"status": 403,
"type": "/errors/types/access"
}
422: The request is valid JSON but cannot be processed. A 422 is deterministic and actionable: the same request will fail the same way until the offending value is changed. The errors array identifies the parameter or field that caused the error. There are three cases, shown below
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
Yes | The individual validation errors. |
errors[].code |
string |
Yes | The validation error code. |
errors[].detail |
string |
Yes | A description of the validation error. |
errors[].ref |
string |
Yes | The parameter or field that caused the error. |
instance |
string |
Yes | The API path associated with the error. |
status |
integer |
Yes | The HTTP status code. |
title |
string |
Yes | A short summary of the error. |
type |
string |
Yes | A URI identifying the error type. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
500: An unexpected error occurred
application/json
| Property | Type | Required | Description |
|---|---|---|---|
detail |
string |
Yes | A description of the error. |
status |
integer |
Yes | The HTTP status code. |
type |
string |
Yes | The type of error. |
Example response:
{
"detail": "An unexpected error occurred",
"status": 500,
"type": "/errors/types/server"
}