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

# Criar Webhook

> Cria um novo webhook para receber eventos do Cakto

#### Escopo

```bash theme={null}
    write webhooks
```

<Tip>
  * Consulte a lista completa de eventos disponíveis [Aqui](#body-events)
  * Crie webhooks pelo Painel Cakto em [Integrações > Webhooks](https://app.cakto.com.br/dashboard/apps)
</Tip>

<Note>
  Ao criar um webhook, você pode selecionar múltiplos eventos.
</Note>

<Note>
  `products` é obrigatório: o webhook só recebe eventos dos produtos informados, não de toda a conta.
</Note>

<Warning>
  * Certifique-se de que sua URL está preparada para receber requisições POST com conteúdo JSON.
  * Sua aplicação deve responder em até 8 segundos para evitar falhas de entrega. Veja a política de retentativas em [Guia de Webhooks](/conceitos/webhooks).
</Warning>


## OpenAPI

````yaml POST /public_api/webhook/
openapi: 3.0.3
info:
  title: Cakto API
  version: 1.0.0
  description: Documentação da API pública do Cakto.
servers:
  - url: https://api.cakto.com.br
    description: Cakto API
security: []
paths:
  /public_api/webhook/:
    post:
      tags:
        - webhook
      description: |-
        API for managing webhook Apps, it inherits from AppPlatformAPI,
        customizes the schema generation and filters by webhook platform.
      operationId: webhook_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateSchema'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/WebhookCreateSchema'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/WebhookCreateSchema'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppSerializerRead'
              examples:
                CriadoComSucesso:
                  value:
                    id: 2863878
                    status: active
                    name: Venda Aprovada <Produto 1>
                    url: https://destination-url-example.com.br/webhook-endpoint
                    products:
                      - id: cd287b31-d4b7-4e94-858a-96e05ce2f4r4
                        name: Produto 1
                        image: https://image-url-example.com.br
                        description: Produto 1
                        price: 5
                        type: unique
                        contentDeliveries:
                          - cakto
                          - telegram
                          - discord
                        emailAccessLink: null
                        salesPage: https://pv.example.com.br/product/
                        status: active
                        paymentMethods:
                          - boleto
                          - credit_card
                          - picpay
                        category:
                          id: 0673d296-1802-45e0-bc93-612f7514dddb
                          name: Apps & Software
                    events:
                      - id: 3
                        name: Compra aprovada
                        custom_id: purchase_approved
                    fields:
                      secret: 8a67e42d-08b9-4987-9f40-0fe7bfd15a5a
                    createdAt: '2050-11-07T09:11:58.377388-03:00'
                    updatedAt: '2050-11-07T09:11:58.377406-03:00'
          description: Corpo da resposta status 200
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreate400'
              examples:
                ProdutoInválido:
                  value:
                    products:
                      - >-
                        Pk inválido "cd287b31-d4b7-4e94-858a-96e05ce2f4a2" -
                        objeto não existe.
                ProdutosNãoInformados:
                  value:
                    products:
                      - Este campo é obrigatório.
                NomeNãoInformado:
                  value:
                    name:
                      - Este campo é obrigatório.
                UrlNãoInformada:
                  value:
                    url:
                      - Este campo é obrigatório.
                EventosNãoInformados:
                  value:
                    events:
                      - Este campo é obrigatório.
                EventosInválidos:
                  value:
                    events:
                      - 'Eventos inválidos: invalid_event2, invalid_event1'
          description: Corpo da resposta status 400
        '401':
          description: Request não autenticado devido à ausência ou invalidez do token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedError'
              examples:
                Token ausente ou inválido:
                  $ref: '#/components/examples/UnauthenticatedErrorExample'
      security:
        - OAuth Token: []
components:
  schemas:
    WebhookCreateSchema:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        status:
          allOf:
            - $ref: '#/components/schemas/AppStatus'
          description: |-
            Status atual do app

            * `active` - Ativo
            * `disabled` - Desativado
            * `waiting_config` - Aguardando Configuração
            * `paused` - Pausado
        name:
          type: string
          title: Nome
          description: Nome do app
          maxLength: 255
        url:
          type: string
          format: uri
          nullable: true
          description: URL de destino, onde os eventos serão enviados
          maxLength: 2048
        products:
          type: array
          items:
            type: string
            title: Produtos
          title: Produtos
          description: Produtos que utilizam este app
        events:
          type: array
          items:
            $ref: '#/components/schemas/EventsEnum'
          description: '`custom_id` de eventos para associar ao app webhook'
      required:
        - events
        - id
        - name
        - products
        - url
    AppSerializerRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        status:
          allOf:
            - $ref: '#/components/schemas/AppStatus'
          description: |-
            Status atual do app

            * `active` - Ativo
            * `disabled` - Desativado
            * `waiting_config` - Aguardando Configuração
            * `paused` - Pausado
        name:
          type: string
          title: Nome
          description: Nome do app
          maxLength: 255
        url:
          type: string
          format: uri
          nullable: true
          description: URL de destino, onde os eventos serão enviados
          maxLength: 2048
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
          readOnly: true
          description: Produtos que utilizam este app
        events:
          type: array
          items:
            $ref: '#/components/schemas/Event'
          readOnly: true
          description: Eventos que disparam este app
        fields:
          title: Campos adicionais
          description: Campos adicionais para o app
        createdAt:
          type: string
          format: date-time
          readOnly: true
          title: Data de criação
          description: Data e hora de criação
        updatedAt:
          type: string
          format: date-time
          readOnly: true
          title: Data de atualização
          description: Data e hora da última atualização
        processing_events_count:
          type: string
          readOnly: true
        avg_latency:
          type: string
          readOnly: true
        success_rate:
          type: string
          readOnly: true
      required:
        - avg_latency
        - createdAt
        - events
        - id
        - name
        - processing_events_count
        - products
        - success_rate
        - updatedAt
    WebhookCreate400:
      type: object
      properties:
        products:
          type: array
          items:
            type: string
      required:
        - products
    UnauthenticatedError:
      type: object
      properties:
        detail:
          type: string
    AppStatus:
      enum:
        - active
        - disabled
        - waiting_config
        - paused
      type: string
      description: |-
        * `active` - Ativo
        * `disabled` - Desativado
        * `waiting_config` - Aguardando Configuração
        * `paused` - Pausado
    EventsEnum:
      enum:
        - checkout_abandonment
        - purchase_approved
        - purchase_refused
        - pix_gerado
        - boleto_gerado
        - picpay_gerado
        - openfinance_nubank_gerado
        - chargeback
        - refund
        - subscription_created
        - subscription_canceled
        - subscription_renewed
        - subscription_renewal_refused
        - subscription_paused
        - subscription_resumed
      type: string
      description: |-
        * `checkout_abandonment` - Abandono de Checkout
        * `purchase_approved` - Compra aprovada
        * `purchase_refused` - Compra recusada
        * `pix_gerado` - Pix gerado
        * `boleto_gerado` - Boleto gerado
        * `picpay_gerado` - PicPay gerado
        * `openfinance_nubank_gerado` - Nubank gerado
        * `chargeback` - Chargeback
        * `refund` - Reembolso
        * `subscription_created` - Assinatura criada
        * `subscription_canceled` - Assinatura cancelada
        * `subscription_renewed` - Assinatura renovada
        * `subscription_renewal_refused` - Renovação de assinatura recusada
        * `subscription_paused` - Assinatura pausada
        * `subscription_resumed` - Assinatura reativada
    Product:
      type: object
      properties:
        id:
          type: string
          description: Identificador único do produto
          maxLength: 255
        name:
          type: string
          title: Nome
          description: Nome do produto
          maxLength: 255
        image:
          type: string
          format: uri
          readOnly: true
          nullable: true
          title: Imagem
          description: Imagem do produto
        description:
          type: string
          title: Descrição
          description: Descrição do produto
        price:
          type: number
          format: double
          description: Preço do produto
        currency:
          allOf:
            - $ref: '#/components/schemas/CurrencyEnum'
          title: Moeda
          description: |-
            Moeda do produto

            * `BRL` - Real
            * `EUR` - Euro
            * `MXN` - Peso Mexicano
            * `PEN` - Sol Peruano
            * `USD` - Dólar
            * `CLP` - Peso Chileno
            * `COP` - Peso Colombiano
            * `ARS` - Peso Argentino
            * `BOB` - Boliviano
            * `UYU` - Peso Uruguayo
        type:
          allOf:
            - $ref: '#/components/schemas/ProductType'
          title: Tipo
          description: |-
            Tipo de venda do produto, ex.: venda única, assinatura...

            * `unique` - Pagamento único
            * `subscription` - Assinatura recorrente
        contentDeliveries:
          type: array
          items:
            type: string
          readOnly: true
          description: Id dos métodos de entrega de conteúdo disponíveis
        emailAccessLink:
          type: string
          format: uri
          nullable: true
          title: Link de acesso
          description: Link a ser enviado por e-mail para acesso ao conteúdo após a compra
          maxLength: 2048
        salesPage:
          type: string
          format: uri
          nullable: true
          title: Página de vendas
          description: Link da página de vendas do produto
          maxLength: 2048
        status:
          allOf:
            - $ref: '#/components/schemas/ProductStatus'
          description: |-
            Status atual do produto

            * `active` - Ativo
            * `waiting_config` - Aguardando Configuração
            * `blocked` - Bloqueado
            * `deleted` - Deletado
        paymentMethods:
          type: array
          items:
            type: string
          readOnly: true
          description: Id dos métodos de pagamento disponíveis
        category:
          allOf:
            - $ref: '#/components/schemas/Category'
          readOnly: true
          description: Categoria do produto
      required:
        - category
        - contentDeliveries
        - description
        - image
        - name
        - paymentMethods
        - price
    Event:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          title: Nome do evento
          description: Nome descritivo do evento
          maxLength: 255
        custom_id:
          allOf:
            - $ref: '#/components/schemas/EventType'
          title: ID do evento
          description: |-
            ID único do evento

            * `initiate_checkout` - Inicio de Checkout
            * `checkout_abandonment` - Abandono de Checkout
            * `purchase_approved` - Compra aprovada
            * `purchase_refused` - Compra recusada
            * `pix_gerado` - Pix gerado
            * `boleto_gerado` - Boleto gerado
            * `picpay_gerado` - PicPay gerado
            * `openfinance_nubank_gerado` - Nubank gerado
            * `chargeback` - Chargeback
            * `refund` - Reembolso
            * `subscription_created` - Assinatura criada
            * `subscription_canceled` - Assinatura cancelada
            * `subscription_renewed` - Assinatura renovada
            * `subscription_renewal_refused` - Renovação de assinatura recusada
            * `subscription_paused` - Assinatura pausada
            * `subscription_resumed` - Assinatura reativada
      required:
        - custom_id
        - id
        - name
    CurrencyEnum:
      enum:
        - BRL
        - EUR
        - MXN
        - PEN
        - USD
        - CLP
        - COP
        - ARS
        - BOB
        - UYU
      type: string
      description: |-
        * `BRL` - Real
        * `EUR` - Euro
        * `MXN` - Peso Mexicano
        * `PEN` - Sol Peruano
        * `USD` - Dólar
        * `CLP` - Peso Chileno
        * `COP` - Peso Colombiano
        * `ARS` - Peso Argentino
        * `BOB` - Boliviano
        * `UYU` - Peso Uruguayo
    ProductType:
      enum:
        - unique
        - subscription
      type: string
      description: |-
        * `unique` - Pagamento único
        * `subscription` - Assinatura recorrente
    ProductStatus:
      enum:
        - active
        - waiting_config
        - blocked
        - deleted
      type: string
      description: |-
        * `active` - Ativo
        * `waiting_config` - Aguardando Configuração
        * `blocked` - Bloqueado
        * `deleted` - Deletado
    Category:
      type: object
      properties:
        id:
          type: string
          maxLength: 255
        name:
          type: string
          maxLength: 255
      required:
        - name
    EventType:
      enum:
        - initiate_checkout
        - checkout_abandonment
        - purchase_approved
        - purchase_refused
        - pix_gerado
        - boleto_gerado
        - picpay_gerado
        - openfinance_nubank_gerado
        - chargeback
        - refund
        - subscription_created
        - subscription_canceled
        - subscription_renewed
        - subscription_renewal_refused
        - subscription_paused
        - subscription_resumed
      type: string
      description: |-
        * `initiate_checkout` - Inicio de Checkout
        * `checkout_abandonment` - Abandono de Checkout
        * `purchase_approved` - Compra aprovada
        * `purchase_refused` - Compra recusada
        * `pix_gerado` - Pix gerado
        * `boleto_gerado` - Boleto gerado
        * `picpay_gerado` - PicPay gerado
        * `openfinance_nubank_gerado` - Nubank gerado
        * `chargeback` - Chargeback
        * `refund` - Reembolso
        * `subscription_created` - Assinatura criada
        * `subscription_canceled` - Assinatura cancelada
        * `subscription_renewed` - Assinatura renovada
        * `subscription_renewal_refused` - Renovação de assinatura recusada
        * `subscription_paused` - Assinatura pausada
        * `subscription_resumed` - Assinatura reativada
  examples:
    UnauthenticatedErrorExample:
      summary: Token ausente ou inválido
      description: Token ausente ou inválido
      value:
        detail: As credenciais de autenticação não foram fornecidas.
  securitySchemes:
    OAuth Token:
      type: http
      scheme: bearer
      in: header
      name: Authorization
      description: >-
        Token de autenticação do tipo `Bearer {access_token}`, onde
        `{access_token}` é o token obtido no fluxo de
        [autenticação](/authentication).

````