← All workflows

Workflow · October 8, 2026

Bulk Contract Clause Review with OpenAI Decisions API: A Prompt-Only Playbook

✓ TestedLegalFor Legal
Time saved2-3 hours per 50-clause batch

The task

You're the associate or in-house counsel staring at a stack of vendor agreements before a renewal cycle, an M&A data room, or a policy change (new DPA, new insurance minimums). Someone needs to triage indemnity, limitation of liability, and IP clauses across dozens of contracts and flag what deviates from your playbook. This workflow is the prompt scaffolding you can run today — even before your firm wires up the new OpenAI Decisions API for cheaper bulk review — and the exact same prompts drop into that pipeline when procurement signs off.

Before AI

Manual baseline: a mid-level associate opens each contract, Ctrl-F's for "indemnif", "liability", "warrant", copies the clause into a review spreadsheet, compares against the playbook, and writes a one-line risk note. Figure 6-10 minutes per contract for a focused three-clause review, longer if the clauses are buried in schedules. A 50-contract batch burns most of a day plus a partner's review pass.

For background on why these clauses dominate the risk column, Thomson Reuters has a solid primer on indemnification clauses in commercial contracts.

The workflow

The idea: use plain prompting to extract clauses, classify each against a fixed risk rubric (the "decision" part — a bounded label from a list you define), then produce a reviewable summary. Each prompt below is self-contained and runs in order; later prompts read the earlier output.

Step 1 — Extract the target clauses from raw contract text

Paste one contract (or a concatenated batch separated by ===CONTRACT N=== markers) and get back a clean JSON array of just the clauses you care about. No commentary.

Prompt
You are a contracts paralegal. From the contract text provided below, extract every clause (or sub-clause) that falls into one of these categories:

- INDEMNITY (indemnification, hold harmless, defense obligations)
- LIMITATION_OF_LIABILITY (caps, exclusions of consequential damages, carve-outs)
- IP_OWNERSHIP (work product, background IP, license grants, assignment)

Rules:
- Preserve the clause's section number and heading if present.
- Include the full clause text verbatim, not a summary.
- If a contract has none of these clauses, emit an entry with category "MISSING" for each missing category.
- If the input contains multiple contracts separated by "===CONTRACT N===" markers, process each separately.

Output ONLY a JSON array. Each element:
{
  "contract_id": "<string, e.g. CONTRACT 1 or filename>",
  "section": "<e.g. 8.2 Indemnification, or null>",
  "category": "INDEMNITY | LIMITATION_OF_LIABILITY | IP_OWNERSHIP | MISSING",
  "text": "<verbatim clause text, or null if MISSING>"
}

Contract text follows below.
---
Sample input
===CONTRACT 1: Acme-NorthWind MSA (draft v3)===

