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

# Criar endpoint de webhook

> Registra uma URL para receber eventos. A resposta inclui o `secret` de assinatura, **exibido uma única vez**. Guarde-o para [verificar as assinaturas](/webhooks/signatures).

A URL deve usar HTTPS e não pode apontar para endereços privados. `http://localhost` é aceito apenas em projetos de teste. Cada projeto pode ter até 5 endpoints.



## OpenAPI

````yaml openapi.json POST /v1/webhook_endpoints
openapi: 3.0.3
info:
  title: API da Routa
  description: >-
    API REST para enviar e receber mensagens de WhatsApp, acompanhar a entrega e
    receber eventos normalizados por webhook.
  version: '1'
servers:
  - url: https://api.routa.chat
    description: Produção
security:
  - bearerAuth: []
tags:
  - name: Mensagens
    description: Envie, consulte e liste mensagens.
  - name: Eventos
    description: Consulte o log de eventos normalizados.
  - name: Webhooks
    description: Gerencie endpoints de webhook, segredos e entregas.
  - name: Templates
    description: Submeta e consulte templates de WhatsApp.
  - name: Mídia
    description: Envie e obtenha arquivos de mídia.
  - name: Uso
    description: Consulte o uso medido do projeto.
  - name: Identidade
    description: Identifique a chave de API em uso.
paths:
  /v1/webhook_endpoints:
    post:
      tags:
        - Webhooks
      summary: Criar endpoint de webhook
      description: >-
        Registra uma URL para receber eventos. A resposta inclui o `secret` de
        assinatura, **exibido uma única vez**. Guarde-o para [verificar as
        assinaturas](/webhooks/signatures).


        A URL deve usar HTTPS e não pode apontar para endereços privados.
        `http://localhost` é aceito apenas em projetos de teste. Cada projeto
        pode ter até 5 endpoints.
      operationId: createWebhookEndpoint
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
                - subscribed_types
              properties:
                url:
                  description: >-
                    URL HTTPS que recebe os eventos. `http://` é aceito apenas
                    para localhost em projetos de teste.
                  type: string
                  example: https://exemplo.com/webhooks/routa
                subscribed_types:
                  minItems: 1
                  description: >-
                    Tipos de evento ou curingas por recurso (`message.*`,
                    `channel.*`, `template.*`). Pelo menos um.
                  type: array
                  items:
                    type: string
                  example:
                    - message.*
                    - channel.status_changed
            example:
              url: https://exemplo.com/webhooks/routa
              subscribed_types:
                - message.*
                - channel.status_changed
      responses:
        '201':
          description: Recurso criado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEndpointWithSecret'
        '401':
          description: >-
            Chave de API ausente, inválida, revogada ou expirada
            (`api_key_invalid`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: A chave não tem o escopo necessário (`insufficient_scope`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Requisição inválida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Limite de taxa excedido. Veja o header `Retry-After`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth:
            - webhooks:write
components:
  schemas:
    WebhookEndpointWithSecret:
      type: object
      properties:
        id:
          type: string
          description: Identificador do endpoint.
          example: whe_01J8ZK9M3Q7XABCDEFGHJKMNPQ
        url:
          type: string
          description: URL que recebe os eventos.
          example: https://exemplo.com/webhooks/routa
        subscribed_types:
          type: array
          items:
            type: string
          description: Tipos de evento assinados, incluindo curingas como `message.*`.
        api_version:
          type: string
          description: Versão da API fixada na criação do endpoint.
        status:
          type: string
          enum:
            - enabled
            - disabled_by_user
            - disabled_by_system
          description: >-
            Estado do endpoint: `enabled`, `disabled_by_user` ou
            `disabled_by_system`.
        consecutive_failures:
          type: number
          description: Falhas consecutivas de entrega. Zera a cada sucesso.
        last_success_at:
          format: date-time
          type: string
          nullable: true
          description: Último sucesso de entrega, ou `null`.
        last_failure_at:
          format: date-time
          type: string
          nullable: true
          description: Última falha de entrega, ou `null`.
        created_at:
          format: date-time
          type: string
          description: Quando o endpoint foi criado.
          example: '2026-09-04T13:22:41.031Z'
        secret:
          type: string
          description: >-
            Segredo de assinatura. Exibido apenas na criação e na rotação.
            Guarde-o com segurança.
          example: whsec_...
      required:
        - id
        - url
        - subscribed_types
        - api_version
        - status
        - consecutive_failures
        - last_success_at
        - last_failure_at
        - created_at
        - secret
    Error:
      type: object
      properties:
        error:
          type: object
          required:
            - type
            - code
            - message
            - request_id
          properties:
            type:
              type: string
              description: >-
                Categoria do erro: `invalid_request_error`,
                `authentication_error`, `permission_error`, `not_found_error`,
                `conflict_error`, `rate_limit_error`, `billing_error` ou
                `api_error`.
              example: invalid_request_error
            code:
              type: string
              description: >-
                Código estável e legível por máquina. Veja [Códigos de
                erro](/errors/error-codes).
              example: channel_inactive
            message:
              type: string
              description: >-
                Texto para humanos, em inglês. Pode mudar, então não faça parse
                dele.
              example: Channel chan_01J8... is not active and cannot send messages.
            param:
              type: string
              description: O campo da requisição com problema, quando se aplica.
            doc_url:
              type: string
              description: Link para a documentação do código, quando disponível.
            details:
              type: object
              additionalProperties:
                oneOf:
                  - type: string
                  - type: number
              description: >-
                Valores acionáveis, como `limit`, `used` e `resets_at` em
                `message_quota_exceeded`.
            request_id:
              type: string
              description: Identificador da requisição. Informe-o ao falar com o suporte.
              example: req_01J8ZK9M3Q7XABCDEFGHJKMNPQ
          description: Detalhes do erro.
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Chave de API do projeto, no formato `rt_live_...` ou `rt_test_...`,
        enviada como `Authorization: Bearer <chave>`.

````

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