Firma.dev

Firma.dev

Documents & Productivity

E-signature API for embedding signing into your product or sending contracts at scale. Pay-as-you-go at €0.049 per envelope, no monthly minimums or per-seat fees.

Visit API🔁 Alternatives
Status: UP
💰 Free TierAvailable

📚 Documentation & Examples

Everything you need to integrate with Firma.dev

🚀 Quick Start Examples

Firma.dev Javascript Examplejavascript
// Firma.dev API Example
const response = await fetch('https://firma.dev', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer YOUR_API_KEY'
    }
});

const data = await response.json();
console.log(data);

Firma.dev

Firma.dev is an e-signature API for embedding legally binding signing into your own product or sending contracts at scale. You create templates, send signing requests (envelopes) to recipients, and either let Firma email them or embed the signing experience directly in your app — no redirects and no Firma account needed for signers. Pricing is pay-as-you-go at €0.049 per envelope (about 5 US cents), with no subscriptions, monthly minimums, or per-seat fees.

Base URL: https://api.firma.dev/functions/v1/signing-request-api · Docs: docs.firma.dev · Website: firma.dev

Authentication

Every request needs an API key in the Authorization header. The Bearer prefix is optional — both Authorization: YOUR_API_KEY and Authorization: Bearer YOUR_API_KEY are accepted.

Each workspace has two keys:

  • Live key — runs normally and consumes credits.
  • Test key — doesn't consume credits; signing requests it creates are flagged as test and watermarked. Use it while you integrate.

Sign up free at firma.dev — no credit card required. Keep both keys server-side; the test key has the same access scope as the live one.

Your First Request

List the templates in your workspace:

curl "https://api.firma.dev/functions/v1/signing-request-api/templates" \
  -H "Authorization: Bearer YOUR_API_KEY"

Send a document for signature (Python)

POST /signing-requests/create-and-send creates the request and emails the recipients in one call:

import os
import requests

resp = requests.post(
    "https://api.firma.dev/functions/v1/signing-request-api/signing-requests/create-and-send",
    headers={"Authorization": f"Bearer {os.environ['FIRMA_API_KEY']}"},
    json={
        "template_id": "tmpl_123",
        "name": "NDA - Acme Corp",
        "recipients": [
            {
                "first_name": "Alice",
                "last_name": "Johnson",
                "email": "alice@example.com",
                "designation": "Signer",
                "order": 1,
            }
        ],
    },
)
resp.raise_for_status()
print(resp.json())

Common mistake: POST /signing-requests (without /create-and-send) only creates a draft and never emails anyone. Call .../send on the draft later, or use create-and-send from the start.

TypeScript SDK

npm install @firma-dev/sdk
import { FirmaClient } from "@firma-dev/sdk";

const firma = new FirmaClient({ apiKey: process.env.FIRMA_API_KEY });
const templates = await firma.templates.listTemplates();
console.log(templates);

The SDK is generated from Firma's OpenAPI spec, so every endpoint is a typed method (firma.templates, firma.signingRequests, firma.webhooks, …).

Key Concepts

Concept What it is
Templates Reusable documents with predefined fields and layouts
Signing requests An envelope sent to recipients, created from a template or an uploaded PDF/DOCX
Recipients first_name, email and a designation of Signer, CC or Approver; order sets sequential signing
Workspaces Isolated environments, each with its own templates, documents, usage and API keys — one per customer in a multi-tenant app
Webhooks Real-time events for the document lifecycle (e.g. signing_request.sent)

For documents near 5 MB, upload first and pass a document_id instead of inline base64 — large inline payloads can fail with a 502 before validation.

Embedding & White-Labeling

  • Embeddable signing — signers complete documents inside your app.
  • Embeddable template and signing-request editors — authenticated with short-lived JWT tokens generated server-side.
  • White labeling — custom branding, email domains and email templates.

Rate Limits

Limits are enforced per API key (that is, per workspace), and accounts can have unlimited workspaces:

Operation Limit
Read (GET) 200 requests/min
Write (POST/PUT/PATCH/DELETE) 120 requests/min
Webhook create/update/delete 60 requests/min
Webhook test 10 requests/min

Responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset; a 429 includes Retry-After.

Compliance & Data Residency

Signatures are ESIGN Act, UETA, eIDAS (SES/AES) and UK eIDAS compliant, with audit trails that record timestamps and IP addresses. Firma lists SOC 2, GDPR and ISO 27001, and data is stored in the EU only (AWS Paris).

MCP Servers for AI Assistants

  • Data MCP — https://mcp.firma.dev/mcp (OAuth): manage templates, create signing requests and configure workspaces from Claude, ChatGPT, Cursor and more.
  • Docs MCP — https://docs.firma.dev/mcp (no auth): gives coding assistants the full docs and API reference.
claude mcp add --transport http firma-api https://mcp.firma.dev/mcp

Use Cases

  • SaaS platforms — add contract signing to your product without sending users to a third-party site
  • Marketplaces & HR tools — offer letters, NDAs and agreements at volume
  • Multi-tenant apps — a branded, isolated workspace per customer
  • AI-built apps — guides for Lovable, v0, Supabase, Replit and other builders

Read the full Firma.dev docs →

⚡

Performance & Stats

B
100%
Uptime
1604ms
Avg Response
🟢
Status
💰

Pricing & Plans

✨ Free Available
🎁Free Tier
Free sign-up, no credit card. Test-mode API keys don't consume credits (documents are watermarked).
⏱️Rate Limit:200 reads/min and 120 writes/min per API key (per workspace)
🔧

Integration Details

Hard
🔐Authentication
🔑 API Key
🔒HTTPS
✅ Supported
📄Response Formats
JSON

Explore More

Best Firma.dev alternatives (2026)Best Documents & Productivity APIs

Related APIs in Documents & Productivity