Balance block events

Receive real-time notifications whenever an amount is blocked or unblocked in your account balance

Use balance block events to identify amounts blocked or unblocked in the account without continuously querying the statement.

These events let you react to holds caused by Pix disputes, legal proceedings or administrative blocks.

Available events

EventWhen it occursHandling in the integration
BALANCE_VALUE_BLOCKEDAn amount is blocked in the account balance.Record the hold and update the reconciliation to reflect the unavailable amount.
BALANCE_VALUE_UNBLOCKEDA previously blocked amount is released.Reverse the corresponding hold and update the reconciliation to reflect the amount returning to the available balance.

Identify the origin of the block

The balanceData.type field indicates the origin of the block.

balanceData.typeOrigin
PIX_INFRACTIONBlock originated by the Pix Special Return Mechanism (MED).
JUDICIALBlock originated by a legal proceeding.
ADMINISTRATIVEBlock applied internally by the Asaas team.
CONTRACTUAL_EFFECTBlock due to settlement of a contractual effect (receivables reservation).

Use this field to define how the hold is handled in your reconciliation.

Event payload

The notification is sent via POST with the event and the block data.

{
  "id": "evt_6561b631fa5580caadd00bbe3b858607&9193",
  "event": "BALANCE_VALUE_BLOCKED",
  "dateCreated": "2024-10-16 11:11:04",
  "account": {
    "id": "47ed0d25-f9fb-4b35-b23a-d8895caf92b7",
    "ownerId": null
  },
  "balanceData": {
    "value": 1234.56,
    "date": "2025-09-03",
    "description": "Balance block related to a Pix dispute.",
    "type": "PIX_INFRACTION",
    "paymentId": "pay_123456789"
  }
}

Important payload fields

FieldDescription
idUnique identifier of the event. Use it for idempotence.
eventIdentifies whether the amount was blocked or unblocked.
account.idIdentifier of the affected account.
balanceData.valueAmount related to the block or unblock.
balanceData.dateDate related to the balance event.
balanceData.descriptionDescription of the block or unblock.
balanceData.typeOrigin of the block.
balanceData.paymentIdCharge related to the block, when there is one.

The paymentId attribute identifies the charge related to the block/unblock, when applicable. It is always present in the payload, but its value will be null when the block is not associated with a specific charge, which always happens for the JUDICIAL and ADMINISTRATIVE types, and may also occasionally happen for PIX_INFRACTION and CONTRACTUAL_EFFECT if there is no charge linked to the transaction.

How to handle the events

When receiving an event:

  1. identify the account through the account.id field;
  2. use event to distinguish a block from an unblock;
  3. use balanceData.type to identify the origin;
  4. persist the event id to prevent duplicate processing;
  5. update your reconciliation with balanceData.value;
  6. respond HTTP 200 after confirming persistence and process additional rules asynchronously.

Webhooks follow the at least once model, so the same event may be sent more than once.

See how to implement idempotence in Webhooks.

To track new blocks and unblocks, use Webhooks instead of repeatedly querying the statement. The statement can still be used for historical queries and on-demand reconciliation.

🚧

Attention

  • As new products and features are added to Asaas, new attributes may be included in the Webhook. It is very important that your code is prepared not to throw exceptions if Asaas returns new attributes that your application does not handle, as this may interrupt the sync queue.
  • We will send an email and announce on our Discord when new fields are added to the Webhook. The email will be sent to the notification email address defined in the webhook settings.

Next steps


Did this page help you?