Skip to main content
Contracts are denser than invoices. A header (parties, effective date, term) plus a clause list with stable categories that downstream review tooling can filter on.
The Literal on category is what makes the output usable. Downstream review queues filter by category, so the categories must be a closed set. Free-text categories are unfilterable.

Review queues by clause type

Once clauses carry a category, route them by team. Indemnification and limitation-of-liability go to legal; payment and term go to finance.
The agent does the extraction. The routing is plain Python, against a typed object. The split is auditable because each clause keeps its verbatim text and page.

Diff against a template

For contract review, the question is often “what changed from our standard?” Extract both the incoming contract and your template into the same Contract schema, then diff by category.
For a richer comparison, hand both contracts to a reviewer agent with output_schema set to a ClauseDelta model and let the model summarize the differences.

Long contracts and chunking

OpenAIResponses(id="gpt-5.5") handles contract-length PDFs in a single call. For documents over the model’s context, split by section in your own code and run the agent per chunk. The schema is the same; you concatenate the clauses lists at the end.

Next steps

Developer Resources