Documents API
Manage document templates, signing sessions, and e-signatures.
The Documents API manages digital document templates (waivers, contracts, rental agreements) and signing sessions. Create templates, generate signing sessions for bookings, send signature requests, and void sessions.
Templates
List Templates
GET /v1/documents/templatesReturns all document templates for your tenant, ordered by creation date (newest first).
const templates = await renta.documents.templates.list();
for (const t of templates.data) {
console.log(`${t.name} (${t.type})`);
}curl https://api.getrenta.io/v1/documents/templates \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"data": [
{
"id": "dt_abc123",
"name": "Rental Waiver",
"type": "waiver",
"content": {},
"pdf_storage_path": null,
"fields": ["full_name", "signature", "date"],
"signee_roles": ["renter"],
"merge_fields_used": ["customer_name", "booking_dates"],
"reminder_hours": 24,
"is_template": true,
"assigned_fleet_items": ["fi_abc123"],
"assigned_tours": [],
"assigned_cabins": [],
"created_at": "2026-03-01T10:00:00Z",
"updated_at": "2026-03-01T10:00:00Z"
}
]
}Create Template
POST /v1/documents/templatesBody Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | ✅ | Template name |
type | string | ✅ | Template type (e.g., waiver, contract, agreement) |
content | object | — | Template content/body |
pdf_storage_path | string | — | Path to uploaded PDF template |
fields | array | — | Form fields in the document |
signee_roles | array | — | Roles required to sign (e.g., ["renter", "guardian"]) |
merge_fields_used | array | — | Merge fields for auto-fill |
reminder_hours | integer | — | Hours before sending a reminder |
is_template | boolean | — | Whether this is a reusable template |
assigned_fleet_items | array | — | Fleet item IDs this template applies to |
assigned_tours | array | — | Tour IDs this template applies to |
assigned_cabins | array | — | Cabin IDs this template applies to |
const template = await renta.documents.templates.create({
name: 'Rental Waiver',
type: 'waiver',
fields: ['full_name', 'signature', 'date'],
signee_roles: ['renter'],
assigned_fleet_items: ['fi_abc123'],
});curl -X POST https://api.getrenta.io/v1/documents/templates \
-H "Authorization: Bearer renta_sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Rental Waiver",
"type": "waiver",
"fields": ["full_name", "signature", "date"],
"signee_roles": ["renter"]
}'Signing Sessions
Signing sessions are instances of a template tied to a specific booking. Each session tracks signees and their signing status.
Session Statuses
| Status | Description |
|---|---|
draft | Created but not yet sent |
sent | Signature request emails sent |
completed | All signees have signed |
voided | Session cancelled, signatures invalidated |
List Sessions
GET /v1/documents/sessionsQuery Parameters:
| Parameter | Type | Description |
|---|---|---|
booking_id | string | Filter sessions for a specific booking |
const sessions = await renta.documents.sessions.list({
booking_id: 'bk_def456',
});curl "https://api.getrenta.io/v1/documents/sessions?booking_id=bk_def456" \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"data": [
{
"id": "ds_abc123",
"template_id": "dt_abc123",
"booking_id": "bk_def456",
"name": "Rental Waiver",
"status": "sent",
"rendered_content": {},
"document_hash": "sha256:abc123...",
"completed_pdf_path": null,
"sent_at": "2026-03-31T12:00:00Z",
"completed_at": null,
"voided_at": null,
"created_at": "2026-03-31T11:00:00Z",
"signees": [
{
"id": "sig_001",
"session_id": "ds_abc123",
"customer_id": "cust_abc",
"role": "renter",
"name": "John Doe",
"email": "john@example.com",
"status": "pending",
"signed_at": null
}
]
}
]
}Create Session
POST /v1/documents/sessionsBody Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
template_id | string | ✅ | Document template ID |
booking_id | string | ✅ | Booking to attach the session to |
name | string | ✅ | Session display name |
signees | array | ✅ | Array of signee objects |
signees[].customer_id | string | ✅ | Customer ID |
signees[].role | string | ✅ | Signee role (must match template roles) |
signees[].name | string | ✅ | Signee full name |
signees[].email | string | ✅ | Email for signing link |
const session = await renta.documents.sessions.create({
template_id: 'dt_abc123',
booking_id: 'bk_def456',
name: 'Rental Waiver — John Doe',
signees: [
{
customer_id: 'cust_abc',
role: 'renter',
name: 'John Doe',
email: 'john@example.com',
},
],
});curl -X POST https://api.getrenta.io/v1/documents/sessions \
-H "Authorization: Bearer renta_sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template_id": "dt_abc123",
"booking_id": "bk_def456",
"name": "Rental Waiver — John Doe",
"signees": [
{
"customer_id": "cust_abc",
"role": "renter",
"name": "John Doe",
"email": "john@example.com"
}
]
}'Send Session
POST /v1/documents/sessions/:id/sendSends signing request emails to all pending signees and transitions the session status to sent.
await renta.documents.sessions.send('ds_abc123');curl -X POST https://api.getrenta.io/v1/documents/sessions/ds_abc123/send \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"id": "ds_abc123",
"template_id": "dt_abc123",
"booking_id": "bk_def456",
"name": "Rental Waiver — John Doe",
"status": "sent",
"sent_at": "2026-03-31T12:00:00Z",
"created_at": "2026-03-31T11:00:00Z"
}You cannot send a voided session. Attempting to do so returns 400 Bad Request.
Void Session
POST /v1/documents/sessions/:id/voidVoids a signing session, invalidating all signatures and preventing further signing.
await renta.documents.sessions.void('ds_abc123');curl -X POST https://api.getrenta.io/v1/documents/sessions/ds_abc123/void \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"id": "ds_abc123",
"template_id": "dt_abc123",
"booking_id": "bk_def456",
"name": "Rental Waiver — John Doe",
"status": "voided",
"voided_at": "2026-04-01T09:00:00Z",
"created_at": "2026-03-31T11:00:00Z"
}Resend Signing Email
POST /v1/documents/sessions/:id/resendResend the signing request email to a specific signee in a session.
This endpoint requires a secret key (renta_sk_). Publishable keys will receive a 403 Forbidden error.
Body Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
signee_id | string | ✅ | The signee to resend the signing email to |
const result = await renta.documents.sessions.resend(
'ds_abc123',
'sig_001'
);
console.log(result.status); // signee statuscurl -X POST https://api.getrenta.io/v1/documents/sessions/ds_abc123/resend \
-H "Authorization: Bearer renta_sk_live_..." \
-H "Content-Type: application/json" \
-d '{"signee_id": "sig_001"}'Response:
{
"id": "sig_001",
"session_id": "ds_abc123",
"role": "renter",
"name": "John Doe",
"email": "john@example.com",
"status": "pending"
}Single Template Operations
Single template operations require a secret key (renta_sk_). Publishable keys will receive a 403 Forbidden error.
Get Template
GET /v1/documents/templates/:idRetrieve a single document template by ID.
const template = await renta.documents.templates.get('dt_abc123');
console.log(template.name);curl https://api.getrenta.io/v1/documents/templates/dt_abc123 \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"data": {
"id": "dt_abc123",
"name": "Rental Waiver",
"type": "waiver",
"content": {},
"pdf_storage_path": null,
"fields": ["full_name", "signature", "date"],
"signee_roles": ["renter"],
"merge_fields_used": ["customer_name", "booking_dates"],
"reminder_hours": 24,
"is_template": true,
"assigned_fleet_items": ["fi_abc123"],
"assigned_tours": [],
"assigned_cabins": [],
"created_at": "2026-03-01T10:00:00Z",
"updated_at": "2026-03-01T10:00:00Z"
}
}Update Template
PATCH /v1/documents/templates/:idUpdate a document template. Accepts any subset of the create parameters.
const updated = await renta.documents.templates.update('dt_abc123', {
name: 'Updated Rental Waiver',
reminder_hours: 48,
});curl -X PATCH https://api.getrenta.io/v1/documents/templates/dt_abc123 \
-H "Authorization: Bearer renta_sk_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "Updated Rental Waiver", "reminder_hours": 48}'Response:
{
"data": {
"id": "dt_abc123",
"name": "Updated Rental Waiver",
"type": "waiver",
"reminder_hours": 48,
"created_at": "2026-03-01T10:00:00Z",
"updated_at": "2026-04-07T12:00:00Z"
}
}Delete Template
DELETE /v1/documents/templates/:idSoft-deletes a document template by setting deleted_at. Templates with active signing sessions cannot be deleted (returns 409 Conflict).
await renta.documents.templates.delete('dt_abc123');curl -X DELETE https://api.getrenta.io/v1/documents/templates/dt_abc123 \
-H "Authorization: Bearer renta_sk_live_..."Response:
{
"deleted": true,
"id": "dt_abc123"
}