> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vitawallet.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook Events

> Retrieves the 10 most recent events generated for your business account, ordered by creation date in descending order. Each event includes the transaction payload, delivery status, attempt history, and the server response received from your endpoint.

Use this endpoint to:

- Debug webhook delivery issues by inspecting which events failed and why.

- Audit recent activity to verify that your server is correctly receiving and acknowledging events.

- Validate integration health by confirming that the event types and payloads match your handlers.

#### Response Structure

| Field | Type | Description |
| --- | --- | --- |
| `events` | Array | List of events (maximum 10). |
| `total` | Integer | Total number of events available for the business. |
| `limit` | Integer | Limit of events returned per response (always 10). |

#### Event Object

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Unique identifier of the event. Opaque text identifier — do not validate as a UUID. |
| `event_type` | string | Type of event (e.g., `transaction.completed`, `transaction.failed`). |
| `status` | string | Delivery status: `pending`, `processing`, `sent`, `failed`, `expired`. |
| `payload` | object | Event data (structure depends on the transaction category). |
| `attempts` | integer | Number of delivery attempts made. |
| `created_at` | string (ISO 8601) | Event creation timestamp. |
| `next_retry_at` | string (ISO 8601) | null |
| `sent_at` | string (ISO 8601) | null |
| `server_response` | string | null |

#### Delivery and Retry Policy

- Only an HTTP **`200`** response from your server counts as a successful delivery. Other 2xx codes (`201`, `202`, `204`, etc.) are **not** treated as success and will trigger a retry — respond with exactly `200`.

- Failed deliveries are retried up to **5 times**, with increasing delays between attempts: **1 minute, 5 minutes, 15 minutes, 1 hour, 6 hours.** After the 5th failed attempt, the event's status becomes `failed`.

- Events that remain undelivered for more than **30 days** are marked `expired`.

#### Event Payload Structure

The contents of the `payload` field vary by transaction category. The base attributes below are included in all transaction event payloads, regardless of category.

#### Base Attributes (All Categories)

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Transaction identifier. Opaque text identifier — most real values include a numeric suffix (e.g. `...-24544`); do not validate as a UUID. |
| `order` | string | null |
| `category` | string | Transaction category (`deposit`, `payment`, `sent`, `received`, `exchange`, `fee`, etc.). |
| `status` | string | Transaction status (`started`, `completed`, `pending`, `denied`, `processed`, `failed`, `time_out`, `checking`). |
| `amount` | string (decimal) | Transaction amount (before fees), sent as a quoted string, e.g. `"789000.0"` — not a JSON number. |
| `total` | string (decimal) | Total transaction amount (including fees), also sent as a string. |
| `currency` | string | Currency code (`eth`, `btc`, `clp`, `usd`, `cop`, `usdt`, `usdc`, `ars`, `mxn`, `brl`, `eur`). |
| `created_at` | string (ISO 8601) | Transaction creation timestamp. |
| `description` | string | Transaction description. |
| `statuses` | Array | Transaction status history (see below). |

#### Status History Object

Each entry in the `statuses` array describes a status change in the transaction's lifecycle.

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Status value at this point in time. |
| `created_at` | string (ISO 8601) | When this status was set. |
| `description` | string | Description of the status change. |
| `transaction_operation_type` | string | Type of operation that caused this status change. |

#### Category-Specific Attributes

In addition to base attributes, each category may include extra fields specific to its nature.

#### Category: `deposit`

| Field | Type | Description |
| --- | --- | --- |
| `funding_source__user_name` | string | null |
| `funding_source__user_document_type` | string | null |
| `funding_source__user_document_number` | string | null |
| `funding_source__user_email` | string | null |
| `funding_source__account` | string | null |
| `funding_source__ID_provider` | string | null |
| `total_fee` | decimal | null |
| `fee_value` | decimal | null |
| `fee_type` | string | null |

> Funding source fields are populated whenever the payment provider reports payer data — this is not limited to any specific provider. If a given provider doesn't report this data, the corresponding `funding_source__*` fields will be `null`. Fee fields are always included but may be `null` when no fees apply.

#### Category: `payment`

| Field | Type | Description |
| --- | --- | --- |
| `funding_source__user_name` | string | null |
| `funding_source__user_document_number` | string | null |
| `funding_source__user_email` | string | null |
| `funding_source__account` | string | null |
| `funding_source__ID_provider` | string | null |
| `spread` | decimal | null |
| `fixed_cost` | decimal | null |
| `country_code` | string | null |

