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:

FieldDescription
isExpiredIndicates whether the business data has expired.
scheduledDateScheduled 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.

📘

Attention

When the update succeeds, a new scheduledDate will be set in the commercialInfoExpiration object (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_EXPIRED event is triggered, the commercialInfo and general fields within the accountStatus object (as shown above) may still have the value APPROVED.

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_EXPIRED event;
  • commercialInfoExpiration.isExpired equal to true.

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.isExpired goes back to false;
  • a new scheduledDate is set.

How to validate the confirmation

After updating the data, confirm in the response or in a later query that:

  • commercialInfoExpiration.isExpired is false;
  • commercialInfoExpiration.scheduledDate was 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


Did this page help you?