Integração com Python em poucos minutos
Exemplos prontos para copiar com requests e Flask: criar assinatura, consultar status, baixar o PDF e validar webhooks.
Sem bibliotecas extras: só HTTP. Execute sempre no servidor — a chave de API nunca vai para o navegador.
1.SDK leve (opcional, sem dependências)
Prefere um cliente pronto? Copie a pasta sdk/python do repositório: usa só a biblioteca padrão e inclui validação de webhook.
uso.pyfrom assinatura_online import AssinaturaClient, verify_webhook client = AssinaturaClient(api_key=os.environ["ASSINATURA_API_KEY"]) sig = client.create_simple_signature( document_name="Contrato", pdf_base64=pdf_b64, signers=[{"full_name": "Maria Exemplo", "email": "maria@example.com"}], send_email_invitation=True, ) status = client.get_signature(sig["signature_id"]) pdf_bytes = client.download_pdf(sig["signature_id"])2.Instale e configure
Só a biblioteca requests. Guarde as credenciais em variáveis de ambiente do servidor.
terminalpip install requests export ASSINATURA_API_KEY=sk_sua_chave export ASSINATURA_API_SECRET=seu_segredo_de_webhook3.Crie uma assinatura simples
O signatário recebe o convite por e-mail e confirma com um código. A resposta traz o sign_url.
criar_assinatura.pyimport base64, os, requests BASE = "https://assinatura.online/api/public/v1" HEADERS = {"Authorization": f"Bearer {os.environ['ASSINATURA_API_KEY']}"} def criar_assinatura(caminho_pdf: str) -> dict: with open(caminho_pdf, "rb") as f: pdf_b64 = base64.b64encode(f.read()).decode() r = requests.post(f"{BASE}/signatures/create", headers=HEADERS, timeout=30, json={ "mode": "simple", "document_name": "Contrato de prestação de serviços", "pdf_base64": pdf_b64, "signer": {"full_name": "Maria Exemplo", "email": "maria@example.com"}, "send_email_invitation": True, "external_id": "pedido-123", }) data = r.json() if not r.ok: raise RuntimeError(f"{data.get('code')}: {data.get('error')}") return data # signature_id, status, sign_url4.Assinatura qualificada com Bird ID ou VIDaaS
Troque o modo pelo provedor e informe o CPF do titular do certificado.
qualificada.pyrequests.post(f"{BASE}/signatures/create", headers=HEADERS, timeout=30, json={ "provider": "vidaas", # ou "birdid" / "a1" "document_name": "Laudo técnico", "pdf_base64": pdf_b64, "signer": {"cpf": "52998224725", "full_name": "Ana Exemplo"}, })5.Consulte o status e baixe o PDF
Use para conferir o resultado no servidor. O PDF fica disponível após a conclusão.
status.pyinfo = requests.get(f"{BASE}/signatures/get", headers=HEADERS, params={"signature_id": sid}, timeout=30).json() print(info["status"]) pdf = requests.get(f"{BASE}/signatures/pdf", headers=HEADERS, params={"signature_id": sid}, timeout=60) open("assinado.pdf", "wb").write(pdf.content)6.Valide o webhook (HMAC-SHA256) — Flask
Leia o corpo bruto, confira a assinatura e só então processe o evento.
webhook.pyimport hashlib, hmac, json, os from flask import Flask, request, abort app = Flask(__name__) @app.post("/webhooks/assinatura") def webhook(): ts = request.headers.get("X-Assinatura-Timestamp", "") header = request.headers.get("X-Assinatura-Signature", "") received = header.split("v1=")[1] if "v1=" in header else "" raw = request.get_data() expected = hmac.new(os.environ["ASSINATURA_API_SECRET"].encode(), ts.encode() + b"." + raw, hashlib.sha256).hexdigest() if not hmac.compare_digest(received, expected): abort(401) event = json.loads(raw) if event["event"] == "signature.completed": pass # marque event["external_id"] como assinado return "ok"
Prompt para Cursor, Claude ou Lovable
Cole na sua ferramenta de IA para gerar a integração no seu projeto.
Integre a API da assinatura.online neste projeto Python, apenas no servidor.
Base: https://assinatura.online/api/public/v1, header Authorization: Bearer <ASSINATURA_API_KEY>.
1) Função que faz POST /signatures/create com mode "simple", document_name, pdf_base64, signer { full_name, email }, send_email_invitation: True e external_id; retorne signature_id e sign_url.
2) GET /signatures/get?signature_id= para status e GET /signatures/pdf?signature_id= para o PDF.
3) Endpoint de webhook que valida HMAC-SHA256 de "<X-Assinatura-Timestamp>.<corpo bruto>" com ASSINATURA_API_SECRET contra o valor v1= do header X-Assinatura-Signature, usando hmac.compare_digest.
Nunca exponha a chave no navegador. Consulte https://assinatura.online/documentacao.