Vaquill AI · Schema

ReviewCreateRequest

Start a review of one contract against one playbook. `contractType` and `userSide` are the internal enums by REFERENCE rather than by copy. They are the taxonomy the whole product is built on, guarded in both directions by `app/tests/unit/test_contract_type_taxonomy.py`, and a second hand-maintained copy here would be a fourth layer for that guard to police. Widening the taxonomy widens this API additively, which is correct.

LegalStatutesRegulationsLegal ResearchLawComplianceLegal TechnologyGovernment DataMCPIndiaContracts

Properties

Name Type Description
documentText string The full contract text to review, 100 to 200,000 characters. Text rather than a document id: a review reads one contract end to end and the caller usually has it in hand.
contractType object What kind of contract this is. Determines which playbook and which default positions resolve.
userSide object Which side of the deal you are on. The review argues for this side.
playbookId object `pbk_` identifier of the playbook to review against. Omit to run against the built-in default positions for `jurisdiction`, which is a real answer rather than a degraded one.
jurisdiction string Two-letter uppercase jurisdiction code, or `INTL`. Selects the default positions when no playbook is named.
focusAreas object Narrow the review to these areas of concern. Omit to review the whole contract.
reviewInstructions object Extra instructions for this review only, layered on top of the playbook.
markupLevel string How aggressively to mark up. `light` flags only escalation triggers, `standard` marks up gaps to the preferred position, `firm` hard-lines every deviation.
paperSide object Whose paper this is. `own` defends your drafted positions; `counterparty` marks up their form assertively. Orthogonal to `userSide`. Omit if unknown, which costs only prompt specificity.
round integer Negotiation round. 2 and above tells the reviewer the counterparty has already responded, so it proposes minimal edits toward the fallback rather than restating the preferred position.
priorRoundText object Your last sent version, at round 2 and above, so the reviewer can compute a real diff instead of guessing what changed and undoing settled language.
counterpartyResponseText object The counterparty's response, when it differs from `documentText`. Most callers paste the response straight into `documentText`, in which case leave this out.
dealContext object Deal attributes the playbook's conditional escalation rules evaluate.
depth string `standard` runs the first-pass review. `deep` additionally re-drafts every flagged clause with the deep model, grounds each quote against the contract, drops first-pass false positives and stamps a si
View JSON Schema on GitHub

JSON Schema