> Payment data is retrieved from the associated PaymentOrder using the `business_order` field. If `business_order` is missing or the PaymentOrder is not found, all payment-specific fields will be `null`. Remember: you only receive `payment` category transaction events (and `payment_order.*` / `payment_order_attempt.*` events) if you are subscribed to the `payment` category.

#### Category: `sent`

Used for outgoing transfers.

| Field | Type | Description |
| --- | --- | --- |
| `hash_result` | string | null |
| `from_address` | string | null |
| `to_address` | string | null |
| `network_name` | string | null |
| `total_fee` | decimal | null |
| `fee_value` | decimal | null |
| `fee_type` | string | null |

> Hash and address fields are blockchain-specific and may be `null` for non-crypto transactions.

#### Category: `received`

Used for incoming transfers. Same structure as `sent`.

| Field | Type | Description |
| --- | --- | --- |
| `hash_result` | string | null |
| `from_address` | string | null |
| `to_address` | string | null |
| `network_name` | string | null |
| `total_fee` | decimal | null |
| `fee_value` | decimal | null |
| `fee_type` | string | null |

#### Category: `exchange`

Used for currency conversions.

| Field | Type | Description |
| --- | --- | --- |
| `hash_result` | string | null |
| `total_fee` | decimal | null |
| `fee_value` | decimal | null |
| `fee_type` | string | null |

#### Category: `fee` (and other categories)

Used for fee transactions and any other categories not explicitly handled.

| Field | Type | Description |
| --- | --- | --- |
| `total_fee` | decimal | null |
| `fee_value` | decimal | null |
| `fee_type` | string | null |

> Categories such as `withdrawal`, `transfer`, `vita_card`, `tax`, `cash_back_coupon`, `service_payment`, `adjustment`, and similar will return only the base attributes plus these fee attributes.



## OpenAPI

````yaml /openapi.yaml get /api/businesses/events
openapi: 3.0.0
info:
  title: Vita Business API
  description: >-
    Vita Wallet Business API — integra payins, payouts, exchange, transactions,
    users y webhooks para operar pagos en LatAm y el mundo.
  version: 1.0.0
  contact:
    name: Vita Wallet Support
    url: https://vitawallet.io
    email: empresas@vitawallet.io
servers:
  - url: https://api.vitawallet.io
    description: Production
  - url: https://api.stage.vitawallet.io
    description: Sandbox
security:
  - xLogin: []
    xTransKey: []
    xDate: []
    hmacSignature: []
tags:
  - name: Create Payin
  - name: Direct Payment
  - name: Exchange
  - name: Vita Sent
  - name: Bank Payouts
  - name: External Crypto Payouts
  - name: Transactions
  - name: Users Creation
  - name: User Information
  - name: Webhooks
externalDocs:
  url: https://vitawallet.io
  description: Vita Wallet
