Skip to main content

View-Only Recipients

This guide explains how to create and track view-only recipients on an eSignature transaction using the Stewart Sign API. A view-only recipient can access and view all documents in a transaction but cannot sign, fill in fields, or modify any document content.

When to Use

Add a view-only recipient when a person needs to see the documents but should not sign them — for example:

  • A compliance officer or auditor who must review the final document
  • An internal stakeholder who needs a copy of what was sent
  • Any observer who should receive and open the documents without participating in signing

View-Only vs. Non-Signer

The API supports two distinct "non-signing" recipient types. Choose the one that matches your use case:

Use caseviewOnlynonSigner
Must sign the documentfalsefalse
Observes but doesn't sign (e.g. witness, attorney)falsetrue
Only needs to view the final document (e.g. compliance officer, auditor)trueauto-set true

Setting viewOnly: true automatically makes the participant a non-signer — the backend sets nonSigner=true for you. You do not need to send nonSigner yourself for a view-only recipient.


Creating a View-Only Recipient

To designate a participant as view-only, set "viewOnly": true on the participant object in your POST /transactions payload.

const axios = require("axios");

const config = {
method: "post",
url: "https://public-api.sign.stewart.com/transactions",
headers: {
Authorization: "Bearer <accessToken>",
"Content-Type": "application/json",
},
data: {
notifyParticipants: { email: true },
signingOrder: false,
participants: [
{
id: "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
email: "signer@example.com",
firstName: "John",
lastName: "Doe",
type: "signer",
order: 0,
primary: true,
authenticationType: "none",
},
{
id: "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
email: "viewer@example.com",
firstName: "Jane",
lastName: "Smith",
type: "signer",
order: 1,
primary: false,
viewOnly: true,
},
],
documents: [
{
id: "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
StoragePath: "org123/contract.pdf",
title: "Contract",
sessionType: "esign",
tags: [
{
type: "SIGNHERETAGTEMPLATEANNOTATION",
x: 200,
y: 100,
width: 150,
height: 34,
page: 0,
signerId: "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
required: true,
},
],
},
],
},
};

axios(config)
.then(function (response) {
console.log("Transaction created:", response.data);
})
.catch(function (error) {
console.log(error.response?.data || error.message);
});

Behavior

BehaviorDescription
DefaultviewOnly defaults to false. Existing payloads that don't include the field are unaffected.
Email notificationThe view-only recipient receives an invitation email containing a read-only link (readonly=true).
Document accessCan open and view all documents in the transaction.
SigningCannot sign, fill in tags, or modify documents.
TagsTags may not be assigned to a view-only participant. See Validation below.
Transaction completionDoes not block transaction completion — the transaction completes when all signers finish, regardless of whether the view-only recipient has viewed.
View trackingA viewedAt timestamp is recorded the first time the recipient opens the documents (see Tracking View Activity).
Audit trailA view-only-document-viewed audit event is emitted on first view.

Building your own emails? If you create the transaction with sendEmail: false (or notifyParticipants.email: false) and build your own emails from the URLs returned in the POST /transactions response, note that the URL returned for a view-only recipient already includes readonly=true. Use that URL as-is so the recipient lands in read-only mode.

Validation

A view-only recipient is a non-signer and therefore cannot own any tags. If you assign one or more tags to a view-only participant's signerId, the request is rejected with a 400 Bad Request:

{
"detail": "Tags assigned to view-only participant",
"error": "enl-api-400",
"message": "Bad request. Validation error.",
"help": "https://integration.sign.stewart.com/docs/troubleshooting/enl-api-400"
}

To resolve this, remove any tags whose signerId matches a viewOnly: true participant. See Error 400: Bad Request for general guidance on 400 responses.

Because view-only recipients do not sign, the following signing-related fields are not applicable and may be omitted:

FieldRequired for view-only?
email✅ Yes — required for the invitation email
firstName / lastName✅ Yes — required for email personalization
order✅ Yes — position in the participant list
viewOnly✅ Yes — must be true
authenticationType❌ No — view-only recipients don't authenticate
kbaRequired❌ No
credAnalysisRequired❌ No
personalPasswordQuestion / personalPassword❌ No

Tracking View Activity

When you retrieve a transaction via GET /transactions/{id} (and in the POST /transactions create response), a view-only participant exposes the following fields:

FieldTypeDescription
rolestringThe resolved participant role. For view-only recipients this is "view-only".
viewStatusstring"pending" until the recipient first opens the documents, then "viewed".
viewedAtstring (ISO 8601) | nullTimestamp of the recipient's first view, or null if they have not yet viewed.

These three fields are only present on view-only participants. Regular signers and non-signers do not include viewStatus or viewedAt.

Example — Before the recipient has viewed

{
"id": "391866a6-8ebb-4533-b6ab-c7bb4d6fbd38",
"status": "esign_pending",
"documents": [
{
"id": "8d976a23-b865-4fcd-9165-ddc0aedaf614",
"title": "Contract",
"sessionType": "esign"
}
],
"participants": [
{
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"email": "signer@example.com",
"firstName": "John",
"lastName": "Doe",
"order": 0,
"role": "signer"
},
{
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"email": "viewer@example.com",
"firstName": "Jane",
"lastName": "Smith",
"order": 1,
"role": "view-only",
"viewStatus": "pending",
"viewedAt": null
}
]
}

Example — After the recipient has viewed

Once the view-only recipient opens the documents, viewStatus becomes "viewed" and viewedAt is populated with the timestamp of that first view:

{
"id": "391866a6-8ebb-4533-b6ab-c7bb4d6fbd38",
"status": "esign_pending",
"documents": [
{
"id": "8d976a23-b865-4fcd-9165-ddc0aedaf614",
"title": "Contract",
"sessionType": "esign"
}
],
"participants": [
{
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"email": "signer@example.com",
"firstName": "John",
"lastName": "Doe",
"order": 0,
"role": "signer"
},
{
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"email": "viewer@example.com",
"firstName": "Jane",
"lastName": "Smith",
"order": 1,
"role": "view-only",
"viewStatus": "viewed",
"viewedAt": "2026-04-15T10:30:00.000Z"
}
]
}

Audit / Webhook Event

When a view-only recipient first views the documents, the system emits a view-only-document-viewed audit event. If your organization is subscribed to webhooks, this event is delivered to your webhook endpoint. See Webhook Events for general webhook setup.

{
"event": "esign.view-only-document-viewed",
"entity": "view-only-document-viewed",
"data": {
"participantId": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"transactionId": "391866a6-8ebb-4533-b6ab-c7bb4d6fbd38",
"participantName": "Jane Smith",
"viewedAt": "2026-04-15T10:30:00.000Z",
"organizationId": "14a00c39-af89-47ee-b26c-f0bc523c270e",
"isViewOnly": true
}
}
FieldDescription
eventesign.view-only-document-viewed
entityview-only-document-viewed
data.participantIdID of the view-only participant who viewed the documents
data.transactionIdID of the transaction
data.participantNameDisplay name of the view-only participant
data.viewedAtISO 8601 timestamp of the view
data.organizationIdID of the organization that owns the transaction
data.isViewOnlyAlways true for this event

Updating a Transaction to Add a View-Only Recipient

You can also add a view-only recipient to an existing transaction via PUT /transactions/{id} by including a participant with viewOnly: true in the participants array. The same behavior, validation, and tracking apply.


Additional Resources

If you need further assistance or have questions, feel free to reach out to our support team.