Skip to main content

Webhook Events

Here, we present the current events that you may receive through your registered Webhook, as described in the previous section. These events include the following:

EventsDescription
TICKETA ticket event refers to any updates related to a created ticket (money) within your Account. Naturally, it may also involve a subAccount. This event can have multiple statuses, such as TICKET-CREATED, DEPOSIT-PROCESSING, among others.
KYCA KYC event refers to any updates related to a KYC attempt. This event can have multiple statuses, such as KYC-STARTED, KYC-PROCESSING, KYC-EXPIRED, and KYC-COMPLETED.
LIMIT-UPDATEAn event that notifies you when there are changes to your account's operational limits. This is typically triggered after a successful KYC verification or when an administrator modifies your account limits.
WALLET-QUALIFICATIONAn event that notifies you when you receive a deposit from a deposit sender wallet that still needs to be qualified.
KYT-STATEAn event that notifies you when one of your users (or a user/counterparty pair) is held, placed under review, rejected or released by our compliance team. Its single status is KYT-STATE-CHANGED.

Ticket​

The Ticket Event always reflects an update related to any updates related to a created ticket within your account. In other words, for each type of transaction (as defined inside the quote field of a ticket), a ticket is generated.

Each ticket has a specific type, which determines the nature of the transaction, and during the lifecycle of that ticket, you’ll receive multiple status updates reflecting its current state.

These updates will be sent to your registered Webhook as the ticket progresses through its execution steps.

tickets fluxogram

info

About the TICKET-ON-HOLD state (dotted path): This is an optional state entered when our risk engine flags a ticket for compliance review during deposit processing, before the deposit is settled. The ticket pauses while our compliance team reviews it. Approved tickets move to DEPOSIT-SUCCESS and proceed to DELIVERY-PROCESSING normally. Rejected tickets move to DEPOSIT-FAILED when the deposit can be refunded to the sender or the input is an Avenia balance (INTERNAL); otherwise the ticket ends in PARTIAL-FAILED and the full input amount is credited to your Avenia Wallet in the input currency. If the review window elapses without action, the ticket is auto-approved and proceeds to DEPOSIT-SUCCESS. When a ticket enters this state a TICKET-ON-HOLD webhook is dispatched.

info

Deposit check failures: Before crediting a BRL/PIX deposit, Avenia runs compliance and limit checks. A failed check follows the same failure path as any other rejected deposit: the ticket becomes FAILED, a DEPOSIT-FAILED webhook is sent, and the full input amount is returned asynchronously to the originating account.

The failureReason field may contain user does not have enough limit, third party deposit is not allowed for this user, or deposit could not be verified, funds returned. Compliance rejections include a reason in failureReason. The reason field may first report Refund in progress. and later include the refund E2E ID. Treat the refund as pending until the ticket reaches its final state or the TICKET-COMPLETE webhook is received.

Ticket Event's Status​

Status NameDescription
TICKET-CREATEDThe ticket has been successfully created—this occurs when the transaction hits the endpoint.
DEPOSIT-PROCESSINGThe deposit phase has started and is currently being processed.
TICKET-ON-HOLDThe ticket has been paused for compliance review during deposit processing, before the deposit is settled.
DEPOSIT-SUCCESSThe deposit was completed successfully.
DEPOSIT-FAILEDThe deposit attempt has failed. For a failed deposit gate, no output asset is credited and the full input amount is returned asynchronously.
DELIVERY-PROCESSINGThe delivery phase (e.g., transfer of tokens or funds) is now in progress.
DELIVERY-SUCCESSThe delivery was completed successfully.
DELIVERY-FAILEDThe delivery attempt has failed.
TICKET-COMPLETEThe entire ticket lifecycle has been completed, regardless of the outcome.
info

If a deposit is made to the Main Account without a previously created Ticket, a Ticket Event will still be triggered, starting with the status TICKET-CREATED

info

Any type of error will also return a REASON field, providing details about why the specific step could not be completed.

An additional note for when the Ticket represents a Pay Out—either via PIX or BrCode​

When the Ticket represents a Pay Out via PIX or BrCode, the delivery status may fail. In such cases, a new status will be generated, followed by a refund of the original input amount.

ticket fluxogram when it is pay out pix or br code

Ticket Event's Status Pay Out Failure​

Status NameDescription
DELIVERY-PROCESSINGThe delivery phase (e.g., transfer of tokens or funds) is now in progress.
DELIVERY-PARTIAL-FAILEDFailure to complete Pay Out delivery

