REFRACT Lifecycle
REFRACT Lifecycle is a SharePoint-hosted workspace that provides a unified operational view of every document generated by REFRACT Platform, with search, filters, timeline, signing, delivery, workflow, and configuration in a single interface.
REFRACT Lifecycle is a SharePoint Framework (SPFx) web part deployed to your SharePoint environment. It provides a real-time operational view of every document generated by REFRACT Platform, combining SharePoint list metadata, Dispatcher API data, and append-only REFRACT Audit records into a unified, searchable workspace. The Audit Timeline tab surfaces the REFRACT Audit event stream for each document, severity-classified, filterable by audience, and expandable to Level 2 sub-event trails for full operational detail.
SPFx Deployment
REFRACT Lifecycle is delivered as part of the refract-spfx package. It must be deployed to your SharePoint App Catalog and added to a SharePoint page by your administrator. The people who use it need the Lifecycle.Reader role to read document records; see Give people access to document records. No Azure infrastructure changes are required; the web part connects to your existing Dispatcher Function. Deploying the package does not let it call the Dispatcher yet: an administrator must approve the pending REFRACT Dispatcher API / user_impersonation request in the SharePoint admin center -> Advanced -> API access, once per tenant. Until then every call to the Dispatcher fails.
One Lifecycle. Multiple Sources.
Business documents rarely originate from a single system - quotes from CRM, invoices from ERP, signed agreements from external workflows, operational documents from internal applications. REFRACT Platform ingests all of them into a single customer-controlled lifecycle with consistent governance, retention, and audit evidence.
Every ingested document moves through four phases:
| Phase | Description |
|---|---|
| Capture | Documents are received through supported ingestion channels and stored in customer-controlled Azure and Microsoft 365 environments. |
| Classify | REFRACT Lifecycle applies metadata, lifecycle context, and governance attributes to standardize downstream processing. |
| Govern | REFRACT Audit records cryptographic evidence and lifecycle events to support traceability and operational review. |
| Discover | REFRACT Lifecycle provides a unified workspace to search, review, and manage document history across all connected systems. |
Teams can search by business metadata, apply consistent governance and retention controls, review audit evidence, and navigate back to the originating system - all from one workspace.
What the Workspace Shows
Document Search
Full-text and filter-based search across all generated documents. Filter by status, date range, document type, template, requester, and active products.
Event Timeline
A REFRACT Audit-powered timeline showing every compliance milestone for a document, from generation through signing, delivery, and archival. Events are severity-classified with Executive, Compliance, Security, and Full filtered views. Operational detail lives in Level 2 sub-event trails expanded on demand.
Integrity Verification
One-click SHA-256 hash verification and write-once archive status for any document. Confirm whether a PDF has changed since generation, or reproduce it from the .raudit archive and compare hashes. Both operations are recorded as REFRACT Audit compliance events and can produce a Certificate of Verification.
Product Status Badges
Visual badges on each document record show which REFRACT Platform products are active: REFRACT Audit, REFRACT eSign, REFRACT Delivery, Section 508, and Data Redaction.
Related Files
Access the rendered PDF, evidence certificate, accessibility report, evidence bundle, and any reproduced originals from a single panel.
Operational Actions
Initiate signing sessions, create delivery sessions, trigger archive operations, export audit data, and manage workflow submissions directly from the workspace.
Document Status Values
Each document in the workspace displays a status badge derived from its SharePoint list entry and dispatcher API state:
| Status | Description |
|---|---|
generated | PDF has been successfully rendered and stored. |
verified | SHA-256 hash has been verified against the original. |
signed | REFRACT eSign session completed and signed PDF produced. |
delivered | At least one REFRACT Delivery session has been accessed or downloaded. |
archived | Document has been flagged as archived in the audit log. |
pending-signature | REFRACT eSign session is active; awaiting one or more signers. |
validation-failed | A workflow validation rule failed; participant correction required. |
processing | Document is currently being rendered or sealing is in progress. |
failed | Render or seal operation failed. See the Audit Timeline tab for error details. |
Data Sources
REFRACT Lifecycle aggregates data from three sources:
| Source | Data Provided |
|---|---|
| SharePoint Activity List | Document metadata: CorrelationId, DocumentId, DocType, PdfHash, Status, EngineVersion, requester identity, and timestamps. |
| Dispatcher API | Audit events, signing session state and slot details, delivery session state and access events, workflow instance state and step data. |
| Audit Blob | Append-only JSONL event stream for each document - cryptographically chained for eSign and Workflow, unchained for general render events. Provides the source of truth for the event timeline. |
Access: the Lifecycle.Reader Role
Two separate checks decide what a person sees in REFRACT Lifecycle:
- SharePoint permissions decide which documents they can find. The workspace lists items from the
REFRACT_ActivitySharePoint list, so SharePoint's list permissions, theREFRACT.Admingroup, and each item's restriction map still govern search results, item metadata, and what the SharePoint document library lets them open. See REFRACT Lifecycle Access Control. - The
Lifecycle.Readerapp role decides whether they can read the records REFRACT holds about those documents in your Azure subscription. The Dispatcher checks the role on every such read. SharePoint access alone does not grant it, and the role alone does not reveal documents SharePoint hides from them.
What the role protects
| Record | Where it appears |
|---|---|
| Audit timeline events | Audit Timeline tab |
| Signing status, including signer names and email addresses | Signatures tab |
| Delivery sessions, including recipient addresses | Deliveries tab |
| Workflow data: answers, status, approver and recipient addresses, and the JSON or CSV export | Workflow tab, Export |
Evidence chain exports (eSign, Workflow, Delivery, and batch) and render or signed archives (.raudit, .signed.raudit) | Related Files, Export |
| Explain traces and explanation PDFs | Explain |
Files REFRACT stores in your Azure Blob Storage, opened through the Dispatcher (GET /api/doc, and GET /api/gateway/v1/documents/open for integrations): generated and sealed PDFs, batch intake receipts, ZIP bundles, certificates, reports, archives, and audit files | Related Files, Open Document, downloads |
| Section 508 accessibility trace, certificate, report, and ZIP | Accessibility downloads |
| The integrity verdict and every recorded hash | Verify |
| Starting a verification or reproduction, and its results, which carry the download of the verification report or reproduced PDF | Verify, Reproduce |
Opening a workflow for review (POST /api/workflow/{id}/review-open), which returns its answers and addresses | Workflow review |
| Re-rendering a stored payload as a signed-in user | Recreate, Generate Variant |
Sending a stored document as a signed-in user (an app token sends with Render.Access instead) | Send for Signature, OTC Signature, Send for Delivery |
| A workflow's sealed PDF and attachments, for an app, and for a signed-in person who is not a participant of the workflow | Workflow tab, Related Files, integration sealed-PDF actions |
| Batch records, their documents, validation results, and audit chain | Batch record view, Dispatch Review |
The sample of Activity list items returned by the daily summary's diagnostic run (POST /api/summary/run?diag=1) | Administration |
Who passes without the role:
- A workflow's own participants (its initiator, approvers, reviewers, escalation contacts, and recipients) can read that workflow's data. Opening a workflow for review is also open to the workflow administrator, any approver a stage of the workflow names, and members of the current stage's group. Only signed-in people count as participants: an app token is never a participant, even of a workflow it created.
- When your Dispatcher runs with
DOCUMENT_ACCESS_ENFORCEMENT=enforce, a person the document's own access record names as a participant can open that document through/api/docand re-render its payload. In the default mode (off) and inshadow, nobody passes this way. - People opening an emailed REFRACT link: portal links carry their own credentials.
Re-rendering a stored payload. A render reads its payload from your SharePoint Payloads library with the Dispatcher's own identity, so the Dispatcher records each payload it renders. When a signed-in user (a delegated token) renders a payload that has been rendered before, as Recreate and Generate Variant do, the role is required, and the render is refused with 403 and ROLE_MISSING before the payload is read. If the record of rendered payloads cannot be read, the render is refused with 503 and RENDERED_PAYLOAD_CHECK_UNAVAILABLE rather than allowed. The first render of a new payload, every render by an app token (re-runs included), and renders with inline data are unchanged. Payloads rendered before your Dispatcher was updated are not in the record until a one-time backfill is run on your deployment; until then, re-rendering them counts as a first render.
Not covered by the role: documents opened from SharePoint itself (SharePoint permissions govern them), the archive status check (which returns no contents or hashes), the first render of a new payload, and the signing session a render creates for itself through templateSettings.esign. A workflow's sealed PDF and attachments are open to its signed-in participants without the role. An app reads them with Render.Access and Lifecycle.Reader, as it reads any other stored document. Any other signed-in person needs the role and also the document-access administrator role named by the Dispatcher's DOCUMENT_ACCESS_ADMIN_APP_ROLE setting, which standard deployments do not configure. For everyone, the document's own restriction policy, when it has one, still applies.
Assigning the role
People get the role in Microsoft Entra ID, under Enterprise applications -> REFRACT Dispatcher API -> Users and groups, usually through a group. Assigning a group needs Microsoft Entra ID P1 or P2, only the group's direct members receive the role, and it takes effect at each person's next sign-in. infra/deploy.ps1 creates the role but assigns it to no one, so assign it before you update the Dispatcher. See Give people access to document records for the steps.
Integrations that use app tokens
An integration that calls the Dispatcher with client credentials (an app token, with no user signed in) should call as its own connector app, one per source system; see Connect a source system. The connector app needs application permissions on the "REFRACT Dispatcher API" app:
| Permission | Needed for |
|---|---|
Render.Access | Every call. The Dispatcher refuses an app token without it on every authenticated route, generating documents included, with 403, code ROLE_MISSING, and "role": "Render.Access". It is also all an app needs to send a stored document (Send for Signature, OTC Signature, Send for Delivery). |
Lifecycle.Reader | Reading any of the records above, including opening a stored file through /api/doc or the gateway's documents/open route, and checking workflow status. |
Only /api/healthz, /api/audience-config, /api/audit-config, GET /api/render?ping=true, the routes portal links use, and the eSign portal's signed callbacks are exempt. The participant exceptions above do not apply to app tokens, including callers that present a signed document assertion.
Decisions are made by people. An app token cannot approve, reject, request changes on, or escalate a workflow, make a governance decision, or decide a batch, whatever permissions it holds. These are refused with 403, code APP_CANNOT_DECIDE: "An application cannot make this decision. Approvals, rejections, requests for changes, governance decisions and escalations are made by a signed-in person."
To grant the permissions:
- Open App registrations -> the system's connector app -> API permissions -> Add a permission -> APIs my organization uses -> REFRACT Dispatcher API.
- Choose Application permissions, select Render.Access and, if the integration reads records, Lifecycle.Reader, and select Add permissions.
- Select Grant admin consent.
infra/deploy.ps1 creates both roles but grants neither to any app. The permissions then appear in the roles claim of the connector's tokens. Grant the permissions on the connector app, never on "REFRACT Dispatcher API" itself: no source system should sign in as that app. Grant Render.Access before you update your Dispatcher to a version that requires it, or every call from the integration is refused.
| Integration | Render.Access | Also Lifecycle.Reader for |
|---|---|---|
| Power Platform connector | Every action | Get Document URL, Check Workflow Status, Download Sealed PDF |
| Business Central | Every call | Open Document, Sync Workflow Status, the sealed workflow PDF |
| Dynamics 365 Sales plugin | Every call | Open Document, Sync Workflow Status, Get Signed Document |
| Dynamics GP | Every call | None |
The sealed workflow PDF actions (the connector's Download Sealed PDF, and the Business Central and Dynamics 365 Sales sealed-document actions) need Lifecycle.Reader as well as Render.Access. An app is never a workflow participant, so the role is what lets it read a workflow's sealed PDF and attachments. The document's restriction policy, when it has one, still applies.
The ROLE_MISSING message
Without the role, the Dispatcher refuses the read with HTTP 403:
{
"error": "Forbidden",
"code": "ROLE_MISSING",
"role": "Lifecycle.Reader",
"message": "You do not have permission to view document records. Your account needs the Lifecycle.Reader role on the \"REFRACT Dispatcher API\" app. Ask a Microsoft Entra administrator to assign it: Microsoft Entra admin center > Enterprise applications > REFRACT Dispatcher API > Users and groups > Add user/group, choose your account (or a group you are in) and the Lifecycle.Reader role. Then sign out and sign in again."
}An app token is refused with the same status and code, naming Render.Access or Lifecycle.Reader in role. The Lifecycle.Reader message is written for a person; for an app, the fix is the application permission steps above.
REFRACT Lifecycle checks the role once, when a Lifecycle window opens (a document, eSign, workflow, delivery, or batch record). Without it, the window shows only its header (the document ID, or "Batch distribution" for a batch, the correlation ID, and Close) and a Permission needed notice with this message: no tabs, panels, actions, or exports, and nothing else is read for that window. If any call made while a window is open is refused for the role, the window closes to the same view. Outside those windows the same Permission needed notice appears in the Recreate PDF progress dialog (from Lifecycle Search and the dashboard), for Lifecycle Search's Open Document, and in Dispatch Review. A batch or document is never reported as "not found" because of a missing role. To fix it, assign the role as described in Give people access to document records, then sign out and sign in again. The message always names "REFRACT Dispatcher API"; if your deployment gave the app registration a different name, look for that name in Enterprise applications.
SharePoint Activity List
The workspace reads from the REFRACT_Activity SharePoint list populated automatically by the Dispatcher at render time. Key columns:
| Column | Description |
|---|---|
CorrelationId | Unique render correlation ID. Primary key linking all Dispatcher API data. |
DocumentId | Business document identifier (e.g. invoice number). |
DocType | Document type label (e.g. invoice, vendor-contract). |
DocumentLink | SharePoint URL of the generated PDF. |
PdfHash | SHA-256 hash of the rendered PDF for integrity verification. |
Status | Current document status (see status values above). |
EngineVersion | REFRACT PDF engine version used to render the document. |
MetadataJSON | JSON snapshot of resolved features and template settings at render time. Used to derive product badges. |
No TemplatePath or PayloadPath columns
Unlike some other fields, the template and payload paths used for a render are not their own SharePoint columns - they are only available inside MetadataJSON where present, not as directly queryable fields.
Deep Links
Source systems can open REFRACT Lifecycle with filters pre-populated by appending query parameters to the SharePoint page URL:
https://your-site/SitePages/Home.aspx?correlationId=d8cb1510-8290-40f8-8592-702eaa9838a6
https://your-site/SitePages/Home.aspx?batchId=082ab853-7852-47f0-b078-1927d2d92619
https://your-site/SitePages/Home.aspx?sourceSystem=D365_FOThe workspace opens automatically with the filter applied. CorrelationIds and BatchIds are globally unique UUIDs; no sourceSystem qualifier is needed to find a specific record by GUID. Deep links work from both the Home.aspx dashboard web part and list-view pages with the REFRACT Lifecycle command set installed.
See Deep Links in the Workspace Tabs reference for the full parameter reference and security model.
Workspace Tabs Reference
Detailed reference for every tab in the REFRACT Lifecycle workspace: search, filters, deep links, Timeline, Signing, Delivery, Workflow, and Configuration.
REFRACT Dispatch API Reference
HTTP endpoint reference for batch dispatch management - get batch detail, validation results and audit chain, approve or reject, and cancel.
Give people access to document records
Assign the Lifecycle.Reader role on the REFRACT Dispatcher API enterprise application to the people and groups who read REFRACT's records about documents.