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

# Cancelar espera de ativação

> Encerra um pedido de código que ainda está em `WAITING` — sem corpo —, para que o próximo `POST /v1/phone-lines/{id}/activations` seja aceito na hora, em vez de responder `409 ACTIVATION_IN_PROGRESS` até a janela fechar.

Responde `200` com o pedido, agora `TIMED_OUT` com `failureReason: "canceled_by_customer"`, enviado com `Cache-Control: no-store`. A linha deixa de ser monitorada para esse pedido. Como todo pedido que termina sem código, ele envia `phone_line.code_failed` e `phone_line.code_received` (com `code: null`) uma vez, com `canceled_by_customer`.

**Uma ligação que já chegou nunca é descartada.** Depois que a ligação é capturada, o pedido não está mais em `WAITING`, e o cancelamento responde `409 ACTIVATION_NOT_WAITING` — continue consultando: o código dele está sendo lido. O mesmo 409 responde a um pedido que já terminou. Nada muda em nenhum dos casos. `{id}` precisa ser a linha à qual o pedido pertence: uma linha que não é do seu workspace responde `404 LINE_NOT_FOUND`; um pedido que não é dessa linha — ou não é do seu workspace — responde `404 ACTIVATION_NOT_FOUND`.

**Exige uma chave com escopo de tenant** — uma chave com escopo de número (ou concessão OAuth por número) recebe `403 NUMBER_SCOPE_NOT_ALLOWED`. Permissão `phone_lines:read`: com um token OAuth / MCP, o usuário precisa ser **Proprietário ou Administrador** (caso contrário, `403 PERMISSION_DENIED`).



## OpenAPI

````yaml openapi.pt.json POST /v1/phone-lines/{id}/activations/{activationId}/cancel
openapi: 3.1.0
info:
  title: API Pilot Status
  version: 1.0.0
  license:
    name: Pilot Status Terms of Service
    url: https://pilotstatus.com.br/terms
  description: >-
    API REST pública do Pilot Status. Autentique com o header `x-api-key:
    ps_...` (ou `x-api-key-id`). Base URL: https://pilotstatus.com.br
servers:
  - url: https://pilotstatus.com.br
security:
  - apiKey: []
  - apiKeyId: []
