Credit limit ( credit_limit )
A credit_limit is a credit ceiling granted to a buyer by a merchant. A buyer may have several — one per decision source — and the platform resolves the effective limit on demand by combining these records according to a configurable strategy.
Role
The credit limit bounds buyer risk in deferred B2B flows. It is compared with the buyer's
receivable to trigger alerts (credit_limit.approaching) or block new transactions (credit_limit.exceeded). It is also used in orchestration processes to decide whether to approve or decline a credit request.
The multi-source model represents decisions from different actors — merchant, credit insurer, BNPL provider — and combines them according to each flow's business logic.
Identifier and structure
Each credit limit has a stable identifier prefixed with
crl_.
{
"object": "credit_limit",
"id": "crl_5f3a2e9b1c8d4f7e",
"buyer_id": "cmp_3a8f1d9c2b4e7f6a",
"merchant_id": "mer_1a2b3c4d5e6f7a8b",
"amount_excluding_tax": 50000000,
"amount_including_tax": null,
"currency": "eur",
"source": "credit_insurer",
"source_reference": "CREDIT-GUARANTEE-2026-00512",
"metadata": {},
"valid_from": "2026-01-01",
"valid_until": "2026-12-31",
"active": true,
"created_at": "2026-01-10T09:00:00.000Z",
"updated_at": "2026-01-10T09:00:00.000Z"
}Fields
| Field | Type | Description |
|---|---|---|
id | string | Limit identifier (prefix `crl_`). |
object | string | Always "credit_limit". |
buyer_id | string | Buyer company concerned (`cmp_…`). |
merchant_id | string | Merchant owning the limit. |
amount_excluding_tax | integer | null | Ceiling excluding tax in cents. At least one amount, excluding or including tax, is required. |
amount_including_tax | integer | null | Ceiling including tax in cents. At least one amount, excluding or including tax, is required. |
currency | string | ISO 4217 currency code in lowercase (for example `eur`). |
source | enum | Limit origin: `merchant`, `credit_insurer`, or `bnpl_provider`. |
source_reference | string | null | Reference in the source system, for example the credit insurer's decision identifier. |
metadata | object | Flat map of `string | number | boolean` scalars, following the API metadata convention. |
valid_from | date | null | Validity start. `null` = valid since the beginning. |
valid_until | date | null | Validity end. `null` = no expiration. |
active | boolean | When false, the limit is ignored in effective-limit calculations and receivable monitoring. |
created_at | datetime | Creation date. |
updated_at | datetime | Last update date. |
At least one of the two amounts (amount_excluding_tax or
amount_including_tax) is required at creation. Both can be supplied simultaneously. The basis selected at calculation time determines which one is used.
Source
The source field identifies who made the decision to grant this limit. The same buyer may have one limit per source, all active at the same time.
| Source | Description |
|---|---|
merchant | Ceiling set directly by the merchant. Internal decision, without a third party. |
credit_insurer | Ceiling granted by a credit insurer such as Allianz Trade or Coface. `source_reference` carries the guarantee identifier. |
bnpl_provider | Ceiling granted by a BNPL provider. May be combined with other sources according to the selected strategy. |
Validity and activation
A credit limit contributes to calculations only when it is
active: true and the current date falls within the
[valid_from, valid_until] window. Both bounds are inclusive; a null bound means no constraint on that side.
Setting active: false immediately disables the limit without deleting it, preserving decision history. A disabled limit remains accessible through the API but is no longer considered by receivable monitoring or effective-limit resolution.
When a buyer has no active limit for a given merchant, the events
credit_limit.exceeded and credit_limit.approaching are never emitted for that buyer — receivable is not monitored against a ceiling.

Effective limit
When a buyer has several active limits — multiple sources or several decisions from one source — the platform combines them through the resolution endpoint.
GET /v1/credit-limits/effective ?merchant_id=mer_1a2b &buyer_id=cmp_3a8f ¤cy=eur &strategy=maximum &basis=excluding_tax &sources=merchant,credit_insurer &at=2026-06-17
{
"object": "effective_credit_limit",
"merchant_id": "mer_1a2b",
"buyer_id": "cmp_3a8f",
"currency": "eur",
"at": "2026-06-17",
"strategy": "maximum",
"basis": "excluding_tax",
"sources": ["merchant", "credit_insurer"],
"amount": 50000000,
"amount_excluding_tax": 50000000,
"amount_including_tax": null,
"selected_credit_limit_id": "crl_5f3a2e",
"selected_credit_limit_ids": ["crl_5f3a2e"],
"candidates": [
{
"id": "crl_5f3a2e",
"source": "credit_insurer",
"amount": 50000000
}
]
}Resolution strategies
| strategy | Description |
|---|---|
maximum | Keeps the highest candidate limit. Useful when each source covers the full risk, for example credit insurance. |
minimum | Keeps the lowest limit. Conservative approach when several parties must all approve. |
cumulative | Adds all candidate limits. Useful when sources are complementary, for example merchant and insurer cover distinct tranches. |
The basis field (excluding_tax or
including_tax) determines which amount is used for comparison and returned in amount. Every candidate limit must have the amount corresponding to the selected basis to be retained.
In processes
credit.add_credit_limit
Creates a new credit limit for a company. Useful for recording a credit-insurer decision received through a webhook or form.
Main parameters
{
"company": "platform.company",
"basis": "excluding_tax",
"amount": 50000000,
"currency": "eur",
"source": "credit_insurer",
"source_reference": "CREDIT-GUARANTEE-2026-00512",
"valid_from": "2026-01-01",
"valid_until": "2026-12-31"
}Output
{
"credit_limit": "platform.credit_limit"
}credit.evaluate_credit_availability
Router node combining effective-limit resolution, current-exposure calculation, and the approval decision in one step. This is the recommended entry point for capacity checks in a credit-request process.
Parameters
{
"company": "platform.company",
"currency": "eur",
"basis": "excluding_tax",
"strategy": "maximum",
"requested_amount": 10000000
}The node selects the route approved or rejected.
Outputs
{
"effective_credit_limit": "platform.effective_credit_limit",
"credit_exposure": "platform.credit_exposure",
"credit_availability_check": "platform.credit_availability_check"
}Individual nodes
The three steps of credit.evaluate_credit_availability are also available separately for greater flexibility:
| Node | Role |
|---|---|
credit.fetch_effective_credit_limit | Resolves the effective limit — strategy, basis, sources, date. |
credit.fetch_credit_exposure | Retrieves the company's current credit exposure. |
credit.check_credit_availability | Decides ( |
credit.grant_credit | Increases authorized exposure after a favorable decision — call after |
Events
| Event | Trigger |
|---|---|
credit_limit.updated | The limit was just created or changed — amounts, dates, active state, or `source_reference`. |
credit_limit.exceeded | The buyer's receivable balance including tax exceeds the active limit. Also triggers suspension of the company. |
credit_limit.approaching | The balance including tax reaches 80% of the active limit without exceeding it. |
credit_limit.updated is emitted both at creation and on every modification — there is no credit_limit.created
distinct.
credit_limit.exceeded and credit_limit.approaching are emitted when the receivable snapshot is refreshed, only when the buyer has an active limit. See the
receivable documentation
for trigger details and suspension logic.