Powerful API & Integrations
Connect eSignPro withyour software
Bring electronic signatures directly into the tools your business already uses.
- Sandbox included on the free plan
- API, webhooks & embedding on every paid plan
API keys
ProductionActive
sk_live_••••••••4a91
documents:writewebhooks:read
Recent deliveries
eSignPro gives developers and businesses the flexibility to connect electronic signatures with a CRM, website, customer portal, mobile app, document management system, or other business software.
Automate Signature Requests, create smoother customer experiences, receive real-time status updates, and keep your signing process connected with the rest of your business.
API access
Build electronic signature capabilities directly into
your applications
Your software can connect with eSignPro to create documents, open an embedded session where your users add recipients and fields and send for signature, monitor signing activity, and retrieve information about completed transactions. Use the API to reduce manual work and make electronic signatures part of your existing business process.
Create a document, open an embedded builder session for it, and hand your user the session URL: the same program in every language. Authenticate with an X-API-Key header.
set -e
doc=$(curl -sf https://api.esignpro.net/api/v1/documents \
-H "X-API-Key: $ESIGNPRO_API_KEY" \
-F file=@contract.pdf -F "title=Master Services Agreement" | jq -r .id)
curl -sf https://api.esignpro.net/api/embed/sessions \
-H "X-API-Key: $ESIGNPRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"landing": "builder", "document": {"document_id": "'$doc'"},
"contacts": [{"name": "Dana Customer", "email": "customer@example.com", "role": "signer"}],
"return_url": "https://example.com/signed"}' | jq -r .url// Node 18+, saved as sample.mjs
import { readFile } from 'node:fs/promises';
const headers = { 'X-API-Key': process.env.ESIGNPRO_API_KEY };
const form = new FormData();
form.set('file', new Blob([await readFile('contract.pdf')], { type: 'application/pdf' }), 'contract.pdf');
form.set('title', 'Master Services Agreement');
const doc = await fetch('https://api.esignpro.net/api/v1/documents', { method: 'POST', headers, body: form }).then(r => r.json());
const session = await fetch('https://api.esignpro.net/api/embed/sessions', {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
landing: 'builder',
document: { document_id: doc.id },
contacts: [{ name: 'Dana Customer', email: 'customer@example.com', role: 'signer' }],
return_url: 'https://example.com/signed',
}),
}).then(r => r.json());
console.log(session.url);import os, requests
headers = {"X-API-Key": os.environ["ESIGNPRO_API_KEY"]}
with open("contract.pdf", "rb") as f:
doc = requests.post(
"https://api.esignpro.net/api/v1/documents",
headers=headers,
files={"file": ("contract.pdf", f, "application/pdf")},
data={"title": "Master Services Agreement"},
)
doc.raise_for_status()
session = requests.post(
"https://api.esignpro.net/api/embed/sessions",
headers=headers,
json={
"landing": "builder",
"document": {"document_id": doc.json()["id"]},
"contacts": [{"name": "Dana Customer", "email": "customer@example.com", "role": "signer"}],
"return_url": "https://example.com/signed",
},
)
session.raise_for_status()
print(session.json()["url"])package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"strings"
)
func call(url, contentType string, body io.Reader) map[string]any {
req, _ := http.NewRequest("POST", url, body)
req.Header.Set("X-API-Key", os.Getenv("ESIGNPRO_API_KEY"))
req.Header.Set("Content-Type", contentType)
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var out map[string]any
json.NewDecoder(resp.Body).Decode(&out)
if resp.StatusCode != 201 {
panic(fmt.Sprint(url, " failed: ", resp.Status, " ", out))
}
return out
}
func main() {
pdf, err := os.ReadFile("contract.pdf")
if err != nil {
panic(err)
}
var form bytes.Buffer
w := multipart.NewWriter(&form)
part, _ := w.CreateFormFile("file", "contract.pdf")
part.Write(pdf)
w.WriteField("title", "Master Services Agreement")
w.Close()
doc := call("https://api.esignpro.net/api/v1/documents", w.FormDataContentType(), &form)
payload, _ := json.Marshal(map[string]any{
"landing": "builder",
"document": map[string]any{"document_id": doc["id"]},
"contacts": []map[string]string{{"name": "Dana Customer", "email": "customer@example.com", "role": "signer"}},
"return_url": "https://example.com/signed",
})
session := call("https://api.esignpro.net/api/embed/sessions", "application/json", strings.NewReader(string(payload)))
fmt.Println(session["url"])
}Webhooks
Keep your systems updated automatically when signing activity occurs.
Webhooks can send event notifications back to your application when important actions take place, allowing your CRM or software to respond without requiring your team to repeatedly check document status.
- Support automated follow-ups
- Update customer records
- Trigger the next step in a workflow
- Notify your team when action is required
Webhook endpointYour CRM
Activehttps://crm.example.com/hooks/esignpro
document.completedrecipient.signeddocument.declined
Delivery log
Embedded signing
Keep customers inside your own website, portal, or application while they complete the signing process.
Embedded signing allows you to incorporate the eSignPro signing experience into your existing digital workflow, creating a smoother experience for your customers and users. It is ideal for businesses that want electronic signatures to feel like a natural part of their own platform rather than a separate process.
API sandbox
Build and test before going live.
The eSignPro API Sandbox gives developers a testing environment to develop integrations, test Signature Request workflows, and confirm how their application communicates with eSignPro before moving into production. Experiment, troubleshoot, and complete your integration without affecting your live signing environment.
API sandbox
Test modeResponse200
[
{ "title": "Test lease", "status": "sent" },
{ "title": "Test NDA", "status": "completed" }
]
No email, SMS or payment leaves the sandbox.
Integrations
Built for your
existing workflow
Connect eSignPro with the systems your organization already depends on.
CRM systems
Add electronic signatures to customer and sales workflows.
Websites
Allow customers to start or complete signing processes from your website.
Customer portals
Make documents and signatures part of your existing customer experience.
Business applications
Add signing capabilities to internal or customer-facing software.
Mobile apps
Incorporate electronic signing into mobile workflows.
Document workflows
Automatically move documents through preparation, signing, completion, and storage processes.
Whether you’re building a simple website integration or incorporating electronic signatures into a larger software platform, eSignPro provides the tools to make signing part of your workflow.
Questions
Questions before you integrate
Do I need a paid plan to use the API?
The free plan includes the sandbox, so you can build and test at no cost. The API, webhooks and embedded signing come with every paid plan, with no separate developer tier to unlock.
How do webhooks handle a failed delivery?
Every attempt is written to the delivery log with its response, so you can see why it failed and replay it once your endpoint is back up.
Can I test without sending a real document?
Yes. The sandbox is a separate environment you can seed with test data and reset at any time, so nothing you build against it touches a live workspace.
What can iframe the embedded view?
Only the origins on your `frame-ancestors` allowlist. You set that list yourself, and a session token is scoped and revocable independent of it.