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

# Pré-autorizando uma Confirmação

> Emite antecipadamente o token de confirmação que uma ação destrutiva registrada exigiria no header X-Confirmation-Token.


Algumas operações da API são disruptivas o suficiente para exigir uma confirmação explícita: elas trocam algo que já está em uso e, se disparadas sem querer, causam uma interrupção. Essas operações exigem o header `X-Confirmation-Token` e, sem ele, respondem `409` (`confirmation_required`) trazendo, no próprio corpo do erro, um token pronto para repetir a chamada.

Este endpoint existe para quem prefere não depender desse `409`: você pede o token antecipadamente, já sabendo qual operação vai confirmar, e envia a chamada original já com o header preenchido. As duas formas produzem exatamente o mesmo tipo de token e são totalmente intercambiáveis.

### O token

O `confirmation_token` retornado é assinado pela própria API. Ele é vinculado ao usuário autenticado, à ação (`action`), ao recurso (`resource`) e aos campos enviados em `params` que definem a mudança: um token emitido para um conjunto de parâmetros não confirma uma chamada com parâmetros diferentes. Ele expira em `expires_at`, cerca de 5 minutos após a emissão.

### Ações registradas

O campo `action` só aceita ações que a API reconhece como confirmáveis. Cada uma exige um campo diferente em `params`, que é exatamente o que o token passa a confirmar:

| `action`                      | `params` obrigatório                                        |
| ----------------------------- | ----------------------------------------------------------- |
| `instance.migrate_connection` | `to`: o tipo de conexão de destino (`unofficial` ou `waba`) |
| `instance.reconnect`          | `phone_number_id`: o ID do número de telefone de destino    |

Omitir o campo obrigatório de `params` é um erro de validação `400`, de propósito: um token emitido sem ele confirmaria uma mudança vazia e falharia depois, na operação real, com um erro de incompatibilidade difícil de entender.

<Note>
  Este endpoint não verifica se o `resource` existe nem se pertence a você, de propósito. O token só passa a valer alguma coisa quando a operação que ele confirma é chamada de verdade, e essa operação sempre confere a posse do recurso por conta própria antes de agir. Um token emitido para um recurso de outra conta simplesmente não confirma nada quando usado.
</Note>

### O que isso não é

Essa confirmação não é uma camada de segurança nem um passo de autorização. Quem já tem o token de acesso da sua conta sempre consegue emitir uma confirmação, para qualquer ação registrada. Ela existe para tornar deliberada uma mudança disruptiva que, de outra forma, poderia acontecer por engano, e não para impedir chamadas mal-intencionadas.

### Exemplo

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.zapsterapi.com/v1/confirmations \
    -H "Authorization: Bearer SEU_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "action": "instance.reconnect",
      "resource": "ozj35qv418rpmlrb",
      "params": {
        "phone_number_id": "1016102021584086"
      }
    }'
  ```

  ```javascript Node.js (fetch) theme={null}
  const response = await fetch('https://api.zapsterapi.com/v1/confirmations', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer SEU_TOKEN',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      action: 'instance.reconnect',
      resource: 'ozj35qv418rpmlrb',
      params: { phone_number_id: '1016102021584086' },
    }),
  })

  const confirmation = await response.json()
  console.log(confirmation.confirmation_token)
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.zapsterapi.com/v1/confirmations",
      headers={"Authorization": "Bearer SEU_TOKEN"},
      json={
          "action": "instance.reconnect",
          "resource": "ozj35qv418rpmlrb",
          "params": {"phone_number_id": "1016102021584086"},
      },
      timeout=30,
  )

  confirmation = response.json()
  print(confirmation["confirmation_token"])
  ```
</CodeGroup>

Use o `confirmation_token` retornado no header `X-Confirmation-Token` da chamada original, dentro dos `expires_at` retornados junto.


## OpenAPI

````yaml POST /confirmations
openapi: 3.1.0
info:
  title: Zapster API
  description: ''
  version: 1.0.0
servers:
  - url: https://api.zapsterapi.com/v1
    description: Produção
security: []
tags: []
paths:
  /confirmations:
    post:
      tags: []
      summary: Emissão de Confirmação
      description: >
        Emite antecipadamente o token de confirmação que uma ação destrutiva
        registrada exigiria no header X-Confirmation-Token.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - action
                - resource
              properties:
                action:
                  type: string
                  enum:
                    - instance.migrate_connection
                    - instance.reconnect
                  description: >
                    Ação destrutiva registrada que está sendo pré-confirmada.

                    Cada ação exige um campo diferente dentro de `params`, que

                    descreve exatamente o que muda:

                    - `instance.migrate_connection`: exige `params.to`, o tipo
                    de conexão de destino (`unofficial` ou `waba`)

                    - `instance.reconnect`: exige `params.phone_number_id`, o ID
                    do número de telefone de destino
                  example: instance.reconnect
                resource:
                  type: string
                  description: |
                    ID do recurso ao qual a ação se aplica. Para as ações
                    atualmente registradas, é o ID da instância.
                  example: ozj35qv418rpmlrb
                params:
                  type: object
                  description: |
                    Campos que descrevem a mudança sendo confirmada. Cada ação
                    exige um campo específico aqui (veja `action`); qualquer
                    outro campo enviado é ignorado. Omitir o campo exigido é um
                    erro de validação, propositalmente: um token emitido sem ele
                    não confirmaria mudança nenhuma.
                  additionalProperties: true
              example:
                action: instance.reconnect
                resource: ozj35qv418rpmlrb
                params:
                  phone_number_id: '1016102021584086'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  action:
                    type: string
                    example: instance.reconnect
                  confirmation_token:
                    type: string
                    description: |
                      Token de confirmação assinado. Envie-o no header
                      `X-Confirmation-Token` da chamada que ele confirma.
                    example: >-
                      eyJ2IjoxLCJhY3QiOiJpbnN0YW5jZS5yZWNvbm5lY3QifQ.q1w2e3r4t5y6
                  expires_at:
                    type: string
                    format: date-time
                    description: >-
                      Validade do confirmation_token, cerca de 5 minutos após a
                      emissão.
                    example: '2026-08-08T18:35:00.000Z'
                  resource:
                    type: string
                    description: ID do recurso informado na requisição
                    example: ozj35qv418rpmlrb
        '400':
          description: Erro de validação no corpo da requisição
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          description: Código do erro
                          example: invalid_type
                        message:
                          type: string
                          description: Mensagem de erro
                          example: >-
                            The "params.phone_number_id" field is required to
                            confirm "instance.reconnect".
      deprecated: false
      security:
        - bearer: []
components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````