vaquill-ai-review-create-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/vaquill-ai/main/json-schema/vaquill-ai-review-create-request-schema.json",
  "title": "ReviewCreateRequest",
  "description": "Start a review of one contract against one playbook.\n\n`contractType` and `userSide` are the internal enums by REFERENCE rather than\nby copy. They are the taxonomy the whole product is built on, guarded in both\ndirections by `app/tests/unit/test_contract_type_taxonomy.py`, and a second\nhand-maintained copy here would be a fourth layer for that guard to police.\nWidening the taxonomy widens this API additively, which is correct.",
  "x-generated": "2026-10-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/vaquill-ai-workspace-openapi.yml#/components/schemas/ReviewCreateRequest",
  "properties": {
    "documentText": {
      "type": "string",
      "maxLength": 200000,
      "minLength": 100,
      "title": "Documenttext",
      "description": "The full contract text to review, 100 to 200,000 characters. Text rather than a document id: a review reads one contract end to end and the caller usually has it in hand."
    },
    "contractType": {
      "$ref": "#/$defs/ContractType",
      "description": "What kind of contract this is. Determines which playbook and which default positions resolve."
    },
    "userSide": {
      "$ref": "#/$defs/UserSide",
      "description": "Which side of the deal you are on. The review argues for this side."
    },
    "playbookId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Playbookid",
      "description": "`pbk_` identifier of the playbook to review against. Omit to run against the built-in default positions for `jurisdiction`, which is a real answer rather than a degraded one."
    },
    "jurisdiction": {
      "type": "string",
      "pattern": "^([A-Z]{2}|INTL)$",
      "title": "Jurisdiction",
      "description": "Two-letter uppercase jurisdiction code, or `INTL`. Selects the default positions when no playbook is named.",
      "default": "US"
    },
    "focusAreas": {
      "anyOf": [
        {
          "items": {
            "type": "string",
            "maxLength": 80,
            "minLength": 1
          },
          "type": "array",
          "maxItems": 50
        },
        {
          "type": "null"
        }
      ],
      "title": "Focusareas",
      "description": "Narrow the review to these areas of concern. Omit to review the whole contract."
    },
    "reviewInstructions": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ],
      "title": "Reviewinstructions",
      "description": "Extra instructions for this review only, layered on top of the playbook."
    },
    "markupLevel": {
      "type": "string",
      "enum": [
        "light",
        "standard",
        "firm"
      ],
      "title": "Markuplevel",
      "description": "How aggressively to mark up. `light` flags only escalation triggers, `standard` marks up gaps to the preferred position, `firm` hard-lines every deviation.",
      "default": "standard"
    },
    "paperSide": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "own",
            "counterparty"
          ]
        },
        {
          "type": "null"
        }
      ],
      "title": "Paperside",
      "description": "Whose paper this is. `own` defends your drafted positions; `counterparty` marks up their form assertively. Orthogonal to `userSide`. Omit if unknown, which costs only prompt specificity."
    },
    "round": {
      "type": "integer",
      "maximum": 10.0,
      "minimum": 1.0,
      "title": "Round",
      "description": "Negotiation round. 2 and above tells the reviewer the counterparty has already responded, so it proposes minimal edits toward the fallback rather than restating the preferred position.",
      "default": 1
    },
    "priorRoundText": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200000
        },
        {
          "type": "null"
        }
      ],
      "title": "Priorroundtext",
      "description": "Your last sent version, at round 2 and above, so the reviewer can compute a real diff instead of guessing what changed and undoing settled language."
    },
    "counterpartyResponseText": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200000
        },
        {
          "type": "null"
        }
      ],
      "title": "Counterpartyresponsetext",
      "description": "The counterparty's response, when it differs from `documentText`. Most callers paste the response straight into `documentText`, in which case leave this out."
    },
    "dealContext": {
      "anyOf": [
        {
          "$ref": "#/$defs/ReviewDealContext"
        },
        {
          "type": "null"
        }
      ],
      "description": "Deal attributes the playbook's conditional escalation rules evaluate."
    },
    "depth": {
      "type": "string",
      "enum": [
        "standard",
        "deep"
      ],
      "title": "Depth",
      "description": "`standard` runs the first-pass review. `deep` additionally re-drafts every flagged clause with the deep model, grounds each quote against the contract, drops first-pass false positives and stamps a sign-off level, so each redline's `grounding` is a fact rather than a default. It takes several times as long and verifies at most 40 flagged clauses. `focusAreas`, `reviewInstructions`, `markupLevel`, `round`, `priorRoundText` and `counterpartyResponseText` are not supported at this depth and are refused rather than ignored.",
      "default": "standard"
    }
  },
  "additionalProperties": false,
  "type": "object",
  "required": [
    "documentText",
    "contractType",
    "userSide"
  ],
  "$defs": {
    "ContractType": {
      "type": "string",
      "enum": [
        "saas",
        "professional_services",
        "msa",
        "sow",
        "consulting",
        "license",
        "sale",
        "partnership",
        "procurement",
        "vendor_agreement",
        "reseller_distribution",
        "supply",
        "lease",
        "loan",
        "eula",
        "terms_of_service",
        "baa",
        "order_form",
        "nda",
        "dpa",
        "ip_assignment",
        "employment",
        "executive_employment",
        "independent_contractor",
        "offer_letter",
        "severance_agreement",
        "non_compete",
        "asset_purchase",
        "stock_purchase",
        "merger_agreement",
        "shareholders_agreement",
        "operating_agreement",
        "safe",
        "term_sheet",
        "settlement_agreement",
        "engagement_letter",
        "protective_order",
        "joint_defense",
        "other"
      ],
      "title": "ContractType",
      "description": "Contract types a playbook can encode negotiation positions for.\n\nA playbook is a set of clause-level negotiation positions, so this list\ncovers contracts you negotiate clause-by-clause. Documents you only\n*generate* (litigation pleadings, notices) live in `DraftCategory`\n(`app/models/drafting_schemas.py`), NOT here.\n\nEach value backs a `legal_playbooks.contract_type` row, so adding one\nrequires a DB migration to extend the CHECK constraint (see\n`20260502160000_expand_playbook_contract_type_dpa_vendor_ip.sql`,\n`20260612130000_expand_playbook_contract_type_msa_sale_sow_consulting.sql`,\nand `20260702120000_expand_playbook_contract_type_gc_litigation.sql`).\nKept in sync with the FE `ContractType` union + `CONTRACT_TYPE_LABELS`\n(`frontend/src/types/legal-tools.ts`); the drift-guard in\n`app/tests/unit/test_contract_type_taxonomy.py` asserts all three layers\nboth ways and fails fast if they diverge."
    },
    "ReviewDealContext": {
      "properties": {
        "contractValue": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0.0
            },
            {
              "type": "null"
            }
          ],
          "title": "Contractvalue",
          "description": "Total deal value, used by playbook escalation rules that key on it. Omit if unknown: a rule referencing a value you did not supply simply does not fire, which is the fail-safe direction."
        },
        "governingLaw": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ],
          "title": "Governinglaw",
          "description": "Governing law of the deal, used by playbook escalation rules that key on it."
        }
      },
      "additionalProperties": false,
      "type": "object",
      "title": "ReviewDealContext",
      "description": "Deal attributes the playbook's conditional escalation rules evaluate.\n\nEverything is optional and stays optional. A rule referencing an attribute\nthe caller did not supply simply does not fire, which is the fail-safe\ndirection: a missing contract value must not escalate a clause to GC on the\nstrength of a number nobody provided."
    },
    "UserSide": {
      "type": "string",
      "enum": [
        "vendor",
        "customer",
        "licensor",
        "licensee",
        "partner",
        "supplier",
        "reseller",
        "employer",
        "employee",
        "buyer",
        "seller",
        "company",
        "investor",
        "lender",
        "borrower",
        "disclosing_party",
        "receiving_party",
        "plaintiff",
        "defendant",
        "other"
      ],
      "title": "UserSide",
      "description": "Which side the reviewer represents.\n\nKept in sync with the FE `UserSide` union + `USER_SIDE_LABELS`\n(`frontend/src/types/legal-tools.ts`) by the drift-guard in\n`app/tests/unit/test_contract_type_taxonomy.py`. Request-only enum (no DB\nCHECK), so widening it needs no migration; that guard also fails if a\n`user_side` CHECK ever appears, because this sentence would then be wrong."
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/vaquill-ai-review-create-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.