{"title":"Grant lifecycle-related events","category":"default","creationDate":1776961628,"content":"<p>Adyen sends webhooks for the following <a href=\"\/pt\/capital\/grant-lifecycle-and-status\">grant lifecycle-related events<\/a>:<\/p>\n<div class=\"row\" style=\"align-items: flex-start;justify-content: center;\">\n<div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><ul><li><a href=\"#dynamic-offer-created\">Dynamic offer created<\/a><\/li><li><a href=\"#static-offer-created\">Static offer created<\/a><\/li><li><a href=\"#grant-requested\">Grant requested<\/a><\/li><li>Grant assessed<\/li><li><a href=\"#grant-reviewing\">Grant reviewing<\/a><\/li><\/ul><\/div><div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><p><\/li><\/p><li><a href=\"#grant-approved\">Grant approved<\/a><\/li><li>Grant rejected<\/li><li>Grant canceled<\/li><li><a href=\"#grant-pending\">Grant pending<\/a><\/li><\/div><div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><p><\/li><\/p><li>Grant failed<\/li><li><a href=\"#grant-active\">Grant active<\/a><\/li><li><a href=\"#grant-repaid\">Grant repaid<\/a><\/li><li>Grant revoked<\/li><li>Grant written off<\/li><\/div><\/div><\/li>\n<\/ul>\n<p>The next sections show code samples for some of these events.<\/p>\n<h2 id=\"dynamic-offer-created\">Dynamic offer created<\/h2>\n<p>When a new dynamic offer is created for an account holder, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.capital.dynamicOffer.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.capital.dynamicOffer.created<\/a> webhook to notify your server. The webhook includes information about the offer, such as:<\/p>\n<ul>\n<li><code>accountHolderId<\/code>: The unique identifier of the account holder that the dynamic offer is for.<\/li>\n<li><code>id<\/code>: The unique identifier of the dynamic offer.<\/li>\n<li><code>contractType<\/code>: <span translate=\"no\"><strong>loan<\/strong><\/span>.<\/li>\n<li><code>maximumAmount<\/code>: An object containing currency and value of the maximum offer amount, in <a href=\"\/pt\/development-resources\/currency-codes\">minor units<\/a>.<\/li>\n<li><code>minimumAmount<\/code>: An object containing currency and value of the minimum offer amount, in <a href=\"\/pt\/development-resources\/currency-codes\">minor units<\/a>.<\/li>\n<li><code>repayment.term.estimatedDays<\/code>: The estimated period for repaying the grant, in days.<\/li>\n<li><code>repayment.term.maximumDays<\/code>: The maximum period for repaying the grant, in days.<\/li>\n<li><code>financingType<\/code>: <span translate=\"no\"><strong>businessFinancing<\/strong><\/span>.<\/li>\n<li><code>startsAt<\/code> and <code>expiresAt<\/code>: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Offer created'\" :id=\"'dynamic-offer-created'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"BalancePlatform\\\",\\n        \\\"id\\\": \\\"0000000000000001\\\",\\n        \\\"dynamicOffer\\\": {\\n            \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\",\\n            \\\"contractType\\\": \\\"loan\\\",\\n            \\\"expiresAt\\\": \\\"2026-02-19T20:22:39.489+01:00\\\",\\n            \\\"financingType\\\": \\\"businessFinancing\\\",\\n            \\\"id\\\": \\\"0000000000000001\\\",\\n            \\\"maximumAmount\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"value\\\": 4567\\n            },\\n            \\\"minimumAmount\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"value\\\": 1234\\n            },\\n            \\\"repayment\\\": {\\n                \\\"term\\\": {\\n                    \\\"estimatedDays\\\": 180,\\n                    \\\"maximumDays\\\": 270\\n                }\\n            },\\n            \\\"startsAt\\\": \\\"2026-02-12T20:22:39.489+01:00\\\"\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-02-12T19:22:39.699Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.capital.dynamicOffer.created\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"static-offer-created\">Static offer created<\/h2>\n<p>When a new static offer is created for an account holder, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.balanceAccountHolder.capitalOffer.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.balanceAccountHolder.capitalOffer.created<\/a> webhook to notify your server. The webhook includes information about the offer, such as:<\/p>\n<ul>\n<li><code>accountHolderId<\/code>: The unique identifier of the account holder that the static offer is for.<\/li>\n<li><code>id<\/code>: The unique identifier of the static offer.<\/li>\n<li><code>contractType<\/code>: <span translate=\"no\"><strong>loan<\/strong><\/span>.<\/li>\n<li><code>amount<\/code>: An object containing currency and value of the offer, in <a href=\"\/pt\/development-resources\/currency-codes\">minor units<\/a>.<\/li>\n<li><code>repayment.term.estimatedDays<\/code>: The estimated period for repaying the grant, in days.<\/li>\n<li><code>repayment.term.maximumDays<\/code>: The maximum period for repaying the grant, in days.<\/li>\n<li><code>repayment.basisPoints<\/code>: The repayment amount, in <a href=\"https:\/\/www.investopedia.com\/terms\/b\/basispoint.asp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">basis points<\/a>, that is deducted daily from your user's incoming net volume.<\/li>\n<li><code>repayment.threshold<\/code>: An object containing the details of the minimum threshold amount that your user must repay every 30-day period.<\/li>\n<li><code>fee<\/code>: An object containing the fee currency and value, in <a href=\"\/pt\/development-resources\/currency-codes\">minor units<\/a>.<\/li>\n<li><code>startsAt<\/code> and <code>expiresAt<\/code>: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Offer created'\" :id=\"'static-offer-created'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"creationDate\\\": \\\"2026-01-19T17:17:35+01:00\\\",\\n        \\\"id\\\": \\\"0000000000000001\\\",\\n        \\\"offer\\\": {\\n            \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\",\\n            \\\"amount\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"value\\\": 629375\\n            },\\n            \\\"contractType\\\": \\\"loan\\\",\\n            \\\"expiresAt\\\": \\\"2026-01-26T17:17:34.328+01:00\\\",\\n            \\\"fee\\\": {\\n                \\\"amount\\\": {\\n                    \\\"currency\\\": \\\"EUR\\\",\\n                    \\\"value\\\": 94406\\n                }\\n            },\\n            \\\"id\\\": \\\"0000000000000001\\\",\\n            \\\"repayment\\\": {\\n                \\\"basisPoints\\\": 800,\\n                \\\"term\\\": {\\n                    \\\"estimatedDays\\\": 180,\\n                    \\\"maximumDays\\\": 270\\n                },\\n                \\\"threshold\\\": {\\n                    \\\"amount\\\": {\\n                        \\\"currency\\\": \\\"EUR\\\",\\n                        \\\"value\\\": 80420\\n                    }\\n                }\\n            },\\n            \\\"startsAt\\\": \\\"2026-01-19T17:17:34.328+01:00\\\"\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-19T16:17:35.558Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.balanceAccountHolder.capitalOffer.created\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"grant-requested\">Grant requested<\/h2>\n<p>When a user selects an offer using either the <a href=\"\/pt\/capital\/capital-components\">capital components<\/a> or your <a href=\"\/pt\/capital\/make-grant-request\">custom interface built with our APIs<\/a>, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.created<\/a> webhook to your server. This webhook includes information about the grant, such as:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>counterparty.accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been requested.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Requested<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant requested'\" :id=\"'grant-requested'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 0,\\n                \\\"principal\\\": 0,\\n                \\\"total\\\": 0\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Requested\\\"\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:56:42.107Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.created\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"grant-reviewing\">Grant reviewing<\/h2>\n<p>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&nbsp;25,000 or the equivalent amount in another supported currency. You then need to <a href=\"\/pt\/capital\/collect-user-data\">collect additional data from your user<\/a> and submit it to Adyen.<\/p>\n<p>Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.updated\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.updated<\/a> webhook to notify your server about this event, including the following information:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>counterparty.accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been requested.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Reviewing<\/strong><\/span><\/li>\n<li><code>actions.code<\/code>: <span translate=\"no\"><strong>AnaCreditCapabilityRule<\/strong><\/span><\/li>\n<li><code>actions.resolved<\/code>: <span translate=\"no\"><strong>false<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant reviewing - additional KYC data required'\" :id=\"'grant-reviewing'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 0,\\n                \\\"principal\\\": 0,\\n                \\\"total\\\": 0\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Reviewing\\\",\\n                \\\"actions\\\": [\\n                    {\\n                        \\\"actionCode\\\": \\\"AnaCreditCapabilityRule\\\",\\n                        \\\"resolved\\\": false\\n                    }\\n                ]\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:56:47.889Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.updated\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"grant-approved\">Grant approved<\/h2>\n<p>After a thorough secondary review confirms the grant request meets all criteria, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.updated\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.updated<\/a> webhook to notify your server of final approval. The webhook includes information about the grant, such as:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>counterparty.accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been approved.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Approved<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant approved'\" :id=\"'grant-approved'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 0,\\n                \\\"principal\\\": 0,\\n                \\\"total\\\": 0\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Approved\\\"\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:57:07.977Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.updated\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"grant-pending\">Grant pending<\/h2>\n<p>After Adyen approves the grant, the user must complete required actions, such as <a href=\"\/pt\/capital\/terms-of-service\">signing the Terms of Service<\/a>.<br \/>\nThe grant remains pending until:<\/p>\n<ul>\n<li>All required actions are completed on the user's side.<\/li>\n<li>The grant transaction is booked to the user's balance account.<\/li>\n<li>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.<\/li>\n<\/ul>\n<p>Adyen notifies you of this stage by sending a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.updated\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.updated<\/a> webhook, which includes information about the grant, such as:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>counterparty.accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been approved.<\/li>\n<li><code>counterparty.balanceAccountId<\/code>: The balance account details where the grant amount should be disbursed.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Pending<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant pending'\" :id=\"'grant-pending'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\",\\n                \\\"balanceAccountId\\\": \\\"BA00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 0,\\n                \\\"principal\\\": 0,\\n                \\\"total\\\": 0\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Pending\\\"\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:57:10.153Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.updated\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>After the user completes the required actions, Adyen disburses the grant amount to the specified balance account. At this point, Adyen also sends <a href=\"\/pt\/capital\/webhook-types\/fund-transfers-webhooks\">webhooks about the corresponding fund transfer<\/a>.<\/p>\n<h2 id=\"grant-active\">Grant active<\/h2>\n<p>After the grant is disbursed, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.updated\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.updated<\/a> webhook, including the following information about the grant:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been approved.<\/li>\n<li><code>balanceAccountId<\/code>: The balance account details where the grant amount has been disbursed.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>balances.currency<\/code>: The currency of the grant amount.<\/li>\n<li><code>balances.fee<\/code>: The one-time fee for business financing.<\/li>\n<li><code>balances.principal<\/code>: The amount that has been disbursed to the user.<\/li>\n<li><code>balances.total<\/code>: The total amount that the user must repay. It is the sum of the fee amount and the principal amount.<\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Active<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant active'\" :id=\"'grant-active'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\",\\n                \\\"balanceAccountId\\\": \\\"BA00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 94406,\\n                \\\"principal\\\": 629375,\\n                \\\"total\\\": 723781\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Active\\\"\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:57:25.856Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.updated\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"grant-repaid\">Grant repaid<\/h2>\n<p>After the user has made their last repayment towards the grant and the <a href=\"\/pt\/capital\/webhook-types\/fund-transfers-webhooks\">corresponding transfer has been booked<\/a>, Adyen sends a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/capital-webhooks\/latest\/post\/balancePlatform.grants.updated\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.grants.updated<\/a> webhook which includes the following information:<\/p>\n<ul>\n<li><code>id<\/code>: The unique identifier of the grant.<\/li>\n<li><code>accountHolderId<\/code>: The unique identifier of the account holder for which a grant has been approved.<\/li>\n<li><code>balanceAccountId<\/code>: The balance account details where the grant amount has been disbursed.<\/li>\n<li><code>grantOfferId<\/code>: The unique identifier for the related grant offer, which determines the grant conditions.<\/li>\n<li><code>balances.currency<\/code>: The currency of the grant amount.<\/li>\n<li><code>balances.fee<\/code>: <strong>0<\/strong><\/li>\n<li><code>balances.principal<\/code>: <strong>0<\/strong><\/li>\n<li><code>balances.total<\/code>: <strong>0<\/strong><\/li>\n<li><code>status.code<\/code>: <span translate=\"no\"><strong>Repaid<\/strong><\/span><\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Grant repaid'\" :id=\"'grant-repaid'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": {\\n        \\\"balancePlatform\\\": \\\"TestBalancePlatform\\\",\\n        \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n        \\\"grant\\\": {\\n            \\\"counterparty\\\": {\\n                \\\"accountHolderId\\\": \\\"AH00000000000000000000001\\\",\\n                \\\"balanceAccountId\\\": \\\"BA00000000000000000000001\\\"\\n            },\\n            \\\"grantAccountId\\\": \\\"CG00000000000000000000001\\\",\\n            \\\"grantOfferId\\\": \\\"GO00000000000001\\\",\\n            \\\"balances\\\": {\\n                \\\"currency\\\": \\\"EUR\\\",\\n                \\\"fee\\\": 0,\\n                \\\"principal\\\": 0,\\n                \\\"total\\\": 0\\n            },\\n            \\\"id\\\": \\\"GR00000000000000000000001\\\",\\n            \\\"status\\\": {\\n                \\\"code\\\": \\\"Repaid\\\"\\n            }\\n        }\\n    },\\n    \\\"environment\\\": \\\"test\\\",\\n    \\\"timestamp\\\": \\\"2026-01-21T19:59:10.153Z\\\",\\n    \\\"type\\\": \\\"balancePlatform.grants.updated\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>See also<\/h2>\n<ul>\n<li><a href=\"\/pt\/capital\/webhook-types\">Webhook structures and types for Capital<\/a><\/li>\n<li><a href=\"\/pt\/capital\/grant-lifecycle-and-status\">Grant lifecycle and status<\/a><\/li>\n<\/ul>","url":"https:\/\/docs.adyen.com\/pt\/capital\/webhook-types\/capital-webhooks","articleFields":{"description":"Learn which webhooks are sent for each event.","feedback_component":true,"type":"page","_expandable":{"operations":""},"status":"current","parameters":{"directoryPath":"\/capital","financialProduct":"capital","model":"platform"}},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/capital\/webhook-types\/capital-webhooks","title":"Grant lifecycle-related events","content":"Adyen sends webhooks for the following grant lifecycle-related events:\n\nDynamic offer createdStatic offer createdGrant requestedGrant assessedGrant reviewingGrant approvedGrant rejectedGrant canceledGrant pendingGrant failedGrant activeGrant repaidGrant revokedGrant written off\n\nThe next sections show code samples for some of these events.\nDynamic offer created\nWhen 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:\n\naccountHolderId: The unique identifier of the account holder that the dynamic offer is for.\nid: The unique identifier of the dynamic offer.\ncontractType: loan.\nmaximumAmount: An object containing currency and value of the maximum offer amount, in minor units.\nminimumAmount: An object containing currency and value of the minimum offer amount, in minor units.\nrepayment.term.estimatedDays: The estimated period for repaying the grant, in days.\nrepayment.term.maximumDays: The maximum period for repaying the grant, in days.\nfinancingType: businessFinancing.\nstartsAt and expiresAt: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.\n\n\n    \n\nStatic offer created\nWhen 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:\n\naccountHolderId: The unique identifier of the account holder that the static offer is for.\nid: The unique identifier of the static offer.\ncontractType: loan.\namount: An object containing currency and value of the offer, in minor units.\nrepayment.term.estimatedDays: The estimated period for repaying the grant, in days.\nrepayment.term.maximumDays: The maximum period for repaying the grant, in days.\nrepayment.basisPoints: The repayment amount, in basis points, that is deducted daily from your user's incoming net volume.\nrepayment.threshold: An object containing the details of the minimum threshold amount that your user must repay every 30-day period.\nfee: An object containing the fee currency and value, in minor units.\nstartsAt and expiresAt: The dates when the financing offer begins and ends. The offer must be accepted before the expiration date.\n\n\n    \n\nGrant requested\nWhen 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:\n\nid: The unique identifier of the grant.\ncounterparty.accountHolderId: The unique identifier of the account holder for which a grant has been requested.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nstatus.code: Requested\n\n\n    \n\nGrant reviewing\nIn 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&nbsp;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.\nAdyen sends a  balancePlatform.grants.updated webhook to notify your server about this event, including the following information:\n\nid: The unique identifier of the grant.\ncounterparty.accountHolderId: The unique identifier of the account holder for which a grant has been requested.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nstatus.code: Reviewing\nactions.code: AnaCreditCapabilityRule\nactions.resolved: false\n\n\n    \n\nGrant approved\nAfter 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:\n\nid: The unique identifier of the grant.\ncounterparty.accountHolderId: The unique identifier of the account holder for which a grant has been approved.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nstatus.code: Approved\n\n\n    \n\nGrant pending\nAfter Adyen approves the grant, the user must complete required actions, such as signing the Terms of Service.\nThe grant remains pending until:\n\nAll required actions are completed on the user's side.\nThe grant transaction is booked to the user's balance account.\nThe 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.\n\nAdyen notifies you of this stage by sending a  balancePlatform.grants.updated webhook, which includes information about the grant, such as:\n\nid: The unique identifier of the grant.\ncounterparty.accountHolderId: The unique identifier of the account holder for which a grant has been approved.\ncounterparty.balanceAccountId: The balance account details where the grant amount should be disbursed.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nstatus.code: Pending\n\n\n    \n\nAfter 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.\nGrant active\nAfter the grant is disbursed, Adyen sends a  balancePlatform.grants.updated webhook, including the following information about the grant:\n\nid: The unique identifier of the grant.\naccountHolderId: The unique identifier of the account holder for which a grant has been approved.\nbalanceAccountId: The balance account details where the grant amount has been disbursed.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nbalances.currency: The currency of the grant amount.\nbalances.fee: The one-time fee for business financing.\nbalances.principal: The amount that has been disbursed to the user.\nbalances.total: The total amount that the user must repay. It is the sum of the fee amount and the principal amount.\nstatus.code: Active\n\n\n    \n\nGrant repaid\nAfter 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:\n\nid: The unique identifier of the grant.\naccountHolderId: The unique identifier of the account holder for which a grant has been approved.\nbalanceAccountId: The balance account details where the grant amount has been disbursed.\ngrantOfferId: The unique identifier for the related grant offer, which determines the grant conditions.\nbalances.currency: The currency of the grant amount.\nbalances.fee: 0\nbalances.principal: 0\nbalances.total: 0\nstatus.code: Repaid\n\n\n    \n\nSee also\n\nWebhook structures and types for Capital\nGrant lifecycle and status\n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Capital","lvl2":"Webhook structures and types for Capital","lvl3":"Grant lifecycle-related events"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/capital","lvl2":"https:\/\/docs.adyen.com\/pt\/capital\/webhook-types","lvl3":"\/pt\/capital\/webhook-types\/capital-webhooks"},"levels":4,"category":"","category_color":"","tags":["Grant","lifecycle-related","events"]},"articleFiles":{"dynamic-offer-created.json":"<p alt=\"\">dynamic-offer-created.json<\/p>","grant-active.json":"<p alt=\"\">grant-active.json<\/p>","grant-approved.json":"<p alt=\"\">grant-approved.json<\/p>","grant-pending.json":"<p alt=\"\">grant-pending.json<\/p>","grant-repaid.json":"<p alt=\"\">grant-repaid.json<\/p>","grant-requested.json":"<p alt=\"\">grant-requested.json<\/p>","grant-reviewing.json":"<p alt=\"\">grant-reviewing.json<\/p>","static-offer-created.json":"<p alt=\"\">static-offer-created.json<\/p>"}}