Understanding the Data Returned in a Webhook​

Ticket Events follow a standardized structure, where:

{
"event": {
"id": "6df2ae75-670f-4619-a6b1-8a5018af56b0",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {},
"type": "TICKET-CREATED"
}
"createdAt": "2025-09-16T12:32:12.338058Z"
}
Detailed ticket events

TICKET-CREATED​

{
"event": {
"id": "6df2ae75-670f-4619-a6b1-8a5018af56b0",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "UNPAID",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.208933037Z",
"updatedAt": "2025-09-16T12:32:12.208933037Z",
"expiresAt": "2025-09-17T12:32:12.208933037Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "",
"taxId": "",
"bankCode": "",
"branchCode": "",
"accountNumber": "",
"accountType": "",
"endToEndId": ""
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": ""
}
},
"type": "TICKET-CREATED"
},
"createdAt": "2025-09-16T12:32:12.338058Z",
"EventType": ""
}
}

DEPOSIT-PROCESSING​

{
"event": {
"id": "7b1cc0ab-5e35-4cb0-a5be-720aba6f9146",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "PROCESSING",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:12.219815Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "",
"taxId": "",
"bankCode": "",
"branchCode": "",
"accountNumber": "",
"accountType": "",
"endToEndId": ""
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": ""
}
},
"type": "DEPOSIT-PROCESSING"
},
"createdAt": "2025-09-16T12:32:26.669037Z",
"EventType": ""
}
}

DELIVERY-PROCESSING​

{
"event": {
"id": "98db8c1b-b2f6-4ee1-92d9-cd7821ce29f8",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "PROCESSING",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:12.219815Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "Example Company Ltda",
"taxId": "00000000000100",
"bankCode": "00000000",
"branchCode": "0001",
"accountNumber": "0000000000000000",
"accountType": "payment",
"endToEndId": "e00000000202509161232XXXXXXXXXXX"
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": ""
}
},
"type": "DELIVERY-PROCESSING"
},
"createdAt": "2025-09-16T12:32:26.829798Z",
"EventType": ""
}
}

DEPOSIT-SUCCESS​

{
"event": {
"id": "b4d05f88-09a0-488c-8360-5c42c11d3a52",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "PROCESSING",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:12.219815Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "Example Company Ltda",
"taxId": "00000000000100",
"bankCode": "00000000",
"branchCode": "0001",
"accountNumber": "0000000000000000",
"accountType": "payment",
"endToEndId": "e00000000202509161232XXXXXXXXXXX"
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": ""
}
},
"type": "DEPOSIT-SUCCESS"
},
"createdAt": "2025-09-16T12:32:26.857476Z",
"EventType": ""
}
}

TICKET-ON-HOLD​

{
"event": {
"id": "a3f1c2d4-7e8b-49a0-bd12-3c4e5f6a7b8c",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "ON-HOLD",
"reason": "Asset delivery temporarily held for compliance review.",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:27.012345Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "Example Company Ltda",
"taxId": "00000000000100",
"bankCode": "00000000",
"branchCode": "0001",
"accountNumber": "0000000000000000",
"accountType": "payment",
"endToEndId": "e00000000202509161232XXXXXXXXXXX"
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": ""
}
},
"type": "TICKET-ON-HOLD"
},
"createdAt": "2025-09-16T12:32:27.012345Z",
"EventType": ""
}
}

DELIVERY-SUCCESS​

{
"event": {
"id": "546dce9b-98ea-447b-9136-d1265cb36d81",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "PAID",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:12.219815Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "Example Company Ltda",
"taxId": "00000000000100",
"bankCode": "00000000",
"branchCode": "0001",
"accountNumber": "0000000000000000",
"accountType": "payment",
"endToEndId": "e00000000202509161232XXXXXXXXXXX"
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": "0x0000000000000000000000000000000000000000000000000000000000000007"
}
},
"type": "DELIVERY-SUCCESS"
},
"createdAt": "2025-09-16T12:32:35.762643Z",
"EventType": ""
}
}

TICKET-COMPLETE​

