🚧 SignThem is currently in beta. Some features may be incomplete.
Developer Platform

Build e-signatures into your product

REST API for document signing. Real-time webhooks. SDKs for popular languages. Everything you need to integrate legally binding e-signatures.

TypeScript
import SignThem from '@signthem/sdk';

const client = new SignThem('your_api_key');

// Create and send an envelope
const envelope = await client.envelopes.create({
  name: 'Contract Agreement',
  documents: [{ url: 'https://example.com/contract.pdf' }],
  recipients: [
    { email: '[email protected]', name: 'John Doe' }
  ]
});

await client.envelopes.send(envelope.id);

REST API

Full control over envelopes, documents, templates, and recipients. JSON responses, predictable URLs, standard HTTP methods.

  • Create & send envelopes
  • Manage templates
  • Download signed PDFs
  • Check envelope status

Webhooks

Real-time HTTP callbacks when signing events occur. No polling required — get notified instantly.

  • 8 event types
  • HMAC-SHA256 signatures
  • Automatic retries
  • Delivery logs

SDKs

Official client libraries for popular languages. Type-safe, well-documented, and easy to integrate.

TypeScript / Node.js@signthem/sdk
PythonOn request
C# / .NETOn request
JavaOn request

Webhook Events

Subscribe to the events you care about. Each webhook includes the envelope ID, event type, timestamp, and relevant data.

envelope.created

When a new envelope is created

envelope.sent

When envelope is sent for signing

envelope.viewed

When recipient opens the envelope

envelope.signed

When a recipient signs

envelope.completed

When all recipients have signed

envelope.voided

When envelope is cancelled

envelope.declined

When recipient declines to sign

envelope.expired

When envelope expires

Security First

Every API request is authenticated. Every webhook is signed. Your data is encrypted at rest and in transit.

  • API key authentication
  • HMAC webhook verification
  • TLS 1.3 encryption
  • ESIGN & UETA compliant

Webhook Signature Verification

const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  
  return `sha256=${expected}` === signature;
}

Ready to build?

Create an account to get your API key. No credit card required.