Adyen sends webhooks for the following grant lifecycle-related events:
The next sections show code samples for some of these events.
Dynamic offer created
When a new dynamic offer is created for an account holder, Adyen sends a balancePlatform.capital.dynamicOffer.created webhook to notify your server. The webhook includes information about the offer, such as:
accountHolderId: The unique identifier of the account holder that the dynamic offer is for.id: The unique identifier of the dynamic offer.contractType: loan.maximumAmount: An object containing currency and value of the maximum offer amount, in minor units.minimumAmount: An object containing currency and value of the minimum offer amount, in minor units.repayment.term.estimatedDays: The estimated period for repaying the grant, in days.repayment.term.maximumDays: The maximum period for repaying the grant, in days.financingType: businessFinancing.startsAtandexpiresAt: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.
Static offer created
When a new static offer is created for an account holder, Adyen sends a balancePlatform.balanceAccountHolder.capitalOffer.created webhook to notify your server. The webhook includes information about the offer, such as:
accountHolderId: The unique identifier of the account holder that the static offer is for.id: The unique identifier of the static offer.contractType: loan.amount: An object containing currency and value of the offer, in minor units.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.basisPoints: The repayment amount, in basis points, that is deducted daily from your user's incoming net volume.repayment.threshold: An object containing the details of the minimum threshold amount that your user must repay every 30-day period.fee: An object containing the fee currency and value, in minor units.startsAtandexpiresAt: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.
Grant requested
When a user selects an offer using either the capital components or your custom interface built with our APIs, Adyen sends a balancePlatform.grants.created webhook to your server. This webhook includes information about the grant, such as:
id: The unique identifier of the grant.counterparty.accountHolderId: The unique identifier of the account holder for which a grant has been requested.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.status.code: Requested
Grant reviewing
In specific situations, Adyen may require your users to provide additional information about their businesses, such as when the total user's exposure meets or exceeds the threshold, typically EUR 25,000 or the equivalent amount in another supported currency. You then need to collect additional data from your user and submit it to Adyen.
Adyen sends a balancePlatform.grants.updated webhook to notify your server about this event, including the following information:
id: The unique identifier of the grant.counterparty.accountHolderId: The unique identifier of the account holder for which a grant has been requested.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.status.code: Reviewingactions.code: AnaCreditCapabilityRuleactions.resolved: false
Grant approved
After a thorough secondary review confirms the grant request meets all criteria, Adyen sends a balancePlatform.grants.updated webhook to notify your server of final approval. The webhook includes information about the grant, such as:
id: The unique identifier of the grant.counterparty.accountHolderId: The unique identifier of the account holder for which a grant has been approved.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.status.code: Approved
Grant pending
After Adyen approves the grant, the user must complete required actions, such as signing the Terms of Service.
The grant remains pending until:
- All required actions are completed on the user's side.
- The grant transaction is booked to the user's balance account.
- The security cooldown period ends. For example, if a user updates their bank account details (transfer instrument), Adyen waits 72 hours before processing transactions to the new account.
Adyen notifies you of this stage by sending a balancePlatform.grants.updated webhook, which includes information about the grant, such as:
id: The unique identifier of the grant.counterparty.accountHolderId: The unique identifier of the account holder for which a grant has been approved.counterparty.balanceAccountId: The balance account details where the grant amount should be disbursed.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.status.code: Pending
After the user completes the required actions, Adyen disburses the grant amount to the specified balance account. At this point, Adyen also sends webhooks about the corresponding fund transfer.
Grant active
After the grant is disbursed, Adyen sends a balancePlatform.grants.updated webhook, including the following information about the grant:
id: The unique identifier of the grant.accountHolderId: The unique identifier of the account holder for which a grant has been approved.balanceAccountId: The balance account details where the grant amount has been disbursed.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.balances.currency: The currency of the grant amount.balances.fee: The one-time fee for business financing.balances.principal: The amount that has been disbursed to the user.balances.total: The total amount that the user must repay. It is the sum of the fee amount and the principal amount.status.code: Active
Grant repaid
After the user has made their last repayment towards the grant and the corresponding transfer has been booked, Adyen sends a balancePlatform.grants.updated webhook which includes the following information:
id: The unique identifier of the grant.accountHolderId: The unique identifier of the account holder for which a grant has been approved.balanceAccountId: The balance account details where the grant amount has been disbursed.grantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.balances.currency: The currency of the grant amount.balances.fee: 0balances.principal: 0balances.total: 0status.code: Repaid