openapi: 3.0.3 info: title: SpotDraft V1 Contract APIs V2.1 Contract APIs API version: v1 x-version: v1 x-logo: url: https://cdn.spotdraft.com/assets/logo-black-new.png backgroundColor: transparent altText: SpotDraft Logo href: https://spotdraft.com x-favicon: https://cdn.spotdraft.com/assets/favicon.png x-footer: © SpotDraft Inc. All rights reserved. description: "# SpotDraft Public API\n\nWelcome to the **SpotDraft Public API**. Use this documentation to authenticate requests, choose the right product workflow, and move from guide content into the endpoint-level API reference.\n\n## Start here\n\nIf you are new to the API, use this sequence:\n\n1. Confirm your **regional base URL / cluster** and authentication headers.\n2. Start with one workflow: Embedded signing, Clickthrough, contract operations, or webhook ingestion.\n3. Use the **API Reference** section for endpoint schemas, request examples, and version-specific details.\n4. Verify redirects, authentication, errors, and webhook validation before going live.\n\n## Quick navigation\n\n| I want to... | Start here |\n| --------------------------------------------------- | ------------------------------------------------------------------------------------ |\n| Authenticate requests and choose the right hostname | [Authentication](/api/docs#description/authentication) |\n| Subscribe to lifecycle events | [Webhooks](/api/docs#description/webhooks) |\n| Understand error behavior and retry logic | [Errors](/api/docs#description/errors) |\n| Embed signing inside my product | [Embedded Contract API](/api/docs#description/embedded-contract-api) |\n| Add pre-acceptance flows with the SDK | [Clickthrough SDK](/api/docs#description/clickthrough-sdk) |\n| Explore the analytics SQL catalog | [Analytics Query Table Catalog](/api/docs#description/analytics-query-table-catalog) |\n| Explore endpoint-level details | [API Reference](/api/docs#tag/v21-contract-apis) |\n\n## Versioning and conventions\n\n- SpotDraft uses **versioning in the path**.\n- Versioning is **scoped to each API family**, not to the full public API surface.\n- Different families currently expose different path versions, including `v1`, `v2`, and `v2.1`.\n- The version in the request path is the contract for that endpoint. Do not infer version availability across unrelated API families.\n- A family can expose only one documented version, even if other families expose newer-looking path versions.\n- Documentation links, tags, and operation references should match the exact versioned path shown in the schema for that endpoint.\n- Composite ids such as `T-123` or `H-123` are identifiers, not plain integers. Send them exactly as documented.\n- Datetimes are returned in ISO 8601 UTC form such as `2025-06-07T00:00:00Z`.\n- Optional fields may be omitted or returned as `null`. Rely on field names and descriptions instead of assuming presence.\n- Pagination uses `page` and `limit`. Version-specific list endpoints document any additional filters or sorting options.\n\n## Base URL and regions\n\nPick the cluster that matches where your SpotDraft workspace is provisioned. The API reference server picker exposes the same four options.\n\n| Region | Domain |\n| ------------------- | ----------------------------------- |\n| IN (India) | `https://api.in.spotdraft.com/api/` |\n| US (United States) | `https://api.us.spotdraft.com/api/` |\n| ME (Middle East) | `https://api.me.spotdraft.com/api/` |\n| EU (European Union) | `https://api.eu.spotdraft.com/api/` |\n\nAlways use **`https://`**. Keep your API calls, webhook configuration, and embedded flows in the same regional cluster where the workspace is provisioned.\n\n## Redirects\n\nThe API commonly returns **`302 Found`** in two cases:\n\n1. **HTTP instead of HTTPS**\n2. **Trailing slash mismatch**\n\nSome HTTP clients do not preserve the original method on redirect. Disable automatic redirects while debugging so you can fix the real URL issue directly.\n\n---\n\n# Authentication\n\nAll API requests must include a **Client ID** in the HTTP headers.\n\n## Authentication quick reference\n\n| Scenario | Required headers |\n| -------- | ---------------- |\n| Server-to-server request | `client-id`, `client-secret` |\n| Act on behalf of a workspace user | `client-id`, `client-secret`, `user-email` |\n| OAuth JWT request | `Authorization: Bearer ` |\n| OAuth JWT request to a dual CLM bearer/OAuth endpoint | `Authorization: Bearer `, `X-SD-Auth-Type: oauth-jwt` |\n| Debugging auth failures | Confirm the workspace region, credential pair, and whether the impersonated user is active |\n\n## Requests as the application\n\nFor server-to-server access, send both **Client ID** and **Client Secret** in headers. SpotDraft audits these calls as the integration, not as a browser user session.\n\n### User impersonation\n\nYou may pass **`user-email`** with the email of a user to act on their behalf. That user must be an active member of the workspace tied to the credentials.\n\nTypical uses:\n\n- respecting per-user permissions\n- user-scoped list endpoints\n- audit attribution\n\nIf you omit **`user-email`**, the integration runs as the user linked to the API credentials.\n\nUse impersonation only when you want permission checks and audit attribution to resolve to a specific workspace user. Keep the credential pair and the selected user in the same workspace and region.\n\n## Header reference\n\n| Type | Header | Value |\n| ---- | ------ | ----- |\n| HEADER | `client-id` | string |\n| HEADER | `client-secret` | string |\n| HEADER | `user-email` | string (optional) |\n| HEADER | `Authorization` | `Bearer ` for OAuth JWT access |\n| HEADER | `X-SD-Auth-Type` | `oauth-jwt` when an endpoint explicitly supports both standard CLM bearer tokens and OAuth JWT bearer tokens |\n\n## OAuth JWT access\n\nOAuth-enabled routes accept a user-scoped OAuth JWT in the standard `Authorization` header:\n\n```http\nAuthorization: Bearer \n```\n\nSome internal routes support both standard CLM bearer tokens and OAuth JWT bearer tokens. For those dual-auth routes, callers must opt into OAuth JWT authentication explicitly:\n\n```http\nAuthorization: Bearer \nX-SD-Auth-Type: oauth-jwt\n```\n\nThis opt-in header prevents Django from treating an OAuth JWT string as a CLM bearer token before OAuth JWT authentication runs. Routes that only declare OAuth JWT authentication continue to use the standard bearer header without the opt-in header. Guide and guideline CRUD endpoints use the dual-auth pattern so existing CLM bearer-token clients continue to work while Sidebar and agent clients can call them with user-scoped OAuth JWTs.\n\n## Interactive auth in the API reference\n\nThe API reference exposes the supported auth mechanisms per endpoint:\n\n- `client-id` + `client-secret` for public API integrations\n- `Bearer ` for OAuth-enabled routes\n- `Bearer ` plus `X-SD-Auth-Type: oauth-jwt` for routes that explicitly support both standard CLM bearer tokens and OAuth JWT bearer tokens\n- clickthrough-specific headers on clickthrough browser endpoints\n\n`user-email` remains an optional request header for impersonation when the endpoint supports client-header authentication.\n\n## Creating credentials\n\nIn SpotDraft, open **Settings → Developer settings**, then **Generate API credential**. Copy the **Client ID** and **Client Secret** at creation time and store them in a secrets manager or password vault.\n\nIf requests fail unexpectedly, first confirm:\n\n- you are calling the correct regional cluster\n- the credential pair belongs to the same workspace\n- any impersonated `user-email` is active in that workspace\n\nReference: [Developer settings](https://help.spotdraft.com/articles/8632014145-developer-settings)\n\n---\n\n# Webhooks\n\nWebhooks notify **your server** when contract lifecycle events happen in SpotDraft. Register one or more **HTTPS endpoints** in **Settings → Developer settings → Webhooks**, choose the event types, and SpotDraft delivers an HTTP `POST` with a JSON payload.\n\nReturn a **`2xx`** response quickly. Queue slow work so timeouts do not count as failed deliveries.\n\n## Delivery requirements\n\n- **HTTPS** with a publicly trusted certificate\n- reliable endpoint behavior\n- support for multiple webhook URLs per account\n- event-type filtering so you only receive what you need\n- fast acknowledgement with asynchronous downstream processing\n\n## Verifying webhooks\n\nUse **`X-SD-WEBHOOK-CONTENT-HASH`** for verification. Validate the raw request body with **HMAC-SHA512** using the `hmac_key` returned by the HMAC key API.\n\n```python\nimport base64\nimport hashlib\nimport hmac\n\nsignature = hmac.new(\n base64.b64decode(sample_hmac_key),\n request.body,\n digestmod=hashlib.sha512,\n).hexdigest()\n\nassert signature == request.headers[\"X-SD-WEBHOOK-CONTENT-HASH\"]\n```\n\nCompare against the **raw** request body bytes before any JSON parsing or normalization.\n\n## Logs and troubleshooting\n\nDeveloper Settings also exposes webhook logs for operational debugging. Use them to:\n\n- search deliveries by contract id\n- inspect the request payload sent by SpotDraft\n- confirm delivery failures before retrying downstream processing\n\nWhen investigating failures, confirm that the destination URL belongs to the same cluster strategy you use for the rest of the integration and that your endpoint returns a `2xx` quickly.\n\n## Common activity types\n\n| `activity` value | When it fires |\n| ---------------- | ------------- |\n| `CONTRACT_CREATED` | A new contract is created |\n| `CONTRACT_SENT_TO_COUNTERPARTY` | Sent for counterparty review / redlining |\n| `CONTRACT_SIGNATURE_REQUESTED` | Marked for signature |\n| `CONTRACT_SIGNED` | Any required signatory completes signing |\n| `CONTRACT_EXECUTED` | All signatures are complete |\n| `CONTRACT_PROCESS_METRIC_UPDATED` | Workflow metrics change |\n\nUse the API reference for version-specific webhook endpoints and sample payload operations.\n\nReference: [Developer settings](https://help.spotdraft.com/articles/8632014145-developer-settings)\n\n---\n\n# Errors\n\nSpotDraft uses conventional HTTP status codes so clients can branch without parsing proprietary error enums first.\n\n## Error handling guidance\n\n- Treat the HTTP status code as the primary branch condition.\n- Parse the response body for fields such as `detail`, `message`, `code`, or field-level validation errors.\n- Preserve the original request URL and method in logs. Redirects and trailing-slash mismatches can otherwise look like unrelated auth or validation problems.\n\n## HTTP status summary\n\n| Code | Meaning |\n| ---- | ------- |\n| `200` | Success |\n| `400` | Invalid or incomplete input |\n| `401` | Credentials missing, expired, or not accepted |\n| `402` | Request failed due to business-rule or workflow state |\n| `403` | Authenticated, but not allowed |\n| `404` | Resource not found or not visible to the caller |\n| `409` | Conflict, duplicate, or version mismatch |\n| `429` | Rate limited |\n| `500`, `502`, `503`, `504` | SpotDraft or upstream infrastructure error |\n\n## Retry guidance\n\n- Retry `429` and `5xx` responses with exponential backoff.\n- Do **not** blindly retry `4xx` responses without fixing the request.\n- Disable automatic redirect following while debugging `302` responses so URL issues are visible.\n\n---\n\n# Embedded Contract API\n\nUse the Embedded Contract flow to create contracts through the Public API and render SpotDraft’s signing experience inside your product with an iframe.\n\n## High-level flow\n\n1. Create the contract with user-supplied data.\n2. Generate a short-lived embedded URL for the counterparty.\n3. Render the iframe.\n4. Listen for `postMessage` events to detect completion, decline, or error states.\n\n## Step 1 — Create a contract\n\nAuthenticate with your application credentials and call the **Create Contract** API using the data you collect in your product.\n\nUse a credential pair linked to the SpotDraft user who should:\n\n- receive notifications\n- appear as the business user when relevant\n- own the integration-level audit trail\n\n## Step 2 — Generate the embed URL\n\nUse the contract id returned by Create Contract together with the counterparty email to call the embedded URL endpoint. Treat the returned URL like a capability token: load it only for the intended user session and avoid logging it without redaction.\n\n## Step 3 — Render the iframe\n\nListen for `postMessage` events from the iframe and validate `event.origin` before trusting them.\n\n| Event | Message name | Payload |\n| ----- | ------------ | ------- |\n| Success | `spotdraft.embedded.sign_successful` | `{ contract_id }` |\n| Declined | `spotdraft.embedded.sign_declined` | `{ contract_id }` |\n| Signing error | `spotdraft.embedded.sign_error` | `{ contract_id, error: { code, upstream_error } }` |\n\n## Integration notes\n\n- Large agreements can take several seconds to render. Show a loader or skeleton state.\n- Keep API calls and embed URLs in the same region as the tenant.\n- Handle iframe close / completion without polling where possible.\n\n---\n\n# Clickthrough SDK\n\nThe **Clickthrough** JavaScript SDK lets you capture recorded acceptance of one or more agreements before a user continues with signup, checkout, or access to a gated feature.\n\n## Prerequisites\n\nBefore integrating, confirm the following in the SpotDraft Clickthrough console:\n\n- Clickthrough is enabled for the workspace\n- the relevant agreements are attached and published\n- your supported domains are allowlisted\n- production pages are served over HTTPS\n- you are using the snippet values for the same regional cluster as your workspace\n\n## Installation\n\n### NPM\n\n```bash\nnpm install @spotdraft/clickwrap-client\n```\n\n### CDN\n\n```html\n\n```\n\n## Initialization\n\n```typescript\nimport { SdClickthrough } from \"@spotdraft/clickwrap-client\";\n\nconst clickthrough = new SdClickthrough({\n clickwrapId: \"CLICKWRAP_ID_FROM_CONSOLE\",\n hostLocationDomId: \"HOST_ELEMENT_DOM_ID\",\n baseUrl: \"BASE_URL_FROM_CONSOLE\",\n});\n\nawait clickthrough.init();\n```\n\nUse the `clickwrapId` and `baseUrl` exactly as provided by the SpotDraft console snippet for that clickthrough.\nFor the latest SDK package details, installation metadata, and published package versions, use the npm package page for `@spotdraft/clickwrap-client`.\n\n## Submit payload\n\n`user_identifier` is the only required payload field for `submit(payload)`. It should uniquely identify the user in your product, such as their email address or mobile number.\n\n```typescript\nconst payload = {\n user_identifier: \"johndoe@example.com\",\n first_name: \"John\",\n last_name: \"Doe\",\n user_email: \"johndoe@example.com\",\n};\n```\n\n## Common methods\n\n| Method | Description |\n| ------ | ----------- |\n| `init()` | Mount embedded UI |\n| `isAccepted()` | Check whether required agreements are accepted |\n| `submit(payload)` | Record acceptance |\n| `openConsentDialog()` | Open modal mode |\n| `closeConsentDialog()` | Close modal mode |\n| `isReacceptanceRequired(id)` | Check whether a user must accept again |\n\n## Common events\n\n| Event | When it fires |\n| ----- | ------------- |\n| `acceptanceToggled` | Aggregate acceptance changed |\n| `acceptanceComplete` | All mandatory agreements are accepted |\n| `cancelClicked` | User dismisses the flow |\n| `sdClickthroughLoaded` | CDN SDK is ready |\n| `sdClickthroughLoadFailed` | CDN SDK failed to load |\n\n## Common setup issue\n\nIf the SDK returns **`Request received from invalid domain`**, the request origin is not allowlisted in Clickthrough settings. Add the full domain, including protocol such as `https://app.example.com`. `localhost` is typically allowlisted for local testing.\n\nUse the API reference for clickthrough endpoints and keep the product console’s **View snippet** output as the source of truth for tenant-specific ids and base URLs.\n\nReferences:\n\n- [@spotdraft/clickwrap-client on npm](https://www.npmjs.com/package/@spotdraft/clickwrap-client)\n- [How to Implement Clickthrough in Your Application](https://help.spotdraft.com/articles/3574375021-how-to-implement-clickthrough-in-your-application)\n- [How to Implement SpotDraft Clickthrough in Mobile Application](https://help.spotdraft.com/articles/9120222930-how-to-implement-spotdraft-clickthrough-in-mobile-application)\n\n---\n\n# Analytics Query Table Catalog\n\n**Dialect:** GoogleSQL (Google Standard SQL).\n\n---\n\n## Using this catalog\n\n| Topic | Behaviour |\n| --- | --- |\n| **Enablement** | The flag `PUBLIC_ANALYTICS_QUERY_API` must be enabled; otherwise the endpoint returns **501**. Contact SpotDraft support. |\n| **Endpoint** | [POST /api/v2.1/public/analytics/query/](#tag/v21-analytics-query/POST/api/v2.1/public/analytics/query/) |\n| **Column names** | Use **snake_case public** names (e.g. `execution_time`, `workflow_id`). |\n| **SQL** | Single `SELECT` (optional `WITH`, `UNION`). |\n| **Contract-scoped rows** | By default limited to contracts the user may access (server `user_access`). Optional `user_scoped` or `X-Spotdraft-Analytics-User-Scoped`; workspace-wide mode requires the workspace Admin role (see API overview). |\n\n---\n\n## Table contents\n\nJump to a table definition:\n\n- [`contracts`](#table-contracts)\n- [`users`](#table-users)\n- [`workflows_setup`](#table-workflows_setup)\n- [`approvals_setup`](#table-approvals_setup)\n- [`contract_types_setup`](#table-contract_types_setup)\n- [`counterparties_setup`](#table-counterparties_setup)\n- [`entities_setup`](#table-entities_setup)\n- [`signatures_setups`](#table-signatures_setups)\n- [`contract_lifecycle`](#table-contract_lifecycle)\n- [`contract_tat_details`](#table-contract_tat_details)\n- [`contract_sign`](#table-contract_sign)\n- [`contract_approvals`](#table-contract_approvals)\n- [`contracts_review`](#table-contracts_review)\n- [`signatories`](#table-signatories)\n- [`contract_level_metrics`](#table-contract_level_metrics)\n- [`contract_level_metrics_lc`](#table-contract_level_metrics_lc)\n- [`legal_intake`](#table-legal_intake)\n\n---\n\n## Dataset overview\n\n| Public table id | Description |\n| --- | --- |\n| `contracts` | Core fact table — one row per contract. Lifecycle timing, negotiation metrics, workflow linkage, counterparty name, entity name, and expiry. |\n| `users` | One row per user — activity, teams, licensing, and account flags. |\n| `workflows_setup` | Frozen (versioned) workflow configuration per workspace. |\n| `approvals_setup` | Approval steps configured within workflow versions. |\n| `contract_types_setup` | Contract type directory per workspace. |\n| `counterparties_setup` | Registered counterparties per workspace. |\n| `entities_setup` | Legal entities (customer signing companies) per workspace. |\n| `signatures_setups` | Signatory slots per workflow version. |\n| `contract_lifecycle` | Core contract register — one row per contract. Volume, status, type, expiry, counterparty, entity, workflow. |\n| `contract_tat_details` | Turnaround time per contract — one row per contract. Lifecycle stage timing, negotiation rounds, ownership. Time columns are in hours (FLOAT64). |\n| `contract_sign` | Signing-stage summary per contract — one row per contract. Signature SLA and pending-signature analysis. Time columns in hours where applicable. |\n| `contract_approvals` | Approval-step detail — one row per approval step per contract. Approval SLA and bottleneck analysis. Time columns in hours. |\n| `contracts_review` | Review-request detail — one row per review instance per contract. Legal workload and review SLA. Time columns in hours (FLOAT64). |\n| `signatories` | Individual signatory records — one row per signatory per contract. Per-signatory analytics. time_to_sign_hours is in hours (FLOAT64). |\n| `contract_level_metrics` | Event-level lifecycle tracking — multiple rows per contract. time_spent_seconds is in seconds (INT64); divide by 3600 for hours. |\n| `contract_level_metrics_lc` | Lifecycle-focused variant of contract_level_metrics — same structure without review_filter, approval_filter, sign_filter. time_spent_seconds in seconds. |\n| `legal_intake` | Legal intake requests — one row per intake item. Legal ops workload and intake SLA. |\n\nPhysical table names and cloud project or dataset identifiers are resolved server-side and are not part of this reference.\n\n---\n\n## `contracts`\n\n\n\nCore fact table — one row per contract. Lifecycle timing, negotiation metrics, workflow linkage, counterparty name, entity name, and expiry.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | Primary key — unique contract identifier |\n| `workspace_id` | `INT64` | Yes | Workspace this contract belongs to |\n| `contract_kind` | `STRING` | Yes | How the contract entered the system |\n| `contract_status` | `STRING` | Yes | Current lifecycle stage |\n| `contract_type_id` | `INT64` | Yes | FK to contract_types_setup |\n| `contract_type` | `STRING` | Yes | Human-readable contract type name |\n| `created_date` | `DATE` | Yes | Date the contract was created |\n| `execution_date` | `DATE` | Yes | Date the contract was fully executed |\n| `expiry_date` | `DATE` | Yes | Expiry or renewal date |\n| `term_length` | `STRING` | Yes | Contract term as text |\n| `counterparty_name` | `STRING` | Yes | Counterparty label on the contract (free text) |\n| `entity_name` | `STRING` | Yes | Signing company / entity name on the contract |\n| `redlining_starts` | `TIMESTAMP` | Yes | When redlining began |\n| `sign_starts` | `TIMESTAMP` | Yes | When signing began |\n| `sign_email_sent` | `TIMESTAMP` | Yes | When the signature request email was sent |\n| `draft_time` | `FLOAT64` | Yes | Days spent in Draft |\n| `redlining_time` | `FLOAT64` | Yes | Total days in Redlining |\n| `client_redlining_time` | `FLOAT64` | Yes | Days redlining on client side |\n| `counterparty_redlining_time` | `FLOAT64` | Yes | Days redlining on counterparty side |\n| `on_hold_time` | `FLOAT64` | Yes | Days spent On Hold |\n| `sign_nego_time` | `FLOAT64` | Yes | Days in sign negotiation |\n| `sign_time` | `FLOAT64` | Yes | Total days in Sign |\n| `sign_approvals` | `FLOAT64` | Yes | Days on sign-stage approvals |\n| `signature_collection` | `FLOAT64` | Yes | Days to collect signatures |\n| `execution_time` | `FLOAT64` | Yes | Total days from created to executed (key metric) |\n| `time_for_reviews` | `FLOAT64` | Yes | Days in internal reviews |\n| `reviews_requested` | `INT64` | Yes | Review requests made |\n| `pending_reviews` | `INT64` | Yes | Reviews still pending |\n| `client_rounds` | `INT64` | Yes | Redline rounds from client |\n| `cp_rounds` | `INT64` | Yes | Redline rounds from counterparty |\n| `turns` | `INT64` | Yes | Total negotiation turns |\n| `on_hold_rounds` | `INT64` | Yes | Times placed on hold |\n| `sign_nego_rounds` | `INT64` | Yes | Rounds of sign negotiation |\n| `contract_ageing_days` | `INT64` | Yes | Days since creation (in-flight) |\n| `sign_pending_with` | `STRING` | Yes | Who signing is pending with |\n| `total_time_to_sign_counterparty_hours` | `FLOAT64` | Yes | Hours counterparty took to sign |\n| `total_time_to_sign_company_hours` | `FLOAT64` | Yes | Hours company took to sign |\n| `pending_counterparty_signatories` | `INT64` | Yes | CP signatories yet to sign |\n| `counterparties_signatory_signed` | `INT64` | Yes | CP signatories who have signed |\n| `company_signatory_signed` | `INT64` | Yes | Company signatories who have signed |\n| `pending_company_signatories` | `INT64` | Yes | Company signatories yet to sign |\n| `frozen_workflow_id` | `INT64` | Yes | Frozen workflow snapshot at creation |\n| `workflow_title_at_creation` | `STRING` | Yes | Frozen workflow title at creation |\n| `workflow_id` | `INT64` | Yes | Current workflow id |\n| `current_workflow_title` | `STRING` | Yes | Current workflow display name |\n\n### Enum values\n\n#### `contract_status`\n\n- `Executed`\n- `Redlining`\n- `Sign`\n- `Draft`\n- `Voided`\n- `On Hold`\n\n#### `contract_kind`\n\n- `Externally Executed Contracts`\n- `Upload Sign Contracts`\n- `Campaign Contracts`\n- `Uploaded for review`\n- `Template Contracts`\n- `Template Contracts (Redlined)`\n- `Clickwrap Contracts`\n- `Express Template Contracts`\n\n#### `sign_pending_with`\n\n- `Executed`\n- `Pending with Counterparty Signatory`\n- `Pending with Company Signatory`\n- `Pending with Counterparty and Company Signatories`\n\n---\n\n## `users`\n\n\n\nOne row per user — activity, teams, licensing, and account flags.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `id` | `INT64` | Yes | Primary key (org_user_id) |\n| `last_activity_date` | `TIMESTAMP` | Yes | Most recent platform activity |\n| `invite_accepted` | `BOOL` | Yes | Invite accepted |\n| `first_login_date` | `TIMESTAMP` | Yes | First login time |\n| `is_active` | `BOOL` | Yes | Account active |\n| `is_deleted` | `BOOL` | Yes | Soft-deleted |\n| `created` | `TIMESTAMP` | Yes | Account created at |\n| `designation` | `STRING` | Yes | Job title / designation |\n| `created_by_workspace_id` | `INT64` | Yes | Workspace the user belongs to |\n| `teams` | `STRING` | Yes | Comma-separated team names |\n| `seniority_level` | `STRING` | Yes | Seniority band |\n| `department` | `STRING` | Yes | Department name |\n| `app_usage_purposes` | `STRING` | Yes | Stated usage purposes |\n| `licensed_user` | `BOOL` | Yes | Consumes a paid seat |\n\n---\n\n## `workflows_setup`\n\n\n\nFrozen (versioned) workflow configuration per workspace.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `frozen_workflow_id` | `INT64` | Yes | Frozen workflow snapshot id (legacy spelling in dataset) |\n| `workflow_id` | `INT64` | Yes | Parent workflow id |\n| `title` | `STRING` | Yes | Workflow display name |\n| `status` | `STRING` | Yes | PUBLISHED / UNPUBLISHED / ARCHIVED |\n| `created` | `TIMESTAMP` | Yes | Version created at |\n| `last_published` | `TIMESTAMP` | Yes | Last published at |\n| `unpublished_changes_present` | `BOOL` | Yes | Draft changes not yet published |\n| `cp_contract_download_permission` | `STRING` | Yes | Counterparty download rights |\n\n### Enum values\n\n#### `status`\n\n- `PUBLISHED`\n- `UNPUBLISHED`\n- `ARCHIVED`\n\n#### `cp_contract_download_permission`\n\n- `ENABLE_PDF_OR_WORD`\n- `ENABLE_PDF_ONLY`\n- `DISABLE_UNTIL_SIGNING`\n- `NULL`\n\n---\n\n## `approvals_setup`\n\n\n\nApproval steps configured within workflow versions.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `approval_id` | `STRING` | Yes | Approval step id |\n| `approval_ver` | `STRING` | Yes | Version string |\n| `id` | `INT64` | Yes | Internal numeric id |\n| `approval_name` | `STRING` | Yes | Step display name |\n| `approval_order` | `INT64` | Yes | Sequence order |\n| `frozen_workflow_id` | `INT64` | Yes | Frozen workflow id |\n| `workflow_id` | `INT64` | Yes | Parent workflow id |\n| `workflow_name` | `STRING` | Yes | Parent workflow name |\n| `status` | `STRING` | Yes | Publication status |\n| `type` | `STRING` | Yes | TEMPLATE_WORKFLOW or UPLOAD_WORKFLOW |\n| `conditional_approval` | `BOOL` | Yes | Conditional step |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `role_id` | `INT64` | Yes | Approver role id |\n| `skip_approval_restriction` | `BOOL` | Yes | Skip approvers allowed |\n| `download_contract_restriction` | `BOOL` | Yes | Download blocked during step |\n| `send_to_cp_restriction` | `BOOL` | Yes | Send-to-CP blocked during step |\n\n### Enum values\n\n#### `type`\n\n- `TEMPLATE_WORKFLOW`\n- `UPLOAD_WORKFLOW`\n\n---\n\n## `contract_types_setup`\n\n\n\nContract type directory per workspace.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `contract_type_id` | `INT64` | Yes | Primary key |\n| `contract_type` | `STRING` | Yes | Contract type name |\n\n---\n\n## `counterparties_setup`\n\n\n\nRegistered counterparties per workspace.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `counterparty_name` | `STRING` | Yes | Registered counterparty name |\n| `status` | `STRING` | Yes | ACTIVE / other states |\n\n---\n\n## `entities_setup`\n\n\n\nLegal entities (customer signing companies) per workspace.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `entity_name` | `STRING` | Yes | Display name |\n| `id` | `INT64` | Yes | Entity id |\n| `created` | `TIMESTAMP` | Yes | Created at |\n| `modified` | `TIMESTAMP` | Yes | Last modified at |\n| `is_primary` | `BOOL` | Yes | Primary entity flag |\n| `is_deleted` | `BOOL` | Yes | Soft delete |\n| `jurisdiction_id` | `INT64` | Yes | Jurisdiction id |\n| `organization_id` | `INT64` | Yes | Parent organization id |\n| `organization_type_id` | `INT64` | Yes | Organization type id |\n\n---\n\n## `signatures_setups`\n\n\n\nSignatory slots per workflow version.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `default_signature_id` | `INT64` | Yes | Signatory slot id |\n| `type` | `STRING` | Yes | COUNTER_PARTY or CREATOR_PARTY |\n| `name` | `STRING` | Yes | Signatory label |\n| `sign_order` | `INT64` | Yes | Signing order |\n| `created` | `TIMESTAMP` | Yes | Created at |\n| `workspace_id` | `INT64` | Yes | Workspace id |\n| `workflow_id` | `INT64` | Yes | Workflow id |\n| `conditional_signatory` | `BOOL` | Yes | Conditional signatory |\n| `conditional_routing` | `BOOL` | Yes | Conditional routing |\n\n### Enum values\n\n#### `type`\n\n- `COUNTER_PARTY`\n- `CREATOR_PARTY`\n\n---\n\n## `contract_lifecycle`\n\n\n\nCore contract register — one row per contract. Volume, status, type, expiry, counterparty, entity, workflow.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | Primary key — unique contract identifier |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `created_date` | `DATE` | Yes | Contract creation date |\n| `contract_kind` | `STRING` | Yes | How contract entered the system |\n| `contract_type_id` | `INT64` | Yes | FK to contract type |\n| `contract_status` | `STRING` | Yes | Current lifecycle status |\n| `contract_name` | `STRING` | Yes | Name/title of the contract |\n| `contract_type` | `STRING` | Yes | Contract category label |\n| `template_name` | `STRING` | Yes | Template used (NULL for uploaded contracts) |\n| `execution_date` | `DATE` | Yes | Date contract was fully executed |\n| `term_length` | `STRING` | Yes | Contract duration as text |\n| `expiry_date` | `DATE` | Yes | Expiry or renewal date |\n| `post_execution_status` | `STRING` | Yes | Post-execution classification |\n| `execution_status` | `STRING` | Yes | Execution classification |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `entity_name` | `STRING` | Yes | Company entity signing the contract |\n| `legal_owner` | `STRING` | Yes | Legal team member responsible |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `business_owner_teams` | `STRING` | Yes | Comma-separated teams of the business owner |\n| `created_by_user_id` | `INT64` | Yes | org_user_id of contract creator |\n| `workflow_title_at_creation` | `STRING` | Yes | Workflow snapshot name used at contract creation |\n| `current_workflow_title` | `STRING` | Yes | Current active workflow name |\n| `workflow_id` | `INT64` | Yes | FK to workflow |\n\n### Enum values\n\n#### `contract_status`\n\n- `Executed`\n- `Redlining`\n- `Sign`\n- `Draft`\n- `Voided`\n- `On Hold`\n\n#### `contract_kind`\n\n- `Template Contracts`\n- `Template Contracts (Redlined)`\n- `Uploaded for review`\n- `Upload Sign Contracts`\n- `Externally Executed Contracts`\n- `Campaign Contracts`\n- `Clickwrap Contracts`\n- `Express Template Contracts`\n\n#### `post_execution_status`\n\n- `Active Contracts`\n- `Executed Contracts, no Expiry date`\n- `Expired Contracts`\n\n#### `execution_status`\n\n- `Executed`\n- `Not Yet Executed`\n\n---\n\n## `contract_tat_details`\n\n\n\nTurnaround time per contract — one row per contract. Lifecycle stage timing, negotiation rounds, ownership. Time columns are in hours (FLOAT64).\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `contract_name` | `STRING` | Yes | Contract name |\n| `contract_kind` | `STRING` | Yes | How contract entered the system |\n| `contract_type` | `STRING` | Yes | Contract category |\n| `template_name` | `STRING` | Yes | Template used |\n| `contract_status` | `STRING` | Yes | Current status |\n| `created_at` | `TIMESTAMP` | Yes | When contract was created |\n| `redlining_started_at` | `TIMESTAMP` | Yes | When redlining stage began |\n| `signing_started_at` | `TIMESTAMP` | Yes | When signing stage began |\n| `executed_at` | `TIMESTAMP` | Yes | When contract was executed |\n| `draft_time_hours` | `FLOAT64` | Yes | Hours spent in Draft stage |\n| `redlining_time_hours` | `FLOAT64` | Yes | Total hours in Redlining |\n| `client_redlining_time_hours` | `FLOAT64` | Yes | Hours of redlining attributed to client side |\n| `counterparty_redlining_time_hours` | `FLOAT64` | Yes | Hours of redlining attributed to counterparty |\n| `on_hold_time_hours` | `FLOAT64` | Yes | Hours spent On Hold |\n| `sign_negotiation_time_hours` | `FLOAT64` | Yes | Hours in sign negotiation phase |\n| `sign_time_hours` | `FLOAT64` | Yes | Total hours in Sign stage |\n| `sign_approval_time_hours` | `FLOAT64` | Yes | Hours spent on sign-stage approvals |\n| `signature_collection_time_hours` | `FLOAT64` | Yes | Hours to collect all signatures |\n| `total_execution_time_hours` | `FLOAT64` | Yes | Total hours from creation to execution |\n| `review_time_hours` | `FLOAT64` | Yes | Hours in internal reviews |\n| `reviews_requested_count` | `INT64` | Yes | Number of review requests made |\n| `pending_reviews_count` | `INT64` | Yes | Reviews still outstanding |\n| `client_redline_rounds` | `INT64` | Yes | Redline turns initiated by client |\n| `counterparty_redline_rounds` | `INT64` | Yes | Redline turns initiated by counterparty |\n| `total_negotiation_turns` | `INT64` | Yes | Total negotiation turns |\n| `on_hold_rounds` | `INT64` | Yes | Times placed On Hold |\n| `sign_negotiation_rounds` | `INT64` | Yes | Rounds of sign negotiation |\n| `is_tat_pending` | `INT64` | Yes | 1 = in-progress, 0 = complete |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `entity_name` | `STRING` | Yes | Company entity |\n| `legal_owner` | `STRING` | Yes | Legal team owner |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `business_owner_teams` | `STRING` | Yes | Teams of the business owner |\n| `workflow_title_at_creation` | `STRING` | Yes | Workflow used at contract creation |\n| `current_workflow_title` | `STRING` | Yes | Current workflow name |\n| `workflow_id` | `INT64` | Yes | FK to workflow |\n\n### Enum values\n\n#### `contract_status`\n\n- `Executed`\n- `Redlining`\n- `Sign`\n- `Draft`\n- `Voided`\n- `On Hold`\n\n#### `contract_kind`\n\n- `Template Contracts`\n- `Template Contracts (Redlined)`\n- `Uploaded for review`\n- `Upload Sign Contracts`\n- `Externally Executed Contracts`\n- `Campaign Contracts`\n- `Clickwrap Contracts`\n- `Express Template Contracts`\n\n---\n\n## `contract_sign`\n\n\n\nSigning-stage summary per contract — one row per contract. Signature SLA and pending-signature analysis. Time columns in hours where applicable.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `contract_type` | `STRING` | Yes | Contract category |\n| `template_name` | `STRING` | Yes | Template used |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `contract_name` | `STRING` | Yes | Contract name |\n| `created_date` | `DATE` | Yes | Contract creation date |\n| `execution_date` | `DATE` | Yes | Execution date |\n| `legal_owner` | `STRING` | Yes | Legal team owner |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `workflow_status` | `STRING` | Yes | Workflow state |\n| `signing_started_at` | `TIMESTAMP` | Yes | When signing stage began |\n| `first_sign_request_sent_at` | `TIMESTAMP` | Yes | When first signature request was sent |\n| `pending_counterparty_signatories_count` | `INT64` | Yes | CP signatories yet to sign |\n| `counterparty_signatories_signed_count` | `INT64` | Yes | CP signatories who have signed |\n| `counterparty_total_signing_time_hours` | `FLOAT64` | Yes | Total hours for CP signatories to sign |\n| `counterparty_avg_signing_time_hours` | `FLOAT64` | Yes | Avg hours per CP signatory |\n| `pending_company_signatories_count` | `INT64` | Yes | Internal signatories yet to sign |\n| `company_signatories_signed_count` | `INT64` | Yes | Internal signatories who have signed |\n| `company_total_signing_time_hours` | `FLOAT64` | Yes | Total hours for internal signatories to sign |\n| `company_avg_signing_time_hours` | `FLOAT64` | Yes | Avg hours per internal signatory |\n| `signing_pending_with` | `STRING` | Yes | Who signing is currently pending with |\n\n### Enum values\n\n#### `signing_pending_with`\n\n- `Executed`\n- `Pending with Counterparty Signatory`\n- `Pending with Company Signatory`\n- `Pending with Counterparty and Company Signatories`\n\n---\n\n## `contract_approvals`\n\n\n\nApproval-step detail — one row per approval step per contract. Approval SLA and bottleneck analysis. Time columns in hours.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `approval_instance_id` | `STRING` | Yes | Unique ID for this approval step instance |\n| `approval_step_name` | `STRING` | Yes | Name of the approval step |\n| `approval_step_category` | `STRING` | Yes | Sub-category of the approval step |\n| `contract_type` | `STRING` | Yes | Contract category |\n| `contract_kind` | `STRING` | Yes | How contract entered the system |\n| `contract_name` | `STRING` | Yes | Contract name |\n| `contract_status` | `STRING` | Yes | Current contract status |\n| `contract_created_date` | `DATE` | Yes | Contract creation date |\n| `contract_created_month` | `DATE` | Yes | First day of month contract was created |\n| `contract_created_by` | `STRING` | Yes | Who created the contract |\n| `approval_status` | `STRING` | Yes | Status of this approval step |\n| `last_requested_by` | `STRING` | Yes | Who most recently requested approval |\n| `last_approved_by` | `STRING` | Yes | Who most recently approved |\n| `first_requested_date` | `DATE` | Yes | When approval was first requested |\n| `last_requested_date` | `DATE` | Yes | Most recent approval request date |\n| `completed_date` | `DATE` | Yes | When approval was completed |\n| `first_response_time_hours` | `FLOAT64` | Yes | Hours for first approval response |\n| `total_approval_time_hours` | `FLOAT64` | Yes | Total approval time (including skips) |\n| `total_approval_time_hours_excl_skips` | `FLOAT64` | Yes | Total approval time (excluding skips) |\n| `approval_instances_count` | `INT64` | Yes | Total approval instances |\n| `approval_instances_count_excl_skips` | `INT64` | Yes | Approval instances excluding skips |\n| `active_approvals_count` | `INT64` | Yes | Currently active approval count |\n| `pending_with` | `STRING` | Yes | Who currently holds the approval |\n| `pending_since_days` | `INT64` | Yes | Days this approval has been pending |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `entity_name` | `STRING` | Yes | Company entity |\n| `legal_owner` | `STRING` | Yes | Legal team owner |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `business_owner_teams` | `STRING` | Yes | Teams of the business owner |\n| `workflow_title_at_creation` | `STRING` | Yes | Workflow used at contract creation |\n| `current_workflow_title` | `STRING` | Yes | Current workflow name |\n| `workflow_id` | `INT64` | Yes | FK to workflow |\n\n### Enum values\n\n#### `approval_status`\n\n- `Approved`\n- `Pending`\n- `Skipped`\n- `Rejected`\n\n---\n\n## `contracts_review`\n\n\n\nReview-request detail — one row per review instance per contract. Legal workload and review SLA. Time columns in hours (FLOAT64).\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `review_id` | `STRING` | Yes | Unique review instance ID |\n| `review_step_name` | `STRING` | Yes | Name of the review step |\n| `review_instance_number` | `INT64` | Yes | Instance number (1 = first review on this contract) |\n| `contract_created_date` | `DATE` | Yes | Contract creation date |\n| `contract_type` | `STRING` | Yes | Contract category |\n| `contract_kind` | `STRING` | Yes | How contract entered the system |\n| `review_assignment_type` | `STRING` | Yes | Role or User assignment |\n| `review_status` | `STRING` | Yes | Current review status |\n| `workflow_status` | `STRING` | Yes | Workflow state of the contract |\n| `requested_by` | `STRING` | Yes | Who requested the review |\n| `requested_at` | `TIMESTAMP` | Yes | When review was requested |\n| `assigned_at` | `TIMESTAMP` | Yes | When review was assigned |\n| `started_at` | `TIMESTAMP` | Yes | When reviewer began working |\n| `completed_at` | `TIMESTAMP` | Yes | When review was marked complete |\n| `first_response_time_hours` | `FLOAT64` | Yes | Hours from request to first response |\n| `time_since_first_response_hours` | `FLOAT64` | Yes | Hours from first response to completion |\n| `total_review_time_hours` | `FLOAT64` | Yes | Total review time in hours |\n| `on_hold_time_hours` | `FLOAT64` | Yes | Hours review was on hold |\n| `assigned_by` | `STRING` | Yes | Who assigned the reviewer |\n| `reviewer_name` | `STRING` | Yes | Legal team member who reviewed |\n| `reviewer_user_id` | `INT64` | Yes | org_user_id of reviewer |\n| `created_by_user_id` | `INT64` | Yes | org_user_id of contract creator |\n| `reviewer_team` | `STRING` | Yes | Legal team that handled the review |\n| `requested_month` | `DATE` | Yes | First day of month review was requested |\n| `completed_month` | `DATE` | Yes | First day of month review was completed |\n| `legal_owner` | `STRING` | Yes | Legal team owner |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `entity_name` | `STRING` | Yes | Company entity |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `pending_since_days` | `INT64` | Yes | Days review has been pending |\n| `workflow_title_at_creation` | `STRING` | Yes | Workflow used at contract creation |\n| `current_workflow_title` | `STRING` | Yes | Current workflow name |\n| `workflow_id` | `INT64` | Yes | FK to workflow |\n\n### Enum values\n\n#### `review_status`\n\n- `Review Completed`\n- `Review not yet assigned`\n- `Review in Progress`\n- `Pending`\n\n#### `review_assignment_type`\n\n- `Role`\n- `User`\n\n---\n\n## `signatories`\n\n\n\nIndividual signatory records — one row per signatory per contract. Per-signatory analytics. time_to_sign_hours is in hours (FLOAT64).\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `signatory_id` | `INT64` | Yes | Unique signatory record |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `user_id` | `INT64` | Yes | FK to internal user (NULL for external signatories) |\n| `signatory_name` | `STRING` | Yes | Name of the signatory |\n| `signatory_party` | `STRING` | Yes | COUNTER_PARTY or CREATOR_PARTY |\n| `signing_order` | `INT64` | Yes | Position in signing sequence |\n| `sign_status` | `STRING` | Yes | Current signing status |\n| `created_at` | `TIMESTAMP` | Yes | When signatory was added |\n| `signing_started_at` | `TIMESTAMP` | Yes | When this signatory's turn began |\n| `sign_request_sent_at` | `TIMESTAMP` | Yes | When sign request was sent |\n| `signed_at` | `TIMESTAMP` | Yes | When they signed |\n| `time_to_sign_hours` | `FLOAT64` | Yes | Hours from request sent to signature |\n| `contract_kind` | `STRING` | Yes | How contract entered the system |\n| `contract_type` | `STRING` | Yes | Contract category |\n| `template_name` | `STRING` | Yes | Template used |\n| `contract_name` | `STRING` | Yes | Contract name |\n| `contract_created_date` | `DATE` | Yes | Contract creation date |\n| `execution_date` | `DATE` | Yes | Contract execution date |\n| `counterparty_name` | `STRING` | Yes | Counterparty name |\n| `legal_owner` | `STRING` | Yes | Legal team owner |\n| `business_owner` | `STRING` | Yes | Business-side owner |\n| `workflow_status` | `STRING` | Yes | Workflow state |\n| `signature_service` | `STRING` | Yes | Connected integration name |\n| `workflow_title_at_creation` | `STRING` | Yes | Workflow used at contract creation |\n| `current_workflow_title` | `STRING` | Yes | Current workflow name |\n| `workflow_id` | `INT64` | Yes | FK to workflow |\n\n### Enum values\n\n#### `signatory_party`\n\n- `COUNTER_PARTY`\n- `CREATOR_PARTY`\n\n#### `sign_status`\n\n- `Signed`\n- `Pending`\n- `Declined`\n- `Bounced`\n\n#### `signature_service`\n\n- `SpotSign`\n- `DocuSign`\n- `AdobeSign`\n- `ZohoSign`\n\n---\n\n## `contract_level_metrics`\n\n\n\nEvent-level lifecycle tracking — multiple rows per contract. time_spent_seconds is in seconds (INT64); divide by 3600 for hours. \n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter (maps from created_by_workspace_id) |\n| `event_id` | `STRING` | Yes | Unique event instance ID |\n| `event_sequence` | `STRING` | Yes | Sequence ordering of events |\n| `event_category` | `STRING` | Yes | High-level event type |\n| `event_subcategory_1` | `STRING` | Yes | Event sub-category level 1 |\n| `event_subcategory_2` | `STRING` | Yes | Event sub-category level 2 |\n| `status` | `STRING` | Yes | Status during this interval |\n| `started_at` | `TIMESTAMP` | Yes | Start of this time interval |\n| `ended_at` | `TIMESTAMP` | Yes | End of this interval (historical) |\n| `ended_at_current` | `TIMESTAMP` | Yes | End of interval (current; may be ongoing) |\n| `time_spent_seconds` | `INT64` | Yes | Time spent in this state, in seconds |\n| `party_type` | `STRING` | Yes | Internal or External party |\n| `review_filter` | `STRING` | Yes | Review stage filter flag |\n| `approval_filter` | `STRING` | Yes | Approval stage filter flag |\n| `sign_filter` | `STRING` | Yes | Sign stage filter flag |\n\n---\n\n## `contract_level_metrics_lc`\n\n\n\nLifecycle-focused variant of contract_level_metrics — same structure without review_filter, approval_filter, sign_filter. time_spent_seconds in seconds.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `contract_id` | `INT64` | Yes | FK to lifecycle table |\n| `workspace_id` | `INT64` | Yes | Workspace filter (maps from created_by_workspace_id) |\n| `event_id` | `STRING` | Yes | Unique event instance ID |\n| `event_sequence` | `STRING` | Yes | Sequence ordering of events |\n| `event_category` | `STRING` | Yes | High-level event type |\n| `event_subcategory_1` | `STRING` | Yes | Event sub-category level 1 |\n| `event_subcategory_2` | `STRING` | Yes | Event sub-category level 2 |\n| `status` | `STRING` | Yes | Status during this interval |\n| `started_at` | `TIMESTAMP` | Yes | Start of interval |\n| `ended_at` | `TIMESTAMP` | Yes | End of interval (historical) |\n| `ended_at_current` | `TIMESTAMP` | Yes | End of interval (current) |\n| `time_spent_seconds` | `INT64` | Yes | Time in state, in seconds |\n| `party_type` | `STRING` | Yes | Internal or External |\n\n---\n\n## `legal_intake`\n\n\n\nLegal intake requests — one row per intake item. Legal ops workload and intake SLA.\n\n### Schema\n\n| Column | Type | Nullable | Description |\n| --- | --- | --- | --- |\n| `intake_id` | `INT64` | Yes | Unique intake item ID |\n| `workspace_id` | `INT64` | Yes | Workspace filter key |\n| `title` | `STRING` | Yes | Intake request title |\n| `created_at` | `TIMESTAMP` | Yes | When intake was created |\n| `status` | `STRING` | Yes | Current status |\n| `priority` | `STRING` | Yes | Priority level |\n| `due_date` | `DATE` | Yes | Target completion date |\n| `completed_at` | `TIMESTAMP` | Yes | When marked complete |\n| `requested_by` | `STRING` | Yes | Who submitted the intake |\n| `assignee` | `STRING` | Yes | Who is responsible |\n| `workflow_name` | `STRING` | Yes | Associated workflow, if any |\n| `linked_entity_type` | `STRING` | Yes | Type of linked entity (e.g. contract) |\n| `linked_entity_id` | `STRING` | Yes | ID of the linked entity |\n| `pending_with` | `STRING` | Yes | Who the intake is pending with |\n| `completion_time_days` | `FLOAT64` | Yes | Days taken to complete |\n| `completion_time_hours` | `FLOAT64` | Yes | Hours taken to complete |\n| `pending_since_hours` | `FLOAT64` | Yes | Hours since intake was last actioned |\n| `pending_since_days` | `FLOAT64` | Yes | Days since intake was last actioned |\n\n### Enum values\n\n#### `status`\n\n- `Completed`\n- `Pending`\n- `In Progress`\n- `Cancelled`\n\n#### `priority`\n\n- `High`\n- `Medium`\n- `Low`\n\n---\n\n## Join map\n\n```\ncontracts.workflow_id ─────────────► workflows_setup.workflow_id\ncontracts.frozen_workflow_id ───────► workflows_setup.frozen_workflow_id\ncontracts.contract_type_id ─────────► contract_types_setup.contract_type_id\ncontracts.counterparty_name ────────► counterparties_setup.counterparty_name (join on public name)\nworkflows_setup.frozen_workflow_id ─► approvals_setup.frozen_workflow_id\nworkflows_setup.workflow_id ────────► signatures_setups.workflow_id\n\ncontract_lifecycle.contract_id ─────► contract_tat_details.contract_id\ncontract_lifecycle.contract_id ─────► contract_sign.contract_id\ncontract_lifecycle.contract_id ─────► contract_approvals.contract_id\ncontract_lifecycle.contract_id ─────► contracts_review.contract_id\ncontract_lifecycle.contract_id ─────► signatories.contract_id\ncontract_lifecycle.contract_id ─────► contract_level_metrics.contract_id\ncontract_lifecycle.contract_id ─────► contract_level_metrics_lc.contract_id\n```\n\nUse **public** column names in SQL. Table references may use bare catalog names (e.g. `contracts`); matching is case-insensitive." servers: - url: https://api.eu.spotdraft.com description: Europe - url: https://api.in.spotdraft.com description: India - url: https://api.us.spotdraft.com description: United States - url: https://api.me.spotdraft.com description: Middle East tags: - name: V2.1 Contract APIs description: Contract creation, retrieval, updates, previews, downloads, uploads, and lifecycle actions across public API versions. paths: /api/v2.1/public/contracts/: get: operationId: v2.1_public_contracts_retrieve description: 'Returns contracts visible to the current workspace. Use pagination, filter, and sort parameters to narrow the result set. Where supported by the version, contract metadata filters are also available.' summary: List Contracts parameters: - in: query name: filter__approvals_pending schema: type: string description: Filter by approvals pending (exact match). Equivalent to filter__approvals_pending[$eq]=value. - in: query name: filter__approvals_pending[$eq] schema: type: string description: Filter by approvals pending using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__approvals_pending[$in] schema: type: string description: Filter by approvals pending using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__approvals_pending[$ne] schema: type: string description: Filter by approvals pending using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__assigned_to schema: type: integer description: Filter by assigned to (exact match). Equivalent to filter__assigned_to[$eq]=value. - in: query name: filter__assigned_to[$eq] schema: type: string description: Filter by assigned to using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__assigned_to[$gt] schema: type: string description: Filter by assigned to using $gt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__assigned_to[$gte] schema: type: string description: Filter by assigned to using $gte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__assigned_to[$in] schema: type: string description: Filter by assigned to using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__assigned_to[$lt] schema: type: string description: Filter by assigned to using $lt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__assigned_to[$lte] schema: type: string description: Filter by assigned to using $lte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__assigned_to[$ne] schema: type: string description: Filter by assigned to using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__business_user_id schema: type: integer description: Filter by business user id (exact match). Equivalent to filter__business_user_id[$eq]=value. - in: query name: filter__business_user_id[$eq] schema: type: string description: Filter by business user id using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__business_user_id[$gt] schema: type: string description: Filter by business user id using $gt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__business_user_id[$gte] schema: type: string description: Filter by business user id using $gte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__business_user_id[$in] schema: type: string description: Filter by business user id using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__business_user_id[$lt] schema: type: string description: Filter by business user id using $lt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__business_user_id[$lte] schema: type: string description: Filter by business user id using $lte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__business_user_id[$ne] schema: type: string description: Filter by business user id using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__client_brand_name schema: type: string description: Filter by client brand name (exact match). Equivalent to filter__client_brand_name[$eq]=value. - in: query name: filter__client_brand_name[$eq] schema: type: string description: Filter by client brand name using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__client_brand_name[$in] schema: type: string description: Filter by client brand name using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__client_brand_name[$ne] schema: type: string description: Filter by client brand name using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__client_email schema: type: string description: Filter by client email (exact match). Equivalent to filter__client_email[$eq]=value. - in: query name: filter__client_email[$eq] schema: type: string description: Filter by client email using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__client_email[$in] schema: type: string description: Filter by client email using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__client_email[$ne] schema: type: string description: Filter by client email using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__client_email_address schema: type: string description: Filter by client email address (exact match). Equivalent to filter__client_email_address[$eq]=value. - in: query name: filter__client_email_address[$eq] schema: type: string description: Filter by client email address using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__client_email_address[$in] schema: type: string description: Filter by client email address using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__client_email_address[$ne] schema: type: string description: Filter by client email address using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__client_name schema: type: string description: Filter by client name (exact match). Equivalent to filter__client_name[$eq]=value. - in: query name: filter__client_name[$eq] schema: type: string description: Filter by client name using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__client_name[$in] schema: type: string description: Filter by client name using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__client_name[$ne] schema: type: string description: Filter by client name using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_id schema: type: string description: Filter by contract id (exact match). Equivalent to filter__contract_id[$eq]=value. - in: query name: filter__contract_id[$eq] schema: type: string description: Filter by contract id using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_id[$in] schema: type: string description: Filter by contract id using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_id[$ne] schema: type: string description: Filter by contract id using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_kind schema: type: string description: Filter by contract kind (exact match). Equivalent to filter__contract_kind[$eq]=value. - in: query name: filter__contract_kind[$eq] schema: type: string description: Filter by contract kind using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_kind[$in] schema: type: string description: Filter by contract kind using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_kind[$ne] schema: type: string description: Filter by contract kind using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_packet_name schema: type: string description: Filter by contract packet name (exact match). Equivalent to filter__contract_packet_name[$eq]=value. - in: query name: filter__contract_packet_name[$eq] schema: type: string description: Filter by contract packet name using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_packet_name[$in] schema: type: string description: Filter by contract packet name using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_packet_name[$ne] schema: type: string description: Filter by contract packet name using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_reference_id schema: type: string description: Filter by contract reference id (exact match). Equivalent to filter__contract_reference_id[$eq]=value. - in: query name: filter__contract_reference_id[$eq] schema: type: string description: Filter by contract reference id using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_reference_id[$in] schema: type: string description: Filter by contract reference id using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_reference_id[$ne] schema: type: string description: Filter by contract reference id using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_type_id schema: type: integer description: Filter by contract type id (exact match). Equivalent to filter__contract_type_id[$eq]=value. - in: query name: filter__contract_type_id[$eq] schema: type: string description: Filter by contract type id using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_type_id[$gt] schema: type: string description: Filter by contract type id using $gt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__contract_type_id[$gte] schema: type: string description: Filter by contract type id using $gte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__contract_type_id[$in] schema: type: string description: Filter by contract type id using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_type_id[$lt] schema: type: string description: Filter by contract type id using $lt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__contract_type_id[$lte] schema: type: string description: Filter by contract type id using $lte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__contract_type_id[$ne] schema: type: string description: Filter by contract type id using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__contract_type_name schema: type: string description: Filter by contract type name (exact match). Equivalent to filter__contract_type_name[$eq]=value. - in: query name: filter__contract_type_name[$eq] schema: type: string description: Filter by contract type name using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__contract_type_name[$in] schema: type: string description: Filter by contract type name using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__contract_type_name[$ne] schema: type: string description: Filter by contract type name using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__created_at schema: type: string format: date-time description: Filter by created at (exact match). Equivalent to filter__created_at[$eq]=value. - in: query name: filter__created_at[$eq] schema: type: string format: date-time description: Filter by created at using $eq operator. Expects a single value for equality (e.g., date-time). - in: query name: filter__created_at[$gt] schema: type: string format: date-time description: Filter by created at using $gt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__created_at[$gte] schema: type: string format: date-time description: Filter by created at using $gte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__created_at[$in] schema: type: string format: date-time description: Filter by created at using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__created_at[$lt] schema: type: string format: date-time description: Filter by created at using $lt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__created_at[$lte] schema: type: string format: date-time description: Filter by created at using $lte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__created_at[$ne] schema: type: string format: date-time description: Filter by created at using $ne operator. Expects a single value for not-equal comparison (e.g., date-time). - in: query name: filter__display_status schema: type: string enum: - DRAFT - EXECUTED - ON_HOLD - REDLINING - SIGN - VOIDED description: 'Filter by display status (exact match). Equivalent to filter__display_status[$eq]=value. Allowed values: DRAFT, REDLINING, SIGN, EXECUTED, ON_HOLD, VOIDED.' - in: query name: filter__display_status[$eq] schema: type: string enum: - DRAFT - EXECUTED - ON_HOLD - REDLINING - SIGN - VOIDED description: 'Filter by display status using $eq operator. Expects a single value for equality (e.g., string). Allowed values: DRAFT, REDLINING, SIGN, EXECUTED, ON_HOLD, VOIDED.' - in: query name: filter__display_status[$in] schema: type: string enum: - DRAFT - EXECUTED - ON_HOLD - REDLINING - SIGN - VOIDED description: 'Filter by display status using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. Allowed values: DRAFT, REDLINING, SIGN, EXECUTED, ON_HOLD, VOIDED.' - in: query name: filter__display_status[$ne] schema: type: string enum: - DRAFT - EXECUTED - ON_HOLD - REDLINING - SIGN - VOIDED description: 'Filter by display status using $ne operator. Expects a single value for not-equal comparison (e.g., string). Allowed values: DRAFT, REDLINING, SIGN, EXECUTED, ON_HOLD, VOIDED.' - in: query name: filter__entity_name schema: type: string description: Filter by entity name (exact match). Equivalent to filter__entity_name[$eq]=value. - in: query name: filter__entity_name[$eq] schema: type: string description: Filter by entity name using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__entity_name[$in] schema: type: string description: Filter by entity name using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__entity_name[$ne] schema: type: string description: Filter by entity name using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__execution_date schema: type: string format: date-time description: Filter by execution date (exact match). Equivalent to filter__execution_date[$eq]=value. - in: query name: filter__execution_date[$eq] schema: type: string format: date-time description: Filter by execution date using $eq operator. Expects a single value for equality (e.g., date-time). - in: query name: filter__execution_date[$gt] schema: type: string format: date-time description: Filter by execution date using $gt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__execution_date[$gte] schema: type: string format: date-time description: Filter by execution date using $gte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__execution_date[$in] schema: type: string format: date-time description: Filter by execution date using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__execution_date[$lt] schema: type: string format: date-time description: Filter by execution date using $lt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__execution_date[$lte] schema: type: string format: date-time description: Filter by execution date using $lte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__execution_date[$ne] schema: type: string format: date-time description: Filter by execution date using $ne operator. Expects a single value for not-equal comparison (e.g., date-time). - in: query name: filter__expiring_at schema: type: string format: date-time description: Filter by expiring at (exact match). Equivalent to filter__expiring_at[$eq]=value. - in: query name: filter__expiring_at[$eq] schema: type: string format: date-time description: Filter by expiring at using $eq operator. Expects a single value for equality (e.g., date-time). - in: query name: filter__expiring_at[$gt] schema: type: string format: date-time description: Filter by expiring at using $gt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__expiring_at[$gte] schema: type: string format: date-time description: Filter by expiring at using $gte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__expiring_at[$in] schema: type: string format: date-time description: Filter by expiring at using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__expiring_at[$lt] schema: type: string format: date-time description: Filter by expiring at using $lt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__expiring_at[$lte] schema: type: string format: date-time description: Filter by expiring at using $lte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__expiring_at[$ne] schema: type: string format: date-time description: Filter by expiring at using $ne operator. Expects a single value for not-equal comparison (e.g., date-time). - in: query name: filter__last_updated_on schema: type: string format: date-time description: Filter by last updated on (exact match). Equivalent to filter__last_updated_on[$eq]=value. - in: query name: filter__last_updated_on[$eq] schema: type: string format: date-time description: Filter by last updated on using $eq operator. Expects a single value for equality (e.g., date-time). - in: query name: filter__last_updated_on[$gt] schema: type: string format: date-time description: Filter by last updated on using $gt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__last_updated_on[$gte] schema: type: string format: date-time description: Filter by last updated on using $gte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__last_updated_on[$in] schema: type: string format: date-time description: Filter by last updated on using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__last_updated_on[$lt] schema: type: string format: date-time description: Filter by last updated on using $lt operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__last_updated_on[$lte] schema: type: string format: date-time description: Filter by last updated on using $lte operator. Expects a single value (e.g., number or ISO date-time). - in: query name: filter__last_updated_on[$ne] schema: type: string format: date-time description: Filter by last updated on using $ne operator. Expects a single value for not-equal comparison (e.g., date-time). - in: query name: filter__legal_user_id schema: type: integer description: Filter by legal user id (exact match). Equivalent to filter__legal_user_id[$eq]=value. - in: query name: filter__legal_user_id[$eq] schema: type: string description: Filter by legal user id using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__legal_user_id[$gt] schema: type: string description: Filter by legal user id using $gt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__legal_user_id[$gte] schema: type: string description: Filter by legal user id using $gte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__legal_user_id[$in] schema: type: string description: Filter by legal user id using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__legal_user_id[$lt] schema: type: string description: Filter by legal user id using $lt operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__legal_user_id[$lte] schema: type: string description: Filter by legal user id using $lte operator. Expects a single value (e.g., number or ISO string). - in: query name: filter__legal_user_id[$ne] schema: type: string description: Filter by legal user id using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__pending_with schema: type: string description: Filter by pending with (exact match). Equivalent to filter__pending_with[$eq]=value. - in: query name: filter__pending_with[$eq] schema: type: string description: Filter by pending with using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__pending_with[$in] schema: type: string description: Filter by pending with using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__pending_with[$ne] schema: type: string description: Filter by pending with using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__signatories schema: type: string description: Filter by signatories (exact match). Equivalent to filter__signatories[$eq]=value. - in: query name: filter__signatories[$eq] schema: type: string description: Filter by signatories using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__signatories[$in] schema: type: string description: Filter by signatories using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__signatories[$ne] schema: type: string description: Filter by signatories using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__signatures_completed_by schema: type: string description: Filter by signatures completed by (exact match). Equivalent to filter__signatures_completed_by[$eq]=value. - in: query name: filter__signatures_completed_by[$eq] schema: type: string description: Filter by signatures completed by using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__signatures_completed_by[$in] schema: type: string description: Filter by signatures completed by using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__signatures_completed_by[$ne] schema: type: string description: Filter by signatures completed by using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__signatures_pending_on schema: type: string description: Filter by signatures pending on (exact match). Equivalent to filter__signatures_pending_on[$eq]=value. - in: query name: filter__signatures_pending_on[$eq] schema: type: string description: Filter by signatures pending on using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__signatures_pending_on[$in] schema: type: string description: Filter by signatures pending on using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__signatures_pending_on[$ne] schema: type: string description: Filter by signatures pending on using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__signatures_rejected_by schema: type: string description: Filter by signatures rejected by (exact match). Equivalent to filter__signatures_rejected_by[$eq]=value. - in: query name: filter__signatures_rejected_by[$eq] schema: type: string description: Filter by signatures rejected by using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__signatures_rejected_by[$in] schema: type: string description: Filter by signatures rejected by using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__signatures_rejected_by[$ne] schema: type: string description: Filter by signatures rejected by using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: filter__tags schema: type: string description: Filter by tags (exact match). Equivalent to filter__tags[$eq]=value. - in: query name: filter__tags[$eq] schema: type: string description: Filter by tags using $eq operator. Expects a single value for equality (e.g., string). - in: query name: filter__tags[$in] schema: type: string description: Filter by tags using $in operator. Expects a comma-separated list of values (e.g., val1,val2). Use \, to include literal commas in values. - in: query name: filter__tags[$ne] schema: type: string description: Filter by tags using $ne operator. Expects a single value for not-equal comparison (e.g., string). - in: query name: limit schema: type: integer default: 10 description: The number of items to return per page. - in: query name: page schema: type: integer default: 1 description: The page to return. Page numbers start at 1. - in: query name: query schema: type: string description: Query to filter the contracts. Searches on the contract name, entity name, party name, and party email. tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ContractListResponseV2' examples: Example: value: total_results: 2 page: 1 limit: 10 results: - id: 1234 created: '2021-05-20T04:52:04Z' created_by: Acme contract_link: https://app.spotdraft.com/contracts/v2/1234 contract_status: REDLINING contract_name: Standard NDA counter_party_name: Microsoft contract_type_name: Standard NDA contract_type_id: 100 reference_id: SD-1234 created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 - id: 4322 created: '2021-05-10T04:42:00Z' created_by: Apple contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED contract_name: Standard NDA - With Apple counter_party_name: Apple Inc. contract_type_name: Standard NDA contract_type_id: 100 reference_id: SD-4322 created_by_user_name: Sonia Sotomayor created_by_user_email: sonia@apple.com created_by_workspace: 1 description: Contract List x-tagGroup: Contracts post: operationId: v2.1_public_contracts_create description: "Creates a new contract from a SpotDraft template and returns the created contract.\n\nProvide the template id, contract data, and counterparty details needed to render the agreement. Use this endpoint when you want SpotDraft to generate the contract from structured data.\n\nCreates a new contract from a SpotDraft template and returns the created contract.\n\nProvide contract data, counterparty details, and any required signatories for the workflow.\n\n\nIn signatories list, sign_order should be set for either all items or no items of the list. Additionally when\nsign_order is set for all items of signatories list then at-least one counter party signatory user should also be part\nof the list.\n\nThe `contract_data` object must use **template field names as keys**. Each value should match the data type configured for that field in SpotDraft.\n\n| Field type | Expected value | Example |\n| ---------- | -------------- | ------- |\n| String / text | String | `\"Acme Inc.\"` |\n| Multi-line text | String with line breaks if needed | `\"Not applicable\\nCustomer redlines pending\"` |\n| Number | Integer or decimal | `15` or `3.14` |\n| Boolean / checkbox | Boolean | `true` |\n| Date | `YYYY-MM-DD` | `\"2026-03-28\"` |\n| Datetime | ISO 8601 timestamp | `\"2026-09-15T10:30:00Z\"` |\n| Dropdown | Selected option value | `\"annual_invoice\"` |\n| Multi-select | Array of selected option values | `[\"US\", \"IN\"]` |\n| Currency | `{ \"type\": \"\", \"value\": number }` | `{ \"type\": \"USD\", \"value\": 12000 }` |\n| Duration | `{ \"days\": int, \"type\": \"DAYS\\|MONTHS\\|YEARS\", \"value\": int }` | `{ \"days\": 180, \"type\": \"MONTHS\", \"value\": 6 }` |\n| Address | Object with address fields | `{ \"line_one\": \"350 Fifth Avenue\", \"city\": \"New York\", \"country\": \"United States\" }` |\n| Repeating group | Array of row objects | `[{\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}}]` |\n| File / attachment | File object or uploaded file reference supported by the workflow | `{ \"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\" }` |\n\nSample contract data:\n\n```json\n{\n \"agreement_date\": \"2026-03-28\",\n \"renewal_review_at\": \"2026-09-15T10:30:00Z\",\n \"customer_name\": \"Acme Inc.\",\n \"billing_currency\": {\"type\": \"USD\", \"value\": 12000},\n \"subscription_term\": {\"type\": \"MONTHS\", \"value\": 12, \"days\": 365},\n \"auto_renewal\": true,\n \"notice_period_days\": 30,\n \"service_countries\": [\"US\", \"IN\"],\n \"billing_address\": {\n \"line_one\": \"350 Fifth Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"country\": \"United States\",\n \"zipcode\": \"10118\"\n },\n \"pricing_schedule\": [\n {\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}},\n {\"milestone\": \"Annual subscription\", \"amount\": {\"type\": \"USD\", \"value\": 7000}}\n ],\n \"msa_attachment\": {\"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\"}\n}\n```\n" summary: Create Contract parameters: - in: header name: user-email schema: type: string description: The email address of the user to act as (when using client-secret authentication). This header attributes actions taken using the API to the given user. tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ExternalCreateContractSerializerV2_1' examples: CreateContractRequest: value: contract_template_id: 1204 contract_data: agreement_date: '2026-03-28' renewal_review_at: '2026-09-15T10:30:00Z' customer_name: Acme Inc. billing_currency: type: USD value: 12000 subscription_term: type: MONTHS value: 12 days: 365 auto_renewal: true notice_period_days: 30 service_countries: - US - IN billing_address: line_one: 350 Fifth Avenue city: New York state: NY country: United States zipcode: '10118' pricing_schedule: - milestone: Implementation amount: type: USD value: 5000 - milestone: Annual subscription amount: type: USD value: 7000 msa_attachment: file_name: security-schedule.pdf content_type: application/pdf counter_party_details: - is_individual: false organization_type: company organization_name: Acme Inc. poc_details: first_name: Avery last_name: Stone email: legal@acme.example organization_details: jurisdiction_iso_code: US address: line_one: 350 Fifth Avenue city: New York state: NY country_iso_code: US zipcode: '10118' external_metadata: id: hubspot-deal-10024 integration_name: HubSpot record_type: Deal record_data: deal_stage: contractsent owner_email: owner@acme.example contract_name: Acme Master Services Agreement summary: Create contract request application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ExternalCreateContractSerializerV2_1' multipart/form-data: schema: $ref: '#/components/schemas/ExternalCreateContractSerializerV2_1' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ExternalCreateContractResponse' description: '' x-tagGroup: Contracts /api/v2.1/public/contracts/by_external_metadata/{external_metadata_id}: get: operationId: v2.1_public_contracts_by_external_metadata_retrieve description: 'Returns up to 50 contracts linked to the supplied external metadata id. Use this when you have an external system record id and need to find the related SpotDraft contracts.' summary: List Contracts by External Metadata ID parameters: - in: path name: external_metadata_id schema: type: string description: External Metadata ID of the Contract. This can be used to search for contracts based on an ID specified when creating the contract using the external API. required: true tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/ExternalContractV3' examples: Example: value: - - id: 1234 created: '2021-05-20T04:52:04Z' created_by: Acme contract_link: https://app.spotdraft.com/contracts/v2/1234 contract_status: REDLINING contract_name: Standard NDA counter_party_name: Microsoft contract_type_name: Standard NDA contract_type_id: 100 reference_id: SD-1234 created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 - id: 4322 created: '2021-05-10T04:42:00Z' created_by: Apple contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED contract_name: Standard NDA - With Apple counter_party_name: Apple Inc. contract_type_name: Standard NDA contract_type_id: 100 reference_id: SD-4322 created_by_user_name: Sonia Sotomayor created_by_user_email: sonia@apple.com created_by_workspace: 1 description: Contract List x-tagGroup: Contracts /api/v2.1/public/contracts/embedded/contracts/{contract_id}/counter_party/: get: operationId: v2.1_public_contracts_embedded_contracts_counter_party_retrieve description: ' Returns a short-lived embedded signing URL for the specified counterparty email on the contract. Use this to render the counterparty signing experience inside your own product. ' summary: Get Counterparty Embedded URL parameters: - in: path name: contract_id schema: type: string pattern: ^[0-9]+$ required: true - in: query name: cp_email_id schema: type: string description: Email address of the CP for which the url needs to be returned. tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/CounterPartyEmbeddedUrlResponse' description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/executed_contracts/: post: operationId: v2.1_public_contracts_executed_contracts_create description: "\n This API can be used to upload existing executed contracts to SpotDraft.\n `contract_name` is treated as a caller-provided display name and is not inferred from the file content.\n Counterparty names in `counterparty_details` are also caller-provided values used for display/association.\n" summary: Upload Executed Contract API tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateExecutedContractAPIRequest' examples: Example1: value: contract_name: Acme Corporation NDA file_name: Acme_nda.pdf file_content: base64 encoded string of the file content contract_type_id: 103 organization_entity_id: 78 external_metadata: {} counterparty_details: - is_individual: true organization_type: Private Limited organization_name: Acme Corporation organization_details: {} poc_details: first_name: Mike last_name: Reed email: Mike_reed@yahoo.com primary_address: city_name: Cincinnati state_name: Ohio country_name: USA zipcode: '513' line_one: 'st: 3, block: 2, Jenkins Road' summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CreateExecutedContractAPIRequest' multipart/form-data: schema: $ref: '#/components/schemas/CreateExecutedContractAPIRequest' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ContractResponseV2' examples: Example1: value: id: T-1234 created: '2021-05-20T04:52:04Z' contract_name: Acme Corporation NDA contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED created_by: Morgan Freeman counter_party_name: Mike Reed contract_type_name: Historic contract_type_id: 103 external_metadata: {} created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 summary: Example 1 description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/preview/: post: operationId: v2.1_public_contracts_preview_create description: "Generates a preview PDF using the supplied contract data without creating or updating a contract.\n\nUse this to validate how template variables render before you create the actual contract.\n\n\nThe `contract_data` object must use **template field names as keys**. Each value should match the data type configured for that field in SpotDraft.\n\n| Field type | Expected value | Example |\n| ---------- | -------------- | ------- |\n| String / text | String | `\"Acme Inc.\"` |\n| Multi-line text | String with line breaks if needed | `\"Not applicable\\nCustomer redlines pending\"` |\n| Number | Integer or decimal | `15` or `3.14` |\n| Boolean / checkbox | Boolean | `true` |\n| Date | `YYYY-MM-DD` | `\"2026-03-28\"` |\n| Datetime | ISO 8601 timestamp | `\"2026-09-15T10:30:00Z\"` |\n| Dropdown | Selected option value | `\"annual_invoice\"` |\n| Multi-select | Array of selected option values | `[\"US\", \"IN\"]` |\n| Currency | `{ \"type\": \"\", \"value\": number }` | `{ \"type\": \"USD\", \"value\": 12000 }` |\n| Duration | `{ \"days\": int, \"type\": \"DAYS\\|MONTHS\\|YEARS\", \"value\": int }` | `{ \"days\": 180, \"type\": \"MONTHS\", \"value\": 6 }` |\n| Address | Object with address fields | `{ \"line_one\": \"350 Fifth Avenue\", \"city\": \"New York\", \"country\": \"United States\" }` |\n| Repeating group | Array of row objects | `[{\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}}]` |\n| File / attachment | File object or uploaded file reference supported by the workflow | `{ \"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\" }` |\n\nSample contract data:\n\n```json\n{\n \"agreement_date\": \"2026-03-28\",\n \"renewal_review_at\": \"2026-09-15T10:30:00Z\",\n \"customer_name\": \"Acme Inc.\",\n \"billing_currency\": {\"type\": \"USD\", \"value\": 12000},\n \"subscription_term\": {\"type\": \"MONTHS\", \"value\": 12, \"days\": 365},\n \"auto_renewal\": true,\n \"notice_period_days\": 30,\n \"service_countries\": [\"US\", \"IN\"],\n \"billing_address\": {\n \"line_one\": \"350 Fifth Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"country\": \"United States\",\n \"zipcode\": \"10118\"\n },\n \"pricing_schedule\": [\n {\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}},\n {\"milestone\": \"Annual subscription\", \"amount\": {\"type\": \"USD\", \"value\": 7000}}\n ],\n \"msa_attachment\": {\"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\"}\n}\n```\n" summary: Generate Contract Preview tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/GenerateContractPreviewRequest' examples: PreviewRequest: value: contract_template_id: 1204 contract_data: agreement_date: '2026-03-28' customer_name: Acme Inc. subscription_term: type: MONTHS value: 12 days: 365 billing_currency: type: USD value: 12000 counter_party_details: - name: Acme Inc. email: legal@acme.example summary: Preview request application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/GenerateContractPreviewRequest' multipart/form-data: schema: $ref: '#/components/schemas/GenerateContractPreviewRequest' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: type: string format: binary description: Preview PDF File x-tagGroup: Contracts /api/v2.1/public/contracts/upload_review_contracts/: post: operationId: v2.1_public_contracts_upload_review_contracts_create description: "\nThis API endpoint supports uploading Third-Party Paper (TPP) contracts and optionally allows for a review request.\n\n`contract_type_id` must be linked to a published Third-Party Paper upload workflow.\nIf this linkage is missing, the API can fail with `SD_CONTRACTS_00289`.\n\nIt accepts intake form data.\n\nThe Intake Form Data should have the following data types with the following output:\n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n
TypeData FormatSample
Duration\n {\"days\": int, \"type\": DurationKind, \"value\": int}
\n `DurationKind`: `DAYS` or `MONTHS` or `YEARS`\n
{\"days\": 180, \"type\": \"MONTHS\", \"value\": 6}
Date\n String formatted date in form YYYY-MM-dd\n \"2019-11-29\"
Dropdown\n Value as returned in options. Can be string or number.\n \"1\"
String\n A string value.\n \"Something\"
Currency\n {\"type\": CurrencyCode, \"value\": float}
\n Where currencyCode: \"INR\", \"USD\", \"SGD\", \"EUR\"\n
{\"type\": \"INR\", \"value\": 15000.00}
Check-box\n A boolean value\n true
text-box\n A string value. Can be multi-line\n \"Not Applicable\\nBecause...\"
number\n A numeric value. Can be int or float\n 4 or 3.14
\n\n\n### Sample Intake Form Data:\n```\n{\n \"term\": {\"days\": 180, \"type\": \"MONTHS\", \"value\": 6},\n \"notes\": \"Not Applicable\",\n \"capacity\": 15,\n \"setup_fee\": {\"type\": \"INR\", \"value\": 30000.00},\n \"start_date\": \"2019-11-29\",\n \"yes_discounts\": false,\n \"payment_method\": \"1\",\n \"suggestions\": \"No suggestions\"\n}\n```\n" summary: Upload Contract for Review tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ContractUploadForReviewRequest' examples: UploadForReviewRequest: value: contract_name: Acme Vendor Paper contract_type_id: 1 file_name: vendor-paper.pdf file_base64: base64 encoded string of the PDF file creator_organization_entity_id: 1 counterparty_organization_name: Acme Corporation counterparty_is_individual: false counterparty_poc_details: first_name: Avery last_name: Stone email: legal@acme.example reviewer: org_user_email: reviewer@spotdraft.example description: Please review the indemnity clause and payment terms. intake_form_data: term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice summary: Upload for review request application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ContractUploadForReviewRequest' multipart/form-data: schema: $ref: '#/components/schemas/ContractUploadForReviewRequest' required: true security: - ClientId: [] ClientSecret: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ContractResponseV2' examples: Example1: value: id: T-1234 created: '2021-05-20T04:52:04Z' contract_name: Acme Corporation NDA contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED created_by: Morgan Freeman counter_party_name: Mike Reed contract_type_name: Historic contract_type_id: 103 external_metadata: {} created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 summary: Example 1 description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/upload_sign_contracts/: post: operationId: v2.1_public_contracts_upload_sign_contracts_create description: "\nThis API can be used to create a new Third-Party Paper (TPP) contract for signing.\nUse this API when you want to upload a new contract and send it for signing.\n\n`contract_type_id` must be linked to a published Third-Party Paper upload workflow.\nIf this linkage is missing, the API can fail with `SD_CONTRACTS_00289`.\n\nIt accepts intake form data.\n\nThe Intake Form Data should have the following data types with the following output:\n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n
TypeData FormatSample
Duration\n {\"days\": int, \"type\": DurationKind, \"value\": int}
\n `DurationKind`: `DAYS` or `MONTHS` or `YEARS`\n
{\"days\": 180, \"type\": \"MONTHS\", \"value\": 6}
Date\n String formatted date in form YYYY-MM-dd\n \"2019-11-29\"
Dropdown\n Value as returned in options. Can be string or number.\n \"1\"
String\n A string value.\n \"Something\"
Currency\n {\"type\": CurrencyCode, \"value\": float}
\n Where currencyCode: \"INR\", \"USD\", \"SGD\", \"EUR\"\n
{\"type\": \"INR\", \"value\": 15000.00}
Check-box\n A boolean value\n true
text-box\n A string value. Can be multi-line\n \"Not Applicable\\nBecause...\"
number\n A numeric value. Can be int or float\n 4 or 3.14
\n\n\n### Sample Intake Form Data:\n```\n{\n \"term\": {\"days\": 180, \"type\": \"MONTHS\", \"value\": 6},\n \"notes\": \"Not Applicable\",\n \"capacity\": 15,\n \"setup_fee\": {\"type\": \"INR\", \"value\": 30000.00},\n \"start_date\": \"2019-11-29\",\n \"yes_discounts\": false,\n \"payment_method\": \"1\",\n \"suggestions\": \"No suggestions\"\n}\n```\n" summary: Upload Contract for Signature tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ContractUploadForSignatureRequest' examples: UploadForSignatureRequest: value: contract_name: Acme Corporation NDA contract_type_id: 1 file_name: Acme_nda.pdf file_base64: base64 encoded string of the PDF file creator_organization_entity_id: 1 counterparty_organization_name: Acme Corporation external_metadata: id: hubspot-deal-10024 integration_name: HubSpot record_type: Deal record_data: deal_stage: contractsent owner_email: owner@acme.example counterparty_is_individual: false counterparty_poc_details: first_name: Avery last_name: Stone email: legal@acme.example intake_form_data: term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice business_user_email: owner@spotdraft.example summary: Upload for signature request application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ContractUploadForSignatureRequest' multipart/form-data: schema: $ref: '#/components/schemas/ContractUploadForSignatureRequest' required: true security: - ClientId: [] ClientSecret: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ContractResponseV2' examples: Example1: value: id: T-1234 created: '2021-05-20T04:52:04Z' contract_name: Acme Corporation NDA contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED created_by: Morgan Freeman counter_party_name: Mike Reed contract_type_name: Historic contract_type_id: 103 external_metadata: {} created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 summary: Example 1 description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/webhooks/re_trigger_latest/: post: operationId: v2.1_public_contracts_webhooks_re_trigger_latest_create description: "\n Re-trigger the last webhook call made for all given contracts.\n " summary: Re-trigger Contract Webhooks tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/RetriggerLatestWebhooksRequest' examples: Example1: value: contract_ids: - 1 - 2 - 3 summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RetriggerLatestWebhooksRequest' multipart/form-data: schema: $ref: '#/components/schemas/RetriggerLatestWebhooksRequest' required: true security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: type: object properties: message: type: string default: Success description: Success '404': content: application/json: schema: type: object properties: detail: type: string default: Not Found description: Not Found x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/content: get: operationId: v2.1_public_contracts_content_retrieve description: "\n Retrieve the text content of a contract in different formats.\n\n **Formats:**\n - `text`: Returns the full contract text as a single string\n - `segments`: Returns the contract text as an array of segments with metadata\n\n **Feature Flags:**\n This API requires `FULL_TEXT_SEARCH` to be enabled for the workspace.\n\n **Content Availability:**\n Content must be previously extracted to be available through this API.\n\n This API supports user scoping when the 'Enforce-User-Scoping'\n header is set to 'true'. When enabled, the API will only return content for\n contracts that the specified user has access to based on their permissions.\n " summary: Get Contract Content parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true - in: query name: contract_version_id schema: type: integer description: ID of the contract version. If not provided, latest published version is used. - in: query name: text_format schema: type: string enum: - segments - text default: text description: Format of the returned content (text or segments) tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ContractContentResponse' examples: Example1: value: contract_id: T-12345 content_format: text content: This Agreement is entered into between... segments: null extraction_status: completed last_updated: '2024-01-15T10:30:00Z' summary: Example 1 Example2: value: contract_id: T-12345 content_format: segments content: null segments: - segment_text: This Agreement is entered into... page_number: 1 position: 1 extraction_status: completed last_updated: '2024-01-15T10:30:00Z' summary: Example 2 description: Success '400': description: Invalid format parameter '404': description: Contract not found x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/content/scanned: get: operationId: v2.1_public_contracts_content_scanned_retrieve description: "\n Retrieve extracted text content from a scanned PDF contract.\n It uses mr-ping endpoints to check if the contract is scanned and extract the text content.\n /is_scanned_pdf to check if the contract is scanned and /scanned_pdf_to_text to extract the text content from the scanned PDF.\n\n This API supports user scoping when the 'Enforce-User-Scoping'\n header is set to 'true'. When enabled, the API will only return content for\n contracts that the specified user has access to based on their permissions.\n\n Optionally pass `contract_version_id` as a query parameter to use a specific\n contract version; otherwise the last published version is used.\n " summary: Get Scanned Contract Content parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true - in: query name: contract_version_id schema: type: integer description: ID of the contract version. If not provided, latest published version is used. tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ScannedContractContentResponse' examples: Example1: value: contract_id: 1090393 content: This Agreement is entered into between... summary: Example 1 description: Success '400': description: Invalid contract_version_id parameter '404': description: Contract not found x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/download: post: operationId: v2.1_public_contracts_download_create description: 'Generates and returns the latest downloadable copy of the contract. Use this when you need the contract file itself rather than a temporary download URL.' summary: Download Contract File parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: type: string format: binary description: PDF copy of the Contract x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/download_link: post: operationId: v2.1_public_contracts_download_link_create description: 'Returns a temporary download URL for the contract file. Optionally provide a `format` in the request body (`PDF`, `DOCX`, or `DOCX_WITH_FALLBACK_TO_PDF`). If omitted, the response defaults to `PDF`.' summary: Create Contract Download Link parameters: - in: path name: composite_id schema: type: string pattern: ^[HT\-0-9]+$ required: true - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/DownloadLinkRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/DownloadLinkRequest' multipart/form-data: schema: $ref: '#/components/schemas/DownloadLinkRequest' security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/DownloadUrl' examples: Example: value: url: https://storage.googleapis.com/some/path?signature=ASDASD file_name: Standard NDA a3b2.pdf current_version_id: 1 description: Download Link x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/intake_form/response: patch: operationId: v2.1_public_contracts_intake_form_response_partial_update description: ' Update intake-form data for the uploaded contract. For information about construction of payload, refer to `Sample Intake Form Data` in this [section](#tag/v21-contract-apis/POST/api/v2.1/public/contracts/upload_sign_contracts/). Get the Intake form questionnaire details using the [Get Intake Form Questionnaire](#tag/v21-contract-types/GET/api/v2.1/public/contract_types/intake_form_questionnaire/) API. The request is merged as a partial update into the latest intake-form response. Unknown keys are currently accepted, so clients should send only questionnaire field names. ' summary: Edit Intake Form Response parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedIntakeFormData' examples: Example1: value: term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedIntakeFormData' multipart/form-data: schema: $ref: '#/components/schemas/PatchedIntakeFormData' security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExternalQuestionnaireResponseDomainModel' examples: Example1: value: data: name: Admin is_individual: false created: '2009-08-06T00:00:00Z' summary: Example 1 description: Intake form response details x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/mark_for_execution/: post: operationId: v2.1_public_contracts_mark_for_execution_create description: Marks the contract for execution summary: Marks the Contract for Execution parameters: - in: path name: composite_id schema: type: string pattern: ^[HT\-0-9]+$ required: true - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/MarkForExecutionRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/MarkForExecutionRequest' multipart/form-data: schema: $ref: '#/components/schemas/MarkForExecutionRequest' security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': description: Successfully Marked for Execution x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/send_to_counterparties: post: operationId: v2.1_public_contracts_send_to_counterparties_create description: Returns status code 200 if successful summary: Send Contract to Counterparties parameters: - in: path name: composite_id schema: type: string pattern: ^[HT\-0-9]+$ required: true - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/SendToCounterparty' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/SendToCounterparty' multipart/form-data: schema: $ref: '#/components/schemas/SendToCounterparty' required: true security: - ClientId: [] ClientSecret: [] responses: '200': description: Contract sent to counterparties. x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/signatories/resend_email/: post: operationId: v2.1_public_contracts_signatories_resend_email_create description: "\n This API can be used to resend email to signatory associated to the contract.\n" summary: Resend Email to the Signatory of a Contract. parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateSignatoryResendEmailAPIRequest' examples: Example1: value: email_id: mike_reed@yahoo.com summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CreateSignatoryResendEmailAPIRequest' multipart/form-data: schema: $ref: '#/components/schemas/CreateSignatoryResendEmailAPIRequest' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': description: Resend request accepted. x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/status: get: operationId: v2.1_public_contracts_status_retrieve description: 'Returns the display **status** and **contract name** for the requested contract. When the `Enforce-User-Scoping` header is `true`, only contracts the specified user may access (based on their permissions) are returned.' summary: Get Contract Status parameters: - in: path name: composite_id schema: type: string pattern: ^[HT\-0-9]+$ required: true - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExternalContractStatus' examples: Example: value: contract_status: EXECUTED contract_name: Service Agreement - Acme Corp description: Contract Status x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/status/void: post: operationId: v2.1_public_contracts_status_void_create description: ' Voids a contract and stores the provided void note. This endpoint is available on the v2.1 surface but retains the original v1 contract tag family because it operates on the legacy contract flow. ' summary: Void Contract parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/VoidContractRequestData' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/VoidContractRequestData' multipart/form-data: schema: $ref: '#/components/schemas/VoidContractRequestData' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '204': description: No response body '400': content: application/json: schema: type: object properties: detail: type: string description: Error detail. required: - detail examples: Example: value: detail: Cannot void an executed contract. description: Voiding failed. x-tagGroup: Contracts /api/v2.1/public/contracts/{composite_id}/unmark_for_execution: post: operationId: v2.1_public_contracts_unmark_for_execution_create description: Unmarks the contract for execution and voids the signature service resource (For eg. DocuSign's envelope if enabled). summary: Unmark the Contract for Execution parameters: - in: path name: composite_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ContractUnMarkForExecutionRequest' examples: Example1: value: note: Client requested some edits to the contract summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ContractUnMarkForExecutionRequest' multipart/form-data: schema: $ref: '#/components/schemas/ContractUnMarkForExecutionRequest' security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': description: Contract unmarked for execution. '400': content: application/json: schema: type: object properties: detail: type: string description: Error detail. required: - detail examples: Example: value: detail: Unable to unmark the contract for execution. description: Invalid request. x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/business_user/: patch: operationId: v2.1_public_contracts_business_user_partial_update description: ' Updates the business user associated with the contract. Use this when ownership needs to move to a different workspace user after the contract has been created. ' summary: Update Business User for a Contract parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedExternalUpdateContractBusinessUserRequest' examples: Example1: value: user_id: 1234 update_user_task_on_bu_update: true summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedExternalUpdateContractBusinessUserRequest' multipart/form-data: schema: $ref: '#/components/schemas/PatchedExternalUpdateContractBusinessUserRequest' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExternalContractUserResponse' examples: Example1: value: user_id: 1234 type: BUSINESS contract_id: 1234 summary: Example 1 description: Success '404': content: application/json: schema: type: object properties: detail: type: string default: Not Found description: Not Found x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/contract_data: patch: operationId: v2.1_public_contracts_contract_data_partial_update description: "Updates the structured contract data used to populate the contract template.\n\nUse this to refresh template field values before the contract is finalized. Historic contracts are not supported for this endpoint.\n\n\nThe `contract_data` object must use **template field names as keys**. Each value should match the data type configured for that field in SpotDraft.\n\n| Field type | Expected value | Example |\n| ---------- | -------------- | ------- |\n| String / text | String | `\"Acme Inc.\"` |\n| Multi-line text | String with line breaks if needed | `\"Not applicable\\nCustomer redlines pending\"` |\n| Number | Integer or decimal | `15` or `3.14` |\n| Boolean / checkbox | Boolean | `true` |\n| Date | `YYYY-MM-DD` | `\"2026-03-28\"` |\n| Datetime | ISO 8601 timestamp | `\"2026-09-15T10:30:00Z\"` |\n| Dropdown | Selected option value | `\"annual_invoice\"` |\n| Multi-select | Array of selected option values | `[\"US\", \"IN\"]` |\n| Currency | `{ \"type\": \"\", \"value\": number }` | `{ \"type\": \"USD\", \"value\": 12000 }` |\n| Duration | `{ \"days\": int, \"type\": \"DAYS\\|MONTHS\\|YEARS\", \"value\": int }` | `{ \"days\": 180, \"type\": \"MONTHS\", \"value\": 6 }` |\n| Address | Object with address fields | `{ \"line_one\": \"350 Fifth Avenue\", \"city\": \"New York\", \"country\": \"United States\" }` |\n| Repeating group | Array of row objects | `[{\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}}]` |\n| File / attachment | File object or uploaded file reference supported by the workflow | `{ \"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\" }` |\n\nSample contract data:\n\n```json\n{\n \"agreement_date\": \"2026-03-28\",\n \"renewal_review_at\": \"2026-09-15T10:30:00Z\",\n \"customer_name\": \"Acme Inc.\",\n \"billing_currency\": {\"type\": \"USD\", \"value\": 12000},\n \"subscription_term\": {\"type\": \"MONTHS\", \"value\": 12, \"days\": 365},\n \"auto_renewal\": true,\n \"notice_period_days\": 30,\n \"service_countries\": [\"US\", \"IN\"],\n \"billing_address\": {\n \"line_one\": \"350 Fifth Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"country\": \"United States\",\n \"zipcode\": \"10118\"\n },\n \"pricing_schedule\": [\n {\"milestone\": \"Implementation\", \"amount\": {\"type\": \"USD\", \"value\": 5000}},\n {\"milestone\": \"Annual subscription\", \"amount\": {\"type\": \"USD\", \"value\": 7000}}\n ],\n \"msa_attachment\": {\"file_name\": \"security-schedule.pdf\", \"content_type\": \"application/pdf\"}\n}\n```\n" summary: Update Contract Data parameters: - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true - in: header name: user-email schema: type: string description: The email address of the user to act as (when using client-secret authentication). This header attributes actions taken using the API to the given user. tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedContractDataUpdateRequest' examples: Example1: value: data: term: days: 180 type: MONTHS value: 6 notes: Not Applicable capacity: 15 setup_fee: type: INR value: 30000.0 start_date: '2019-11-29' yes_discounts: false payment_method: '1' suggestions: No suggestions summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedContractDataUpdateRequest' multipart/form-data: schema: $ref: '#/components/schemas/PatchedContractDataUpdateRequest' required: true security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PatchedContractDataUpdateRequest' examples: Example1: value: data: term: days: 180 type: MONTHS value: 6 notes: Not Applicable capacity: 15 setup_fee: type: INR value: 30000.0 start_date: '2019-11-29' yes_discounts: false payment_method: '1' suggestions: No suggestions summary: Example 1 description: Updated Data '400': content: application/json: schema: type: object properties: detail: type: string default: Contract cannot be updated because it has been executed. code: type: string default: SD_PUBLIC_00009 description: Contract cannot be updated in its current status x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/contract_relation/: post: operationId: v2.1_public_contracts_contract_relation_create description: "\n This 'Create Contract relations' API can be used to create a relation between two contracts,\n identifying <related_contract_id> as a <relation_type> of <contract_id>.\n" summary: Create Contract Relations parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ExternalContractRelationCreateRequest' examples: Example1: value: related_contract_id: 1234 relation_type: CHILD summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ExternalContractRelationCreateRequest' multipart/form-data: schema: $ref: '#/components/schemas/ExternalContractRelationCreateRequest' required: true security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ExternalContractRelationResponse' examples: Example1: value: id: 1000 related_contract_id: 1234 relation_type: CHILD created: '2021-05-20T04:52:04Z' summary: Example 1 description: Success '400': content: application/json: schema: type: object properties: detail: type: string default: Unable to set relation as it is leading to a circular dependency between the contracts. code: type: string default: SD_CONTRACTS_00093 description: Circular dependency between the contracts x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/download_docx/: post: operationId: v2.1_public_contracts_download_docx_create description: ' Downloads a DOCX version of the contract. If the current version does not have a DOCX artifact, SpotDraft returns the last available DOCX version for the contract. ' summary: Download Docx for a Contract parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicDownloadContractDocxRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PublicDownloadContractDocxRequest' multipart/form-data: schema: $ref: '#/components/schemas/PublicDownloadContractDocxRequest' security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: type: string format: binary description: DOCX copy of the Contract x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/process_metrics/: get: operationId: v2.1_public_contracts_process_metrics_retrieve description: ' Returns process-metric timestamps and workflow-state measurements tracked for the contract. Use this for reporting, SLA monitoring, or contract-cycle analytics. ' summary: Get Contract Process Metric Data parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ContractProcessMetricResponse' examples: Example1: value: contract_id: 1234 contract_sent_to_cp_datetime: '2019-08-24T14:15:22Z' cp_added_info_initial_datetime: '2019-08-24T14:15:22Z' cp_added_info_latest_datetime: '2019-08-24T14:15:22Z' cp_opened_review_email_datetime: '2019-08-24T14:15:22Z' contract_signed_by_signatory_list: - is_creator_party: true signed_datetime: '2019-08-24T14:15:22Z' signatory_email: Mike_reed@yahoo.com contract_turns: manual_override_reason: Reason for manual override last_turn_change_datetime: '2019-08-24T14:15:22Z' last_turn_change_org_user_email: johndoe@example.com no_of_turns: 2 contract_executed_datetime: '2019-08-24T14:15:22Z' type_of_workflow: UPLOAD_SIGN contract_status: COMPLETED marked_for_signature_datetime: '2019-08-24T14:15:22Z' pending_with: COUNTER_PARTY summary: Example 1 description: Success '404': content: application/json: schema: type: object properties: detail: type: string default: Not Found description: Not Found x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/questionnaire/responses/: get: operationId: v2.1_public_contracts_questionnaire_responses_retrieve description: Returns the saved questionnaire answers for the contract. Use `questionnaire_type` to choose whether you want intake-form answers or template-questionnaire answers. summary: Get Questionnaire Response parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true - in: query name: questionnaire_type schema: type: string description: 'Enum: `INTAKE_FORM/TEMPLATE`. Type of the questionnaire for which response needs to be returned.' required: true tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExternalContractQuestionnairePublicResponse' examples: Example1: value: questionnaire_response_data: department: product respondents: - created_at: '2023-06-14T10:46:15.205587Z' created_by: Mike Reed org_name: Acme Inc. summary: Example 1 description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/related_contracts/: get: operationId: v2.1_public_contracts_related_contracts_retrieve description: "\n This API gets all related contracts for the given contract.\n Related contracts can be of type CHILD, PARENT, ADDENDUM, or AMENDMENT.\n Only contracts that the requesting user has access to are returned.\n" summary: List Related Contracts parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true - in: query name: limit schema: type: integer default: 10 description: The number of items to return per page. - in: query name: page schema: type: integer default: 1 description: The page to return. Page numbers start at 1. tags: - V2.1 Contract APIs security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ExternalRelatedContractListResponse' examples: Example1: value: page: 1 limit: 10 total_results: 2 results: - id: 1000 contract: id: 1234 name: Acme Corporation NDA counter_party_list: - Acme Corp display_status: EXECUTED relation_type: CHILD - id: 1001 contract: id: 5678 name: Acme Corporation MSA counter_party_list: - Acme Corp display_status: DRAFT relation_type: AMENDMENT summary: Example 1 description: Success x-tagGroup: Contracts /api/v2.1/public/contracts/{contract_id}/review_request/: post: operationId: v2.1_public_contracts_review_request_create description: ' Creates a manual legal review task on the contract and assigns it to a user or role. Use this to trigger a review workflow from your own intake or contracting application. ' summary: Create and Assign a Legal Review Task parameters: - in: path name: contract_id schema: type: integer description: ID of the Contract. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/ReviewRequestCreateRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ReviewRequestCreateRequest' multipart/form-data: schema: $ref: '#/components/schemas/ReviewRequestCreateRequest' security: - ClientId: [] ClientSecret: [] - OAuthBearer: [] responses: '200': description: Review task created. x-tagGroup: Contracts /api/v2.1/public/supported_documents/{contract_id}/: post: operationId: v2.1_public_supported_documents_create description: Uploads an additional supporting document for the contract, such as a schedule, annexure, or supporting evidence file. The file is attached to the contract record and can be used alongside the primary contract document. summary: Upload Supported Documents for a Given Contract parameters: - in: path name: contract_id schema: type: string description: ID of the Contract. Should be of the form T-123 or H-123. T stands for Template contracts and H stands for Historical contracts. required: true tags: - V2.1 Contract APIs requestBody: content: application/json: schema: $ref: '#/components/schemas/PublicSupportedDocumentCreateAPIRequest' examples: Example1: value: name: Acme Corporation Related Document file_name: Acme Related Document.pdf file_base64: base64 encoded string of the file content summary: Example 1 application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PublicSupportedDocumentCreateAPIRequest' multipart/form-data: schema: $ref: '#/components/schemas/PublicSupportedDocumentCreateAPIRequest' required: true security: - ClientId: [] ClientSecret: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/SupportedDocumentResponse' examples: Example1: value: id: '199' name: Acme Corporation Related Document created: '2022-10-10' summary: Example 1 description: Success '400': content: application/json: schema: type: object properties: detail: type: string description: Error detail. status_code: type: integer description: HTTP status code. code: type: string description: Application error code. message: type: string description: Human-readable message. required: - detail - status_code - code - message description: Bad Request '403': content: application/json: schema: type: object properties: detail: type: string description: Error detail. status_code: type: integer description: HTTP status code. code: type: string description: Application error code. message: type: string description: Human-readable message. required: - detail - status_code - code - message description: Forbidden x-tagGroup: Contracts components: schemas: ExternalCreateContractSerializerV2_1: type: object description: Defines the data that is required for contract creation for API V2.1 properties: contract_template_id: type: integer description: ID of the SpotDraft contract template used to generate the contract. contract_data: description: 'A key-value object where each key must match a template field name from the contract template. Values should use the data type expected by that template field. Common patterns include: - `string`: free-form text - `number`: integer or decimal values - `boolean`: `true` or `false` - `date`: `YYYY-MM-DD` - `datetime`: ISO 8601 timestamp such as `2026-03-28T10:15:00Z` - `duration`: `{ "type": "MONTHS" | "YEARS" | "DAYS", "value": number, "days": number }` - `currency`: `{ "type": "USD" | "INR" | ... , "value": number }` - `dropdown`: the selected option value as configured in the template - `multi_select`: an array of selected option values - `address`: an object such as `{ "line_one": ..., "city": ..., "country": ..., "zipcode": ... }` - `repeating`: an array of row objects for repeating groups or dynamic tables - `file`: a file object or uploaded file reference where the workflow supports attachments Use template field names exactly as configured in SpotDraft.' counter_party_details: type: array items: $ref: '#/components/schemas/ExternalCounterPartyDetailsSerializerV2_1' description: A list of counterparties involved in the contract. Use ISO country and jurisdiction codes in v2.1 organization details. external_metadata: description: Optional external system metadata to associate with the contract, such as a CRM or ERP record reference. entity_reference_id: type: string description: Optional creator organization entity reference ID. If omitted, SpotDraft uses the primary organization entity for the creator organization. workflow_config: $ref: '#/components/schemas/WorkflowConfig' send_to_counterparty_config: allOf: - $ref: '#/components/schemas/SendToCounterparty' description: Optional email-delivery settings to apply when sending the contract to counterparties. contract_name: type: string description: Optional contract display name. If omitted, SpotDraft derives the contract name from the workflow or template configuration. signatories: type: array items: $ref: '#/components/schemas/ExternalCreateContractSignatory' description: An optional list of signatories for the contract. If provided, each signatory must be associated with a counterparty specified in `counter_party_details`. is_embedded_contract: type: boolean default: false description: Set to true when the contract will be used in an embedded signing flow. required: - contract_data - contract_template_id - counter_party_details EmailBase64Attachment: type: object properties: file_name: type: string mime_type: type: string content_base64: type: string required: - content_base64 - file_name - mime_type ExternalContractQuestionnairePublicResponse: title: ExternalContractQuestionnairePublicResponse type: object properties: questionnaire_response_data: title: Questionnaire Response Data description: Questionnaire response data for the contract. type: object respondents: title: Respondents description: List of users who answered the questionnaire. type: array items: title: ExternalContractQuestionnaireRespondentPublicData description: Respondent data for contract questionnaire responses type: object properties: created_at: title: Created At description: Time when the respondent filled the questionnaire for the contract type: string format: date-time created_by: title: Created By description: Respondent name who filled questionnaire for the contract type: string org_name: title: Org Name description: Name of the organization to which respondent belongs to. type: string required: - questionnaire_response_data examples: - questionnaire_response_data: department: product respondents: - created_at: '2023-06-14T10:46:15.205587Z' created_by: Mike Reed org_name: Acme Inc. PublicDownloadContractDocxRequest: title: PublicDownloadContractDocxRequest type: object properties: fallback_to_last_available_docx: title: Fallback To Last Available Docx description: 'Whether to fallback to last available DOCX version if current contract version is not in DOCX format. Note: This might return an outdated DOCX version if the current version which is being used is in a different format (e.g., PDF). The returned DOCX may not reflect recent changes made in the current version.' default: false type: boolean ContractResponseV2: title: ContractResponseV2 description: Must be kept in sync with ExternalContractV3Serializer type: object properties: id: title: Id description: The Id of the contract on SpotDraft's Platform. type: string created: title: Created description: The date and time at which the contract was created or uploaded on SpotDraft's platform. type: string format: date-time contract_name: title: Contract Name description: The name of the contract that is visible to users. type: string contract_link: title: Contract Link description: The Url to view the contract. type: string contract_status: title: Contract Status description: The status of the contract. type: string created_by: title: Created By description: The full name of user who created or uploaded the executed contract on to SpotDraft's platform. type: string counter_party_name: title: Counter Party Name description: The full name of the counter party involved in the contract. type: string contract_type_name: title: Contract Type Name description: The type of the contract. type: string contract_type_id: title: Contract Type Id description: The ID of the contract type. type: integer external_metadata: title: External Metadata type: object reference_id: title: Reference Id type: string created_by_user_name: title: Created By User Name description: The full name of user who created or uploaded the executed contract on to SpotDraft's platform. type: string created_by_user_email: title: Created By User Email description: The email of user who created or uploaded the executed contract on to SpotDraft's platform. type: string created_by_workspace: title: Created By Workspace description: The workspace ID of the user who created or uploaded the executed contract on to SpotDraft's platform. type: integer required: - id - created - contract_name - contract_link - contract_status - created_by - counter_party_name - contract_type_name - contract_type_id - created_by_workspace examples: - id: T-1234 created: '2021-05-20T04:52:04Z' contract_name: Acme Corporation NDA contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED created_by: Morgan Freeman counter_party_name: Mike Reed contract_type_name: Historic contract_type_id: 103 external_metadata: {} created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 ContractListResponseV2: title: ContractListResponseV2 type: object properties: page: title: Page type: integer limit: title: Limit type: integer total_results: title: Total Results type: integer results: title: Results type: array items: title: ContractResponseV2 description: Must be kept in sync with ExternalContractV3Serializer type: object properties: id: title: Id description: The Id of the contract on SpotDraft's Platform. type: string created: title: Created description: The date and time at which the contract was created or uploaded on SpotDraft's platform. type: string format: date-time contract_name: title: Contract Name description: The name of the contract that is visible to users. type: string contract_link: title: Contract Link description: The Url to view the contract. type: string contract_status: title: Contract Status description: The status of the contract. type: string created_by: title: Created By description: The full name of user who created or uploaded the executed contract on to SpotDraft's platform. type: string counter_party_name: title: Counter Party Name description: The full name of the counter party involved in the contract. type: string contract_type_name: title: Contract Type Name description: The type of the contract. type: string contract_type_id: title: Contract Type Id description: The ID of the contract type. type: integer external_metadata: title: External Metadata type: object reference_id: title: Reference Id type: string created_by_user_name: title: Created By User Name description: The full name of user who created or uploaded the executed contract on to SpotDraft's platform. type: string created_by_user_email: title: Created By User Email description: The email of user who created or uploaded the executed contract on to SpotDraft's platform. type: string created_by_workspace: title: Created By Workspace description: The workspace ID of the user who created or uploaded the executed contract on to SpotDraft's platform. type: integer required: - id - created - contract_name - contract_link - contract_status - created_by - counter_party_name - contract_type_name - contract_type_id - created_by_workspace examples: - id: T-1234 created: '2021-05-20T04:52:04Z' contract_name: Acme Corporation NDA contract_link: https://app.spotdraft.com/contracts/v2/4322 contract_status: EXECUTED created_by: Morgan Freeman counter_party_name: Mike Reed contract_type_name: Historic contract_type_id: 103 external_metadata: {} created_by_user_name: Elena Kagan created_by_user_email: elena@acme.com created_by_workspace: 1 required: - page - limit - total_results - results ContentFormatEnum: enum: - text - segments type: string CreateExecutedContractAPIRequest: title: CreateExecutedContractAPIRequest type: object properties: contract_name: title: Contract Name description: The display name of the executed contract that is visible to users. This is caller-provided metadata and is not inferred from file contents. type: string file_name: title: File Name description: The name of the file being uploaded. This is used when the file is downloaded. Expected to be a fully qualified file name with an extension. Only `.pdf` files are accepted. type: string file_content: title: File Content description: The contents of the file as a base64 encoded string. The decoded file must be a valid PDF. type: string contract_type_id: title: Contract Type Id description: 'The ID of the contract type for this executed contract. Use the [Get Contract Types](#tag/v2-contract-types/GET/api/v2/public/contract_types/) API to get this ID. ' type: integer organization_entity_id: title: Organization Entity Id description: 'The ID of the organization entity for this executed contract. Use the [Get Organization Entity](#tag/v21-organizations/GET/api/v2.1/public/organizations/entities/) API to get this ID. ' type: integer counterparty_details: title: Counterparty Details description: The list of counterparties involved in the executed contract. Counterparty naming values are caller-provided and used for display/association metadata. type: array items: title: CounterPartyDetails type: object properties: is_individual: title: Is Individual description: Defines if this Counterparty is an individual or an organization like a company type: boolean organization_type: title: Organization Type description: The type of the counterparty if it is an organization. Expects values like LLC, LLP, etc. Please ask help@spotdraft.com for valid values. type: string organization_name: title: Organization Name description: The name of the counterparty if it is an organization. Expects the name of the company/entity that is the counterparty. Required when `is_individual=false`. type: string organization_details: title: Organization Details type: object properties: jurisdiction: title: Jurisdiction description: The jurisdiction to which this organization belongs. Valid values are defined internally. Please reach out to help@spotdraft.com for a list. type: string address: title: Address type: object properties: city: title: City description: The city name for this address. type: string state: title: State description: The state name for this address. default: '' type: string country: title: Country description: The name of the country associated with this counterparty address. Any value passed here is ignored if `country_iso_code` is passed. Valid values are defined internally. Please ask help@spotdraft.com for more information. type: string zipcode: title: Zipcode description: The zip/pin/postal code for this address. default: '' type: string line_one: title: Line One description: The first line of the address. Usually the apartment, floor, and street information. type: string line_two: title: Line Two description: The second address line (if any). type: string email: title: Email description: The email address associated with this counterparty address (if any). type: string phone: title: Phone description: The phone number associated with this counterparty address (if any). type: string gst_number: title: Gst Number description: The GST Number for this Organization. Can be unset if not available or applicable. type: string tax_id: title: Tax Id description: The VAT/GST/Sales Tax/etc ID for this Organization. type: string country_iso_code: title: Country Iso Code description: The ISO-3166-1 Alpha-2 code of the country associated with this counterparty address. Any value passed here is overrides `country`. Valid values can be found [here](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes). type: string required: - city - country - line_one description: The primary address for this organization (if any) description: Additional details for an organization. Should be set if `is_individual=False` poc_details: title: Poc Details type: object properties: first_name: title: First Name description: The first name of the Point of Contact type: string last_name: title: Last Name description: The last name of the Point of Contact type: string email: title: Email description: The email address of the Point of Contact type: string required: - first_name - last_name - email description: Point of Contact details for this counterparty. Should be the details of the individual for `is_individual=True` and the details of the contact at the counterparty organization in case of `is_individual=False`. party_role_identifier: title: Party Role Identifier description: The unique identifier of the party this counterparty should be assigned to. minLength: 1 type: string required: - is_individual - poc_details examples: - is_individual: true organization_type: Private Limited organization_name: Acme Corporation organization_details: {} poc_details: first_name: Mike last_name: Reed email: Mike_reed@yahoo.com primary_address: city_name: Cincinnati state_name: Ohio country_name: USA zipcode: '513' line_one: 'st: 3, block: 2, Jenkins Road' external_metadata: title: External Metadata type: object properties: id: title: Id description: Identifier of the record in the external system. integration_name: title: Integration Name description: Name of the external integration, for example Salesforce. type: string record_type: title: Record Type description: External record type, for example Opportunity or Account. type: string record_data: title: Record Data description: Arbitrary metadata payload from the external system. type: object object_configuration_id: title: Object Configuration Id description: Optional public identifier for a native integration object configuration. When provided, also send `record_type`. The API resolves and stores the corresponding internal entity reference. type: string format: uuid description: Optional external system metadata to associate with the executed contract. required: - contract_name - file_name - file_content - contract_type_id - organization_entity_id examples: - contract_name: Acme Corporation NDA file_name: Acme_nda.pdf file_content: base64 encoded string of the file content contract_type_id: 103 organization_entity_id: 78 external_metadata: {} counterparty_details: - is_individual: true organization_type: Private Limited organization_name: Acme Corporation organization_details: {} poc_details: first_name: Mike last_name: Reed email: Mike_reed@yahoo.com primary_address: city_name: Cincinnati state_name: Ohio country_name: USA zipcode: '513' line_one: 'st: 3, block: 2, Jenkins Road' ContractUploadForReviewRequest: title: ContractUploadForReviewRequest type: object properties: contract_name: title: Contract Name description: The name of the uploaded contract that is visible to users. type: string contract_type_id: title: Contract Type Id description: The ID of the contract type for this uploaded contract. Use the [Get Contract Types](#tag/V2.1-Contract-Type-APIs/operation/v2.1_public_contract_types_list) API to get this ID. type: integer file_name: title: File Name description: The name of the file being uploaded. This is used when the file is downloaded. Expected to be a fully qualified file name with an extension. type: string file_base64: title: File Base64 description: The contents of the file as a base64 encoded string. type: string creator_organization_entity_id: title: Creator Organization Entity Id description: The ID of the organization entity for the creator party of the uploaded contract. Use the [Get Organization Entities](#tag/V2.1-Organization-APIs/operation/v2.1_public_organizations_entities_list) API to get this ID. type: integer external_metadata: title: External Metadata type: object properties: id: title: Id description: Identifier of the record in the external system. integration_name: title: Integration Name description: Name of the external integration, for example Salesforce. type: string record_type: title: Record Type description: External record type, for example Opportunity or Account. type: string record_data: title: Record Data description: Arbitrary metadata payload from the external system. type: object object_configuration_id: title: Object Configuration Id description: Optional public identifier for a native integration object configuration. When provided, also send `record_type`. The API resolves and stores the corresponding internal entity reference. type: string format: uuid description: Optional external system metadata to associate with the uploaded contract. reviewer: title: Reviewer type: object properties: org_user_email: title: Org User Email description: Email of the reviewer type: string role_id: title: Role Id description: Role id of reviewer type: integer description: title: Description description: Note to the reviewer default: '' type: string description: Used to set reviewer for contract being uploaded counterparty_workspace_id: title: Counterparty Workspace Id description: workspace_id of counterparty organization. Either this field or `counterparty_organization_name` is required. type: integer counterparty_organization_name: title: Counterparty Organization Name description: The name of the counter party's organization. Either this field or `counterparty_workspace_id` is required. type: string counterparty_is_individual: title: Counterparty Is Individual description: Defines if this Counterparty is an individual or an organization like a company.When not provided organization like company is created. type: boolean counterparty_poc_details: title: Counterparty Poc Details type: object properties: first_name: title: First Name description: The first name of the Point of Contact type: string last_name: title: Last Name description: The last name of the Point of Contact type: string email: title: Email description: The email address of the Point of Contact type: string required: - first_name - last_name - email description: Point of Contact details for this counterparty. Should be the details of the individual for `counterparty_is_individual=True` and the details of the contact at the counterparty organization in case of `counterparty_is_individual=False`. intake_form_data: title: Intake Form Data description: A key-value object keyed by intake-form questionnaire field name. Values must match the question type configured on the upload workflow. Use the Intake Form Questionnaire API to discover the allowed field names and expected value shapes. type: object business_user_email: title: Business User Email description: The email address of the business user for the Upload for Sign contract. type: string format: email creator_signatories: title: Creator Signatories description: Details of the signatories on the creator party side. type: array items: title: CreatorPartySignatoryRequest type: object properties: email: title: Email description: Email of the signatory on the creator party side. type: string format: email title: title: Title description: Title of the signatory. default: '' type: string note: title: Note description: Note for the signatory type: string required: - email required: - contract_name - contract_type_id - file_name - file_base64 examples: - contract_name: Acme Vendor Paper contract_type_id: 1 file_name: vendor-paper.pdf file_base64: base64 encoded string of the PDF file creator_organization_entity_id: 1 counterparty_organization_name: Acme Corporation counterparty_is_individual: false counterparty_poc_details: first_name: Avery last_name: Stone email: legal@acme.example reviewer: org_user_email: reviewer@spotdraft.example description: Please review the indemnity clause and payment terms. intake_form_data: term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice SupportedDocumentResponse: title: SupportedDocumentResponse type: object properties: id: title: Id description: Id of supported document type: integer name: title: Name description: Name of the document type: string created: title: Created description: Datetime when document was created type: string format: date-time required: - id - name - created examples: - id: '199' name: Acme Corporation Related Document created: '2022-10-10' SendToCounterparty: type: object properties: to_emails: type: array items: type: string description: Optional list of primary recipient email addresses. If omitted, SpotDraft uses the configured counterparty recipients for the contract. cc_emails: type: array items: type: string description: Optional list of email addresses to copy on the outbound contract email. bcc_emails: type: array items: type: string description: Optional list of blind-copy email addresses for the outbound contract email. attachment_formats: type: array items: $ref: '#/components/schemas/AttachmentFormatsEnum' description: At least one attachment format is required. Allowed values come from the ContractEmailFormat enum. extra_attachments: type: array items: $ref: '#/components/schemas/EmailBase64Attachment' description: Optional additional attachments to send with the contract email. custom_message: type: string description: Optional custom message to include in the contract email body. subject: type: string description: Optional custom email subject line. required: - attachment_formats OrganizationAddressSerializerV2_1: type: object description: Defines structure for organization address for API v2.1 properties: city: type: string state: type: string default: '' country: type: string zipcode: type: string default: '' line_one: type: string line_two: type: string email: type: string phone: type: string gst_number: type: string tax_id: type: string country_iso_code: type: string required: - city - country_iso_code - line_one WorkflowConfig: type: object properties: auto_send_to_counterparty: type: boolean default: false api_only_contract_edits: type: boolean default: false skip_cp_info_collection: type: boolean default: false skip_creator_info_collection: type: boolean default: false ContractDisplayStatusEnum: enum: - DRAFT - REDLINING - SIGN - EXECUTED - ON_HOLD - VOIDED type: string GenerateContractPreviewRequest: title: GenerateContractPreviewRequest type: object properties: contract_template_id: title: Contract Template Id description: ID of the SpotDraft contract template used to render the preview. type: integer contract_data: title: Contract Data description: 'A key-value object where each key must match a template field name from the contract template. Values should use the data type expected by that template field. Common patterns include: - `string`: free-form text - `number`: integer or decimal values - `boolean`: `true` or `false` - `date`: `YYYY-MM-DD` - `datetime`: ISO 8601 timestamp such as `2026-03-28T10:15:00Z` - `duration`: `{ "type": "MONTHS" | "YEARS" | "DAYS", "value": number, "days": number }` - `currency`: `{ "type": "USD" | "INR" | ... , "value": number }` - `dropdown`: the selected option value as configured in the template - `multi_select`: an array of selected option values - `address`: an object such as `{ "line_one": ..., "city": ..., "country": ..., "zipcode": ... }` - `repeating`: an array of row objects for repeating groups or dynamic tables - `file`: a file object or uploaded file reference where the workflow supports attachments Use template field names exactly as configured in SpotDraft.' type: object organization_entity_id: title: Organization Entity Id description: Optional creator organization entity id used while rendering the preview. type: integer counter_party_details: title: Counter Party Details description: Optional counterparties used to render counterparty variables in the preview. For organizational counterparties, `organization_name` is required. type: array items: title: CounterPartyDetails type: object properties: is_individual: title: Is Individual description: Defines if this Counterparty is an individual or an organization like a company type: boolean organization_type: title: Organization Type description: The type of the counterparty if it is an organization. Expects values like LLC, LLP, etc. Please ask help@spotdraft.com for valid values. type: string organization_name: title: Organization Name description: The name of the counterparty if it is an organization. Expects the name of the company/entity that is the counterparty. Required when `is_individual=false`. type: string organization_details: title: Organization Details type: object properties: jurisdiction: title: Jurisdiction description: The jurisdiction to which this organization belongs. Valid values are defined internally. Please reach out to help@spotdraft.com for a list. type: string address: title: Address type: object properties: city: title: City description: The city name for this address. type: string state: title: State description: The state name for this address. default: '' type: string country: title: Country description: The name of the country associated with this counterparty address. Any value passed here is ignored if `country_iso_code` is passed. Valid values are defined internally. Please ask help@spotdraft.com for more information. type: string zipcode: title: Zipcode description: The zip/pin/postal code for this address. default: '' type: string line_one: title: Line One description: The first line of the address. Usually the apartment, floor, and street information. type: string line_two: title: Line Two description: The second address line (if any). type: string email: title: Email description: The email address associated with this counterparty address (if any). type: string phone: title: Phone description: The phone number associated with this counterparty address (if any). type: string gst_number: title: Gst Number description: The GST Number for this Organization. Can be unset if not available or applicable. type: string tax_id: title: Tax Id description: The VAT/GST/Sales Tax/etc ID for this Organization. type: string country_iso_code: title: Country Iso Code description: The ISO-3166-1 Alpha-2 code of the country associated with this counterparty address. Any value passed here is overrides `country`. Valid values can be found [here](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes). type: string required: - city - country - line_one description: The primary address for this organization (if any) description: Additional details for an organization. Should be set if `is_individual=False` poc_details: title: Poc Details type: object properties: first_name: title: First Name description: The first name of the Point of Contact type: string last_name: title: Last Name description: The last name of the Point of Contact type: string email: title: Email description: The email address of the Point of Contact type: string required: - first_name - last_name - email description: Point of Contact details for this counterparty. Should be the details of the individual for `is_individual=True` and the details of the contact at the counterparty organization in case of `is_individual=False`. party_role_identifier: title: Party Role Identifier description: The unique identifier of the party this counterparty should be assigned to. minLength: 1 type: string required: - is_individual - poc_details examples: - is_individual: true organization_type: Private Limited organization_name: Acme Corporation organization_details: {} poc_details: first_name: Mike last_name: Reed email: Mike_reed@yahoo.com primary_address: city_name: Cincinnati state_name: Ohio country_name: USA zipcode: '513' line_one: 'st: 3, block: 2, Jenkins Road' required: - contract_template_id - contract_data example: contract_template_id: 1204 contract_data: agreement_date: '2026-03-28' renewal_review_at: '2026-09-15T10:30:00Z' customer_name: Acme Inc. billing_currency: type: USD value: 12000 subscription_term: type: MONTHS value: 12 days: 365 auto_renewal: true notice_period_days: 30 service_countries: - US - IN billing_address: line_one: 350 Fifth Avenue city: New York state: NY country: United States zipcode: '10118' pricing_schedule: - milestone: Implementation amount: type: USD value: 5000 - milestone: Annual subscription amount: type: USD value: 7000 msa_attachment: file_name: security-schedule.pdf content_type: application/pdf counter_party_details: - is_individual: false organization_type: company organization_name: Acme Inc. poc_details: first_name: Avery last_name: Stone email: legal@acme.example CreateSignatoryResendEmailAPIRequest: title: CreateSignatoryResendEmailAPIRequest type: object properties: email_id: title: Email Id description: The Email Address of the signatory to whom email should be resent to. type: string required: - email_id examples: - email_id: mike_reed@yahoo.com TypeEnum: enum: - BUSINESS - LEGAL - CP_POC - LEGAL_POC - SIGNATORY type: string ExternalContractRelationCreateRequest: title: ExternalContractRelationCreateRequest type: object properties: related_contract_id: title: Related Contract Id description: ID of the contract that is being related. type: integer relation_type: allOf: - $ref: '#/components/schemas/RelationTypeEnum' title: ContractRelationType description: Type of relationship established with the related contract. required: - related_contract_id - relation_type examples: - related_contract_id: 1234 relation_type: CHILD RelationTypeEnum: enum: - CHILD - ADDENDUM - AMENDMENT - PARENT type: string PatchedIntakeFormData: title: IntakeFormData description: A key-value object keyed by intake-form question field name. Values must match the question type configured on the contract type questionnaire. type: object additionalProperties: false examples: - term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice RetriggerLatestWebhooksRequest: title: RetriggerLatestWebhooksRequest type: object properties: contract_ids: title: Contract Ids description: The list of contract ids whose latest webhook calls need to be re-triggered. Provide one or more contract ids. type: array items: type: integer required: - contract_ids examples: - contract_ids: - 1 - 2 - 3 DownloadLinkRequest: description: Request body for Get Contract Download Link API. Optional; defaults to PDF if omitted. properties: format: anyOf: - $ref: '#/components/schemas/EditableDocumentDownloadFormat' - type: 'null' default: PDF description: Download format for the contract file. Defaults to `PDF` when omitted. title: DownloadLinkRequest type: object ExternalContractV3: type: object description: Defines the data required to be shown affter contract creation properties: id: type: integer readOnly: true created: type: string format: date-time description: The timestamp at which this contract was first created. contract_name: type: string description: The name of the contract. Might be defaulted from the template or edited by the user. contract_link: type: string readOnly: true description: The link to the SpotDraft app where this contract can be viewed. The user will need to log in (and have view access) to be able to view the contract. contract_status: allOf: - $ref: '#/components/schemas/ContractDisplayStatusEnum' description: The status of this contract. readOnly: true created_by: type: string readOnly: true description: The email address of the user who created this contract. counter_party_name: type: string readOnly: true description: The name of the Counter Party for this contract. contract_type_name: type: string readOnly: true description: The type of Contract. The types are as defined by the Client. contract_type_id: type: integer readOnly: true description: The ID of the Contract Type. created_by_workspace: type: integer readOnly: true description: The workspace ID of the user who created or uploaded the executed contract on to SpotDraft's platform. external_metadata: type: object additionalProperties: {} readOnly: true description: The external metadata associated with this contract. reference_id: type: string readOnly: true description: The reference id of the contract. required: - contract_link - contract_name - contract_status - contract_type_id - contract_type_name - counter_party_name - created - created_by - created_by_workspace - external_metadata - id - reference_id ContractProcessMetricResponse: title: ContractProcessMetricResponse type: object properties: contract_id: title: Contract Id description: Id of the contract that this data belongs to type: integer contract_sent_to_cp_datetime: title: Contract Sent To Cp Datetime description: Date and time when the contract was first sent to Counterparty type: string format: date-time cp_added_info_initial_datetime: title: Cp Added Info Initial Datetime description: Date and time when the Counterparty updated contract data for the first time type: string format: date-time cp_added_info_latest_datetime: title: Cp Added Info Latest Datetime description: Date and time when the Counterparty updated contract data type: string format: date-time cp_opened_review_email_datetime: title: Cp Opened Review Email Datetime description: Date and time when the Counterparty opened the contract review email for the first time type: string format: date-time contract_signed_by_signatory_list: title: Contract Signed By Signatory List description: List of signatories along with the date and time of signature. type: array items: title: SignatoryData type: object properties: is_creator_party: title: Is Creator Party type: boolean signed_datetime: title: Signed Datetime type: string format: date-time signatory_email: title: Signatory Email type: string required: - is_creator_party - signed_datetime - signatory_email contract_turns: title: ContractTurnsData type: object properties: manual_override_reason: title: Manual Override Reason description: Reason for contract pending with counterparty having a manual override. type: string last_turn_change_datetime: title: Last Turn Change Datetime description: Date and time when the contract turn was last changed. type: string format: date-time last_turn_change_org_user_email: title: Last Turn Change Org User Email description: User that caused the last turn change to happen. type: string no_of_turns: title: No Of Turns description: Number of turns recorded on this contract. default: 0 type: integer contract_executed_datetime: title: Contract Executed Datetime description: Date and time when the contract was executed. type: string format: date-time type_of_workflow: title: Type Of Workflow description: Contract kind. type: string contract_status: title: Contract Status description: Current status of contract. type: string marked_for_signature_datetime: title: Marked For Signature Datetime description: Date and time when the contract was made ready to accept signatures. type: string format: date-time pending_with: allOf: - $ref: '#/components/schemas/PendingWithEnum' title: ContractPendingWith description: Contract pending with party. required: - contract_id - contract_turns examples: - contract_id: 1234 contract_sent_to_cp_datetime: '2019-08-24T14:15:22Z' cp_added_info_initial_datetime: '2019-08-24T14:15:22Z' cp_added_info_latest_datetime: '2019-08-24T14:15:22Z' cp_opened_review_email_datetime: '2019-08-24T14:15:22Z' contract_signed_by_signatory_list: - is_creator_party: true signed_datetime: '2019-08-24T14:15:22Z' signatory_email: Mike_reed@yahoo.com contract_turns: manual_override_reason: Reason for manual override last_turn_change_datetime: '2019-08-24T14:15:22Z' last_turn_change_org_user_email: johndoe@example.com no_of_turns: 2 contract_executed_datetime: '2019-08-24T14:15:22Z' type_of_workflow: UPLOAD_SIGN contract_status: COMPLETED marked_for_signature_datetime: '2019-08-24T14:15:22Z' pending_with: COUNTER_PARTY ExtractionStatusEnum: enum: - completed - pending - failed - not_available type: string PatchedContractDataUpdateRequest: title: ContractDataUpdateRequest type: object properties: data: title: Data description: Contract data keyed by template field name. Values must match the field types configured on the contract template. type: object required: - data examples: - data: term: days: 180 type: MONTHS value: 6 notes: Not Applicable capacity: 15 setup_fee: type: INR value: 30000.0 start_date: '2019-11-29' yes_discounts: false payment_method: '1' suggestions: No suggestions ContractUploadForSignatureRequest: title: ContractUploadForSignatureRequest type: object properties: contract_name: title: Contract Name description: The name of the uploaded contract that is visible to users. type: string contract_type_id: title: Contract Type Id description: The ID of the contract type for this uploaded contract. Use the [Get Contract Types](#tag/V2-Contract-Type-APIs/operation/v2_public_contract_types_list) API to get this ID. type: integer file_name: title: File Name description: The name of the file being uploaded. This is used when the file is downloaded. Expected to be a fully qualified file name with an extension. minLength: 1 type: string file_base64: title: File Base64 description: The contents of the file as a base64 encoded string. minLength: 1 type: string creator_organization_entity_id: title: Creator Organization Entity Id description: The ID of the organization entity for the creator party of the uploaded contract. Use the [Get Organization Entities](#tag/V2-Organization-APIs/operation/v2_public_organizations_entities_list) API to get this ID. type: integer counterparty_organization_name: title: Counterparty Organization Name description: The name of the counter party's organization. type: string external_metadata: title: External Metadata type: object properties: id: title: Id description: Identifier of the record in the external system. integration_name: title: Integration Name description: Name of the external integration, for example Salesforce. type: string record_type: title: Record Type description: External record type, for example Opportunity or Account. type: string record_data: title: Record Data description: Arbitrary metadata payload from the external system. type: object object_configuration_id: title: Object Configuration Id description: Optional public identifier for a native integration object configuration. When provided, also send `record_type`. The API resolves and stores the corresponding internal entity reference. type: string format: uuid description: Optional external system metadata to associate with the uploaded contract. counterparty_is_individual: title: Counterparty Is Individual description: Defines if this Counterparty is an individual or an organization like a company. When not provided, the counterparty is treated as an organization. type: boolean counterparty_poc_details: title: Counterparty Poc Details type: object properties: first_name: title: First Name description: The first name of the Point of Contact type: string last_name: title: Last Name description: The last name of the Point of Contact type: string email: title: Email description: The email address of the Point of Contact type: string required: - first_name - last_name - email description: Point of Contact details for this counterparty. Should be the details of the individual for `counterparty_is_individual=True` and the details of the contact at the counterparty organization in case of `counterparty_is_individual=False`. intake_form_data: title: Intake Form Data description: A key-value object keyed by intake-form questionnaire field name. Values must match the question type configured on the upload workflow. Use the Intake Form Questionnaire API to discover the allowed field names and expected value shapes. type: object business_user_email: title: Business User Email description: The email address of the business user for the Upload for Sign contract. type: string format: email creator_signatories: title: Creator Signatories description: Details of the signatories on the creator party side. type: array items: title: CreatorPartySignatoryRequest type: object properties: email: title: Email description: Email of the signatory on the creator party side. type: string format: email title: title: Title description: Title of the signatory. default: '' type: string note: title: Note description: Note for the signatory type: string required: - email required: - contract_name - contract_type_id - file_name - file_base64 - counterparty_organization_name examples: - contract_name: Acme Corporation NDA contract_type_id: 1 file_name: Acme_nda.pdf file_base64: base64 encoded string of the PDF file creator_organization_entity_id: 1 counterparty_organization_name: Acme Corporation external_metadata: id: hubspot-deal-10024 integration_name: HubSpot record_type: Deal record_data: deal_stage: contractsent owner_email: owner@acme.example counterparty_is_individual: false counterparty_poc_details: first_name: Avery last_name: Stone email: legal@acme.example intake_form_data: term: days: 180 type: MONTHS value: 6 notes: Customer requested revised indemnity clause. capacity: 15 setup_fee: type: USD value: 30000.0 start_date: '2026-04-01' payment_method: annual_invoice business_user_email: owner@spotdraft.example ExternalPOCDetails: type: object description: Defines the data required in poc details properties: first_name: type: string last_name: type: string default: '' email: type: string required: - email - first_name VoidContractRequestData: title: VoidContractRequestData type: object properties: note: title: Note description: Reason shown in SpotDraft when the contract is voided. minLength: 1 type: string required: - note MarkForExecutionRequest: title: MarkForExecutionRequest type: object properties: affix_stamp_documents: title: Affix Stamp Documents description: Whether stamp documents should be affixed as part of marking the contract for execution, when stamping is configured for the workflow. type: boolean AttachmentFormatsEnum: enum: - DOCX - PDF - TEMPLATE type: string description: '* `DOCX` - DOCX * `PDF` - PDF * `TEMPLATE` - TEMPLATE' ContractContentResponse: title: ContractContentResponse type: object properties: contract_id: title: Contract Id description: The contract ID type: string content_format: allOf: - $ref: '#/components/schemas/ContentFormatEnum' title: ContractContentFormatType description: Format of the returned content content: title: Content description: Full contract text content (when format=text) type: string segments: title: Segments description: Text segments with metadata (when format=segments) type: array items: title: TextSegmentedResponse type: object properties: segment_text: title: Segment Text type: string required: - segment_text extraction_status: allOf: - $ref: '#/components/schemas/ExtractionStatusEnum' title: ContractContentExtractionStatus description: Status of the content extraction process last_updated: title: Last Updated description: Timestamp when content was last extracted type: string format: date-time required: - contract_id - content_format - extraction_status examples: - contract_id: T-12345 content_format: text content: This Agreement is entered into between... segments: null extraction_status: completed last_updated: '2024-01-15T10:30:00Z' - contract_id: T-12345 content_format: segments content: null segments: - segment_text: This Agreement is entered into... page_number: 1 position: 1 extraction_status: completed last_updated: '2024-01-15T10:30:00Z' ExternalContractUserResponse: title: ExternalContractUserResponse type: object properties: user_id: title: User Id description: The Org User Id of user who is one users for the contract type: integer contract_id: title: Contract Id description: The contract id for which business user was updated type: integer type: allOf: - $ref: '#/components/schemas/TypeEnum' title: ContractUserType description: Type of contract user required: - user_id - contract_id - type examples: - user_id: 1234 type: BUSINESS contract_id: 1234 CounterPartyEmbeddedUrlResponse: title: CounterPartyEmbeddedUrlResponse type: object properties: url: title: Url type: string required: - url PendingWithEnum: enum: - CREATOR_PARTY - COUNTER_PARTY - BOTH type: string ExternalCounterPartyDetailsSerializerV2_1: type: object description: Defines the data required for contract counterpartydetails for API V2.1 properties: is_individual: type: boolean organization_type: type: string organization_name: type: string description: The legal name of the organization. Required if `is_individual` is False. poc_details: allOf: - $ref: '#/components/schemas/ExternalPOCDetails' description: Details of the primary point of contact for this counterparty. Required for both individuals and organizations. organization_details: $ref: '#/components/schemas/OrganizationDetailsSerializerV2_1' party_role_identifier: type: string minLength: 1 required: - is_individual - poc_details ExternalContractStatus: type: object description: Defines the data that is required to show the status of a contract properties: contract_status: allOf: - $ref: '#/components/schemas/ContractDisplayStatusEnum' description: 'The status of this contract. * `DRAFT` - DRAFT * `REDLINING` - REDLINING * `SIGN` - SIGN * `EXECUTED` - EXECUTED * `ON_HOLD` - ON_HOLD * `VOIDED` - VOIDED' contract_name: type: string description: The name of the contract that is visible to users. required: - contract_name - contract_status ScannedContractContentResponse: title: ScannedContractContentResponse type: object properties: contract_id: title: Contract Id description: The contract ID type: string content: title: Content description: Extracted full text content from the scanned PDF type: string required: - contract_id - content examples: - contract_id: 1090393 content: This Agreement is entered into between... EditableDocumentDownloadFormat: enum: - PDF - DOCX - DOCX_WITH_FALLBACK_TO_PDF title: EditableDocumentDownloadFormat type: string ExternalCreateContractSignatory: type: object description: Defines the data that is required for create contract signatory properties: name: type: string email: type: string title: type: string is_counterparty_signatory: type: boolean description: Set this as True if the signatory belongs to a counterparty. Else set it as False. counterparty_name: type: string description: Required if `is_counterparty_signatory` is True. Must match the name of one of the counterparties in `counter_party_details`. If the counterparty `is_individual` is True, this should be the concatenation of the `first_name` and `last_name` from `poc_details` (e.g., 'John Doe'). If `is_individual` is False, this should match the `organization_name` of the counterparty. If `is_counterparty_signatory` is False, leave this field blank. sign_order: type: integer note: type: string required: - email - is_counterparty_signatory - name ExternalContractRelationResponse: title: ExternalContractRelationResponse type: object properties: id: title: Id description: Contract Relation ID type: integer related_contract_id: title: Related Contract Id description: ID of the contract that is being related. type: integer relation_type: allOf: - $ref: '#/components/schemas/RelationTypeEnum' title: ContractRelationType description: Type of relationship established with the related contract. created: title: Created description: The date and time at which the contract relation was created type: string format: date-time required: - id - related_contract_id - relation_type - created examples: - id: 1000 related_contract_id: 1234 relation_type: CHILD created: '2021-05-20T04:52:04Z' ExternalRelatedContractListResponse: title: ExternalRelatedContractListResponse type: object properties: page: title: Page description: Current page number type: integer limit: title: Limit description: Number of results per page type: integer total_results: title: Total Results description: Total number of related contracts type: integer results: title: Results description: List of related contracts type: array items: title: ExternalRelatedContractResponse type: object properties: id: title: Id description: Contract Relation ID type: integer contract: title: Contract type: object properties: id: title: Id description: ID of the related contract type: integer name: title: Name description: Name of the related contract type: string counter_party_list: title: Counter Party List description: List of counterparty names associated with the contract type: array items: type: string display_status: title: ContractDisplayStatus description: Current display status of the contract enum: - DRAFT - REDLINING - SIGN - EXECUTED - ON_HOLD - VOIDED type: string required: - id - name - counter_party_list - display_status description: Details of the related contract relation_type: title: Relation Type description: Type of relationship (CHILD, ADDENDUM, AMENDMENT, PARENT) type: string required: - id - contract - relation_type examples: - id: 1000 contract: id: 1234 name: Acme Corporation NDA counter_party_list: - Acme Corp display_status: EXECUTED relation_type: CHILD required: - page - limit - total_results - results examples: - page: 1 limit: 10 total_results: 2 results: - id: 1000 contract: id: 1234 name: Acme Corporation NDA counter_party_list: - Acme Corp display_status: EXECUTED relation_type: CHILD - id: 1001 contract: id: 5678 name: Acme Corporation MSA counter_party_list: - Acme Corp display_status: DRAFT relation_type: AMENDMENT PublicSupportedDocumentCreateAPIRequest: title: PublicSupportedDocumentCreateAPIRequest type: object properties: name: title: Name description: Name of the document type: string file_name: title: File Name description: Name of the file, including its extension. type: string file_base64: title: File Base64 description: The contents of the file as a base64 encoded string. type: string required: - name - file_name - file_base64 examples: - name: Acme Corporation Related Document file_name: Acme Related Document.pdf file_base64: base64 encoded string of the file content ContractUnMarkForExecutionRequest: title: ContractUnMarkForExecutionRequest type: object properties: note: title: Note description: Optional note explaining the reason for un-marking the contract for execution. type: string examples: - note: Client requested some edits to the contract ExternalQuestionnaireResponseDomainModel: title: ExternalQuestionnaireResponseDomainModel type: object properties: data: title: Data description: The intake form questionnaire type: object created: title: Created description: The ISO timestamp when the intake form questionnaire was edited type: string format: date-time required: - data - created additionalProperties: false examples: - data: name: Admin is_individual: false created: '2009-08-06T00:00:00Z' ReviewRequestCreateRequest: title: ReviewRequestCreateRequest type: object properties: description: title: Description description: Description of the review request. Visible to the reviewer default: '' minLength: 1 type: string assignee_user_id: title: Assignee User Id description: The ID of the org user to whom the review request should be assigned. Either `assignee_user_id` or `assignee_role_id` must be set, but not both. type: integer assignee_role_id: title: Assignee Role Id description: The ID of the role to which the review request should be assigned. Either `assignee_user_id` or `assignee_role_id` must be set, but not both. type: integer OrganizationDetailsSerializerV2_1: type: object description: Defines structure for organization details for API v2.1 properties: jurisdiction: type: string address: $ref: '#/components/schemas/OrganizationAddressSerializerV2_1' jurisdiction_iso_code: type: string ExternalCreateContractResponse: type: object description: Response schema for v2/v2.1 create contract APIs. properties: id: type: string description: The ID of the contract on SpotDraft's platform. created: type: string format: date-time description: The timestamp at which this contract was first created. contract_name: type: string description: The name of the contract. Might be defaulted from the template or edited by the user. contract_link: type: string readOnly: true description: The link to the SpotDraft app where this contract can be viewed. The user will need to log in (and have view access) to be able to view the contract. contract_status: allOf: - $ref: '#/components/schemas/ContractDisplayStatusEnum' description: The status of this contract. readOnly: true created_by: type: string readOnly: true description: The email address of the user who created this contract. counter_party_name: type: string readOnly: true description: The name of the Counter Party for this contract. contract_type_name: type: string readOnly: true description: The type of Contract. The types are as defined by the Client. contract_type_id: type: integer readOnly: true description: The ID of the Contract Type. created_by_workspace: type: integer readOnly: true description: The workspace ID of the user who created or uploaded the executed contract on to SpotDraft's platform. external_metadata: type: object additionalProperties: {} readOnly: true description: The external metadata associated with this contract. reference_id: type: string readOnly: true description: The reference id of the contract. contract_id: type: integer description: The numeric internal contract ID. required: - contract_id - contract_link - contract_name - contract_status - contract_type_id - contract_type_name - counter_party_name - created - created_by - created_by_workspace - external_metadata - id - reference_id PatchedExternalUpdateContractBusinessUserRequest: title: ExternalUpdateContractBusinessUserRequest type: object properties: user_id: title: User Id description: The Org User Id of user who should be business user for the contract type: integer update_user_task_on_bu_update: title: Update User Task On Bu Update description: If true then all contract tasks (if any) will be re-assigned to new business user but if false they will remain assigned to old business user default: true type: boolean required: - user_id examples: - user_id: 1234 update_user_task_on_bu_update: true DownloadUrl: type: object properties: url: type: string description: The URL from which this contract can be downloaded. file_name: type: string description: The file name of the contract. current_version_id: type: integer description: The ID of the current version of the contract. required: - file_name - url securitySchemes: ClickwrapId: type: apiKey in: header name: clickwrap-id description: Public clickwrap identifier header. ClientId: type: apiKey name: client-id in: header ClientSecret: type: apiKey name: client-secret in: header NativeIntegrationBasic: type: http scheme: basic description: HTTP Basic auth for supported native integrations. Send base64(client_id:client_secret) in the Authorization header. OAuthBearer: type: http scheme: bearer bearerFormat: JWT description: OAuth 2.0 bearer token for workspace user access. Origin: type: apiKey in: header name: Origin description: Browser origin header used for clickwrap domain validation. x-logo: url: https://cdn.spotdraft.com/assets/logo-black-new.png backgroundColor: transparent altText: SpotDraft Logo href: https://spotdraft.com x-tagGroups: - name: Contracts tags: - V2.1 Contract APIs - V2 Contract APIs - V1 Contract APIs - V2.1 Contract Approvals - V2 Contract Approvals - V2.1 Contract Activity - V2 Contract Activity - V2.1 Contract Invitations - V2 Contract Invitations - V2.1 Contract Metadata Values - V2 Contract Metadata Values - V2.1 Contract External Metadata - V2.1 Contract Notes - V2 Contract Notes - V2.1 Contract Obligations - V2.1 Contract Facets - V2.1 Contract Versions - V2 Contract Versions - V2.1 Recipients - V2 Recipients - name: Clickwrap tags: - V2.1 Clickwrap - name: Legal Intake tags: - V1 Legal Intake - name: Workflow tags: - V2.1 Contract Metadata Definitions - V2 Contract Metadata Definitions - V2.1 Contract Types - V2 Contract Types - V2.1 Templates - V2 Templates - V1 Templates - name: Platform tags: - V2.1 Users - V2 Users - V1 Users - V2.1 Counterparties - V2 Counterparties - V2.1 Organizations - V2 Organizations - V1 Obligation Types - V1 Native Integrations - V2.1 Workspace Files - V2.1 Tasks and Reminders - V2 Tasks and Reminders - V2.1 Webhooks - V1 Webhooks - V1 Emails - V2.1 Analytics Query - V2.1 Workspaces - V2.1 Workspace Tags - name: Sidebar tags: - V2.1 Sidebar