Sign API
The Egnyte Sign API enables you to programmatically manage signature workflows. You can list templates, send signature requests using templates, track document statuses, and manage outstanding agreements.
Base URL
https://{domain}.egnyte.com/pubapi/v1/egnyte-sign
Authentication
All requests require an OAuth 2.0 Bearer token in the Authorization header:
Authorization: Bearer {access_token}
See Authentication for details on obtaining a token.
List Templates
Retrieve a list of active templates available to the authenticated user.
Request
GET /pubapi/v1/egnyte-sign/templates
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
status | string | No | — | Filter templates by status. Valid values: ACTIVE, INACTIVE |
sort_by | string | No | created_at | Field to sort results by. Valid values: name, created_at |
sort_direction | string | No | DESC | Sort direction. Valid values: ASC, DESC |
Example Request
curl -i -X GET "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/templates?status=ACTIVE&sort_by=created_at" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
200 OK
| Field | Type | Description |
|---|---|---|
count | integer | Total number of templates returned |
results | array | Array of template objects |
results[].template_id | string | Unique identifier for the template (UUID) |
results[].name | string | Template name |
results[].description | string | Template description |
results[].status | string | Template status (ACTIVE or INACTIVE) |
results[].created_by | integer | User ID of the template creator |
results[].full_name | string | Full name of the template creator |
results[].created_at | string | ISO 8601 timestamp of template creation |
results[].template_documents | array | Array of documents associated with the template |
results[].template_documents[].template_document_id | string | Unique identifier for the document (UUID) |
results[].template_documents[].document_name | string | Name of the document file |
results[].template_documents[].document_type | string | Document file type (e.g., pdf) |
results[].template_documents[].entry_id | string | Egnyte file system entry ID (UUID) |
results[].template_documents[].location | string | File path in Egnyte file system |
Example Response
{
"count": 2,
"results": [
{
"template_id": "a0c989ce-9126-4437-ad1f-44c166eea083",
"name": "Agreement",
"description": "",
"status": "ACTIVE",
"created_by": 12,
"full_name": "John Doe",
"created_at": "2026-01-02T11:33:12Z",
"template_documents": [
{
"template_document_id": "69ddd8e1-96f8-444c-b307-6a39cea3d1a1",
"document_name": "Agreement.pdf",
"document_type": "pdf",
"entry_id": "dbf254ce-543f-4bcb-996f-870f795314a4",
"location": "/Shared/Documents/Agreement"
}
]
},
{
"template_id": "54680c8d-094b-473e-b47d-c8e35c84dd16",
"name": "NDA",
"description": "",
"status": "ACTIVE",
"created_by": 12,
"full_name": "John Doe",
"created_at": "2026-01-02T11:37:07Z",
"template_documents": [
{
"template_document_id": "b9a40838-f06e-44ce-975d-3ff070951654",
"document_name": "NDA.pdf",
"document_type": "pdf",
"entry_id": "0b2d8c41-c5e7-42a6-990c-485ec961a0d6",
"location": "/Shared/Documents"
}
]
}
]
}
Get Template Details
Retrieve detailed information about a specific template, including participants and document configuration.
Request
GET /pubapi/v1/egnyte-sign/templates/{template_id}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
template_id | string | Yes | Unique identifier for the template (UUID) |
Example Request
curl -i -X GET "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/templates/{templateId}" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
200 OK
| Field | Type | Description |
|---|---|---|
template_id | string | Unique identifier for the template (UUID) |
name | string | Template name |
description | string | Template description |
status | string | Template status (ACTIVE or INACTIVE) |
target_location | string | File path where signed documents will be saved |
is_ordered_signing | boolean | Whether signers must sign in a specific order |
email_message | string | Default email message sent with signature requests |
expiration_days | integer | Number of days until signature request expires |
signer_allowed_to_reassign | boolean | Whether signers can reassign the request to another person |
reminder_details | object | Reminder configuration (null if not set) |
template_participants | array | Array of participant configurations |
template_participants[].template_participant_id | string | Unique identifier for the participant (UUID) |
template_participants[].participant_type | string | Type of participant (e.g., SIGNER) |
template_participants[].order | integer | Signing order (0 if not ordered) |
template_participants[].email | string | Email address (null for role-based participants) |
template_participants[].type | string | Participant type: INTERNAL, EXTERNAL, or ROLE |
template_participants[].role_name | string | Role name (null for non-role participants) |
template_participants[].first_name | string | First name (null for role-based participants) |
template_participants[].last_name | string | Last name (null for role-based participants) |
template_documents | array | Array of documents in the template |
template_documents[].template_document_id | string | Unique identifier for the document (UUID) |
template_documents[].document_name | string | Name of the document file |
template_documents[].entry_id | string | Egnyte file system entry ID (UUID) |
template_documents[].document_order | integer | Display order of the document |
Example Response
{
"template_id": "54680c8d-094b-473e-b47d-c8e35c84dd16",
"name": "NDA",
"description": "",
"status": "ACTIVE",
"target_location": "/Shared/Documents",
"is_ordered_signing": false,
"email_message": "",
"expiration_days": 30,
"signer_allowed_to_reassign": false,
"reminder_details": null,
"template_participants": [
{
"template_participant_id": "308582db-2018-47e7-8015-4821a9cfe98d",
"participant_type": "SIGNER",
"order": 0,
"email": "markjohnson@egnyte.com",
"type": "INTERNAL",
"role_name": null,
"first_name": "Mark",
"last_name": "Johnson"
},
{
"template_participant_id": "6b1b33e6-e2df-47b9-964a-270211fc3999",
"participant_type": "SIGNER",
"order": 0,
"email": null,
"type": "ROLE",
"role_name": "Manager",
"first_name": null,
"last_name": null
}
],
"template_documents": [
{
"template_document_id": "b9a40838-f06e-44ce-975d-3ff070951654",
"document_name": "NDA.pdf",
"entry_id": "0b2d8c41-c5e7-42a6-990c-485ec961a0d6",
"document_order": 1
}
]
}
Create Signature Request
Create a signature request from an existing template. If the template includes role-based participants, you must provide recipient mappings.
Request
POST /pubapi/v1/egnyte-sign/signature-requests
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
template_id | string | Yes | Template UUID to use for the signature request |
signature_request_name | string | Yes | Name for the signature request (max 255 characters) |
email_message | string | No | Custom email message. Defaults to template message if empty |
recipients | array | Conditional | Array of recipient mappings. Required if template has role-based participants |
recipients[].template_participant_id | string | Conditional | Template participant UUID. Required if template has role-based participants |
recipients[].email | string | Conditional | Email address for the recipient. Required if template has role-based participants |
Example Request
curl -i -X POST "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/signature-requests" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "template_id": "016d7399-b16e-4b6b-9ed9-fa2bb6114997", "signature_request_name": "NDA of 2026A", "email_message": "Hi, Please sign this document", "recipients": [ { "template_participant_id": "357abea8-6c1e-488f-b3e7-5f90b0cad255", "email": "john.doe@externalmail.com" }, { "template_participant_id": "1e00be2a-894e-42a7-91f5-babf92e6f59f", "email": "markjohnson@egnyte.com" } ] }'
Response
200 OK
| Field | Type | Description |
|---|---|---|
results | array | Array containing the created agreement |
results[].agreement_id | string | Unique identifier for the signature request (UUID) |
results[].agreement_name | string | Name of the signature request |
results[].target_location | string | File path where signed documents will be saved |
results[].status | string | Current status of the agreement (e.g., INPROGRESS) |
results[].participants | array | Array of participants in the signature request |
results[].participants[].participant_id | string | Unique identifier for the participant (UUID) |
results[].participants[].link_id | string | Unique signing link identifier |
results[].participants[].role | string | Participant role (e.g., SIGNER) |
results[].participants[].status | string | Participant status (e.g., INPROGRESS) |
results[].participants[].order | integer | Signing order |
results[].participants[].color_code | string | Color code for UI display |
results[].participants[].expires_at | string | ISO 8601 timestamp when the request expires |
results[].participants[].created_at | string | ISO 8601 timestamp when the participant was added |
results[].participants[].updated_at | string | ISO 8601 timestamp of last update |
results[].participants[].is_internal | boolean | Whether the participant is an internal user |
results[].documents | array | Array of documents in the signature request |
results[].documents[].document_id | string | Unique identifier for the document (UUID) |
results[].documents[].entry_id | string | Egnyte file system entry ID (UUID) |
results[].documents[].document_order | integer | Display order of the document |
Example Response
{
"results": [
{
"agreement_id": "72b28e69-52ef-42a8-88cc-c032fdf34884",
"agreement_name": "NDA of 2026",
"target_location": "/Shared/Documents",
"status": "INPROGRESS",
"participants": [
{
"participant_id": "10f8aff8-bb78-4b68-af9c-d3780ace6e51",
"link_id": "SOJSgDpx4Ugo",
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"color_code": "color2",
"expires_at": "2026-02-28T07:19:36Z",
"created_at": "2026-01-29T07:19:36Z",
"updated_at": "2026-01-29T07:19:36Z",
"is_internal": false
},
{
"participant_id": "b225d827-e209-4057-9bfe-aa7bcdc32cb1",
"link_id": "Yc5gQrf61Ab0",
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"color_code": "color1",
"expires_at": "2026-02-28T07:19:36Z",
"created_at": "2026-01-29T07:19:36Z",
"updated_at": "2026-01-29T07:19:36Z",
"is_internal": false
},
{
"participant_id": "ca24a451-3d47-4a5b-95ef-535b5f34d8a5",
"link_id": "iKScnHiEPHrR",
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"color_code": "color3",
"expires_at": "2026-02-28T07:19:36Z",
"created_at": "2026-01-29T07:19:36Z",
"updated_at": "2026-01-29T07:19:36Z",
"is_internal": false
}
],
"documents": [
{
"document_id": "0f72d6ea-c044-4426-b1ce-bcc8815a5ef4",
"entry_id": "0b2d8c41-c5e7-42a6-990c-485ec961a0d6",
"document_order": 1
}
]
}
]
}
List Sent Signature Requests
Retrieve all signature requests sent by the authenticated user. Use this endpoint to track outstanding agreements.
Request
GET /pubapi/v1/egnyte-sign/signature-requests/sent-requests
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
status | string | No | — | Filter by request status. Valid values: INPROGRESS, DECLINED, COMPLETED, CANCELLED, EXPIRED, FAILED |
sort_by | string | No | dueDate | Field to sort by. Valid values: name, dueDate, createdAt |
sort_direction | string | No | — | Sort direction. Valid values: ASC, DESC |
limit | integer | No | 50 | Number of requests to return (1-50) |
offset | integer | No | 0 | Number of requests to skip (≥ 0) |
Example Request
curl -i -X GET "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/signature-requests/sent-requests?status=INPROGRESS&sort_by=dueDate" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
200 OK
| Field | Type | Description |
|---|---|---|
count | integer | Total number of signature requests returned |
results | array | Array of signature request objects |
results[].agreement_id | string | Unique identifier for the signature request (UUID) |
results[].signature_request_name | string | Name of the signature request |
results[].status | string | Current status of the request |
results[].documents | array | Array of documents in the request |
results[].documents[].document_id | string | Unique identifier for the document (UUID) |
results[].participants | array | Array of participants |
results[].participants[].participant_id | string | Unique identifier for the participant (UUID) |
results[].participants[].email | string | Participant email address |
results[].participants[].name | string | Participant full name |
results[].participants[].role | string | Participant role (e.g., SIGNER) |
results[].participants[].status | string | Participant status |
results[].participants[].order | integer | Signing order |
results[].participants[].signed_at | string | ISO 8601 timestamp when signed (null if not signed) |
results[].participants[].is_in_queue | boolean | Whether the participant is waiting for their turn |
results[].created_at | string | ISO 8601 timestamp when the request was created |
results[].due_date | string | ISO 8601 timestamp when the request expires |
results[].template_id | string | Template UUID used to create the request |
results[].template_name | string | Name of the template |
Example Response
{
"count": 1,
"results": [
{
"agreement_id": "b468c25d-7589-4ed2-aeb8-7d6711b51aa1",
"signature_request_name": "NDA of 2026",
"status": "INPROGRESS",
"documents": [
{
"document_id": "4f9985e6-146e-4e83-af8a-c23e684e0a5c"
}
],
"participants": [
{
"participant_id": "10f8aff8-bb78-4b68-af9c-d3780ace6e51",
"email": "john.doe@egnyte.com",
"name": "John Doe",
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"signed_at": null,
"is_in_queue": false
},
{
"participant_id": "b225d827-e209-4057-9bfe-aa7bcdc32cb1",
"email": "markjohnson@egnyte.com",
"name": "Mark Johnson",
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"signed_at": null,
"is_in_queue": false
},
{
"participant_id": "ca24a451-3d47-4a5b-95ef-535b5f34d8a5",
"email": "markjohnson@egnyte.com",
"name": null,
"role": "SIGNER",
"status": "INPROGRESS",
"order": 0,
"signed_at": null,
"is_in_queue": false
}
],
"created_at": "2026-01-29T08:06:57Z",
"due_date": "2026-02-28T08:06:57Z",
"template_id": "016d7399-b16e-4b6b-9ed9-fa2bb6114997",
"template_name": "NDA"
}
]
}
Cancel Signature Request
Cancel an in-progress signature request. This action cannot be undone.
Request
POST /pubapi/v1/egnyte-sign/signature-requests/{agreement_id}/cancel
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
agreement_id | string | Yes | Unique identifier for the signature request to cancel (UUID) |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
message | string | No | Reason for cancellation (max 500 characters) |
Example Request
curl -i -X POST "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/signature-requests/{workflowId}/cancel" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "message": "Document no longer required" }'
Response
200 OK
The request was successfully cancelled. No response body is returned.
List Assigned Signature Requests
Retrieve all signature requests assigned to the authenticated user. Use this endpoint to track documents awaiting your signature.
Request
GET /pubapi/v1/egnyte-sign/signature-requests/my-requests
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
status | string | No | — | Filter by request status. Valid values: INPROGRESS, DECLINED, COMPLETED, CANCELLED |
sort_by | string | No | dueDate | Field to sort by. Valid values: name, dueDate, createdAt |
sort_direction | string | No | — | Sort direction. Valid values: ASC, DESC |
limit | integer | No | 50 | Number of requests to return (1-50) |
offset | integer | No | 0 | Number of requests to skip (≥ 0) |
Example Request
curl -i -X GET "https://{domain}.egnyte.com/pubapi/v1/egnyte-sign/signature-requests/my-requests?status=INPROGRESS&sort_by=dueDate" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
200 OK
| Field | Type | Description |
|---|---|---|
count | integer | Total number of signature requests returned |
results | array | Array of signature request objects |
results[].agreement_id | string | Unique identifier for the signature request (UUID) |
results[].signature_request_name | string | Name of the signature request |
results[].sent_by_name | string | Full name of the user who sent the request |
results[].sent_by_email | string | Email address of the user who sent the request |
results[].created_by | integer | User ID of the request creator |
results[].expires_at | string | ISO 8601 timestamp when the request expires |
results[].created_at | string | ISO 8601 timestamp when the request was created |
results[].link_url | string | URL to access the signing interface |
results[].signing_log_generation_status | string | Status of signing log generation |
results[].document_info | array | Array of documents in the request |
results[].document_info[].document_id | string | Unique identifier for the document (UUID) |
results[].agreement_participant_status | string | Your status as a participant |
results[].status | string | Overall status of the signature request |
Example Response
{
"count": 1,
"results": [
{
"agreement_id": "b468c25d-7589-4ed2-aeb8-7d6711b51aa1",
"signature_request_name": "NDA of 2026A",
"sent_by_name": "Mark Johnson",
"sent_by_email": "markjohnson@egnyte.com",
"created_by": 5,
"expires_at": "2026-02-28T08:06:57Z",
"created_at": "2026-01-29T08:06:57Z",
"link_url": "https://esigdemo.qa-egnyte.com/es/0A8uZDgx7hqW?source=requestsTab",
"signing_log_generation_status": "UNKNOWN",
"document_info": [
{
"document_id": "4f9985e6-146e-4e83-af8a-c23e684e0a5c"
}
],
"agreement_participant_status": "INPROGRESS",
"status": "INPROGRESS"
}
]
}
Error Codes
| Status | Error | Description | Resolution |
|---|---|---|---|
| 400 | Bad Request | Invalid request parameters or missing required fields | Verify all required fields are present and properly formatted |
| 401 | Unauthorized | Invalid or expired OAuth token | Refresh your OAuth token |
| 403 | Forbidden | Insufficient permissions to access templates or signature requests | Ensure the user has appropriate Egnyte Sign permissions |
| 404 | Not Found | Template or signature request does not exist | Verify the template ID or agreement ID is correct |
| 429 | Rate Limited | Too many requests | Implement exponential backoff; check Retry-After header |
Related Resources
- Authentication — How to obtain and refresh OAuth tokens
- File System API — Manage files and folders referenced in signature requests
- Best Practices — Rate limiting, pagination, and error handling strategies
