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: 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