Capital icon

Dynamic financing offers

Learn how to get dynamic offers to present a minimum and maximum financing range to your users.

Adyen offers greater flexibility by supporting dynamic financing offers through the Capital API. Instead of a list of static offers with fixed financing amounts, a dynamic offer provides a range from which your user can select their preferred financing amount.

You can use the range from dynamic offers to, for example, create a slider in your user interface (UI) that allows your user to select the financing amount. After the user confirms their selection, you can create a static offer for the selected amount.

Requirements

Before you begin, take into account the following requirements, limitations, and preparations.

Requirement Description
Integration type You must have an Adyen for Platforms integration that supports Capital.
API credentials You must have a Balance Platform API key (for example, ws[_123456]@BalancePlatform.[YourBalancePlatform]) to access the Capital API.

Your API credential must have the following roles:
  • Balance Platform Capital Configuration role
  • Balance Platform Capital Grant Initiation role
Capabilities Make sure that your user have the following capability:
  • getGrantOffers
Limitations
  • Requests to the following endpoints are subject to rate limits in both Test and Live environments:
    • /dynamicOffers/{dynamicOfferId}/calculate: 120 requests per minute
    • /dynamicOffers/{dynamicOfferId}/grantOffer: 30 requests per minute
  • The amount a user selects on your UI must be within the range available to this user. However, you can set a custom logic for amount increments within the range. For example, you can specify steps of EUR 100 or EUR 500.
  • Each financing offer remains valid for seven days. After this period, a new offer is generated for an account holder if they still meet the qualification criteria. The range may differ from one offer to another.
Setup steps Before you begin, make sure:
  • You followed our compliance guidelines for Capital when creating user interfaces, marketing materials, and other processes.
  • You built a user interface that allows users to select their preferred financing amount from a range.

How it works

The process to get a financing offer through the dynamic offers flow is as follows:

  1. Make an API request to get the range of available financing for a specific account holder. Use information from the API response to present the offer in your UI. For example, you can build a slider that allows your users to select their preferred amount.
  2. After the user selects an amount, make an API request to calculate a preliminary offer. This returns an initial breakdown of costs and conditions for the selected financing amount.
  3. When the user confirms their selection, make an API request to create a static offer for the selected amount. This action generates a legally binding offer with a final breakdown of costs and conditions.
  4. Get updates when a new offer is created for your account holder.

The following sections provide more details about each step of integrating dynamic financing offers.

1. Get the range of available financing

To get the financing range available for a specific user:

  1. Make a GET /dynamicOffers request including the following query parameters:

    Parameter Type Required Description
    accountHolderId String Required The unique identifier of that the dynamic offer is for.
    financingType String The type of financing that the offer is for. Currently, only businessFinancing is supported.

    This is the required icon. Required
    This is the conditionally required icon. Conditionally required

    The following code sample shows how to get the range of available financing for the account holder ID AH00000000000000000000001.

  2. In the response, note the parameters in the following table:

    Parameter Description
    accountHolderId The unique identifier of the account holder that the dynamic offer is for.
    contractType The contract type of the offer.
    expiresAt The expiration date and time of the offer validity period.
    financingType The type of financing that the offer is for. Currently, only businessFinancing is supported.
    id The unique identifier of the dynamic financing offer.
    maximumAmount An object containing the maximum amount of the financing offer, including both the value and the currency.
    minimumAmount An object containing the minimum amount of the financing offer, including both the value and the currency.
    repayment An object containing the details of the repayment configuration.
    repayment.term.estimatedDays The estimated period for repaying the grant, in days.
    repayment.term.maximumDays The maximum period for repaying the grant, in days.
    startsAt The starting date and time of the offer validity period.

2. Calculate a preliminary offer for a selected amount

When a user selects a financing amount in your UI, for example, by moving a slider to a specific value, you must show preliminary repayment configurations. This includes daily repayment in basis points, applicable fees, repayment period, and offer validity period. The preliminary offer is for informational purposes only and cannot be used to initiate a grant.

To calculate a preliminary offer for the selected amount:

  1. Make a POST /dynamicOffers/{dynamicOfferId}/calculate request to calculate the repayment configuration for the selected financing offer. In the path, include the dynamicOfferId returned when you got the range of available financing.

    Requests to this endpoint are subject to rate limits. All requests to the endpoint, including those that result in failure, count toward the specified limit.

    • Test environment: 120 requests per minute
    • Live environment: 120 requests per minute
  2. Additionally, specify the following parameters in your request body:

    Parameter Type Required Description
    amount.currency String Required The three-character ISO currency code. This value must match the currency of the dynamic offer.
    amount.value Integer Required The financing amount that the user selected, in minor units. The amount be within the range of the corresponding dynamic offer.

    This is the required icon. Required
    This is the conditionally required icon. Conditionally required

  3. In the response, note the parameters in the following table:

    Parameter Description
    accountHolderId The unique identifier of the account holder that the dynamic offer is for.
    amount An object containing offer currency and value, in minor units.
    contractType The contract type of the offer.
    expiresAt The expiration date and time of the offer validity period.
    fee An object containing the fee currency and value, in minor units.
    repayment An object containing the details of the repayment configuration.
    repayment.basisPoints The repayment amount, in basis points, that is deducted daily from your user's incoming net volume.
    repayment.term.estimatedDays The estimated period for repaying the grant, in days.
    repayment.term.maximumDays The maximum period for repaying the grant, in days.
    repayment.threshold An object containing the details of the minimum threshold amount that your user must repay every 30-day period.
    startsAt The starting date and time of the offer validity period.

3. Create a static offer for a selected amount

After the user selects a final amount from the dynamic offer, use this amount to create a static offer with definitive repayment configurations. This includes the fixed financing amount, daily repayment in basis points, applicable fees, repayment period, and offer validity period.

This is a formal, legally binding offer that must be provided for the user's review in your UI to comply with the user interface requirements for Capital.

To create a static offer for the selected amount:

  1. Make a POST /dynamicOffers/{dynamicOfferId}/grantOffer request. In the path, include the dynamicOfferId returned when you got the range of available financing.

    Requests to this endpoint are subject to rate limits. All requests to the endpoint, including those that result in failure, count toward the specified limit.

    • Test environment: 30 requests per minute
    • Live environment: 30 requests per minute
  2. Additionally, specify the following parameters in your request body:

    Parameter Type Required Description
    amount.currency String Required The three-character ISO currency code. This value must match the currency of the dynamic offer.
    amount.value Integer Required The final financing amount that the user selected, in minor units. The amount be within the range of the corresponding dynamic offer.

    This is the required icon. Required
    This is the conditionally required icon. Conditionally required

  3. In the response, note the parameters in the following table. The id parameter represents a static offer and is required to configure a grant.

    Parameter Description
    accountHolderId The unique identifier of the account holder that the dynamic offer is for.
    amount An object containing offer currency and value, in minor units.
    contractType The contract type of the offer.
    expiresAt The expiration date and time of the offer validity period.
    fee An object containing the fee currency and value, in minor units.
    id The unique identifier of the financing offer. Required to initiate a grant in the next step.
    repayment An object containing the details of the repayment configuration.
    repayment.basisPoints The repayment amount, in basis points, that is deducted daily from your user's incoming net volume.
    repayment.term.estimatedDays The estimated period for repaying the grant, in days.
    repayment.term.maximumDays The maximum period for repaying the grant, in days.
    repayment.threshold An object containing the details of the minimum threshold amount that your user must repay every 30-day period.
    startsAt The starting date and time of the offer validity period.

4. Get notified about an offer created

You can get updates every time a new offer is created for an account holder by subscribing to the following webhooks:

Next steps