paths:
  /v1/phone-lines/{id}/activations/{activationId}/cancel:
    post:
      tags:
        - Phone Lines
      summary: Cancelar a espera
      description: >-
        Encerra um pedido de código que ainda está em `WAITING` — sem corpo —,
        para que o próximo `POST /v1/phone-lines/{id}/activations` seja aceito
        na hora, em vez de responder `409 ACTIVATION_IN_PROGRESS` até a janela
        fechar.


        Responde `200` com o pedido, agora `TIMED_OUT` com `failureReason:
        "canceled_by_customer"`, enviado com `Cache-Control: no-store`. A linha
        deixa de ser monitorada para esse pedido. Como todo pedido que termina
        sem código, ele envia `phone_line.code_failed` e
        `phone_line.code_received` (com `code: null`) uma vez, com
        `canceled_by_customer`.


        **Uma ligação que já chegou nunca é descartada.** Depois que a ligação é
        capturada, o pedido não está mais em `WAITING`, e o cancelamento
        responde `409 ACTIVATION_NOT_WAITING` — continue consultando: o código
        dele está sendo lido. O mesmo 409 responde a um pedido que já terminou.
        Nada muda em nenhum dos casos. `{id}` precisa ser a linha à qual o
        pedido pertence: uma linha que não é do seu workspace responde `404
        LINE_NOT_FOUND`; um pedido que não é dessa linha — ou não é do seu
        workspace — responde `404 ACTIVATION_NOT_FOUND`.


        **Exige uma chave com escopo de tenant** — uma chave com escopo de
        número (ou concessão OAuth por número) recebe `403
        NUMBER_SCOPE_NOT_ALLOWED`. Permissão `phone_lines:read`: com um token
        OAuth / MCP, o usuário precisa ser **Proprietário ou Administrador**
        (caso contrário, `403 PERMISSION_DENIED`).
      operationId: post_phone_lines_id_activations_activationid_cancel
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          example: cmg5k2l1n0001pl8example9x
          description: >-
            A linha à qual o pedido pertence. Um pedido que não é dessa linha
            responde `404 ACTIVATION_NOT_FOUND`.
        - name: activationId
          in: path
          required: true
          schema:
            type: string
          example: cmg5k3a7c0002ac8example4q
          description: >-
            O id do pedido de código (`activation.id`, retornado por `POST
            /v1/phone-lines/{id}/activations`).
      responses:
        '200':
          description: >-
            Espera cancelada — o pedido agora está `TIMED_OUT` com
            `canceled_by_customer`. Enviado com `Cache-Control: no-store`.
          headers:
            Cache-Control:
              description: '`no-store`'
              schema:
                type: string
                enum:
                  - no-store
          content:
            application/json:
              schema:
                type: object
                properties:
                  activation:
                    type: object
                    properties:
                      id:
                        type: string
                        description: O id do pedido (`activationId`).
                      lineId:
                        type: string
                        description: A linha à qual o pedido pertence.
                      status:
                        type: string
                        enum:
                          - WAITING
                          - CAPTURED
                          - TRANSCRIBED
                          - TIMED_OUT
                          - FAILED
                        description: >-
                          `WAITING`, `CAPTURED`, `TRANSCRIBED`, `TIMED_OUT` ou
                          `FAILED`. Continue consultando enquanto `status` for
                          `WAITING`, ou `CAPTURED` com `failureReason: null`;
                          qualquer outra combinação é definitiva.
                      requestedAt:
                        type: string
                        format: date-time
                        description: ISO 8601 — quando o pedido foi aberto.
                      pollDeadline:
                        type: string
                        format: date-time
                        description: >-
                          ISO 8601 — fim da janela de captura, 5 minutos depois
                          do pedido.
                      code:
                        type:
                          - string
                          - 'null'
                        description: >-
                          O código de 6 dígitos, quando o pedido está
                          `TRANSCRIBED` e o código foi encontrado. `null` caso
                          contrário. **É uma credencial** — quem o tiver pode
                          registrar uma conta de WhatsApp na linha.
                      capturedAt:
                        type:
                          - string
                          - 'null'
                        format: date-time
                        description: >-
                          ISO 8601 — quando a gravação da ligação foi
                          armazenada.
                      transcribedAt:
                        type:
                          - string
                          - 'null'
                        format: date-time
                        description: ISO 8601 — quando a transcrição terminou.
                      failureReason:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Por que um pedido em estado definitivo não tem código:
                          `no_call_in_window`, `canceled_by_customer`,
                          `no_code_in_transcript`, `transcription_failed`,
                          `audio_download_failed`, `audio_store_failed`,
                          `poll_not_scheduled`, ou `null`. Trate um valor
                          desconhecido como falha, já que novos valores podem
                          ser adicionados.
                      hasAudio:
                        type: boolean
                        description: >-
                          Se uma gravação da ligação está armazenada — para
                          baixar em `GET
                          /v1/phone-lines/activations/{activationId}/audio` e
                          ouvir no painel.
                    required:
                      - id
                      - lineId
                      - status
                      - requestedAt
                      - pollDeadline
                      - code
                      - capturedAt
                      - transcribedAt
                      - failureReason
                      - hasAudio
                required:
                  - activation
              example:
                activation:
                  id: cmg5k3a7c0002ac8example4q
                  lineId: cmg5k2l1n0001pl8example9x
                  status: TIMED_OUT
                  requestedAt: '2026-10-01T14:10:00.000Z'
                  pollDeadline: '2026-10-01T14:15:00.000Z'
                  code: null
                  capturedAt: null
                  transcribedAt: null
                  failureReason: canceled_by_customer
                  hasAudio: false
        '401':
          description: >-
            Header `x-api-key` / `x-api-key-id` ausente ou inválido (o corpo
            traz só `error`)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Invalid API key
        '403':
          description: >-
            Chave com escopo de número ou concessão OAuth por número
            (`NUMBER_SCOPE_NOT_ALLOWED`); token OAuth/MCP de um usuário que não
            é Proprietário nem Administrador (`PERMISSION_DENIED`) ou que não é
            mais membro ativo (`WORKSPACE_MEMBERSHIP_REQUIRED`); workspace
            arquivado (`WORKSPACE_ARCHIVED`). `TENANT_REQUIRED`: credencial sem
            workspace
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                number_scope_not_allowed:
                  summary: Chave com escopo de número
                  value:
                    error: This endpoint requires a tenant-scoped API key
                    code: NUMBER_SCOPE_NOT_ALLOWED
                permission_denied:
                  summary: Papel sem phone_lines:read
                  value:
                    error: >-
                      Your workspace role does not allow this action
                      (phone_lines:read).
                    code: PERMISSION_DENIED
                workspace_membership_required:
                  summary: Não é mais membro
                  value:
                    error: >-
                      The user behind this token is not an active member of this
                      workspace.
                    code: WORKSPACE_MEMBERSHIP_REQUIRED
                workspace_archived:
                  summary: Workspace arquivado
                  value:
                    error: >-
                      This workspace has been archived and its API is closed. |
                      Este workspace foi arquivado e sua API está encerrada.
                    code: WORKSPACE_ARCHIVED
                tenantRequired:
                  summary: Credencial sem workspace
                  value:
                    error: This credential is not bound to a workspace.
                    code: TENANT_REQUIRED
        '404':
          description: >-
            `LINE_NOT_FOUND` — nenhuma linha com esse id no seu workspace;
            `ACTIVATION_NOT_FOUND` — nenhum pedido com esse id nessa linha do
            seu workspace
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              examples:
                line_not_found:
                  summary: Linha fora do seu workspace
                  value:
                    error: Line not found. | Linha não encontrada.
                    code: LINE_NOT_FOUND
                activation_not_found:
                  summary: Pedido fora dessa linha ou do seu workspace
                  value:
                    error: Code request not found. | Pedido de código não encontrado.
                    code: ACTIVATION_NOT_FOUND
        '409':
          description: >-
            `ACTIVATION_NOT_WAITING` — a ligação já foi capturada (o código está
            sendo lido: continue consultando) ou o pedido já terminou. Nada
            mudou.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: >-
                  This code request is no longer waiting for the call: the call
                  was already captured, or the request already ended. | Este
                  pedido de código não está mais esperando a ligação: a ligação
                  já foi capturada ou o pedido já terminou.
                code: ACTIVATION_NOT_WAITING
        '500':
          description: Falha inesperada
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
              example:
                error: Unexpected error. | Erro inesperado.
                code: INTERNAL_ERROR
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Sua chave de API ps_
    apiKeyId:
      type: apiKey
      in: header
      name: x-api-key-id
      description: Id da chave de API (alternativa ao x-api-key)

````

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