{
"event": {
"id": "ee9a907f-3fdc-4521-9d61-28f6c6a859b5",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "TICKET",
"data": {
"ticket": {
"id": "c4bd34dd-cbb2-4cda-b158-f104dd67d0c8",
"externalId": "",
"workspaceId": "33333333-3333-3333-3333-333333333333",
"userId": "44444444-4444-4444-4444-444444444444",
"status": "PAID",
"reason": "",
"failureReason": "",
"createdAt": "2025-09-16T12:32:12.219815Z",
"updatedAt": "2025-09-16T12:32:12.219815Z",
"expiresAt": "2025-09-17T12:32:12.208933Z",
"quote": {
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"inputAmount": "10.2",
"outputCurrency": "BRLA",
"outputPaymentMethod": "INTERNAL",
"outputAmount": "10",
"markupCurrency": "",
"markupAmount": "0",
"sendMethod": "PERMIT",
"inputThirdParty": false,
"outputThirdParty": false,
"basePrice": "1",
"appliedFees": [
{
"type": "Markup Fee",
"description": "Total markup fees represented in the input currency.",
"amount": "0",
"currency": "BRL",
"rebatable": false
},
{
"type": "In Fee",
"description": "Fees due to input currency and input payment method.",
"amount": "0.2",
"currency": "BRL",
"rebatable": true
},
{
"type": "Conversion Fee",
"description": "Fees due to conversion from input currency to output currency.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Out Fee",
"description": "Fees due to output currency and output payment method.",
"amount": "0",
"currency": "BRL",
"rebatable": true
},
{
"type": "Gas Fee",
"description": "Fees due to blockchain transaction costs.",
"amount": "0",
"currency": "BRL",
"rebatable": false
}
],
"pairName": "BRLBRLA",
"outputBrCode": "",
"createdAt": "2025-09-16T12:32:11Z"
},
"brazilianFiatSenderInfo": {
"referenceLabel": "uOUAP45Mg7PrhVg50DURHjX6f",
"additionalData": "BRLA Ticket Payment",
"name": "Example Company Ltda",
"taxId": "00000000000100",
"bankCode": "00000000",
"branchCode": "0001",
"accountNumber": "0000000000000000",
"accountType": "payment",
"endToEndId": "e00000000202509161232XXXXXXXXXXX"
},
"blockchainReceiverInfo": {
"walletAddress": "0x0000000000000000000000000000000000000003",
"walletChain": "INTERNAL",
"walletMemo": "",
"txHash": "0x0000000000000000000000000000000000000000000000000000000000000007"
}
},
"type": "TICKET-COMPLETE"
},
"createdAt": "2025-09-16T12:32:35.776372Z",
"EventType": ""
}
}

KYC​

The KYC Event reflects updates related to a Know Your Customer verification attempt within your account. These events track the entire lifecycle of a KYC verification process, from submission to completion.

During the KYC verification process, you'll receive multiple status updates reflecting the current state of the verification attempt.

KYC Event Types​

Type NameDescription
KYC-STARTEDIndicates that the KYC process has been initiated.
KYC-PROCESSINGIndicates that the KYC information is being processed.
KYC-COMPLETEDIndicates that the KYC process has been completed.
KYC-EXPIREDIndicates that the KYC process has been expired.

KYC Status​

Status NameDescription
PENDINGThe KYC verification is pending and awaiting processing.
PROCESSINGThe KYC verification is currently being processed.
COMPLETEDThe KYC verification has been completed (with either APPROVED or REJECTED result).
EXPIREDThe KYC verification has expired without being completed.

KYC Result​

Result NameDescription
APPROVEDThe KYC verification was successfully approved.
REJECTEDThe KYC verification was rejected. A resultMessage field will provide details about the reason for rejection.

Understanding the Data Returned in a KYC Webhook​

KYC Events follow a standardized structure, where:

{
"event": {
"id": "unique-event-id",
"accountId": "account-identifier",
"subscription": "KYC",
"data": {
"attempt": {
"id": "kyc-attempt-id",
"userId": "user-identifier",
"levelName": "level-1",
"submissionData": {
// Personal information submitted for verification
},
"status": "COMPLETED",
"result": "APPROVED",
"resultMessage": "",
"rejectionLabels": [],
"retryable": false,
"createdAt": "timestamp",
"updatedAt": "timestamp"
},
"type": "KYC-COMPLETED"
},
"createdAt": "timestamp",
"EventType": ""
}
}

KYC Webhook Fields​

