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. 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.py
    from 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. 2.Instale e configure

    Só a biblioteca requests. Guarde as credenciais em variáveis de ambiente do servidor.

    terminal
    pip install requests
    
    export ASSINATURA_API_KEY=sk_sua_chave
    export ASSINATURA_API_SECRET=seu_segredo_de_webhook
  3. 3.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.py
    import 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_url
  4. 4.Assinatura qualificada com Bird ID ou VIDaaS

    Troque o modo pelo provedor e informe o CPF do titular do certificado.

    qualificada.py
    requests.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. 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.py
    info = 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. 6.Valide o webhook (HMAC-SHA256) — Flask

    Leia o corpo bruto, confira a assinatura e só então processe o evento.

    webhook.py
    import 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.

prompt.txt
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.