Developers

Build with the same primitives we use.

A REST API for creating, sending and tracking envelopes, field placements included, so a send never has to pass through our editor.

On this page

A workspace owner on Pro, Team or Enterprise issues a token in Settings, Integrations. The full reference lives on the API docs page, and a machine-readable OpenAPI 3.1 description at /api/v1/openapi.json, which is enough for most generators to build you a typed client. We don’t publish a hand-written SDK.

Core endpoints

MethodPathWhat it does
POST/api/v1/envelopesCreate an envelope from uploaded PDFs, with fields
POST/api/v1/envelopes/{id}/sendSend a draft envelope for signature
GET/api/v1/envelopesList envelopes, filtered and paged
GET/api/v1/envelopes/{id}Read envelope state and recipient progress
POST/api/v1/envelopes/from-refsCreate an envelope from document references
POST/api/v1/envelopes/{id}/remindSend a reminder to pending signers
POST/api/v1/envelopes/{id}/voidVoid an envelope
GET/api/v1/envelopes/{id}/finalDownload the completed (flattened) PDF
GET/api/v1/envelopes/{id}/certificateDownload the audit certificate
GET/api/v1/envelopes/{id}/recipientsList the recipients and their progress
PATCH/api/v1/envelopes/{id}/recipients/{rid}Correct a recipient, including after send
POST/api/v1/envelopes/{id}/recipients/{rid}/remindRemind one named recipient
GET/api/v1/templatesList the workspace templates
POST/api/v1/templates/{id}/envelopesCreate (and optionally send) from a template
GET/api/v1/openapi.jsonOpenAPI 3.1 description of everything above

Authenticated request

curl
curl https://vg-sign.com/api/v1/envelopes/{id} \
  -H "Authorization: Bearer vgs_live_…"

Webhook signature

headers
// Each delivery carries an HMAC-SHA256 digest of the raw body
X-VG-Signature: sha256=4c2a9bd3…71ff
X-VG-Delivery-Id: 8f4a2c1e-9b3d-4f02-a71c-2d5e6b8c0a19

// Verify it with your subscription secret before trusting the payload.
// A delivery is tried up to 3 times (retries after about 1 and 5 minutes), then marked failed.
// The delivery id is stable across retries. Use it to deduplicate.

MCP server

Claude, Claude Code and Cursor can list envelopes, create one from a template, send it and download the signed PDF. It is a stdio server over the same REST API and the same workspace token; nothing extra is granted to it. There are no per-scope tokens, so the assistant can do anything the token can. Consider a dedicated workspace for it. Rotating the token replaces it immediately and breaks every other integration still using the old one, so rotate it whenever it may have been exposed.

download and verify
curl -fsSLO https://vg-sign.com/mcp/server.mjs
curl -fsSL https://vg-sign.com/mcp/server.mjs.sha256 | sha256sum -c -
mcp config
{
  "mcpServers": {
    "vg-sign": {
      "command": "node",
      "args": ["/path/to/server.mjs"],
      "env": {
        "VG_SIGN_API_TOKEN": "vgs_live_…",
        "VG_SIGN_DOWNLOAD_DIR": "/path/to/a/downloads/folder"
      }
    }
  }
}

send_envelope, remind_envelope, void_envelope and create_envelope_from_template with send: true all act on real envelopes and email real people. Voiding is what undoes a send; a void itself cannot be undone by another call.

Embedded signing

Put the signer page inside your own product. Your origin has to be allow-listed first, ask us to add it, and the frame reports progress back to the parent window.

html
<script src="https://vg-sign.com/embed.js"></script>
<div id="vg-sign" data-token="RECIPIENT_TOKEN"></div>

VGSign.mount({ onSigned: e => …, onDeclined: e => … })

// Under the hood the frame posts { source: 'vg-sign', type, token } to
// the parent window when the signer reaches a terminal state.