Guide

How to embed document analysis in a SaaS product

Treat analysis as a background job: submit from your server, track the run, and render findings with their source passages and review status. Never block a request thread on it and never ship the key to the browser. Before you show any of this to your own customers, get a licensing agreement in place.

For product and engineering leads at software companies. Written by the Encevra engine team. Reviewed 2026-10-12.

The shape of the integration

Your application owns the user, the documents and the screen. The engine owns one job: reading supplied material against a question and returning structured findings. Keep that boundary sharp and the integration stays small.

  • User uploads or selects material in your product
  • Your server sends question and material with your API key
  • You store the run id against your own record
  • You poll or receive a signed webhook
  • You render the brief, the quotes and the status

Worked example: a legal review feature

Say your SaaS product lets a customer paste in a contract and a counterparty document and asks for a playbook comparison. This is the exact shape of request your server would send to POST /api/public/v1/panel. The material below is an authored sample, not a recorded run; it shows what you would submit and what kind of findings you should design your UI around.

Your server sends the question and material shown here, plus engine: "legal", with your API key in the Authorization header. The API returns 202 with a run_id immediately; your server never waits on the request thread. You store that run_id against your own record (the contract review your customer started) and poll or wait for the signed webhook.

Authored input example, not a recorded engine run

Question sent to the engine

Review this NDA against our playbook.

Material sent with it

PLAYBOOK: Term max 3 years. Mutual obligations only. Liability cap required. Governing law: New York.
NDA (Acme and Brightline, v2): 1. Confidential Information means all information disclosed by Acme. 2. Recipient (Brightline) shall protect Confidential Information for 7 years. 3. Brightline shall indemnify Acme for any losses without limit. 4. This Agreement is governed by the laws of Delaware. 5. Section 6 governs return of materials. (No Section 6 is included.) 6a. Term: this Agreement ends after 2 years.

Review tasks a run like this is expected to cover

  • Confirm whether the confidentiality term matches the playbook's 3 year maximum
  • Check whether obligations are mutual or one-sided
  • Flag the uncapped indemnity against the playbook's required liability cap
  • Flag the governing law clause against the playbook's required jurisdiction
  • Note any referenced section that is missing from the supplied document

Integration decisions you have to make

  • Sync vs async mode: use the default async mode and poll, or use mode: "sync" only for short internal tools where you can afford to hold a request open for up to a few minutes
  • Which engine profile: "noetis" for the full panel on long or high stakes material, "lite" when material is short and you want a faster, cheaper pass
  • Idempotency: always send an Idempotency-Key tied to your own job id so a retried request never starts a second paid run
  • Webhook vs polling: a webhook tells you to fetch; keep polling as the source of truth, since webhook delivery can fail
  • Where the key lives: only on your server or server function, never in a browser bundle or mobile app binary

Design for slow, honest results

Recorded development runs on the full panel have taken roughly 1.5 to 3 minutes; some take longer depending on material length and engine. Design the interface around a pending state with a notification, not a spinner. A run can end incomplete with stated reasons; show those reasons rather than hiding the run.

Concrete limits to design around

  • Material for the full Noetis engine is capped at 150,000 characters per run; the lite engine is capped at 40,000 characters
  • Runs are asynchronous and can take minutes, not seconds; plan your UI and any customer-facing SLA around that
  • Only released runs are charged under self-serve billing; incomplete and failed runs release their credit hold and are not charged, but they still cost your user time and attention
  • Live access to the engines is approval-gated; a new account starts on a sandbox tier with simulated responses until Encevra approves live access
  • Showing engine output to your own customers, rather than using it only inside your own team, needs a signed licensing agreement before launch

What you still build

Document storage, permissions, the review interface, how a user accepts or rejects a finding, and your own audit trail. The engine returns data for those surfaces; it does not supply them.

A rollout plan that keeps users' trust

Ship analysis behind a clear label first, to a small group of customers who upload the documents they already review by hand. Show every finding with its quote so they can compare it with their own reading.

  • Week 1: call the API from your server and store the full JSON response
  • Week 2: show findings with quotes and status labels in a side panel
  • Week 3: collect accept and reject decisions from reviewers
  • Week 4: decide from those decisions, not from demos, whether to widen access

Frequently asked questions

Do my users need an Encevra account?
No. Your server calls the API with your key. Your users only see your product.
Can I call the API from the browser?
No. Keep the key on your server and pass results to the browser yourself.
How long does a run take?
Full Noetis runs currently take minutes, so use asynchronous runs with polling or signed webhooks.

Read next