Extract key terms
What this page is — the capability that lifts the commercial facts out of a document as structured data, and writes every concrete commitment it finds into the obligation register.
What it is for — so a deadline buried in clause 12 of a PDF becomes a tracked item with an owner and a due date, instead of something somebody has to remember.
The problem it solves — commitments stay buried in PDFs, and deadlines are missed because nobody wrote them down.
Route: /org/papers/documents/<document>/ai → Understand → Extract key terms ·
Permission: Use AI drafting/extraction/Q&A for documents. ·
Utility: papers_term_extractor · Cost: 450 credits estimated, 1,800 maximum.
1. What it is
Extraction reads the document and returns six structured outputs — parties, contract value, key dates, governing law, renewal terms and obligations. It extracts only what the document actually says, and leaves a field empty rather than guessing, which is the property that makes the output safe to store.
It is the only Understand capability that changes data outside the AI result:
| Reads | Writes | |
|---|---|---|
| Extract key terms | The document | The obligation register — every obligation found |
| Entity & concept graph | The document | The knowledge graph — replaces this document's edges |
| Every other capability | The document | Nothing. The result is a result |
Most Papers AI is read-only: it produces a result you read and choose to act on. Extraction is
different. The obligations it finds are inserted into the document's obligation register tagged
source: ai_extracted, and they are then tracked, reported on and chased like any other obligation.
Run it deliberately, and review what it created — see §7.
Against its neighbours:
| Returns | |
|---|---|
| Extract key terms | Typed values to store and track |
| Summarize | Prose to read, with clause citations |
| Smart fields | Values for the specific fields your admin configured, with evidence |
2. Why you would use it
An obligation that lives only in a sentence is an obligation nobody is tracking. The 30% advance due on 15 August is a real commitment the moment the document is signed, but until somebody types it somewhere it exists only in a paragraph that a person would have to be re-reading to notice.
- It converts prose into tracked work. Deadlines and deliverables become register items with owners and dates, which is what makes them show up before they are missed rather than after.
- It seeds the register in one pass. Typing out fifteen obligations from a distribution agreement is an hour of work nobody schedules. This is the reason registers stay empty.
- The typed outputs feed reporting.
contract_value,key_dates[]andgoverning_lawcome back as data, so a portfolio question — total committed value, everything governed by Singapore law — becomes answerable. - Empty is honest. Because it never guesses, an empty
governing_lawtells you the document genuinely does not state one. That is a finding.
3. What you provide
Nothing. Extraction is a one-press capability with no parameters.
| Input | Required | Notes |
|---|---|---|
| — | — | No parameters. It works on the open document |
The register is a record. An early draft yields sparse terms and half-formed obligations, and because extracted obligations cannot be deleted (§7), a premature run leaves clutter you can only cancel. Fill the fields and settle the clauses first.
4. What it reads automatically
| Read from the document | Used for |
|---|---|
| Document text — the full rendered body | Everything |
| Title & family — e.g. "Distribution Agreement" | Frames what kind of obligations to expect |
| Parties — everyone named | Populates parties[] and the who of each obligation |
| Key field values — filled schema fields | Amounts and dates, so extraction agrees with the form |
5. What you get back
| Field | Type | Values | Means |
|---|---|---|---|
parties[] | string[] | — | Every party named, as Name (role) |
contract_value.amount | number | 0 if none stated | The primary monetary value |
contract_value.currency | string | ISO code, or the symbol as written | The currency, as the document expresses it |
key_dates[] | array | — | Every material date |
key_dates[].label | string | — | What the date is. A relative period with no fixed date stays verbatim here |
key_dates[].date | string | YYYY-MM-DD | The absolute date, when there is one |
governing_law | string | empty if none | The governing law or jurisdiction, as stated |
renewal_terms | string | empty if none | How the document renews or extends, in a sentence or two |
obligations[] | array | — | Every concrete commitment — also written to the register |
obligations[].who | string | — | The party who owes it |
obligations[].what | string | — | The commitment, in the document's own terms |
obligations[].due_date | string | empty when no absolute date | When it falls due |
obligations[].obligation_type | enum | payment, deliverable, renewal, expiry, milestone, notice | Which kind of commitment it is |
Note the key_dates[].label rule: "thirty days after commencement" has no calendar date, so it
survives in the label rather than being invented as a date. Search the labels, not only the dates,
when you are looking for a deadline.
6. Worked example
A commercial manager finalises a distribution agreement and presses Extract key terms.
Input: none.
One entry from the obligations[] returned — and now in the register:
who: "Buyer (Gatiro Retail Pvt Ltd)" what: "Pay the 30% advance against the pro-forma invoice" due_date:
2026-08-15obligation_type:payment
Alongside it the same run returned contract_value: { amount: 4200000, currency: "INR" },
governing_law: "Laws of India, courts at Bengaluru", and four more obligations — two
deliverable, one notice, one renewal.
What the manager does next. The register now holds five items where it held none. They open it
and correct two things the AI could not know: the payment obligation is reassigned from the party
name to the named accounts-payable owner, and the notice obligation's due date is left empty
because the document expresses it relative to termination. Both edits take a minute; typing the five
items from scratch would not have happened at all.
7. Running it, and what it leaves behind
- Open the document in Orbit Papers.
- Open the AI Assistant drawer, or go to the document's AI workspace.
- Choose Extract key terms under Understand.
- The structured terms appear in a result tab; the obligations are added to the register.
Re-running is safe, and deliberately conservative. An obligation is inserted only if no
ai_extracted obligation with the same description already exists on that document. So a second run
adds what is new and leaves the rest alone — it will not duplicate the register, and it will not
overwrite the owner or date you corrected by hand.
Extracted obligations cannot be deleted. They can be cancelled — marked no longer applicable — but they stay in the register, because the register is a record of what the document committed to and silently erasing that would make it dishonest. This is why running extraction on a draft is a decision rather than a free action.
Always review the owner and the due date after a run. The AI can only capture what the text spells out; who inside your organisation is actually responsible is not in the document.
Extraction can also be set to run automatically on submit, round or finalize from the type's
AI Config tab — see AI configuration. Given that it writes to the
register, on_finalize is the sensible choice.
8. The admin contract
| Must be true | Where | What happens if it is not |
|---|---|---|
| Your role holds Use AI drafting/extraction/Q&A for documents. | Role editor | The AI Assistant button does not appear |
The papers_term_extractor utility is active | Orbit AI Flow → utilities | "This utility is currently disabled" |
| The utility is enabled for your organisation | /org/ai-utilities | Absent from Understand, with no error |
papers.ai_monthly_credit_cap not yet reached | System Config | "monthly AI credit cap reached: n of n credits used this month" |
| The Obligations surface is enabled | Papers module settings | Extraction still succeeds and still writes rows — but nobody can see or work them |
For a confidential document, auto-run is default-denied — a platform administrator must set
papers.ai_confidential_cloud to the literal allow, and the block shows only in the server log. A
manual press still works, and where a local model key is configured the run is forced on-prem and
audited on the timeline as ai_local_routed.
9. Don't confuse this with…
| Summarize | Prose for a reader. This is data for a system |
| Smart fields | Fills the fields your admin defined. This returns a fixed shape |
| Obligation register | Where the obligations land. This is what puts them there |
| Zonal extraction | Reads values from fixed positions on a scanned page. This reads meaning from prose |
10. Troubleshooting
| Symptom | Cause |
|---|---|
| The register filled with items I did not want | Extraction was run on a draft. They can be cancelled, not deleted (§7) |
| A re-run did not add an obligation I expected | An ai_extracted obligation with the same description already exists on the document — dedupe by description |
| My hand-edited owner was overwritten | It was not. Re-runs never touch an existing row; check you are looking at a second, differently-worded obligation |
governing_law is empty | The document does not state one. That is the finding |
A deadline has no due_date | It is expressed relatively — look in key_dates[].label, where the phrasing is kept verbatim |
contract_value.amount is 0 | No monetary value is stated. Common for NDAs and framework agreements |
| The capability is missing from Understand | Role lacks Use AI drafting/extraction/Q&A for documents., or the utility is off for the organisation (§8). The document type does not gate it — AI Config controls auto-run only |