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

# Register Webhook Endpoint

> Registers an endpoint on your server that Kravata will call whenever the configured `triggerEvent` occurs (for example, a user accepting the Terms and Conditions inside the Widget SDK, or an OTP being requested).

#### Request Body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| name | string | Yes | Descriptive name for the webhook. Must be unique. |
| direction | string (enum) | Yes | `"OUTBOUND"` |
| url | string | Yes | URL on your server that will receive the event (max 500 chars). |
| httpMethod | string (enum) | Yes | `"POST"` |
| authType | string (enum) | No — default `"NONE"` | `"NONE"` |
| triggerEvent | string | No | Event that fires this webhook. Events with real listeners today: "user.accepted_terms", "auth.otp_requested", "user.canceled", "user.created", "user.updated", "operation.created", "operation.status_updated", "operation.transfer.created", "operation.transfer.status_updated", "wallet.created", "fiat.payin.completed", "fiat.payout.completed", "fiat.payment.completed", "fiat.payin.rejected", "fiat.payout.rejected" |
| timeoutMs | number | No — default `30000` | Timeout for the call to your server, in milliseconds. |
| retryConfig | object | No | Retry policy — `max_attempts` (default `3`), and on failure, `initial_delay_ms` (default `1000`) / `multiplier` (default `4`) for exponential backoff. |

#### Response

| Field | Description |
| --- | --- |
| id | Internal UUID of the created Integration Endpoint. |
| isActive | Whether the webhook is currently active. |
| registerDate | Timestamp set automatically on creation. |



## OpenAPI

````yaml /stack/openapi.json post /api/v1/integration-endpoints
openapi: 3.1.0
info:
  title: Kravata Stack API
  version: '2.0'
  description: >-
    Kravata Stack API: users, accounts, custody wallets, liquidity ramps and
    fiat payments.
servers:
  - url: https://test-api-kore.kravata.co
    description: Test
  - url: https://partners-api.kravata.co
    description: Production (mTLS + IP allowlist)
security:
  - bearerAuth: []
tags:
  - name: Authentication
  - name: Users
  - name: Accounts
  - name: Earn
  - name: Custody
  - name: Liquidity Ramps
  - name: Payments
  - name: Webhooks
paths:
  /api/v1/integration-endpoints:
    post:
      tags:
        - Webhooks
      summary: Register Webhook Endpoint
      description: >-
        Registers an endpoint on your server that Kravata will call whenever the
        configured `triggerEvent` occurs (for example, a user accepting the
        Terms and Conditions inside the Widget SDK, or an OTP being requested).


        #### Request Body


        | Field | Type | Required | Description |

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

        | name | string | Yes | Descriptive name for the webhook. Must be
        unique. |

        | direction | string (enum) | Yes | `"OUTBOUND"` |

        | url | string | Yes | URL on your server that will receive the event
        (max 500 chars). |

        | httpMethod | string (enum) | Yes | `"POST"` |

        | authType | string (enum) | No — default `"NONE"` | `"NONE"` |

        | triggerEvent | string | No | Event that fires this webhook. Events
        with real listeners today: "user.accepted_terms", "auth.otp_requested",
        "user.canceled", "user.created", "user.updated", "operation.created",
        "operation.status_updated", "operation.transfer.created",
        "operation.transfer.status_updated", "wallet.created",
        "fiat.payin.completed", "fiat.payout.completed",
        "fiat.payment.completed", "fiat.payin.rejected", "fiat.payout.rejected"
        |

        | timeoutMs | number | No — default `30000` | Timeout for the call to
        your server, in milliseconds. |

        | retryConfig | object | No | Retry policy — `max_attempts` (default
        `3`), and on failure, `initial_delay_ms` (default `1000`) / `multiplier`
        (default `4`) for exponential backoff. |


        #### Response


        | Field | Description |

        | --- | --- |

        | id | Internal UUID of the created Integration Endpoint. |

        | isActive | Whether the webhook is currently active. |

        | registerDate | Timestamp set automatically on creation. |
      operationId: register-webhook-endpoint
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                direction:
                  type: string
                url:
                  type: string
                httpMethod:
                  type: string
                authType:
                  type: string
                triggerEvent:
                  type: string
                timeoutMs:
                  type: integer
                retryConfig:
                  type: object
                  properties:
                    max_attempts:
                      type: integer
                    initial_delay_ms:
                      type: integer
                    multiplier:
                      type: integer
                requestHeaders: {}
                payloadMapping: {}
                isActive:
                  type: boolean
            example:
              name: operation.status_updated
              direction: OUTBOUND
              url: https://your-server.example.com/webhooks/kravata
              httpMethod: POST
              authType: NONE
              triggerEvent: operation.status_updated
              timeoutMs: 30000
              retryConfig:
                max_attempts: 3
                initial_delay_ms: 1000
                multiplier: 4
              requestHeaders: null
              payloadMapping: null
              isActive: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  isActive:
                    type: boolean
                  registerDate:
                    type: string
              examples:
                registered-user-accepted-terms:
                  summary: Registered - user.accepted_terms
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    isActive: true
                    registerDate: '2026-05-14T06:07:59.016726'
                registered-auth-otp-requested:
                  summary: Registered - auth.otp_requested
                  value:
                    id: 5f0a01a1-29be-4833-8c22-7ef3181a50ed
                    isActive: true
                    registerDate: '2026-07-01T19:50:08.088452'
                registered-operation-created:
                  summary: Registered - operation.created
                  value:
                    id: 36a251f0-29a4-4fb3-948f-5eaf3372b393
                    isActive: true
                    registerDate: '2026-07-02T23:06:50.968346'
                registered-operation-status-updated:
                  summary: Registered - operation.status_updated
                  value:
                    id: d0898f8f-6b33-4b56-be2c-2ba36c54e3aa
                    isActive: true
                    registerDate: '2026-07-02T23:06:50.968346'
                registered-user-updated:
                  summary: Registered - user.updated
                  value:
                    id: 07cb51f5-3cd0-4fc5-953a-93ade650aeb7
                    isActive: true
                    registerDate: '2026-07-02T23:06:50.968346'
                registered-user-canceled:
                  summary: Registered - user.canceled
                  value:
                    id: 6827d4f4-d589-4b51-bd30-bb4330e547b2
                    isActive: true
                    registerDate: '2026-07-02T23:06:50.968346'
                registered-wallet-created:
                  summary: Registered - wallet.created
                  value:
                    id: 578d7189-719b-4ed5-a117-7b6907819a5f
                    isActive: true
                    registerDate: '2026-07-03T05:21:54.411479'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Access token from POST /api/v1/client/token.

````