signdocs-com-br Documents API

Upload, confirmação e download de documentos vinculados a transações.

Operations 4

POST /v1/transactions/{transactionId}/document Upload de documento (base64) #
POST /v1/transactions/{transactionId}/document/presign Obter URL pré-assinada para upload #
POST /v1/transactions/{transactionId}/document/confirm Confirmar upload pré-assinado #
GET /v1/transactions/{transactionId}/download Obter URLs de download do documento #

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-documents-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-documents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Signdocs Com Br Documents 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 Documents 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: Documents
  description: Upload, confirmação e download de documentos vinculados a transações.
paths:
  /v1/transactions/{transactionId}/document:
    post:
      operationId: uploadDocument
      tags:
      - Documents
      summary: Upload de documento (base64)
      description: 'Envia o documento codificado em base64 diretamente no corpo da requisição. Suporta PDF, DOCX, XLSX, PPTX, ODT, imagens e outros formatos.

        Para documentos maiores, utilize o fluxo de upload pré-assinado

        (`presign` → upload direto ao S3 → `confirm`).


        ### Validação de qualidade do PDF


        O documento é validado quanto à qualidade e integridade. Caso o PDF seja inválido,

        corrompido, protegido por senha ou não atenda aos critérios mínimos de qualidade,

        a API retorna `422 Unprocessable Entity` com detalhes do problema.


        Requer scope `transactions:write`.'
      security:
      - bearerJwt: []
      parameters:
      - name: transactionId
        in: path
        required: true
        description: Identificador único da transação.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentUploadRequest'
      responses:
        '200':
          description: Documento enviado 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/DocumentUploadResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '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/transactions/{transactionId}/document/presign:
    post:
      operationId: presignDocumentUpload
      tags:
      - Documents
      summary: Obter URL pré-assinada para upload
      description: 'Gera uma URL pré-assinada do S3 para upload direto do documento.

        Após o upload, confirme com `POST /v1/transactions/{id}/document/confirm`.


        Recomendado para documentos maiores que 5 MB.


        Requer scope `transactions:write`.'
      security:
      - bearerJwt: []
      parameters:
      - name: transactionId
        in: path
        required: true
        description: Identificador único da transação.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PresignRequest'
      responses:
        '200':
          description: URL pré-assinada gerada 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/PresignResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '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/transactions/{transactionId}/document/confirm:
    post:
      operationId: confirmDocumentUpload
      tags:
      - Documents
      summary: Confirmar upload pré-assinado
      description: 'Confirma que o upload via URL pré-assinada foi concluído com sucesso.

        O `uploadToken` foi retornado na resposta de `presign`.


        Após a confirmação, o documento é validado quanto à qualidade e integridade (validação de qualidade aplica-se apenas a PDFs). Caso não

        atenda aos critérios mínimos, retorna `422 Unprocessable Entity` com detalhes do problema.


        Requer scope `transactions:write`.'
      security:
      - bearerJwt: []
      parameters:
      - name: transactionId
        in: path
        required: true
        description: Identificador único da transação.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmDocumentRequest'
      responses:
        '200':
          description: Upload confirmado 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/ConfirmDocumentResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '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/transactions/{transactionId}/download:
    get:
      operationId: downloadDocument
      tags:
      - Documents
      summary: Obter URLs de download do documento
      description: 'Retorna URLs pré-assinadas para download do documento original e do documento assinado.

        As URLs expiram em 1 hora.


        Requer scope `transactions:read`.'
      security:
      - bearerJwt: []
      parameters:
      - name: transactionId
        in: path
        required: true
        description: Identificador único da transação.
        schema:
          type: string
      responses:
        '200':
          description: URLs de download geradas 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/DocumentDownloadResponse'
        '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:
    DocumentDownloadResponse:
      type: object
      description: 'Resposta com URLs de download do documento.

        Para documentos PDF, retorna `signedUrl` (PDF com assinatura embutida).

        Para documentos genéricos, retorna `signatureUrl` (arquivo .p7s CAdES enveloping, com conteúdo anexado).

        '
      required:
      - transactionId
      - expiresIn
      properties:
        transactionId:
          type: string
        documentHash:
          type: string
        documentFormat:
          type: string
          description: Formato do documento.
          enum:
          - pdf
          - generic
        originalUrl:
          type: string
          format: uri
          description: URL pré-assinada para download do documento original.
        signedUrl:
          type: string
          format: uri
          description: URL pré-assinada para download do PDF assinado (apenas para `documentFormat=pdf`).
        signatureUrl:
          type: string
          format: uri
          description: 'URL pré-assinada para download do arquivo .p7s (CAdES enveloping, conteúdo anexado).

            Retornado apenas para `documentFormat=generic`. Verifique com:

            `openssl cms -verify -inform DER -in signature.p7s -CAfile icpbrasil-roots.pem`

            '
        expiresIn:
          type: integer
          description: Tempo de expiração das URLs em segundos.
          example: 3600
    PresignResponse:
      type: object
      description: Resposta com URL pré-assinada para upload.
      required:
      - uploadUrl
      - uploadToken
      - s3Key
      - expiresIn
      - contentType
      - instructions
      properties:
        uploadUrl:
          type: string
          format: uri
          description: URL pré-assinada do S3 para upload via PUT.
        uploadToken:
          type: string
          description: Token para confirmar o upload via `/document/confirm`.
        s3Key:
          type: string
          description: Chave do objeto no S3.
        expiresIn:
          type: integer
          description: Tempo de expiração da URL em segundos.
          example: 600
        contentType:
          type: string
          description: Content-Type esperado no upload.
          example: application/pdf
        instructions:
          type: string
          description: Instruções para o integrador realizar o upload.
    ConfirmDocumentRequest:
      type: object
      description: Requisição de confirmação de upload pré-assinado.
      required:
      - uploadToken
      properties:
        uploadToken:
          type: string
          description: Token retornado pela operação de presign.
    DocumentUploadRequest:
      type: object
      description: 'Requisição de upload de documento inline (base64).

        Suporta PDF e outros formatos (DOCX, XLSX, imagens, XML, etc.).

        Para arquivos não-PDF, o campo `filename` é obrigatório.

        '
      required:
      - content
      properties:
        content:
          type: string
          format: byte
          description: Conteúdo do documento codificado em base64.
        filename:
          type: string
          description: 'Nome do arquivo com extensão. Obrigatório para documentos não-PDF.

            Extensões permitidas: .docx, .doc, .xlsx, .xls, .pptx, .ppt, .odt, .ods, .odp,

            .rtf, .txt, .csv, .jpg, .jpeg, .png, .tiff, .tif, .bmp, .svg, .xml, .json, .html, .pdf

            '
          example: contrato.docx
    PresignRequest:
      type: object
      description: Requisição de URL pré-assinada para upload.
      required:
      - contentType
      - filename
      properties:
        contentType:
          type: string
          description: Tipo MIME do arquivo.
          example: application/pdf
        filename:
          type: string
          description: Nome do arquivo.
          example: contrato.pdf
    ConfirmDocumentResponse:
      type: object
      description: Resposta de confirmação de upload pré-assinado.
      required:
      - transactionId
      - status
      - documentHash
      properties:
        transactionId:
          type: string
        status:
          type: string
          enum:
          - DOCUMENT_UPLOADED
        documentHash:
          type: string
          description: Hash SHA-256 do documento confirmado.
        documentFormat:
          type: string
          description: Formato detectado do documento.
          enum:
          - pdf
          - generic
    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
    DocumentUploadResponse:
      type: object
      description: Resposta de upload de documento.
      required:
      - transactionId
      - documentHash
      - status
      - uploadedAt
      - documentFormat
      properties:
        transactionId:
          type: string
        documentHash:
          type: string
          description: Hash SHA-256 do documento.
        documentFormat:
          type: string
          description: Formato detectado do documento.
          enum:
          - pdf
          - generic
        status:
          type: string
          enum:
          - DOCUMENT_UPLOADED
        uploadedAt:
          type: string
          format: date-time
  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