Annual Business Data Confirmation for Subaccounts
The business data of subaccounts must be confirmed or updated annually.
Track the expiration via Webhooks and update the data before the scheduledDate. If the deadline expires, the subaccount's access to API features may be restricted until the data is brought up to date.
How it works
The commercialInfoExpiration object reports the current confirmation cycle:
| Field | Description |
|---|---|
isExpired | Indicates whether the business data has expired. |
scheduledDate | Scheduled date for the next expiration of the business data. |
This object is returned when creating a subaccount and in operations that retrieve and update business data.
To track changes automatically, prioritize the account status Webhooks.
%%{init: {"flowchart": {"nodeSpacing": 28,"rankSpacing": 32,"diagramPadding": 8,"padding": 10}}}%%
flowchart TD
A["Track Webhooks"] --> B["Receive<br/>ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRING_SOON"]
B --> C["Confirm data<br/>with the account holder"]
C --> D{"Updated by<br/>scheduledDate?"}
D --> DSim(("Yes"))
D --> DNao(("No"))
DSim --> E["Set new<br/>scheduledDate"]
DNao --> F["Receive<br/>ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRED"]
F --> G["Bring commercialInfo<br/>data up to date"]
G --> H["Restore access<br/>to the API"]
classDef inicio fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A,stroke-width:3px,font-size:17px
classDef decisao fill:#FEF3C7,stroke:#D97706,color:#78350F,stroke-width:3px,font-size:17px
classDef validacao fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E,stroke-width:2px,font-size:17px
classDef sucesso fill:#DCFCE7,stroke:#16A34A,color:#14532D,stroke-width:3px,font-size:17px
classDef respostaSim fill:#22C55E,stroke:#15803D,color:#FFFFFF,stroke-width:3px,font-size:16px
classDef respostaNao fill:#EF4444,stroke:#B91C1C,color:#FFFFFF,stroke-width:3px,font-size:16px
class A inicio
class B,C,F,G validacao
class D decisao
class E,H sucesso
class DSim respostaSim
class DNao respostaNao
linkStyle default stroke:#94A3B8,stroke-width:2px
linkStyle 3 stroke:#22C55E,stroke-width:4px
linkStyle 4 stroke:#EF4444,stroke-width:4px
1. Track the expiration via Webhooks
Configure the Account status Webhooks and handle these events:
ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRING_SOON: the business data is close to expiring and must be confirmed or updated;ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRED: the deadline expired without confirmation and the subaccount's API operations will be restricted.
The ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRING_SOON event is sent 40 days before the scheduledDate.
Business data close to expiring
{
"id":"evt_05b708f961d739ea7eba7e4db318f621&368604920",
"event":"ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRING_SOON",
"dateCreated":"2024-05-10 16:45:03",
"accountStatus":{
"id":"175027c1-029c-41e5-8b9a-e289b9788c33",
"commercialInfo":"APPROVED",
"bankAccountInfo":"APPROVED",
"documentation":"APPROVED",
"general":"APPROVED"
},
"additionalInfo":{
"scheduledDate":"2025-06-20"
}
}When you receive this event, ask the account holder to confirm or update the data before the date given in additionalInfo.scheduledDate.
2. Retrieve the data that needs to be confirmed
Retrieve the subaccount's current data to present it to the account holder:
GET
/v3/myAccount/commercialInfo/
See the full reference for this endpoint
Use this query when you need to display or validate the data before confirmation.
Avoid recurring queries just to find out whether the expiration date has changed.
Note on Rate Limits:Remember that the update is annual. Excessive proactive checks on this field can overload your API request quota (rate limit). Prioritize using webhooks and, if you make proactive queries, do so infrequently, keeping in mind that the expiration date only changes annually or after an update.
3. Confirm or update the business data
After validating the information with the account holder, send the subaccount's business data:
POST
/v3/myAccount/commercialInfo/
See the full reference for this endpoint
Fill in all the information required by the endpoint again. Fields not sent may be interpreted as null, and incomeValue is required.
Depending on the information changed, the account may undergo a new review, with some features temporarily blocked.
Important:Remember that this endpoint must be called in the context of the subaccount, that is, using the specific subaccount's
access_token.
AttentionWhen the update succeeds, a new
scheduledDatewill be set in thecommercialInfoExpirationobject (returned in the response and in future queries) to one year ahead, and access to API features for that subaccount will remain normal.
If the data expires
If the update does not happen by the scheduledDate, Asaas sends:
ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRED
Expired business data
{
"id":"evt_05b708f961d739ea7eba7e4db318f621&368604920",
"event":"ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIRED",
"dateCreated":"2024-05-10 02:00:00",
"accountStatus":{
"id":"175027c1-029c-41e5-8b9a-e289b9788c33",
"commercialInfo":"APPROVED",
"bankAccountInfo":"APPROVED",
"documentation":"APPROVED",
"general":"APPROVED"
},
"additionalInfo":{
"scheduledDate":"2025-05-10"
}
}
Important:Even when the
ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIREDevent is triggered, thecommercialInfoandgeneralfields within theaccountStatusobject (as shown above) may still have the valueAPPROVED.
The annual confirmation is independent of the general registration approval flow. Therefore, commercialInfo and general may remain APPROVED even with expired business data.
To identify the pending item, consider:
- the
ACCOUNT_STATUS_COMMERCIAL_INFO_EXPIREDevent; commercialInfoExpiration.isExpiredequal totrue.
What happens during the block
Important:When trying to call any API endpoint that is blocked due to the expiration of the business data (that is, any endpoint other than those listed below as accessible), your integration will receive the HTTP 403 Forbidden status code as the response. The error response body will include a message indicating that the action cannot be completed due to the pending confirmation/update of the business data and the need to bring it up to date to restore access.
To allow the data to be brought up to date, these endpoints remain accessible:
GET
/v3/myAccount/commercialInfo/
POST/v3/myAccount/commercialInfo/
Retrieve the current data, confirm or update the information with the account holder, and send it again via POST.
After the update:
- access to the other API features is restored;
commercialInfoExpiration.isExpiredgoes back tofalse;- a new
scheduledDateis set.
How to validate the confirmation
After updating the data, confirm in the response or in a later query that:
commercialInfoExpiration.isExpiredisfalse;commercialInfoExpiration.scheduledDatewas updated to the next annual cycle;- the subaccount's operations no longer return
HTTP 403, if it was blocked.
Keep tracking the Webhooks to handle the next cycle without recurring polling.
Next steps
Updated 18 days ago
