Card Limits

Set and manage daily spending limits on payment cards.

Before You Start

Read the following guides before proceeding:

GuideWhy
Getting StartedPlatform overview and setup
Api BasicsRequired headers and request configuration
AuthenticationHow to obtain access tokens
OnboardingUser and wallet registration
KYCKYC verification requirements

Overview

Card limits control the maximum amount that can be spent using a card within a day. You can:

  • Set a daily spending limit
  • Disable the limit entirely
  • View current limit and usage

Get Current Limits

Card limits are returned as part of the card response when retrieving card details.

GET /api/v1/cards/{cardId}

The response includes a limit object:

{
  "id": "64120850-73a1-4df5-a074-d463258c9deb",
  "status": "Active",
  "limit": {
    "daily_limit": 1000.00,
    "daily_usage": 250.00,
    "monthly_limit": -1,
    "monthly_usage": 500.00,
    "lifetime_limit": -1,
    "lifetime_usage": 1500.00,
    "currency": "EUR"
  }
}
FieldDescription
daily_limitMaximum daily spend. -1 means no limit.
daily_usageAmount already spent today
monthly_limitMaximum monthly spend. -1 means no limit.
monthly_usageAmount already spent this month
lifetime_limitMaximum lifetime spend. -1 means no limit.
lifetime_usageTotal amount spent on this card
currencyLimit currency (EUR)

Set Daily Limit

Update the daily spending limit for a card.

PUT /api/v1/cards/{cardId}/limit

Request

{
  "limit": 1000.00
}
FieldTypeRequiredDescription
limitnumberYesNew daily limit. Set to -1 to disable the limit.

Code Examples

await fetch(`${baseUrl}/api/v1/cards/${cardId}/limit`, {
  method: 'PUT',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'X-User-Address': userEoaAddress,
    'X-Chain-Id': chainId,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    limit: 1000.00
  })
});
requests.put(
    f"{base_url}/api/v1/cards/{card_id}/limit",
    headers={
        "Authorization": f"Bearer {access_token}",
        "X-User-Address": user_eoa_address,
        "X-Chain-Id": chain_id,
        "Content-Type": "application/json"
    },
    json={"limit": 1000.00}
)
body, _ := json.Marshal(map[string]float64{"limit": 1000.00})
req, _ := http.NewRequest("PUT", baseURL+"/api/v1/cards/"+cardID+"/limit", bytes.NewBuffer(body))
req.Header.Set("Authorization", "Bearer "+accessToken)
req.Header.Set("X-User-Address", userEoaAddress)
req.Header.Set("X-Chain-Id", chainId)
req.Header.Set("Content-Type", "application/json")

http.DefaultClient.Do(req)

Response

Empty response on success (200 OK).


Disable Limit

To remove the daily spending limit entirely, set limit to -1:

{
  "limit": -1
}

This allows unlimited daily spending on the card.


Limit Webhooks

When card limits are updated, Wirex sends a webhook notification.

Endpoint: POST {your_webhook_base_url}/v2/webhooks/card-limits

{
  "card_id": "64120850-73a1-4df5-a074-d463258c9deb",
  "transaction_limit": -1,
  "daily_limit": 1000.00,
  "daily_usage": 250.00,
  "monthly_limit": -1,
  "monthly_usage": 500.00,
  "lifetime_limit": -1,
  "lifetime_usage": 1500.00
}
FieldDescription
card_idCard UUID
transaction_limitPer-transaction limit (-1 = no limit)
daily_limitDaily spending limit (-1 = no limit)
daily_usageAmount spent today
monthly_limitMonthly spending limit (-1 = no limit)
monthly_usageAmount spent this month
lifetime_limitLifetime spending limit (-1 = no limit)
lifetime_usageTotal amount spent

Error Handling

Validation Errors

Error ReasonError DetailsDescription
ErrorMissingFieldcard_id: missingCard ID not provided
ErrorInvalidFieldcard_id: invalid_uuidCard ID is not a valid UUID
ErrorMissingFieldlimit: missingLimit value not provided

Card Status Errors

Error ReasonError DetailsDescription
ErrorInvalidStatuscard_status: not_activeCard must be active to change limits
ErrorNotFoundCard not foundCard does not exist or user doesn't own it

Error Response Format

{
  "error_reason": "ErrorInvalidStatus",
  "error_description": "Card is not active",
  "error_category": {
    "category": "CategoryValidationFailure",
    "http_status_code": 400
  },
  "error_details": [
    { "key": "field", "details": "card_status" },
    { "key": "issue", "details": "not_active" }
  ]
}