Quickstart: da chave à assinatura em cinco passos
In English. The shortest path through the Partners API: authenticate with the partner key, find the account, send a PDF for electronic signature in a single request, follow the signatures through webhooks or polling, and download the signed file. The guide is written in Brazilian Portuguese; every step names the
operationIdyou will find in the OpenAPI document.
Este guia leva do zero à primeira assinatura concluída. Cada passo cita o operationId da
operação, que é o nome dela na referência da v1 e no documento OpenAPI.
Antes de começar
- Chave de integração. Emitida no cadastro do parceiro pela equipe LetsSign ou gerada pela
própria conta na área de integrações do aplicativo (https://app.letssign.com.br/). Ela identifica o parceiro e vai
em toda requisição no header
Authorization, sem prefixo. Detalhes em Autenticação e contas. - Ambiente. Sandbox e produção têm hosts e chaves distintos. A URL base deste ambiente é
https://api.letssign.com.br/. - Um PDF para testar e o e-mail de quem vai assinar. Use endereços que você controla.
Os exemplos usam curl. Troque SUA_CHAVE e os identificadores pelos seus.
1. Descubra a conta
A chave identifica o parceiro; as operações agem sobre uma conta, identificada pelo
accountId no caminho. Liste as contas que a chave pode operar (partners_v1_accounts_list):
curl -H "Authorization: SUA_CHAVE" https://api.letssign.com.br/partners/v1/accounts
[
{
"id": "0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f",
"name": "Imobiliária Horizonte",
"companyName": "Horizonte Negócios Imobiliários Ltda",
"isTrial": false,
"personType": "Company",
"documentNumber": "12345678000195",
"active": true
}
]
Guarde o id: ele é o accountId dos próximos passos. Só contas ativas e vinculadas ao parceiro
aparecem, em ordem alfabética, sem paginação.
2. Confira as features do plano
Cada operação exige features do plano da conta; sem elas a resposta é 403. Para enviar um
documento para assinatura são necessárias documents e documents_signatures; para webhooks,
integrations (partners_v1_features_list):
curl -H "Authorization: SUA_CHAVE" \
https://api.letssign.com.br/partners/v1/accounts/0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f/features
[
{ "id": "documents", "description": "Documentos" },
{ "id": "documents_signatures", "description": "Assinatura de documentos" },
{ "id": "integrations", "description": "Integrações" }
]
A relação entre features e operações está em Limites e features.
3. Envie o documento para assinatura
Uma única chamada cria o documento e dispara a solicitação a cada signatário
(partners_v1_document_signatures_create_from_file). O arquivo vai em base64 no campo
contentFile, com o tipo MIME em contentType:
CONTEUDO=$(base64 -i contrato.pdf) # Linux: base64 -w0 contrato.pdf
curl -X POST -H "Authorization: SUA_CHAVE" -H "Content-Type: application/json" \
https://api.letssign.com.br/partners/v1/accounts/0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f/document-signatures \
-d @- <<JSON
{
"documentName": "Contrato de locação - Apto 501",
"contentType": "application/pdf",
"contentFile": "$CONTEUDO",
"signers": [
{ "email": "maria.silva@exemplo.com.br", "name": "Maria da Silva", "role": "Parte", "authenticationMethod": "Email" },
{ "email": "joao.souza@exemplo.com.br", "name": "João de Souza", "role": "Testemunha", "authenticationMethod": "Email" }
]
}
JSON
{
"id": "01991440-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"uri": "https://app.letssign.com.br/app/documents/01991440-5a6b-7c8d-9e0f-1a2b3c4d5e6f/signatures"
}
O que acontece:
- O documento nasce com status
Finishede status de assinaturaWaitingSignatures. Cada signatário recebe o link pelo canal do seu método de autenticação (e-mail, SMS ou WhatsApp) e o webhookDocumentSentToSignatureé disparado. roleé o papel do signatário ("assina como") e precisa existir na conta. Toda conta nasce comParte,Testemunha,Aprovador,ContratanteeContratada, entre outros; a lista está empartners_v1_document_signature_roles_list.Aprovadoraprova em vez de assinar.- Cada chamada cria um documento novo e consome um documento da cota do plano: não há chave de
idempotência. Se a requisição estourar o tempo sem resposta, confira se o documento foi criado
(
partners_v2_documents_list, filtrando porNameeCreatedFrom) antes de repetir. - Opcionais que valem conhecer:
signatureAreasposiciona assinatura e rubrica no PDF por página e coordenadas em percentual;ordernos signatários torna a assinatura sequencial;deadlineForSignaturedefine o prazo;reminderFrequencyliga lembretes automáticos;observersrecebem o documento assinado ao final;additionalAuthenticationMethodspede evidências como selfie ou documento com foto. O exemplo completo está na referência da operação. 400para papel inexistente, pasta inexistente, cota esgotada ou recurso do plano ausente (SMS, WhatsApp, biometria);422para payload inválido. Veja Erros.
4. Acompanhe as assinaturas
Há duas formas, e a primeira é a recomendada.
Webhooks. Cadastre uma URL uma vez (partners_v1_webhooks_create) e receba um POST a cada
evento: DocumentSignatureMember quando um signatário assina e DocumentSignatureFinished quando
o último assina.
curl -X POST -H "Authorization: SUA_CHAVE" -H "Content-Type: application/json" \
https://api.letssign.com.br/partners/v1/accounts/0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f/webhooks \
-d '{ "uri": "https://integracao.exemplo.com.br/letssign/webhook" }'
No cadastro um evento Test é enviado de imediato; sua URL deve responder 200 ou 202. O
contrato de entrega, os dez eventos e os payloads estão em Webhooks.
Consulta. Quando não houver webhook, ou para conferir, consulte a situação
(partners_v1_document_signatures_status):
curl -H "Authorization: SUA_CHAVE" \
https://api.letssign.com.br/partners/v1/accounts/0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f/document-signatures/01991440-5a6b-7c8d-9e0f-1a2b3c4d5e6f/status
{
"signatureStatusId": "WaitingSignatures",
"signatureStatus": "Aguardando assinaturas",
"signatures": [
{ "id": "01991441-0a1b-7c2d-8e3f-4a5b6c7d8e9f", "email": "maria.silva@exemplo.com.br", "role": "Parte", "signed": true, "signedAt": "2026-08-21T10:12:45Z" },
{ "id": "01991441-9f8e-7d6c-8b5a-4c3d2e1f0a9b", "email": "joao.souza@exemplo.com.br", "role": "Testemunha", "signed": false }
]
}
signatureStatusId passa a Signed quando o último signatário assina. signatures[].id é o
signatureId usado para editar, remover ou reenviar a solicitação a um signatário.
5. Baixe o arquivo assinado
Peça a URL de download do PDF assinado (partners_v1_documents_download_signed):
curl -H "Authorization: SUA_CHAVE" \
https://api.letssign.com.br/partners/v1/accounts/0199143a-7c2e-7b1a-9f2d-3c4b5a6d7e8f/documents/01991440-5a6b-7c8d-9e0f-1a2b3c4d5e6f/download/signed
{
"name": "Contrato de locação - Apto 501",
"url": "https://s3.sa-east-1.amazonaws.com/documents/.../01991440-5a6b-7c8d-9e0f-1a2b3c4d5e6f-signed.pdf?X-Amz-Expires=300&..."
}
- A URL é pré-assinada e vale por 5 minutos; baixe logo após obtê-la. Cada chamada gera uma URL nova.
- Com assinaturas pendentes, o arquivo é um PDF parcial com as assinaturas já feitas; antes da
primeira assinatura a resposta é
400. - Para o PDF com os anexos incorporados, use
partners_v2_documents_download_with_attachments; para documentos assinados com certificado digital,partners_v1_documents_download_digital_certificate.
Depois do quickstart
- Mexer nos signatários de um documento em assinatura: adicionar
(
partners_v1_document_signatures_add_signer), editar (partners_v1_document_signatures_edit_signer), remover (partners_v1_document_signatures_remove_signer), reenviar a solicitação (partners_v1_document_signatures_resend) e cancelar (partners_v1_document_signatures_cancel). - Documentos a partir de formulários: liste os modelos (
partners_v1_form_templates_list), crie o formulário (partners_v1_forms_create) e, quando o webhookFormFilledchegar, solicite as assinaturas (partners_v1_documents_request_signatures). - Organização: pastas (
partners_v1_folders_list,partners_v1_folders_create), categorias (partners_v2_categories_list,partners_v1_categories_create) e contatos (partners_v1_contacts_upsert_person,partners_v1_contacts_upsert_company). - Listagens:
partners_v2_documents_listcom filtros por status, categoria e datas; o modelo de paginação está em Paginação e filtros. - Referência completa: v1 e v2. Quando um endpoint existir na v2, prefira a v2; a migração explica as diferenças.