FieldDescription
idUnique identifier for the webhook event.
accountIdThe identifier of the account associated with this KYC attempt.
subscriptionAlways "KYC" for KYC events.
data.attempt.idUnique identifier for the specific KYC attempt.
data.attempt.userIdThe identifier of the user making the KYC attempt.
data.attempt.levelNameThe KYC level being attempted (e.g., "level-1").
data.attempt.submissionDataContains all personal information submitted for verification.
data.attempt.statusCurrent status of the KYC attempt (PENDING, PROCESSING, COMPLETED, EXPIRED).
data.attempt.resultResult of the KYC verification (APPROVED or REJECTED) when completed.
data.attempt.resultMessageProvides details about rejection reasons if the result is REJECTED.
data.attempt.rejectionLabelsArray of machine-readable labels categorizing rejection reasons. See Rejection Labels.
data.attempt.retryableBoolean indicating if another KYC attempt can be made.
data.typeThe type of KYC event (KYC-STARTED, KYC-PROCESSING, KYC-COMPLETED).
info

When a KYC verification is rejected, the resultMessage field will contain information about why the verification failed, such as "birthdate does not match".

info

The retryable field indicates whether a new KYC attempt can be made. If true, the user can submit another KYC verification with corrected information.

LIMIT-UPDATE​

The LIMIT-UPDATE Event notifies you when there are changes to your account's operational limits. These events are triggered whenever your account limits are updated, either due to KYC level changes, administrative actions, or other account-related events.

Understanding the Data Returned in a LIMIT-UPDATE Webhook​

LIMIT-UPDATE Events follow a standardized structure, where:

{
"event": {
"id": "unique-event-id",
"accountId": "account-identifier",
"subscription": "LIMIT-UPDATE",
"data": {
"limitInfo": {
"blocked": false,
"createdAt": "timestamp",
"limits": [
{
"currency": "*",
"maxFiatIn": "100000",
"maxFiatOut": "100000",
"maxChainIn": "100000",
"maxChainOut": "100000",
"usedLimit": {
"year": 0,
"month": 0,
"usedFiatIn": "0",
"usedFiatOut": "0",
"usedChainIn": "0",
"usedChainOut": "0"
}
},
{
"currency": "BRL",
"maxFiatIn": "600000",
"maxFiatOut": "600000",
"maxChainIn": "600000",
"maxChainOut": "600000",
"usedLimit": {
"year": 0,
"month": 0,
"usedFiatIn": "0",
"usedFiatOut": "0",
"usedChainIn": "0",
"usedChainOut": "0"
}
}
// Additional currencies...
]
},
"type": "LIMIT-UPDATE"
},
"createdAt": "timestamp",
"EventType": ""
}
}

LIMIT-UPDATE Webhook Fields​

FieldDescription
idUnique identifier for the webhook event.
accountIdThe identifier of the account whose limits were updated.
subscriptionAlways "LIMIT-UPDATE" for limit update events.
data.limitInfo.blockedBoolean indicating if the account is blocked from operations.
data.limitInfo.createdAtTimestamp when the limit information was generated.
data.limitInfo.limitsArray of objects containing limit details for different currencies.
data.typeAlways "LIMIT-UPDATE" for this event type.

Each object in the limits array contains:

FieldDescription
currencyThe currency code. A value of "*" represents the global limit in USD.
maxFiatInThe maximum monthly limit for fiat deposits.
maxFiatOutThe maximum monthly limit for fiat withdrawals.
maxChainInThe maximum monthly limit for on-chain deposits.
maxChainOutThe maximum monthly limit for on-chain withdrawals.
usedLimitObject containing details about consumed limits for the current month.
info

The LIMIT-UPDATE event is typically triggered after a successful KYC verification or when an administrator modifies your account limits.

WALLET-QUALIFICATION​

The WALLET-QUALIFICATION-REQUIRED event notifies you that you received a crypto deposit from a deposit sender wallet that is still PENDING. It's sent for every deposit from that wallet until you qualify it with Qualify Deposit Sender Wallet. Wallets that are already QUALIFIED never trigger it.

Understanding the Data Returned in a WALLET-QUALIFICATION Webhook​

{
"event": {
"id": "unique-event-id",
"accountId": "account-identifier",
"subscription": "WALLET-QUALIFICATION",
"data": {
"type": "WALLET-QUALIFICATION-REQUIRED",
"depositSenderWallet": {
"id": "00000000-0000-0000-0000-000000000000",
"userId": "00000000-0000-0000-0000-000000000000",
"walletAddress": "0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"chainFamily": "EVM",
"isSelfCustody": null,
"custodianName": "",
"beneficiaryName": "",
"beneficiaryCountry": "",
"purposeCode": "",
"qualificationStatus": "PENDING",
"acamGroup": null,
"lastDepositAt": "timestamp",
"createdAt": "timestamp"
},
"deposit": {
"ticketId": "00000000-0000-0000-0000-000000000000",
"txHash": "0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"chain": "POLYGON",
"asset": "BRLA",
"amount": "10"
}
},
"createdAt": "timestamp"
}
}

