signdocs-com-br Webhooks API

Registro, listagem, remoção e teste de webhooks para notificações de eventos.

Operations 4

POST /v1/webhooks Registrar webhook #
GET /v1/webhooks Listar webhooks #
DELETE /v1/webhooks/{webhookId} Remover webhook #
POST /v1/webhooks/{webhookId}/test Testar webhook #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/signdocs-com-br:signdocs-com-br-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

signdocs-com-br-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Signdocs Com Br Webhooks API
  version: 1.4.0
  contact:
    name: SignDocs Brasil API Support
    email: suporte@signdocs.com.br
  license:
    name: Proprietary
    url: https://www.signdocs.com.br/termos-de-uso.html
  description: 'Operations tagged Webhooks across 2 of this provider''s published API definitions: openapi.yaml, signdocs-com-br-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.signdocs.com.br
  description: Produção
- url: https://api-hml.signdocs.com.br
  description: Homologação
- url: https://mtls-api.signdocs.com.br
  description: Produção (mTLS)
- url: https://mtls-api-hml.signdocs.com.br
  description: Homologação (mTLS)
security:
- bearerJwt: []
tags:
- name: Webhooks
  description: Registro, listagem, remoção e teste de webhooks para notificações de eventos.
paths:
  /v1/webhooks:
    post:
      operationId: registerWebhook
      tags:
      - Webhooks
      summary: Registrar webhook
      description: 'Registra um novo endpoint de webhook para receber notificações de eventos.

        O `secret` retornado na resposta é exibido apenas neste momento — armazene-o

        com segurança para validar as assinaturas HMAC-SHA256 dos payloads recebidos.


        Uma URL que já tem um webhook `ACTIVE` no tenant é recusada com `409`, qualquer

        que seja a lista de eventos; o `webhookId` existente vem no `detail`. Para mudar

        os eventos, remova o registro (`DELETE /v1/webhooks/{webhookId}`) e registre a

        URL de novo — o novo registro recebe um novo `secret`.


        Requer scope `webhooks:write`.'
      security:
      - bearerJwt: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterWebhookRequest'
      responses:
        '201':
          description: Webhook registrado com sucesso. O `secret` é retornado apenas nesta resposta.
          headers:
            Strict-Transport-Security:
              $ref: '#/components/headers/Strict-Transport-Security'
            X-Content-Type-Options:
              $ref: '#/components/headers/X-Content-Type-Options'
            X-Frame-Options:
              $ref: '#/components/headers/X-Frame-Options'
            Referrer-Policy:
              $ref: '#/components/headers/Referrer-Policy'
            Cache-Control:
              $ref: '#/components/headers/Cache-Control'
            API-Version:
              $ref: '#/components/headers/API-Version'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegisterWebhookResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      operationId: listWebhooks
      tags:
      - Webhooks
      summary: Listar webhooks
      description: 'Retorna todos os webhooks registrados pelo tenant autenticado.


        Requer scope `webhooks:write`.'
      security:
      - bearerJwt: []
      responses:
        '200':
          description: Lista de webhooks retornada com sucesso.
          headers:
            Strict-Transport-Security:
              $ref: '#/components/headers/Strict-Transport-Security'
            X-Content-Type-Options:
              $ref: '#/components/headers/X-Content-Type-Options'
            X-Frame-Options:
              $ref: '#/components/headers/X-Frame-Options'
            Referrer-Policy:
              $ref: '#/components/headers/Referrer-Policy'
            Cache-Control:
              $ref: '#/components/headers/Cache-Control'
            API-Version:
              $ref: '#/components/headers/API-Version'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    servers:
    - url: https://api.signdocs.com.br
      description: Produção
    - url: https://api-hml.signdocs.com.br
      description: Homologação
    - url: https://mtls-api.signdocs.com.br
      description: Produção (mTLS)
    - url: https://mtls-api-hml.signdocs.com.br
      description: Homologação (mTLS)
  /v1/webhooks/{webhookId}:
    delete:
      operationId: deleteWebhook
      tags:
      - Webhooks
      summary: Remover webhook
      description: 'Remove um webhook registrado. Após a remoção, nenhuma nova notificação será enviada

        para o endpoint.


        Requer scope `webhooks:write`.'
      security:
      - bearerJwt: []
      parameters:
      - name: webhookId
        in: path
        required: true
        description: Identificador único do webhook.
        schema:
          type: string
      responses:
        '204':
          description: Webhook removido com sucesso.
          headers:
            Strict-Transport-Security:
              $ref: '#/components/headers/Strict-Transport-Security'
            X-Content-Type-Options:
              $ref: '#/components/headers/X-Content-Type-Options'
            X-Frame-Options:
              $ref: '#/components/headers/X-Frame-Options'
            Referrer-Policy:
              $ref: '#/components/headers/Referrer-Policy'
            Cache-Control:
              $ref: '#/components/headers/Cache-Control'
            API-Version:
              $ref: '#/components/headers/API-Version'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    servers:
    - url: https://api.signdocs.com.br
      description: Produção
    - url: https://api-hml.signdocs.com.br
      description: Homologação
    - url: https://mtls-api.signdocs.com.br
      description: Produção (mTLS)
    - url: https://mtls-api-hml.signdocs.com.br
      description: Homologação (mTLS)
  /v1/webhooks/{webhookId}/test:
    post:
      operationId: testWebhook
      tags:
      - Webhooks
      summary: Testar webhook
      description: 'Envia um payload de teste para o endpoint do webhook e retorna o resultado da entrega.

        Útil para verificar conectividade e configuração do webhook.


        Requer scope `webhooks:write`.'
      security:
      - bearerJwt: []
      parameters:
      - name: webhookId
        in: path
        required: true
        description: Identificador único do webhook.
        schema:
          type: string
      responses:
        '200':
          description: Resultado do teste de entrega.
          headers:
            Strict-Transport-Security:
              $ref: '#/components/headers/Strict-Transport-Security'
            X-Content-Type-Options:
              $ref: '#/components/headers/X-Content-Type-Options'
            X-Frame-Options:
              $ref: '#/components/headers/X-Frame-Options'
            Referrer-Policy:
              $ref: '#/components/headers/Referrer-Policy'
            Cache-Control:
              $ref: '#/components/headers/Cache-Control'
            API-Version:
              $ref: '#/components/headers/API-Version'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookTestResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    servers:
    - url: https://api.signdocs.com.br
      description: Produção
    - url: https://api-hml.signdocs.com.br
      description: Homologação
    - url: https://mtls-api.signdocs.com.br
      description: Produção (mTLS)
    - url: https://mtls-api-hml.signdocs.com.br
      description: Homologação (mTLS)