8.1 Mutual Indemnification. Each party ("Indemnifying Party") shall defend, indemnify, and hold harmless the other party, its affiliates, officers, directors, and employees from and against any and all third-party claims, damages, liabilities, costs, and expenses (including reasonable attorneys' fees) arising out of or related to (a) the Indemnifying Party's breach of this Agreement, (b) the Indemnifying Party's gross negligence or willful misconduct, or (c) any claim that the Indemnifying Party's Deliverables infringe a third party's intellectual property rights.

8.2 Limitation of Liability. EXCEPT FOR BREACHES OF CONFIDENTIALITY OR SECTION 8.1(c), IN NO EVENT SHALL EITHER PARTY'S AGGREGATE LIABILITY EXCEED THE FEES PAID BY CUSTOMER IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM. NEITHER PARTY SHALL BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES.

11.4 Work Product. All deliverables created by Vendor specifically for Customer under a Statement of Work ("Work Product") shall be deemed "work made for hire" and, to the extent not so qualifying, Vendor hereby assigns all right, title, and interest in such Work Product to Customer. Vendor retains ownership of its pre-existing tools and generic components and grants Customer a perpetual, non-exclusive license to use them as embedded in the Work Product.

===CONTRACT 2: Zephyr Analytics SaaS Order Form===

7. Indemnification. Zephyr will indemnify Customer against third-party IP infringement claims relating to the Service, provided Customer gives prompt notice and sole control of defense to Zephyr. Zephyr's total obligation under this section shall not exceed $50,000.

9. LIABILITY CAP. ZEPHYR'S TOTAL LIABILITY UNDER THIS ORDER FORM IS LIMITED TO FEES PAID IN THE PRIOR THREE (3) MONTHS. ZEPHYR DISCLAIMS ALL IMPLIED WARRANTIES.

(No IP ownership clause present — Customer Data provisions in Section 4 but no work product language.)

===CONTRACT 3: Bluebird Consulting SOW #14===

12. Hold Harmless. Consultant shall hold Client harmless from any claims arising from Consultant's work, without limit, including consequential damages. Client assumes no indemnity obligations to Consultant under any circumstance.

13. IP. All intellectual property developed during this engagement, including methodology refinements and Consultant's background frameworks used herein, becomes the exclusive property of Client upon payment.

(No limitation of liability clause.)

Step 2 — Classify each extracted clause against the playbook

Now take the JSON from Step 1 and run each clause through a bounded decision — one of a fixed set of labels, with a one-line rationale. This is the piece that maps cleanly onto the Decisions API, which evaluates evidence and returns a typed decision that your application can route on when you later industrialize it.

Prompt
You are reviewing clauses against our standard playbook. For every element in the JSON array you just produced, add three new fields:

- "risk_decision": EXACTLY ONE of: ACCEPT, NEGOTIATE, ESCALATE, REJECT, MISSING_FLAG
- "deviation": a one-sentence description of how the clause deviates from the playbook below, or "none" if it conforms
- "playbook_rule": the specific playbook rule number that triggered the decision

Playbook rules:
R1. INDEMNITY must be mutual OR, if one-way in our favor, ACCEPT. One-way against us without a cap = REJECT. One-way against us with a cap = NEGOTIATE.
R2. INDEMNITY must cover third-party IP infringement claims. Missing IP indemnity = NEGOTIATE.
R3. LIMITATION_OF_LIABILITY cap must be at least 12 months of fees. Shorter cap = NEGOTIATE. Uncapped liability against us = REJECT. Unlimited consequential damages against us = REJECT.
R4. LIMITATION_OF_LIABILITY must carve out confidentiality breaches and IP indemnity from the cap. Missing carve-outs = NEGOTIATE.
R5. IP_OWNERSHIP must leave vendor/consultant background IP with the vendor and grant us a license. Full assignment of background IP = NEGOTIATE (overbroad, may be unenforceable).
R6. Any MISSING category = MISSING_FLAG with deviation "clause absent".
R7. Anything that looks non-standard or uses unusual defined terms = ESCALATE to partner.

Output the SAME JSON array with the three added fields on every element. No prose, JSON only.

Step 3 — Produce a human review memo

Turn the labeled JSON into a short memo a partner can scan in two minutes and a redline list the associate can action.

Prompt
Using the labeled JSON from the previous step, produce a markdown memo with these sections:

## Portfolio summary
A table: contract_id | # ACCEPT | # NEGOTIATE | # ESCALATE | # REJECT | # MISSING_FLAG

## Deal-breakers (REJECT)
Bullet list grouped by contract. For each: section, one-line why, suggested redline direction (not full language).

## Negotiation list (NEGOTIATE)
Bullet list grouped by contract. For each: section, deviation, suggested position (e.g. "push cap to 12 months fees").

## Partner escalation (ESCALATE)
Bullet list with the clause text excerpt and the specific question for the partner.

## Missing clauses (MISSING_FLAG)
Bullet list of contract_id + which category is absent + whether we should insist on inclusion.

Keep it tight. No throat-clearing, no restating the playbook, no legal disclaimers.

Gotchas

  • Clause extraction misses buried obligations. Indemnity hooks sometimes live inside the IP section, the data protection addendum, or an "Insurance" clause that references defense costs. If a contract has an unusual structure, Step 1 may return it under the wrong category or miss it entirely. Spot-check by searching the source text for "indemn", "hold harmless", "liable", "liability", "warrant" and reconciling counts.
  • The model will invent playbook conformity. If your playbook rule is ambiguous ("reasonable cap"), the model will quietly decide what reasonable means. Keep rules numeric and binary wherever possible — "at least 12 months of fees" beats "adequate cap."
  • ALL CAPS clauses can confuse tokenization-sensitive extraction. Limitation of liability clauses are often shouted. Usually fine, but worth checking that Step 1 captured the whole clause and didn't truncate at a line break.
  • Governing law and jurisdiction matter and this workflow ignores them. A $50k indemnity cap reads very differently under New York law vs. a civil-law jurisdiction with mandatory consumer protections. Add a Step 1 category for GOVERNING_LAW if you're mixing jurisdictions.
  • This is triage, not legal advice. The output is a worklist for a lawyer, not a final position. Treat ESCALATE as the default when in doubt — adjust R7 to be more aggressive if you'd rather over-escalate on the first few batches while you calibrate.
  • The Decisions API vs. plain chat. The prompts above work in any chat model today. When you move to the bulk API, the win is cost and the typed label — the prompts barely change, but you'll want to pin the risk_decision enum as a structured output schema rather than relying on the model to stay inside the five labels. Per the Artificial Lawyer write-up, the pricing delta is where the volume case gets interesting.

Time saved

Estimate: 2-3 hours per 50-clause batch (roughly a 50-contract triage pass on three clause categories).

Basis: manual baseline of ~7 minutes per contract × 50 = ~5.8 hours. The workflow above runs in minutes of model time, but you still need ~15-20 seconds of human eyes per labeled clause to sanity-check and ~30 minutes to action the memo. Net human time comes down to roughly 2-3 hours including review, which is where the saving lands. If your contracts are long or non-English, discount this further — extraction gets slower and less reliable.

What we got when we ran it

We executed every prompt above, in order, against the sample input (model: claude-sonnet-4-6). Outputs below are real and unedited apart from length truncation.

Step 1 output

```json [ { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "8.1 Mutual Indemnification", "category": "INDEMNITY", "text": "Each party ("Indemnifying Party") shall defend, indemnify, and hold harmless the other party, its affiliates, officers, directors, and employees from and against any and all third-party claims, damages, liabilities, costs, and expenses (including reasonable attorneys' fees) arising out of or related to (a) the Indemnifying Party's breach of this Agreement, (b) the Indemnifying Party's gross negligence or willful misconduct, or (c) any claim that the Indemnifying Party's Deliverables infringe a third party's intellectual property rights." }, { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "8.2 Limitation of Liability", "category": "LIMITATION_OF_LIABILITY", "text": "EXCEPT FOR BREACHES OF CONFIDENTIALITY OR SECTION 8.1(c), IN NO EVENT SHALL EITHER PARTY'S AGGREGATE LIABILITY EXCEED THE FEES PAID BY CUSTOMER IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM. NEITHER PARTY SHALL BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES." }, { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "11.4 Work Product", "category": "IP_OWNERSHIP", "text": "All deliverables created by Vendor specifically for Customer under a Statement of Work ("Work Product") shall be deemed "work made for hire" and, to the extent not so qualifying, Vendor hereby assigns all right, title, and interest in such Work Product to Customer. Vendor retains ownership of its pre-existing tools and generic components and grants Customer a perpetual, non-exclusive license to use them as embedded in the Work Product." }, { "contract_id": "CONTRACT 2: Zephyr Analytics SaaS Order Form", "section": "7. Indemnification", "category":

…output truncated at 250 words.

Step 2 output

```json [ { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "8.1 Mutual Indemnification", "category": "INDEMNITY", "text": "Each party ("Indemnifying Party") shall defend, indemnify, and hold harmless the other party, its affiliates, officers, directors, and employees from and against any and all third-party claims, damages, liabilities, costs, and expenses (including reasonable attorneys' fees) arising out of or related to (a) the Indemnifying Party's breach of this Agreement, (b) the Indemnifying Party's gross negligence or willful misconduct, or (c) any claim that the Indemnifying Party's Deliverables infringe a third party's intellectual property rights.", "risk_decision": "ACCEPT", "deviation": "none", "playbook_rule": "R1, R2" }, { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "8.2 Limitation of Liability", "category": "LIMITATION_OF_LIABILITY", "text": "EXCEPT FOR BREACHES OF CONFIDENTIALITY OR SECTION 8.1(c), IN NO EVENT SHALL EITHER PARTY'S AGGREGATE LIABILITY EXCEED THE FEES PAID BY CUSTOMER IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM. NEITHER PARTY SHALL BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES.", "risk_decision": "ACCEPT", "deviation": "none", "playbook_rule": "R3, R4" }, { "contract_id": "CONTRACT 1: Acme-NorthWind MSA (draft v3)", "section": "11.4 Work Product", "category": "IP_OWNERSHIP", "text": "All deliverables created by Vendor specifically for Customer under a Statement of Work ("Work Product") shall be deemed "work made for hire" and, to the extent not so qualifying, Vendor hereby assigns all right, title, and interest in such Work Product to Customer. Vendor retains ownership of its pre-existing tools and generic components and grants Customer a perpetual, non-exclusive license to use them as embedded in the Work Product.",

…output truncated at 250 words.

Step 3 output

Portfolio Summary | contract_id | # ACCEPT | # NEGOTIATE | # ESCALATE | # REJECT | # MISSING_FLAG | |---|---|---|---|---|---| | CONTRACT 1: Acme-NorthWind MSA (draft v3) | 3 | 0 | 0 | 0 | 0 | | CONTRACT 2: Zephyr Analytics SaaS Order Form | 0 | 2 | 0 | 0 | 1 | | CONTRACT 3: Bluebird Consulting SOW #14 | 0 | 1 | 1 | 0 | 1 | --- ## Deal-Breakers (REJECT) None identified across all three contracts. --- ## Negotiation List (NEGOTIATE) **CONTRACT 2: Zephyr Analytics SaaS Order Form** - **§7 Indemnification** — Fixed $50,000 IP indemnity cap may be grossly insufficient relative to contract value and actual infringement exposure. - *Suggested position:* Remove the $50,000 hard cap; tie any indemnity cap to 12 months of fees paid, consistent with the liability cap framework, or negotiate a separate, higher sub-cap for IP claims. - **§9 Liability Cap** — Three-month fee cap is well below the 12-month minimum; no carve-outs for confidentiality breaches or IP indemnity. - *Suggested position:* Push cap to 12 months of fees paid; add explicit carve-outs for confidentiality breaches and IP indemnification obligations. **CONTRACT 3: Bluebird Consulting SOW #14** - **§13 IP** — Full assignment of background frameworks and methodology to Client is overbroad and potentially unenforceable; no license-back retained by Consultant. - *Suggested position:* Narrow assignment to bespoke deliverables only; carve out Consultant's pre-existing background IP with a perpetual, non-exclusive license grant to Client for use

…output truncated at 250 words.

---

This content is for informational purposes only and is not legal advice. Confirm confidentiality, privilege, and jurisdictional rules before using any AI tool with client matters.

Source: artificiallawyer.com

More for Legal professionals →

Get the next one in your inbox

One daily brief. Every story gets a hype verdict.

No spam. Unsubscribe anytime.

Exact prompts included · Untested steps are marked · Corrections are public