VeeSign
Get Started

VeeSign API

Add e-signatures to your product: send documents for signature and receive digitally signed files with a complete audit trail.

The same platform your team uses

Every document created through the API appears in your team account, is digitally signed with the same certificate and gets the same audit trail.

REST API

Create documents, send them for signature, track their status and download signed files with plain JSON endpoints.

https://app.veesign.net/api/v2

OpenAPI specification

Use the published specification to generate a typed client for TypeScript, Python or any other language.

GET /api/v2/openapi.json

API tokens

Create tokens per team under Settings → API Tokens and send them in the Authorization header.

Authorization: Bearer api_…

Webhooks

Get notified when a document is sent, opened, signed or completed. Every request carries your webhook secret so you can confirm it came from VeeSign.

X-VeeSign-Secret

Make signing part of your product.

Embed electronic signatures and sovereign verification into your native application in minutes using our REST API and signed webhooks (HMAC-SHA256).

// Node 18+ / Deno / Bun. Create a document with one signer and send it.
import { readFile } from "node:fs/promises";

const API = "https://app.veesign.net/api/v2";
const headers = { Authorization: `Bearer ${process.env.VEESIGN_API_TOKEN}` };

const payload = {
  title: "Services Agreement",
  type: "DOCUMENT",
  recipients: [{
    name: "Sara Ahmed",
    email: "[email protected]",
    role: "SIGNER",
    fields: [{
      type: "SIGNATURE", identifier: 0, page: 1,
      positionX: 10, positionY: 80, width: 30, height: 6, // % of the page
    }],
  }],
};

const form = new FormData();
form.append("payload", JSON.stringify(payload));
form.append("files", new Blob([await readFile("agreement.pdf")]), "agreement.pdf");

const created = await fetch(`${API}/envelope/create`, { method: "POST", headers, body: form })
  .then((r) => r.json());

await fetch(`${API}/envelope/distribute`, {
  method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ envelopeId: created.id }),
});

console.log("Sent for signature:", created.id);