Integrate templates, signer routing, and webhook automation in your app with a simple REST flow. Built for developers who want quick setup and reliable delivery.
POST https://api.indigoesign.com/api/v1/sign-request
Authorization: Bearer sk_live_xxxxxxxx
Content-Type: application/json
{
"template_id": "tpl_123",
"title": "Offer Letter",
"signers": [
{
"role": "client",
"email": "john@example.com"
}
],
"redirect_url": "https://yourapp.com/success",
"webhook_url": "https://yourapp.com/webhook"
}
Clean endpoint design, predictable behavior, and template-first workflows.
No SDK required. Use standard HTTPS calls from any backend.
Create templates in panel, then reuse them by `template_id` in API calls.
Track `request.sent`, `viewed`, `signed`, and `completed` instantly.
Follow these steps to prepare your account for API integration.
Accessing the API requires a Secret Key. You must have an active account to generate keys.
The API works by referencing pre-configured templates. This allows you to design the document layout once and reuse it programmatically.
Once your template is created, you'll need its unique identifier for your code.
tpl_x8k2j9...).
"role": "client") exactly match the roles defined in your template's fields.
Create a key from your panel and use it in Bearer auth header.
Call `POST /api/v1/sign-request` with template ID + signer list.
Update your product logic when signing events are delivered.
Use this endpoint to create sign requests from saved templates.
Authorization: Bearer sk_live_xxxxxx
Content-Type: application/json
{
"template_id": "tpl_123",
"title": "Offer Letter",
"signers": [
{
"role": "client",
"email": "john@example.com"
}
],
"redirect_url": "https://yourapp.com/success",
"webhook_url": "https://yourapp.com/webhook"
}
| Field | Type | Required | Description |
|---|---|---|---|
| template_id | string | Yes | Template created via panel |
| title | string | Yes | Request name |
| signers | array | Yes | List of signers |
| signers[].role | string | Yes | Signer role (e.g. client, vendor) |
| signers[].email | string | Yes | Signer email |
| redirect_url | string | No | After signing redirect |
| webhook_url | string | No | Override webhook |
{
"request_id": "req_abc123",
"status": "sent",
"signers": [
{
"role": "client",
"email": "john@example.com",
"signing_url": "https://app.com/sign/secure_token"
}
]
}
{
"error": "Invalid API key"
}
{
"error": "API access not allowed in your plan"
}
{
"error": "Your plan allows only 1 signer"
}
{
"error": "Invalid template_id"
}
Copy and run your first signing request
curl -X POST https://api.indigoesign.com/api/v1/sign-request \
-H "Authorization: Bearer sk_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"template_id": "tpl_your_template_id",
"title": "Employment Contract",
"signers": [
{
"role": "client",
"email": "client@example.com"
}
],
"redirect_url": "https://yourapp.com/success",
"webhook_url": "https://yourapp.com/webhook"
}'
import requests
url = "https://api.indigoesign.com/api/v1/sign-request"
headers = {
"Authorization": "Bearer sk_live_xxxxxxxx",
"Content-Type": "application/json"
}
payload = {
"template_id": "tpl_your_template_id",
"title": "Offer Letter",
"signers": [
{"role": "client", "email": "john@example.com"}
],
"redirect_url": "https://yourapp.com/success",
"webhook_url": "https://yourapp.com/webhook"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
const response = await fetch("https://api.indigoesign.com/api/v1/sign-request", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_xxxxxxxx",
"Content-Type": "application/json"
},
body: JSON.stringify({
template_id: "tpl_your_template_id",
title: "Agreement",
signers: [
{ role: "client", email: "client@company.com" }
],
redirect_url: "https://yourapp.com/success",
webhook_url: "https://yourapp.com/webhook"
})
});
const data = await response.json();
console.log(data);
Event occurs -> send webhook -> log result.
| Event | Description |
|---|---|
| request.sent | Request created |
| request.viewed | Signer opened link |
| request.signed | One signer completed |
| request.completed | All signers done |
Client endpoint: POST https://client.com/webhook
X-Signature: sha256=xxxxxGenerate an API key, create a template, and send your first request in minutes.
Generate API Key