paths:
  /api/businesses/events:
    get:
      tags:
        - Webhooks
      summary: Webhook Events
      description: >-
        Retrieves the 10 most recent events generated for your business account,
        ordered by creation date in descending order. Each event includes the
        transaction payload, delivery status, attempt history, and the server
        response received from your endpoint.


        Use this endpoint to:


        - Debug webhook delivery issues by inspecting which events failed and
        why.


        - Audit recent activity to verify that your server is correctly
        receiving and acknowledging events.


        - Validate integration health by confirming that the event types and
        payloads match your handlers.


        #### Response Structure


        | Field | Type | Description |

        | --- | --- | --- |

        | `events` | Array | List of events (maximum 10). |

        | `total` | Integer | Total number of events available for the business.
        |

        | `limit` | Integer | Limit of events returned per response (always 10).
        |


        #### Event Object


        | Field | Type | Description |

        | --- | --- | --- |

        | `id` | string | Unique identifier of the event. Opaque text identifier
        — do not validate as a UUID. |

        | `event_type` | string | Type of event (e.g., `transaction.completed`,
        `transaction.failed`). |

        | `status` | string | Delivery status: `pending`, `processing`, `sent`,
        `failed`, `expired`. |

        | `payload` | object | Event data (structure depends on the transaction
        category). |

        | `attempts` | integer | Number of delivery attempts made. |

        | `created_at` | string (ISO 8601) | Event creation timestamp. |

        | `next_retry_at` | string (ISO 8601) | null |

        | `sent_at` | string (ISO 8601) | null |

        | `server_response` | string | null |


        #### Delivery and Retry Policy


        - Only an HTTP **`200`** response from your server counts as a
        successful delivery. Other 2xx codes (`201`, `202`, `204`, etc.) are
        **not** treated as success and will trigger a retry — respond with
        exactly `200`.


        - Failed deliveries are retried up to **5 times**, with increasing
        delays between attempts: **1 minute, 5 minutes, 15 minutes, 1 hour, 6
        hours.** After the 5th failed attempt, the event's status becomes
        `failed`.


        - Events that remain undelivered for more than **30 days** are marked
        `expired`.


        #### Event Payload Structure


        The contents of the `payload` field vary by transaction category. The
        base attributes below are included in all transaction event payloads,
        regardless of category.


        #### Base Attributes (All Categories)


        | Field | Type | Description |

        | --- | --- | --- |

        | `id` | string | Transaction identifier. Opaque text identifier — most
        real values include a numeric suffix (e.g. `...-24544`); do not validate
        as a UUID. |

        | `order` | string | null |

        | `category` | string | Transaction category (`deposit`, `payment`,
        `sent`, `received`, `exchange`, `fee`, etc.). |

        | `status` | string | Transaction status (`started`, `completed`,
        `pending`, `denied`, `processed`, `failed`, `time_out`, `checking`). |

        | `amount` | string (decimal) | Transaction amount (before fees), sent
        as a quoted string, e.g. `"789000.0"` — not a JSON number. |

        | `total` | string (decimal) | Total transaction amount (including
        fees), also sent as a string. |

        | `currency` | string | Currency code (`eth`, `btc`, `clp`, `usd`,
        `cop`, `usdt`, `usdc`, `ars`, `mxn`, `brl`, `eur`). |

        | `created_at` | string (ISO 8601) | Transaction creation timestamp. |

        | `description` | string | Transaction description. |

        | `statuses` | Array | Transaction status history (see below). |


        #### Status History Object


        Each entry in the `statuses` array describes a status change in the
        transaction's lifecycle.


        | Field | Type | Description |

        | --- | --- | --- |

        | `status` | string | Status value at this point in time. |

        | `created_at` | string (ISO 8601) | When this status was set. |

        | `description` | string | Description of the status change. |

        | `transaction_operation_type` | string | Type of operation that caused
        this status change. |


        #### Category-Specific Attributes


        In addition to base attributes, each category may include extra fields
        specific to its nature.


        #### Category: `deposit`


        | Field | Type | Description |

        | --- | --- | --- |

        | `funding_source__user_name` | string | null |

        | `funding_source__user_document_type` | string | null |

        | `funding_source__user_document_number` | string | null |

        | `funding_source__user_email` | string | null |

        | `funding_source__account` | string | null |

        | `funding_source__ID_provider` | string | null |

        | `total_fee` | decimal | null |

        | `fee_value` | decimal | null |

        | `fee_type` | string | null |


        > Funding source fields are populated whenever the payment provider
        reports payer data — this is not limited to any specific provider. If a
        given provider doesn't report this data, the corresponding
        `funding_source__*` fields will be `null`. Fee fields are always
        included but may be `null` when no fees apply.


        #### Category: `payment`


        | Field | Type | Description |

        | --- | --- | --- |

        | `funding_source__user_name` | string | null |

        | `funding_source__user_document_number` | string | null |

        | `funding_source__user_email` | string | null |

        | `funding_source__account` | string | null |

        | `funding_source__ID_provider` | string | null |

        | `spread` | decimal | null |

        | `fixed_cost` | decimal | null |

        | `country_code` | string | null |


        > Payment data is retrieved from the associated PaymentOrder using the
        `business_order` field. If `business_order` is missing or the
        PaymentOrder is not found, all payment-specific fields will be `null`.
        Remember: you only receive `payment` category transaction events (and
        `payment_order.*` / `payment_order_attempt.*` events) if you are
        subscribed to the `payment` category.


        #### Category: `sent`


        Used for outgoing transfers.


        | Field | Type | Description |

        | --- | --- | --- |

        | `hash_result` | string | null |

        | `from_address` | string | null |

        | `to_address` | string | null |

        | `network_name` | string | null |

        | `total_fee` | decimal | null |

        | `fee_value` | decimal | null |

        | `fee_type` | string | null |


        > Hash and address fields are blockchain-specific and may be `null` for
        non-crypto transactions.


        #### Category: `received`


        Used for incoming transfers. Same structure as `sent`.


        | Field | Type | Description |

        | --- | --- | --- |

        | `hash_result` | string | null |

        | `from_address` | string | null |

        | `to_address` | string | null |

        | `network_name` | string | null |

        | `total_fee` | decimal | null |

        | `fee_value` | decimal | null |

        | `fee_type` | string | null |


        #### Category: `exchange`


        Used for currency conversions.


        | Field | Type | Description |

        | --- | --- | --- |

        | `hash_result` | string | null |

        | `total_fee` | decimal | null |

        | `fee_value` | decimal | null |

        | `fee_type` | string | null |


        #### Category: `fee` (and other categories)


        Used for fee transactions and any other categories not explicitly
        handled.


        | Field | Type | Description |

        | --- | --- | --- |

        | `total_fee` | decimal | null |

        | `fee_value` | decimal | null |

        | `fee_type` | string | null |


        > Categories such as `withdrawal`, `transfer`, `vita_card`, `tax`,
        `cash_back_coupon`, `service_payment`, `adjustment`, and similar will
        return only the base attributes plus these fee attributes.
      operationId: webhook-events
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              example:
                events:
                  - id: f339fbfa-a0b2-4180-a34a-176333ae7334
                    event_type: transaction.time_out
                    status: sent
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 1
                    created_at: '2026-01-09T19:52:37.116Z'
                    updated_at: '2026-01-09T19:52:42.569Z'
                    sent_at: '2026-01-09T19:52:42.568Z'
                  - id: 822aca65-3b54-4c8b-8e90-e108cf47743e
                    event_type: transaction.time_out
                    status: sent
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 1
                    created_at: '2026-01-09T19:28:15.861Z'
                    updated_at: '2026-01-09T19:29:07.942Z'
                    sent_at: '2026-01-09T19:29:07.942Z'
                  - id: ff83166c-7f4b-46fd-bd86-484ee11ed1d7
                    event_type: transaction.time_out
                    status: sent
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 1
                    created_at: '2026-01-09T19:27:38.343Z'
                    updated_at: '2026-01-09T19:29:07.297Z'
                    sent_at: '2026-01-09T19:29:07.281Z'
                  - id: 9f4b8ec6-d243-48d9-aaf6-077bafb4bc35
                    event_type: transaction.time_out
                    status: processing
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 0
                    created_at: '2026-01-09T19:25:21.613Z'
                    updated_at: '2026-01-09T19:25:21.613Z'
                    sent_at: null
                  - id: 7a2bdd0c-b9ba-459f-90d2-608511239a29
                    event_type: transaction.time_out
                    status: processing
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 0
                    created_at: '2026-01-09T19:24:26.582Z'
                    updated_at: '2026-01-09T19:24:26.582Z'
                    sent_at: null
                  - id: 3a09985c-1a1f-4de0-a74e-ca60b9ceaecf
                    event_type: transaction.time_out
                    status: processing
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 0
                    created_at: '2026-01-09T19:23:26.359Z'
                    updated_at: '2026-01-09T19:23:26.359Z'
                    sent_at: null
                  - id: 1dbaf13a-4d2b-41a7-af06-a75a1361c10c
                    event_type: transaction.time_out
                    status: processing
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 0
                    created_at: '2026-01-09T19:22:09.244Z'
                    updated_at: '2026-01-09T19:22:09.244Z'
                    sent_at: null
                  - id: 30de59b6-91ea-4a1d-b3a0-b7cec64694be
                    event_type: transaction.time_out
                    status: processing
                    payload:
                      id: 8b67895b-c612-4ad5-ab30-643fa5d5d6ea
                      total: 20250
                      amount: 20000
                      status: time_out
                      category: deposit
                      currency: clp
                      fee_type: percentage
                      fee_value: 1.25
                      total_fee: 250
                      created_at: '2025-07-16T22:44:46.271Z'
                    attempts: 0
                    created_at: '2026-01-09T19:15:47.568Z'
                    updated_at: '2026-01-09T19:15:47.568Z'
                    sent_at: null
                total: 8
                limit: 10
components:
  securitySchemes:
    xLogin:
      type: apiKey
      in: header
      name: x-login
      description: Business xLogin
    xTransKey:
      type: apiKey
      in: header
      name: x-trans-key
      description: Business xTransKey
    xDate:
      type: apiKey
      in: header
      name: x-date
      description: ISO8601 datetime
    hmacSignature:
      type: apiKey
      in: header
      name: Authorization
      description: 'V2-HMAC-SHA256 signature. Example: `V2-HMAC-SHA256, Signature: <hash>`'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.