Skip to content

SEPA Instant Limits

Introduction

SEPA Instant Limits allow customers to define and manage how much they can send using SEPA Instant Credit Transfers. In line with regulatory requirements, customers must be able to set:

  • A daily limit: The total amount that can be sent via SEPA Instant in a single day.
  • A per-transaction limit: The maximum amount allowed per individual SEPA Instant transfer.

This feature provides customers with enhanced security and greater control over their account activity. To be able to implement SEPA Instant Limits, you must be offering the SEPA Instant Credit Transfers feature to your customers. In case you do, it is required you also implement the SEPA Instant Limits feature.

SEPA Instant Limits per Account

Customers must be able to configure per-transaction and/or daily spending limits for SEPA Instant Credit Transfers on a per-account basis. These limits should be fully customizable by the customers according to their preferences. Please note that this customization is constrained by the overall Risk limitation defined in your Solaris account configuration.

SEPA Instant Limits apply to all SEPA Instant Credit Transfers, regardless of their initiation payment method. This includes scheduled transfers, reference account payouts, and batch transfers executed via SEPA Instant Credit Transfers.

Default and Maximum Limits

It's important to understand the default limits applied to an account and the maximum values that can be set by a customer.

Default Limits

By default, every customer account is configured with the following limits:

  • Per-Transaction Limit: EUR 10,000
  • Daily Limit: null (no daily limit is set)

These can be adjusted at any time via the API.

Maximum Limits

There is a maximum value a customer can set for their per-transaction limit. This maximum depends on the account type:

  • For natural persons and sole proprietors: EUR 100,000
  • For businesses: EUR 5,000,000

If a customer tries to set a limit that exceeds the allowed maximum, the API will return an error and the limit will not be changed.

There is no maximum value for the daily limit.

How Limits Work

  • Daily Limit: Tracks the total amount of all successfully executed SEPA Instant transfers from 00:00:00 to 23:59:59 UTC. If a transfer is returned on the same day, it does not count against the daily limit.

  • Per-Transaction Limit: Sets a cap on the maximum amount for a single SEPA Instant transfer.

What Happens When a Limit is Exceeded

If a customer attempts to execute a transfer that exceeds their configured SEPA Instant limit, the transfer fails immediately. You will receive the INSTANT_SEPA_CREDIT_TRANSFER_FAILED webhook, with a rejection reason indicating the limit was exceeded.

To avoid failed transfers, display the current limits—or remaining available amounts, to the customer during the transfer setup process. It is required by the European Payments Council (Regulation 260/2012, Article 5a, paragraph 6) that where a customer's order for SEPA Instant Credit Transfer exceeds, or leads to exceeding of the set limit, you must not proceed with the payment execution and shall inform the Customer on how to view and modify their limits.

How to configure or update limits

Let your customers set a per-transaction, and/or daily spending limit for SEPA Instant Credit Transfers per a single account. This can be done by sending a request to the PATCH Update specific SEPA Instant limits for an account endpoint. This endpoint allows for modifying the daily and per-transaction limit both at once, or just one or the other at a time. To modify both, the request should look like the example below:

Request URL
PATCH v1/accounts/{account_id}/sepa_instant_limits
Request Body
{
  "daily_limit": {
    "value": 1000000,
    "unit": "cents",
    "currency": "EUR"
  },
  "per_transaction_limit": {
    "value": 500000,
    "unit": "cents",
    "currency": "EUR"
  }
}

To set or modify just the daily_limit or per_transaction_limit, only include the type of limit you want to modify in the request, as shown in the example below:

Request example

Request Body: Daily Limit Only
{
  "daily_limit": {
    "value": 1000000,
    "unit": "cents",
    "currency": "EUR"
  }
}

To unset a previously configured limit, send null as the value. When the per_transaction_limit is unset, it reverts to the maximum allowed value detailed in the Default and Maximum Limits section.

Request example

Request Body: Unset Limit
{
  "daily_limit": null
}

How to retrieve existing limits

To fetch the current SEPA Instant limits for a specific account, use the GET /accounts/{account_id}/sepa-instant-limits endpoint

This endpoint returns the following properties:

  • daily_limit: The current daily SEPA Instant limit set for the specified account. Returns null if no daily limit has been configured.
  • daily_used: The total amount of successfully executed SEPA Instant transfers today from the specified account (00:00:00–23:59:59 UTC). Always returned as a monetary object, regardless of whether a daily_limit is set.
  • daily_remaining: The remaining amount available for SEPA Instant transfers today (daily_limit − daily_used). Returns null if no daily_limit is set.
  • per_transaction_limit: The maximum allowed amount per individual SEPA Instant transfer for the account.
Request URL
GET /v1/accounts/{account_id}/sepa_instant_limits

If a per_transaction_limit has not been set by the customer, this endpoint returns the maximum allowed value for the account type, as detailed in the Default and Maximum Limits section.

Behavior of daily_remaining

The value of daily_remaining depends on whether a daily_limit is configured and on the transfer activity during the current UTC day.

State 1 — No daily_limit configured

When no daily limit is set, daily_limit and daily_remaining are both null. The daily_used field is still returned as a monetary object.

Response Body: No Daily Limit Set
{
  "daily_limit": null,
  "daily_used": {
    "value": 0,
    "unit": "cents",
    "currency": "EUR"
  },
  "daily_remaining": null,
  "per_transaction_limit": {
    "value": 1000,
    "unit": "cents",
    "currency": "EUR"
  }
}

State 2 — daily_limit configured, no transactions executed yet

When a daily limit is set but no SEPA Instant transfers have been executed today, daily_used is 0 and daily_remaining equals daily_limit.

Response Body: Daily Limit Set, No Transactions
{
  "daily_limit": {
    "value": 1000000,
    "unit": "cents",
    "currency": "EUR"
  },
  "daily_used": {
    "value": 0,
    "unit": "cents",
    "currency": "EUR"
  },
  "daily_remaining": {
    "value": 1000000,
    "unit": "cents",
    "currency": "EUR"
  },
  "per_transaction_limit": {
    "value": 500000,
    "unit": "cents",
    "currency": "EUR"
  }
}

State 3 — daily_limit configured, transactions executed

Each successfully executed SEPA Instant transfer increases daily_used and reduces daily_remaining accordingly (daily_remaining = daily_limit − daily_used).

Response Body: Daily Limit Set, Transactions Executed
{
  "daily_limit": {
    "value": 1000000,
    "unit": "cents",
    "currency": "EUR"
  },
  "daily_used": {
    "value": 350000,
    "unit": "cents",
    "currency": "EUR"
  },
  "daily_remaining": {
    "value": 650000,
    "unit": "cents",
    "currency": "EUR"
  },
  "per_transaction_limit": {
    "value": 500000,
    "unit": "cents",
    "currency": "EUR"
  }
}

Note the following:

  • Only successfully executed SEPA Instant transfers count towards daily_used. Failed transfers do not affect the value.
  • If a transfer is returned on the same day it was executed, it does not reduce daily_used.
  • Both daily_used and daily_remaining reset to their initial values at 00:00:00 UTC each day.