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

# Agenda videoconferência

> Agenda ou reagenda a videoconferência do titular.

> [!NOTE]
>
> A chamada espera até 30 segundos pelo resultado. Defina um timeout de pelo menos 35 segundos no cliente HTTP. Se a espera acabar antes do resultado, a resposta traz o estado atual do protocolo, sem `error`: consulte o protocolo até ver o resultado.

> [!NOTE]
>
> Veja também:
>
> * [Erros](https://docs.certificados.zapsign.com.br/erros.md)
> * [Idempotência](https://docs.certificados.zapsign.com.br/idempotencia.md)
> * [Ciclo de vida do protocolo](https://docs.certificados.zapsign.com.br/ciclo-de-vida-do-protocolo.md)


## OpenAPI

````yaml /api-reference/openapi.json post /api/v2/partners/protocols/{protocol_id}/appointment
openapi: 3.1.0
info:
  title: Certificados ZapSign Partner API v2
  version: 2.0.0
  description: >-
    API REST para parceiros criarem e acompanharem protocolos de certificado
    digital e-CPF e e-CNPJ (A1 e A3 em nuvem), emitidos por videoconferência.
  contact:
    name: Suporte Certificados ZapSign
    url: https://wa.me/5511952135263
servers:
  - url: https://certificados.zapsign.com.br
    description: Produção
security:
  - bearerAuth: []
tags:
  - name: Protocolos
    description: Criação, consulta, listagem e cancelamento de protocolos.
  - name: Verificação
    description: Verificação opcional do titular antes de criar o protocolo.
  - name: Agendamento
    description: Horários livres e agendamento da videoconferência.
  - name: Saldo e catálogo
    description: Saldo atual e certificados disponíveis para o parceiro.
paths:
  /api/v2/partners/protocols/{protocol_id}/appointment:
    post:
      tags:
        - Agendamento
      summary: Agenda videoconferência
      description: Agenda ou reagenda a videoconferência do titular.
      operationId: scheduleAppointment
      parameters:
        - $ref: '#/components/parameters/ProtocolId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentRequest'
            examples:
              Agendar videoconferência:
                summary: Agendar videoconferência
                value:
                  date: '2026-10-22'
                  time: '10:00'
              Reagendar videoconferência:
                summary: Reagendar videoconferência
                value:
                  date: '2026-10-22'
                  time: '11:30'
      responses:
        '200':
          description: >-
            Protocolo atualizado. Se o agendamento falha, a resposta continua
            `200` e `error.code` traz `slot_unavailable`,
            `appointment_rejected`, `reschedule_rejected` ou
            `provider_unavailable`.
          headers:
            Idempotent-Replayed:
              $ref: '#/components/headers/IdempotentReplayed'
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Protocol'
              examples:
                Agendamento confirmado:
                  summary: Agendamento confirmado
                  value:
                    status: appointment_scheduled
                    protocol_id: CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y
                    external_id: PEDIDO_12345
                    protocol_number: '7800'
                    appointment:
                      date: '2026-10-22'
                      time: '10:00'
                      timezone: America/Sao_Paulo
                    certificate:
                      name: e-CPF A1 (1 ano)
                      type: e_cpf
                      model: a1
                      validity_months: 12
                    customer:
                      type: pf
                      name: Ana Souza
                      cpf: '52998224725'
                      birth_date: '1990-01-02'
                      email: ana@exemplo.com.br
                      phone: '+5511987654321'
                      address:
                        cep: '01310100'
                        street: Rua das Flores
                        number: '123'
                        complement: null
                        neighborhood: Centro
                        city: São Paulo
                        state: SP
                    created_at: '2026-10-21T13:00:00.000Z'
                    updated_at: '2026-10-21T13:00:30.000Z'
                Reagendamento confirmado:
                  summary: Reagendamento confirmado
                  value:
                    status: appointment_scheduled
                    protocol_id: CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y
                    external_id: PEDIDO_12345
                    protocol_number: '7800'
                    appointment:
                      date: '2026-10-22'
                      time: '11:30'
                      timezone: America/Sao_Paulo
                    certificate:
                      name: e-CPF A1 (1 ano)
                      type: e_cpf
                      model: a1
                      validity_months: 12
                    customer:
                      type: pf
                      name: Ana Souza
                      cpf: '52998224725'
                      birth_date: '1990-01-02'
                      email: ana@exemplo.com.br
                      phone: '+5511987654321'
                      address:
                        cep: '01310100'
                        street: Rua das Flores
                        number: '123'
                        complement: null
                        neighborhood: Centro
                        city: São Paulo
                        state: SP
                    created_at: '2026-10-21T13:00:00.000Z'
                    updated_at: '2026-10-21T13:00:30.000Z'
                Horário escolhido indisponível:
                  summary: Horário escolhido indisponível
                  value:
                    status: protocol_generated
                    error:
                      code: slot_unavailable
                      message: >-
                        O horário escolhido não está mais disponível. Escolha
                        outro horário.
                    protocol_id: CPR_01K7Q3S9XX2AFVT3061EB8FFDP
                    protocol_number: '7775'
                    protocol_url: >-
                      https://sistemas.gestaocd.com.br/fila/Xk3pQ9vT2a/52998224725/7775
                    certificate:
                      name: e-CPF A1 (1 ano)
                      type: e_cpf
                      model: a1
                      validity_months: 12
                    customer:
                      type: pf
                      name: Ana Souza
                      cpf: '52998224725'
                      birth_date: '1990-01-02'
                      email: ana@exemplo.com.br
                      phone: '+5511987654321'
                      address:
                        cep: '01310100'
                        street: Rua das Flores
                        number: '123'
                        complement: null
                        neighborhood: Centro
                        city: São Paulo
                        state: SP
                    created_at: '2026-10-21T13:00:00.000Z'
                    updated_at: '2026-10-21T13:00:30.000Z'
                Agendamento não confirmado:
                  summary: Agendamento não confirmado
                  value:
                    status: protocol_generated
                    error:
                      code: appointment_rejected
                      message: >-
                        O protocolo foi gerado, mas o agendamento não foi
                        confirmado. Escolha outro horário.
                    protocol_id: CPR_01K7Q3S26E9VQ14VSSNZ7054RX
                    protocol_number: '7774'
                    protocol_url: >-
                      https://sistemas.gestaocd.com.br/fila/Xk3pQ9vT2a/52998224725/7774
                    certificate:
                      name: e-CPF A1 (1 ano)
                      type: e_cpf
                      model: a1
                      validity_months: 12
                    customer:
                      type: pf
                      name: Ana Souza
                      cpf: '52998224725'
                      birth_date: '1990-01-02'
                      email: ana@exemplo.com.br
                      phone: '+5511987654321'
                      address:
                        cep: '01310100'
                        street: Rua das Flores
                        number: '123'
                        complement: null
                        neighborhood: Centro
                        city: São Paulo
                        state: SP
                    created_at: '2026-10-21T13:00:00.000Z'
                    updated_at: '2026-10-21T13:00:30.000Z'
                Novo horário não confirmado, horário anterior mantido:
                  summary: Novo horário não confirmado, horário anterior mantido
                  value:
                    status: appointment_scheduled
                    error:
                      code: reschedule_rejected
                      message: >-
                        O novo horário não foi confirmado. O agendamento
                        anterior continua valendo; escolha outro horário.
                    protocol_id: CPR_01K7Q3RTEZQC3FFY01N4SGGE4B
                    protocol_number: '7773'
                    appointment:
                      date: '2026-10-22'
                      time: '10:00'
                      timezone: America/Sao_Paulo
                    certificate:
                      name: e-CPF A1 (1 ano)
                      type: e_cpf
                      model: a1
                      validity_months: 12
                    customer:
                      type: pf
                      name: Ana Souza
                      cpf: '52998224725'
                      birth_date: '1990-01-02'
                      email: ana@exemplo.com.br
                      phone: '+5511987654321'
                      address:
                        cep: '01310100'
                        street: Rua das Flores
                        number: '123'
                        complement: null
                        neighborhood: Centro
                        city: São Paulo
                        state: SP
                    created_at: '2026-10-21T13:00:00.000Z'
                    updated_at: '2026-10-21T13:00:30.000Z'
        '400':
          $ref: '#/components/responses/BadRequestSchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFoundSchedule'
        '409':
          $ref: '#/components/responses/ConflictSchedule'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailableSchedule'
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            # Use a `date` e a `time` de um horário livre de GET
            /appointment-slots.

            # Gere uma chave para cada ação. Ao reenviar a mesma chamada, use a
            mesma chave.

            # Timeout de 35 s: a chamada espera até 30 s pelo resultado.

            curl -X POST
            'https://certificados.zapsign.com.br/api/v2/partners/protocols/CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y/appointment'
            \
              -H 'Authorization: Bearer czk_live_SUA_CHAVE' \
              -H 'Idempotency-Key: 3f2b8a1e-7c4d-4e0a-9b51-6d2f8c9e1a47' \
              -H 'Content-Type: application/json' \
              --max-time 35 \
              -d '{
                "date": "2026-10-22",
                "time": "10:00"
              }'
        - lang: javascript
          label: Node.js (fetch)
          source: >-
            // Use a `date` e a `time` de um horário livre de GET
            /appointment-slots.

            // Timeout de 35 s: a chamada espera até 30 s pelo resultado.

            // Gere a chave uma vez por ação e reutilize-a ao reenviar a mesma
            chamada.

            const idempotencyKey = crypto.randomUUID();

            const res = await fetch(
              'https://certificados.zapsign.com.br/api/v2/partners/protocols/CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y/appointment',
              {
                method: 'POST',
                headers: {
                  Authorization: 'Bearer czk_live_SUA_CHAVE',
                  'Idempotency-Key': idempotencyKey,
                  'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                  date: '2026-10-22',
                  time: '10:00',
                }),
                signal: AbortSignal.timeout(35_000),
              },
            );

            const protocolo = await res.json();

            // Na resposta 200, confira `protocolo.status`,
            `protocolo.appointment` e `protocolo.error`.
        - lang: python
          label: Python (requests)
          source: >-
            import requests

            import uuid


            # Use a date e a time de um horário livre de GET /appointment-slots.

            # Timeout de 35 s: a chamada espera até 30 s pelo resultado.

            # Gere a chave uma vez por ação e reutilize-a ao reenviar a mesma
            chamada.

            idempotency_key = str(uuid.uuid4())

            res = requests.post(
                'https://certificados.zapsign.com.br/api/v2/partners/protocols/CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y/appointment',
                headers={
                    'Authorization': 'Bearer czk_live_SUA_CHAVE',
                    'Idempotency-Key': idempotency_key,
                },
                json={
                    'date': '2026-10-22',
                    'time': '10:00',
                },
                timeout=35,
            )

            protocolo = res.json()

            # Na resposta 200, confira protocolo['status'],
            protocolo['appointment'] e protocolo['error'].
components:
  parameters:
    ProtocolId:
      name: protocol_id
      in: path
      required: true
      description: >-
        Identificador do protocolo, devolvido ao criar. Formato `CPR_` seguido
        de 26 caracteres.
      schema:
        type: string
        pattern: ^CPR_[0-9A-HJKMNP-TV-Z]{26}$
      example: CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      description: >-
        Identificador da ação, para reenviar a chamada sem repeti-la. Use a
        mesma chave ao reenviar e outra para cada nova ação. Letras, números e
        `. _ : -`, sem dados pessoais. Não expira. Máx. 128 caracteres.
      schema:
        type: string
        pattern: ^[A-Za-z0-9._:-]{1,128}$
        minLength: 1
        maxLength: 128
      example: 3f2b8a1e-7c4d-4e0a-9b51-6d2f8c9e1a47
  schemas:
    AppointmentRequest:
      type: object
      additionalProperties: false
      required:
        - date
        - time
      description: >-
        Horário da videoconferência. Escolha um horário livre em [Lista
        horários](/api-reference/agendamento/lista-horarios): os exemplos têm
        datas fixas.
      properties:
        date:
          type: string
          description: Dia da videoconferência. Formato `AAAA-MM-DD`.
          format: date
          example: '2026-10-22'
        time:
          type: string
          description: Horário da videoconferência, de Brasília. Formato `HH:MM`.
          pattern: ^(?:[01]\d|2[0-3]):[0-5]\d$
          example: '11:30'
    Protocol:
      type: object
      required:
        - protocol_id
        - status
        - certificate
        - customer
        - created_at
        - updated_at
      properties:
        status:
          $ref: '#/components/schemas/ProtocolStatus'
        error:
          $ref: '#/components/schemas/ProtocolError'
        protocol_id:
          type: string
          description: >-
            Identificador do protocolo. Use nas chamadas de consulta,
            agendamento e cancelamento.
          pattern: ^CPR_[0-9A-HJKMNP-TV-Z]{26}$
          example: CPR_01K7Q3ZB8M4N6P2R5T9V1W3X5Y
        external_id:
          type: string
          description: Seu identificador do pedido, se você enviou um ao criar.
          example: PEDIDO_12345
        protocol_number:
          type: string
          description: >-
            Número do protocolo. Compartilhe com o titular para emitir o
            certificado. Disponível depois que o protocolo é gerado.
          example: '7800'
        protocol_url:
          type: string
          description: >-
            Link da fila da videoconferência. Compartilhe com o titular. Aparece
            só em `protocol_generated`, quando o link está disponível.
          format: uri
          example: https://sistemas.gestaocd.com.br/fila/Xk3pQ9vT2a/52998224725/7800
        appointment:
          $ref: '#/components/schemas/Appointment'
          description: >-
            Videoconferência agendada. Aparece depois que o horário é
            confirmado. Ao reagendar, mantém o horário anterior até a
            confirmação do novo.
        valid_until:
          type:
            - string
            - 'null'
          description: >-
            Fim da validade do certificado, em UTC. Aparece quando o certificado
            é emitido.
          format: date-time
          example: '2027-10-20T14:10:00.000Z'
        certificate:
          $ref: '#/components/schemas/Certificate'
        customer:
          $ref: '#/components/schemas/Customer'
        created_at:
          type: string
          description: Data e hora de criação do protocolo, em UTC.
          format: date-time
          example: '2026-10-21T13:00:00.000Z'
        updated_at:
          type: string
          description: Data e hora da última atualização do protocolo, em UTC.
          format: date-time
          example: '2026-10-21T13:00:30.000Z'
    ProtocolStatus:
      type: string
      description: >-
        Status do protocolo.


        | Valor | Significado |

        | --- | --- |

        | `creating` | O protocolo está sendo criado. |

        | `protocol_generated` | O protocolo foi gerado e já tem número. |

        | `appointment_scheduled` | A videoconferência está agendada para o
        horário de `appointment`. |

        | `certificate_issued` | O certificado foi emitido. |

        | `cancelled` | O protocolo foi cancelado e o certificado voltou ao
        saldo. |

        | `creation_failed` | Não foi possível criar o protocolo. Nada foi
        descontado do saldo. |
      enum:
        - creating
        - protocol_generated
        - appointment_scheduled
        - certificate_issued
        - cancelled
        - creation_failed
    ProtocolError:
      type: object
      description: >-
        Falha da última ação (criar, agendar ou cancelar). Só aparece quando a
        ação falhou.
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/ProtocolErrorCode'
        reason:
          $ref: '#/components/schemas/ProtocolErrorReason'
        message:
          type: string
          description: Mensagem em português sobre a falha.
          example: O horário escolhido não está mais disponível. Escolha outro horário.
    Appointment:
      type: object
      description: Videoconferência agendada.
      required:
        - date
        - time
        - timezone
      properties:
        date:
          type: string
          description: Dia da videoconferência. Formato `AAAA-MM-DD`.
          format: date
          example: '2026-10-22'
        time:
          type: string
          description: Horário da videoconferência, de Brasília. Formato `HH:MM`.
          example: '11:30'
        timezone:
          type: string
          description: Fuso horário de `date` e `time`, hoje `America/Sao_Paulo`.
          example: America/Sao_Paulo
    Certificate:
      type: object
      description: Certificado do protocolo.
      required:
        - type
        - model
        - validity_months
        - name
      properties:
        name:
          type: string
          description: Nome do certificado, para exibir ao titular.
          example: e-CPF A1 (1 ano)
        type:
          $ref: '#/components/schemas/CertificateType'
        model:
          $ref: '#/components/schemas/CertificateModel'
        validity_months:
          $ref: '#/components/schemas/ValidityMonths'
    Customer:
      description: >-
        Titular do certificado. A API preenche o nome (`name` ou
        `company_name`).
      oneOf:
        - $ref: '#/components/schemas/CustomerPf'
        - $ref: '#/components/schemas/CustomerPj'
      discriminator:
        propertyName: type
        mapping:
          pf: '#/components/schemas/CustomerPf'
          pj: '#/components/schemas/CustomerPj'
      type: object
    FieldError:
      type: object
      description: Campo da requisição que precisa de correção.
      required:
        - field
        - message
      properties:
        field:
          type: string
          description: >-
            Caminho do campo com erro, como `customer.address.cep`, ou o nome do
            header.
          example: customer.cpf
        message:
          type: string
          description: Mensagem em português sobre o que corrigir.
          example: CPF inválido.
    ProtocolErrorCode:
      type: string
      description: >-
        Código da falha. Veja o que fazer em [Ciclo de vida do
        protocolo](/ciclo-de-vida-do-protocolo).


        | Valor | Significado |

        | --- | --- |

        | `slot_unavailable` | O horário escolhido não está mais disponível. |

        | `appointment_rejected` | O agendamento não foi confirmado. |

        | `reschedule_rejected` | O novo horário não foi confirmado. |

        | `provider_unavailable` | O serviço está indisponível no momento. |

        | `order_not_created` | A criação do protocolo não foi concluída e nada
        foi descontado do saldo. Crie outro protocolo com uma nova
        `Idempotency-Key` e outro `external_id`. |

        | `protocol_not_created` | O protocolo não foi gerado e nada foi
        descontado do saldo. Crie outro protocolo com uma nova `Idempotency-Key`
        e outro `external_id`. |

        | `invalid_state` | O protocolo não pode ser cancelado. |
      enum:
        - slot_unavailable
        - appointment_rejected
        - reschedule_rejected
        - provider_unavailable
        - order_not_created
        - protocol_not_created
        - invalid_state
    ProtocolErrorReason:
      type: string
      description: >-
        Detalhe da falha. Só aparece com `protocol_not_created`.


        | Valor | Significado |

        | --- | --- |

        | `holder_email_in_use` | O e-mail já estava vinculado a outro CPF e a
        Autoridade Certificadora recusou o protocolo. Nada foi descontado do
        saldo. Crie outro protocolo com outro e-mail, uma nova `Idempotency-Key`
        e outro `external_id`. |
      enum:
        - holder_email_in_use
    CertificateType:
      type: string
      description: >-
        Tipo do certificado. `e_cpf` é para titular `pf` e `e_cnpj` para titular
        `pj`.


        | Valor | Significado |

        | --- | --- |

        | `e_cpf` | Certificado e-CPF, para titular pessoa física. |

        | `e_cnpj` | Certificado e-CNPJ, para titular pessoa jurídica. |
      enum:
        - e_cpf
        - e_cnpj
    CertificateModel:
      type: string
      description: >-
        Modelo do certificado.


        | Valor | Significado |

        | --- | --- |

        | `a1` | Certificado em arquivo, instalado no computador do titular. |

        | `a3_em_nuvem` | Certificado guardado na nuvem, usado de qualquer
        dispositivo. |
      enum:
        - a1
        - a3_em_nuvem
    ValidityMonths:
      type: integer
      enum:
        - 12
      description: Validade do certificado, em meses. Hoje só `12` (1 ano).
    CustomerPf:
      type: object
      description: Titular pessoa física.
      required:
        - type
        - cpf
        - birth_date
        - name
        - email
        - phone
        - address
      properties:
        type:
          type: string
          const: pf
          description: Tipo do titular, `pf` para e-CPF.
        name:
          type:
            - string
            - 'null'
          description: Nome completo do titular.
          example: Ana Souza
        cpf:
          type: string
          description: CPF do titular, só números.
          example: '52998224725'
        birth_date:
          type:
            - string
            - 'null'
          description: Data de nascimento. Formato `AAAA-MM-DD`.
          example: '1990-01-02'
        email:
          type:
            - string
            - 'null'
          description: E-mail do titular.
          example: ana@exemplo.com.br
        phone:
          type:
            - string
            - 'null'
          description: Celular com DDD e código do país, como `+5511987654321`.
          example: '+5511987654321'
        address:
          $ref: '#/components/schemas/Address'
      title: Pessoa física
    CustomerPj:
      type: object
      description: >-
        Titular pessoa jurídica. Os dados de quem faz a videoconferência ficam
        em `representative`.
      required:
        - type
        - cnpj
        - company_name
        - representative
      properties:
        type:
          type: string
          const: pj
          description: Tipo do titular, `pj` para e-CNPJ.
        company_name:
          type:
            - string
            - 'null'
          description: Razão social da empresa.
          example: Padaria do Bairro LTDA
        cnpj:
          type: string
          description: CNPJ da empresa, 14 caracteres sem pontuação.
          example: '11222333000181'
        representative:
          type: object
          description: >-
            Representante legal da empresa, quem faz a videoconferência do
            e-CNPJ.
          required:
            - cpf
            - birth_date
            - name
            - email
            - phone
            - address
          properties:
            name:
              type:
                - string
                - 'null'
              description: Nome completo do representante legal.
              example: Ana Souza
            cpf:
              type:
                - string
                - 'null'
              description: CPF do representante legal, só números.
              example: '52998224725'
            birth_date:
              type:
                - string
                - 'null'
              description: Data de nascimento. Formato `AAAA-MM-DD`.
              example: '1990-01-02'
            email:
              type:
                - string
                - 'null'
              description: E-mail do representante legal.
              example: ana@exemplo.com.br
            phone:
              type:
                - string
                - 'null'
              description: Celular com DDD e código do país, como `+5511987654321`.
              example: '+5511987654321'
            address:
              $ref: '#/components/schemas/Address'
      title: Pessoa jurídica
    Address:
      type: object
      description: Endereço do titular. As 7 chaves sempre vêm; sem dados, todas `null`.
      required:
        - cep
        - street
        - number
        - complement
        - neighborhood
        - city
        - state
      properties:
        cep:
          type:
            - string
            - 'null'
          description: CEP, 8 dígitos, só números.
          example: '01310100'
        street:
          type:
            - string
            - 'null'
          description: Nome da rua ou avenida.
          example: Rua das Flores
        number:
          type:
            - string
            - 'null'
          description: Número do endereço.
          example: '123'
        complement:
          type:
            - string
            - 'null'
          description: Complemento do endereço.
        neighborhood:
          type:
            - string
            - 'null'
          description: Bairro.
          example: Centro
        city:
          type:
            - string
            - 'null'
          description: Cidade.
          example: São Paulo
        state:
          type:
            - string
            - 'null'
          description: Sigla da UF, como `SP`.
          example: SP
  headers:
    IdempotentReplayed:
      description: Indica que a API reconheceu um reenvio da mesma chamada.
      schema:
        type: string
        enum:
          - 'true'
    XRequestId:
      description: Identificador da chamada. Informe-o ao suporte se precisar de ajuda.
      schema:
        type: string
        example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    WWWAuthenticate:
      description: Esquema de autenticação, sempre `Bearer`.
      schema:
        type: string
        example: Bearer
    RetryAfterRateLimit:
      description: Segundos para aguardar antes de tentar de novo, de 1 a 60.
      schema:
        type: integer
        minimum: 1
        maximum: 60
        example: 60
    RetryAfterUnavailable:
      description: Segundos para aguardar antes de tentar de novo, sempre 30.
      schema:
        type: integer
        example: 30
  responses:
    BadRequestSchedule:
      description: >-
        Body inválido, campo desconhecido ou `Idempotency-Key` ausente ou
        inválida. Veja o que fazer em [Erros](/erros).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `validation_error` | O body, a query ou um header da
                  requisição tem um valor inválido. |

                  | `idempotency_key_required` | A requisição não trouxe o
                  header `Idempotency-Key`. |
                enum:
                  - validation_error
                  - idempotency_key_required
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              field_errors:
                type: array
                description: Campos que precisam de correção.
                items:
                  $ref: '#/components/schemas/FieldError'
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            time fora do formato HH:MM:
              summary: time fora do formato HH:MM
              value:
                code: validation_error
                message: Erro de validação no corpo da requisição.
                retryable: false
                field_errors:
                  - field: time
                    message: Use um horário no formato HH:MM.
                status: 400
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            date inexistente:
              summary: date inexistente
              value:
                code: validation_error
                message: Erro de validação no corpo da requisição.
                retryable: false
                field_errors:
                  - field: date
                    message: Use uma data válida no formato AAAA-MM-DD.
                status: 400
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Idempotency-Key com formato inválido:
              summary: Idempotency-Key com formato inválido
              value:
                code: validation_error
                message: Erro de validação no corpo da requisição.
                retryable: false
                field_errors:
                  - field: Idempotency-Key
                    message: 'Use de 1 a 128 caracteres entre letras, números e . _ : -'
                status: 400
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Chave de idempotência não enviada:
              summary: Chave de idempotência não enviada
              value:
                code: idempotency_key_required
                message: Header Idempotency-Key ausente.
                retryable: false
                status: 400
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/idempotency_key_required
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    Unauthorized:
      description: >-
        Chave de API ausente, inválida ou revogada. Veja o que fazer em
        [Erros](/erros).
      headers:
        WWW-Authenticate:
          $ref: '#/components/headers/WWWAuthenticate'
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `missing_or_invalid_authorization` | O header
                  `Authorization` não veio ou não está no formato `Bearer
                  <chave>`. |

                  | `invalid_api_key` | A API key informada não existe. |

                  | `api_key_revoked` | A API key informada foi revogada. |
                enum:
                  - missing_or_invalid_authorization
                  - invalid_api_key
                  - api_key_revoked
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Chave de API não enviada ou fora do formato:
              summary: Chave de API não enviada ou fora do formato
              value:
                code: missing_or_invalid_authorization
                message: Header Authorization ausente ou malformado.
                retryable: false
                status: 401
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/missing_or_invalid_authorization
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Chave de API inválida:
              summary: Chave de API inválida
              value:
                code: invalid_api_key
                message: API key inválida.
                retryable: false
                status: 401
                type: https://docs.certificados.zapsign.com.br/erros/invalid_api_key
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Chave de API revogada:
              summary: Chave de API revogada
              value:
                code: api_key_revoked
                message: API key revogada.
                retryable: false
                status: 401
                type: https://docs.certificados.zapsign.com.br/erros/api_key_revoked
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    Forbidden:
      description: >-
        Cadastro do parceiro não aprovado, sem acesso à API de protocolos ou
        chamada vinda de navegador. Veja o que fazer em [Erros](/erros).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `partner_not_approved` | O cadastro do parceiro ainda não
                  foi aprovado. |

                  | `forbidden` | O parceiro não tem acesso à API de protocolos
                  ou a chamada veio de um navegador. |
                enum:
                  - partner_not_approved
                  - forbidden
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Cadastro do parceiro não aprovado:
              summary: Cadastro do parceiro não aprovado
              value:
                code: partner_not_approved
                message: Parceiro não aprovado.
                retryable: false
                status: 403
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/partner_not_approved
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Parceiro sem acesso à API de protocolos:
              summary: Parceiro sem acesso à API de protocolos
              value:
                code: forbidden
                message: Parceiro sem acesso à API de protocolos.
                retryable: false
                status: 403
                type: https://docs.certificados.zapsign.com.br/erros/forbidden
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Chamada vinda de navegador:
              summary: Chamada vinda de navegador
              value:
                code: forbidden
                message: Origem não permitida.
                retryable: false
                status: 403
                type: https://docs.certificados.zapsign.com.br/erros/forbidden
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    NotFoundSchedule:
      description: >-
        Nenhum protocolo do parceiro tem esse `protocol_id`, ou o formato do
        `protocol_id` é inválido. Veja o que fazer em [Erros](/erros).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: |-
                  Código do erro. Veja como corrigir em [Erros](/erros).

                  | Valor | Significado |
                  | --- | --- |
                  | `not_found` | O protocolo não foi encontrado. |
                enum:
                  - not_found
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Protocolo não encontrado:
              summary: Protocolo não encontrado
              value:
                code: not_found
                message: Recurso não encontrado.
                retryable: false
                status: 404
                type: https://docs.certificados.zapsign.com.br/erros/not_found
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    ConflictSchedule:
      description: >-
        A chave já foi usada com outro body, o protocolo só aceita agendar em
        `protocol_generated` ou `appointment_scheduled`, ou outra ação ainda
        está em andamento. Veja o que fazer em [Erros](/erros).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `idempotency_conflict` | A `Idempotency-Key` já foi usada
                  com outro body. |

                  | `action_not_allowed` | O status atual do protocolo não
                  permite a ação. |

                  | `operation_in_progress` | Outra ação do protocolo ainda está
                  em andamento. |
                enum:
                  - idempotency_conflict
                  - action_not_allowed
                  - operation_in_progress
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Chave de idempotência já usada com outros dados:
              summary: Chave de idempotência já usada com outros dados
              value:
                code: idempotency_conflict
                message: >-
                  Esta Idempotency-Key já foi usada com outro corpo. Use uma
                  nova chave.
                retryable: false
                status: 409
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/idempotency_conflict
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Protocolo em um status que não permite a ação:
              summary: Protocolo em um status que não permite a ação
              value:
                code: action_not_allowed
                message: >-
                  O protocolo não permite esta ação no estado atual. Consulte o
                  protocolo.
                retryable: false
                status: 409
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/action_not_allowed
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
            Outra ação ainda em andamento no protocolo:
              summary: Outra ação ainda em andamento no protocolo
              value:
                code: operation_in_progress
                message: >-
                  Há uma operação em andamento neste protocolo. Aguarde e
                  consulte o protocolo.
                retryable: true
                status: 409
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/operation_in_progress
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    TooManyRequests:
      description: >-
        Limite de chamadas excedido. Espere os segundos indicados em
        `Retry-After`. Veja o que fazer em [Erros](/erros).
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfterRateLimit'
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `rate_limited` | Você enviou chamadas demais em pouco tempo.
                  |
                enum:
                  - rate_limited
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Muitas chamadas em pouco tempo:
              summary: Muitas chamadas em pouco tempo
              value:
                code: rate_limited
                message: Limite de requisições excedido.
                retryable: true
                status: 429
                type: https://docs.certificados.zapsign.com.br/erros/rate_limited
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    InternalError:
      description: Erro inesperado no servidor. Veja o que fazer em [Erros](/erros).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: |-
                  Código do erro. Veja como corrigir em [Erros](/erros).

                  | Valor | Significado |
                  | --- | --- |
                  | `internal_error` | Ocorreu um erro inesperado no servidor. |
                enum:
                  - internal_error
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Erro inesperado no servidor:
              summary: Erro inesperado no servidor
              value:
                code: internal_error
                message: Erro interno do servidor.
                retryable: true
                status: 500
                type: https://docs.certificados.zapsign.com.br/erros/internal_error
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
    ServiceUnavailableSchedule:
      description: >-
        Serviço temporariamente indisponível. Espere os segundos indicados em
        `Retry-After` e reenvie com a mesma `Idempotency-Key`. Veja o que fazer
        em [Erros](/erros).
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfterUnavailable'
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/problem+json:
          schema:
            type: object
            required:
              - type
              - status
              - code
              - message
              - retryable
              - request_id
            properties:
              code:
                type: string
                description: >-
                  Código do erro. Veja como corrigir em [Erros](/erros).


                  | Valor | Significado |

                  | --- | --- |

                  | `service_unavailable` | O serviço está temporariamente
                  indisponível. |
                enum:
                  - service_unavailable
              message:
                type: string
                description: Mensagem em português sobre o erro.
                example: Erro de validação no corpo da requisição.
              retryable:
                type: boolean
                description: '`true` quando vale reenviar a mesma chamada.'
                example: false
              status:
                type: integer
                description: Status HTTP da resposta.
                example: 400
              type:
                type: string
                description: URL da página do erro.
                format: uri
                example: >-
                  https://docs.certificados.zapsign.com.br/erros/validation_error
              request_id:
                type: string
                description: Identificador da chamada, igual ao header `X-Request-Id`.
                example: 01K7Q4A1B2C3D4E5F6G7H8J9KM
          examples:
            Serviço temporariamente indisponível:
              summary: Serviço temporariamente indisponível
              value:
                code: service_unavailable
                message: Serviço temporariamente indisponível.
                retryable: true
                status: 503
                type: >-
                  https://docs.certificados.zapsign.com.br/erros/service_unavailable
                request_id: 01K7Q4A1B2C3D4E5F6G7H8J9KM
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: czk_live_*
      description: >-
        API key criada no [portal do
        parceiro](https://certificados.zapsign.com.br/reseller/api-keys).

````

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