WALLET-QUALIFICATION Webhook Fields​

FieldDescription
idUnique identifier for the webhook event. A retry of the same deposit keeps the same id, so you can use it to deduplicate.
accountIdThe account that received the deposit.
subscriptionAlways "WALLET-QUALIFICATION" for these events.
data.typeAlways "WALLET-QUALIFICATION-REQUIRED".
data.depositSenderWalletThe sending wallet, in the same format as Get all Deposit Sender Wallets. Use its id to qualify it.
data.deposit.ticketIdThe deposit's ticket. null when the deposit is an internal transfer from another Avenia account.
data.deposit.txHashTransaction hash of the deposit.
data.deposit.chainThe chain the deposit arrived on, such as POLYGON, TRON or INTERNAL.
data.deposit.assetToken received.
data.deposit.amountAmount received, as a decimal string.

KYT-STATE​

The KYT-STATE Event notifies you when our compliance team changes the transaction status of one of your users. It is sent when a user is temporarily held, placed under review, permanently rejected, or released again. While a user is held, under review or rejected, that user's transactions are paused for compliance review or refunded to the sender; the webhook lets you inform your end user before they try.

For companies, a restriction may apply only to transactions between your user and one specific counterparty. In that case the event carries the counterpartyKey and the restriction does not affect the user's other transactions.

KYT-STATE Status​

StatusDescription
TEMPORARY_HOLDTransactions are held until expiresAt. The hold lifts by itself at that time; no release event is sent.
UNDER_REVIEWTransactions are held until our compliance team decides. A release event follows the decision.
REJECTEDTransactions are refused permanently. A release event is only sent if compliance reverses the decision.
ACTIVEThe restriction was lifted by our compliance team. Transactions are allowed again.

A state is announced when the user enters it. A TEMPORARY_HOLD is also announced again each time it is extended: you receive a new event with state and previousState both TEMPORARY_HOLD and a later expiresAt. Always keep the latest expiresAt you received.

Understanding the Data Returned in a KYT-STATE Webhook​

{
"event": {
"id": "6d1f0b1e-3c2a-4a7e-9f0b-2a1c3d4e5f60",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "KYT-STATE",
"data": {
"type": "KYT-STATE-CHANGED",
"kytState": {
"userId": "44444444-4444-4444-4444-444444444444",
"state": "TEMPORARY_HOLD",
"previousState": "ACTIVE",
"expiresAt": "2026-10-04T12:00:00Z",
"message": "User temporarily held for compliance review until 2026-10-04T12:00:00Z. Transactions will be refused until then. Send an email to compliance@avenia.io and respond to the RFI (request for information).",
"updatedAt": "2026-10-02T12:00:00Z"
}
}
}
}

A release of a counterparty-scoped restriction looks like this:

{
"event": {
"id": "0b7c9e2a-5d41-4f8e-8a3b-9c1d2e3f4a5b",
"accountId": "44444444-4444-4444-4444-444444444444",
"subscription": "KYT-STATE",
"data": {
"type": "KYT-STATE-CHANGED",
"kytState": {
"userId": "44444444-4444-4444-4444-444444444444",
"counterpartyKey": "52998224725",
"state": "ACTIVE",
"previousState": "UNDER_REVIEW",
"message": "Transactions between this user and counterparty 52998224725 were released by compliance and are allowed again.",
"updatedAt": "2026-10-03T09:30:00Z"
}
}
}
}

KYT-STATE Webhook Fields​

FieldDescription
idUnique identifier for the webhook event.
accountIdThe identifier of the user whose compliance status changed.
subscriptionAlways "KYT-STATE" for this event.
data.typeAlways "KYT-STATE-CHANGED".
data.kytState.userIdThe user whose compliance status changed.
data.kytState.counterpartyKeyPresent only when the restriction applies to one counterparty: the counterparty's tax id, PIX key or wallet address, exactly as it appeared in the transaction. Absent when the restriction applies to the user as a whole.
data.kytState.stateThe new status: TEMPORARY_HOLD, UNDER_REVIEW, REJECTED or ACTIVE.
data.kytState.previousStateThe status before this change, in the same vocabulary.
data.kytState.expiresAtPresent only for TEMPORARY_HOLD: when the hold lifts, in UTC (RFC 3339).
data.kytState.messageA sentence you can show to your end user. For restrictions it ends with how to contact our compliance team.
data.kytState.updatedAtWhen the change happened, in UTC.