components:
  schemas:
    WebhookEventType:
      type: string
      description: 'Tipos de evento para notificação via webhook.


        Eventos marcados com (NT65) aplicam-se ao fluxo de crédito consignado INSS

        (Nota Técnica 65/ITI), e só são emitidos para tenants com

        `nt65ComplianceEnabled` habilitado. Ver `docs/18-nt65-consignado.md`.

        '
      enum:
      - TRANSACTION.CREATED
      - TRANSACTION.COMPLETED
      - TRANSACTION.CANCELLED
      - TRANSACTION.FAILED
      - TRANSACTION.EXPIRED
      - TRANSACTION.FALLBACK
      - TRANSACTION.DEADLINE_APPROACHING
      - STEP.PURPOSE_DISCLOSURE_SENT
      - ENROLLMENT.EXPIRING
      - ENROLLMENT.EXPIRED
      - QUOTA.WARNING
      - API.DEPRECATION_NOTICE
      - SIGNING_SESSION.CREATED
      - SIGNING_SESSION.COMPLETED
      - SIGNING_SESSION.CANCELLED
      - SIGNING_SESSION.EXPIRED
      - ENVELOPE.CREATED
      - ENVELOPE.ALL_SIGNED
      - ENVELOPE.CANCELLED
      - ENVELOPE.EXPIRED
      x-enum-descriptions:
        TRANSACTION.CREATED: Transação criada.
        TRANSACTION.COMPLETED: Transação finalizada com sucesso; evidência disponível.
        TRANSACTION.CANCELLED: Transação cancelada pelo integrador ou usuário.
        TRANSACTION.FAILED: 'Falha terminal: todas as etapas passaram e a finalização ainda assim

          não produziu documento assinado, então a sessão foi encerrada como

          `FAILED` e ninguém vai repetir a tentativa. `data.reason` traz

          `FINALIZATION_FAILED` e `data.detail` o erro.


          Só existe no fluxo hospedado. Na API direta o erro volta na resposta

          de `POST /v1/transactions/{id}/finalize` e a chamada pode ser repetida

          — quem falha é quem pode tentar de novo, e por isso não há evento.

          '
        TRANSACTION.EXPIRED: Transação expirou sem finalização.
        TRANSACTION.FALLBACK: Fallback acionado (ex. SERPRO sem biometria).
        TRANSACTION.DEADLINE_APPROACHING: (NT65) Faltam ≤2 dias úteis para o prazo de submissão ao INSS.
        STEP.PURPOSE_DISCLOSURE_SENT: (NT65) Notificação de divulgação de finalidade enviada ao beneficiário.
        ENROLLMENT.EXPIRING: 'A imagem de referência de um usuário será destruída em breve — disparado

          30 e 7 dias antes. `data.daysUntilExpiry` diz qual dos dois. Recadastre

          antes da data, ou a etapa de comparação passa a falhar com 422.

          '
        ENROLLMENT.EXPIRED: A imagem de referência foi destruída hoje. O usuário precisa de novo enrollment para assinar.
        QUOTA.WARNING: 'O uso mensal de uma dimensão cruzou 80% do limite do plano. Uma vez por

          dimensão por mês, na requisição que atravessa a marca — não a cada

          chamada acima dela. `data.dimension` diz qual (`monthlyDocuments`,

          `monthlyBiometric`, `monthlyTransactions`, …), com `used`, `limit`,

          `percentUsed` e `resetInSeconds`.


          Só mensal. As cotas diárias são trava rígida sem tolerância e

          reiniciam toda noite; avisar sobre elas produziria notificação quase

          todo dia, que é como um aviso deixa de ser lido.

          '
        API.DEPRECATION_NOTICE: 'O tenant chamou um endpoint marcado como deprecated. Uma vez por

          endpoint por dia, com `deprecatedAt`, `sunsetAt`, `replacement` e

          `message` — os mesmos dados dos cabeçalhos `Deprecation` e `Sunset`

          (RFC 8594), entregues onde alguém de fato os lê: os cabeçalhos chegam

          na resposta de uma chamada servidor-a-servidor que ninguém abre.

          '
        SIGNING_SESSION.CREATED: Sessão de assinatura criada.
        SIGNING_SESSION.COMPLETED: Sessão concluída.
        SIGNING_SESSION.CANCELLED: Sessão cancelada.
        SIGNING_SESSION.EXPIRED: Sessão expirou.
        ENVELOPE.CREATED: Envelope multi-assinante criado.
        ENVELOPE.ALL_SIGNED: Todas as assinaturas do envelope foram concluídas.
        ENVELOPE.CANCELLED: Envelope cancelado; as assinaturas pendentes são encerradas.
        ENVELOPE.EXPIRED: Envelope expirou com uma ou mais assinaturas pendentes.
    WebhookListResponse:
      type: object
      description: Resposta de listagem de webhooks.
      required:
      - webhooks
      - count
      properties:
        webhooks:
          type: array
          items:
            type: object
            required:
            - webhookId
            - url
            - events
            - status
            - createdAt
            - updatedAt
            properties:
              webhookId:
                type: string
              url:
                type: string
                format: uri
              events:
                type: array
                items:
                  $ref: '#/components/schemas/WebhookEventType'
              status:
                type: string
                enum:
                - ACTIVE
                - DISABLED
              createdAt:
                type: string
                format: date-time
              updatedAt:
                type: string
                format: date-time
        count:
          type: integer
          description: Número total de webhooks registrados.
    WebhookTestResponse:
      type: object
      description: Resposta de teste de webhook.
      required:
      - webhookId
      - testDelivery
      properties:
        webhookId:
          type: string
        testDelivery:
          type: object
          required:
          - httpStatus
          - success
          - timestamp
          properties:
            httpStatus:
              type: integer
              description: Código HTTP retornado pelo endpoint.
            success:
              type: boolean
              description: Se a entrega de teste foi bem-sucedida.
            error:
              type: string
              description: Mensagem de erro (se a entrega falhou).
            timestamp:
              type: string
              format: date-time
              description: Momento da tentativa de entrega.
    RegisterWebhookResponse:
      type: object
      description: 'Resposta de registro de webhook. O campo `secret` é retornado **apenas nesta resposta** —

        armazene-o com segurança para validar assinaturas HMAC-SHA256.

        '
      required:
      - webhookId
      - url
      - secret
      - events
      - status
      - createdAt
      properties:
        webhookId:
          type: string
        url:
          type: string
          format: uri
        secret:
          type: string
          description: Segredo HMAC-SHA256 para validação de payloads. Exibido apenas na criação.
        events:
          type: array
          items:
            $ref: '#/components/schemas/WebhookEventType'
        status:
          type: string
          enum:
          - ACTIVE
        createdAt:
          type: string
          format: date-time
    ProblemDetail:
      type: object
      description: Formato de erro RFC 7807 Problem Details.
      required:
      - type
      - title
      - status
      properties:
        type:
          type: string
          format: uri
          description: URI que identifica o tipo de erro.
          example: https://api.signdocs.com.br/errors/bad-request
        title:
          type: string
          description: Resumo legível do tipo de erro.
          example: Bad Request
        status:
          type: integer
          description: Código de status HTTP.
          example: 400
        detail:
          type: string
          description: Explicação específica da ocorrência do erro.
          example: O campo 'purpose' é obrigatório.
        instance:
          type: string
          description: URI que identifica a ocorrência específica do erro (path da requisição).
          example: /v1/transactions
        code:
          type: string
          description: 'Código estável e legível por máquina para o caso específico, quando houver (ex.:

            `SIGNER_TURN`, `TIMESTAMP_UNAVAILABLE`). Prefira tratar o erro por `code` a interpretar `detail`.

            '
          example: TIMESTAMP_UNAVAILABLE
        retryable:
          type: boolean
          description: Presente quando a API afirma que reenviar a mesma requisição é seguro.
      additionalProperties: true
    RegisterWebhookRequest:
      type: object
      description: Requisição de registro de webhook.
      required:
      - url
      - events
      properties:
        url:
          type: string
          format: uri
          description: URL do endpoint que receberá as notificações (HTTPS obrigatório).
          example: https://integrador.com.br/webhooks/signdocs
        events:
          type: array
          description: Lista de tipos de evento para os quais o webhook será acionado.
          items:
            $ref: '#/components/schemas/WebhookEventType'
          minItems: 1
  headers:
    X-Content-Type-Options:
      description: Prevenção de MIME sniffing.
      schema:
        type: string
        example: nosniff
    Referrer-Policy:
      description: Política de referrer.
      schema:
        type: string
        example: strict-origin-when-cross-origin
    Strict-Transport-Security:
      description: Política HSTS.
      schema:
        type: string
        example: max-age=31536000; includeSubDomains
    API-Version:
      description: Versão da API.
      schema:
        type: string
        example: '1.0'
    X-Frame-Options:
      description: Prevenção de clickjacking.
      schema:
        type: string
        example: DENY
    Cache-Control:
      description: Controle de cache.
      schema:
        type: string
        example: no-store
  responses:
    Unauthorized:
      description: Autenticação ausente ou inválida.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/unauthorized
            title: Unauthorized
            status: 401
            detail: Invalid or missing authentication
    InternalServerError:
      description: Erro interno do servidor.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/internal-server-error
            title: Internal Server Error
            status: 500
    Forbidden:
      description: 'Permissões insuficientes para a operação solicitada.


        Inclui `purpose: "ACTION_AUTHENTICATION"` sem `featureFlags.trustSessionsEnabled`. A

        verificação é pelo `purpose`, não pela rota: vale em `/v1/transactions`,

        `/v1/signing-sessions` e `/v1/envelopes/{envelopeId}/sessions`, além de `/v1/trust-sessions`.

        O remédio é habilitar a flag para o tenant e provisionar a cota `monthlyTrustSessions`.

        '
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/forbidden
            title: Forbidden
            status: 403
            detail: Insufficient permissions
    Conflict:
      description: Conflito de estado — a operação não pode ser realizada no estado atual do recurso.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/conflict
            title: Conflict
            status: 409
            detail: Transaction already finalized
    UnprocessableEntity:
      description: 'Entidade não processável — a requisição é sintaticamente válida mas semanticamente incorreta.


        Inclui o perfil de política não autorizado para o tenant. As rotas de criação

        (`/v1/transactions`, `/v1/signing-sessions` e `/v1/envelopes/{envelopeId}/sessions`)

        verificam a mesma regra, antes de cota, convite e gravação — a recusa não consome

        documento. As flags envolvidas são `featureFlags.customPolicyEnabled` (perfil `CUSTOM`),

        `serpro.enabled` (perfis SERPRO), `featureFlags.documentExtractionEnabled` (fallback por

        documento; `BIOMETRIC_SERPRO_AUTO_FALLBACK` exige as duas últimas) e

        `featureFlags.biometricRequired`. O remédio é habilitar a flag para o tenant.


        `signer.cpf` e `signer.birthDate`, exigidos pelos perfis SERPRO, são validados como

        **400** e não aqui: requisição malformada, corrigível na mesma chamada.

        '
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          examples:
            generic:
              summary: Erro genérico de validação
              value:
                type: https://api.signdocs.com.br/errors/unprocessable-entity
                title: Unprocessable Entity
                status: 422
                detail: O documento deve ser um PDF válido.
            pdf-quality:
              summary: PDF com qualidade insuficiente
              value:
                type: https://api.signdocs.com.br/errors/pdf-quality-validation-failed
                title: PDF Quality Validation Failed
                status: 422
                detail: 'O PDF não atende aos critérios mínimos de qualidade: resolução insuficiente, páginas em branco ou arquivo corrompido.'
            policy-not-enabled:
              summary: Perfil de política não habilitado para o tenant
              value:
                type: https://api.signdocs.com.br/errors/unprocessable-entity
                title: Unprocessable Entity
                status: 422
                detail: SERPRO identity verification is not enabled for this tenant
            pdf-password-protected:
              summary: PDF protegido por senha
              value:
                type: https://api.signdocs.com.br/errors/pdf-password-protected
                title: PDF Password Protected
                status: 422
                detail: O PDF está protegido por senha e não pode ser processado. Envie um PDF sem proteção.
            feature-not-enabled:
              summary: Feature flag não habilitada
              value:
                type: https://api.signdocs.com.br/errors/feature-not-enabled
                title: Feature Not Enabled
                status: 422
                detail: A feature 'documentExtractionEnabled' não está habilitada para este tenant.
            geolocation-required:
              summary: Geolocalização obrigatória
              value:
                type: https://api.signdocs.com.br/errors/geolocation-required
                title: Geolocation Required
                status: 422
                detail: O campo 'geolocation' é obrigatório para etapas biométricas quando 'biometricRequired' está habilitado.
    NotFound:
      description: Recurso não encontrado.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/not-found
            title: Not Found
            status: 404
            detail: Transaction not found
    BadRequest:
      description: Requisição inválida — parâmetros ausentes ou malformados.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetail'
          example:
            type: https://api.signdocs.com.br/errors/bad-request
            title: Bad Request
            status: 400
            detail: O campo 'purpose' é obrigatório.
  securitySchemes:
    bearerJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token de acesso OAuth2 obtido via `POST /oauth2/token`.
    embedToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Token de sessão (clientSecret) retornado por `POST /v1/signing-sessions`.

        Usado pelos endpoints advance/get/resend-otp para autenticar a sessão.

        Contém claims: sub (sessionId), tenantId, transactionId, purpose: signing_session_embed.

        '
x-refined-from:
- openapi.yaml
- signdocs-com-br-openapi.yaml