---
canonical_url: "https://docs.composio.dev/toolkits/ironclad"
markdown_url: "https://docs.composio.dev/toolkits/ironclad.md"
product: "platform"
version: null
last_updated: null
---

# Ironclad

Ironclad is a contract lifecycle management platform for launching and tracking contract workflows, approvals and signatures, and for managing the repository of contract records, entities and obligations.

- **Category:** documents
- **Auth:** OAUTH2
- **Composio-managed OAuth available?** No
- **Tools:** 80
- **Triggers:** 0
- **Slug:** `IRONCLAD`
- **Version:** 00000000_00

## Tools

### Activate Record

**Slug:** `IRONCLAD_ACTIVATE_RECORD`

Activate a record and set its effective date, term, termination notice, expiration, and renewal behavior. Use this only for activation; use the other record lifecycle actions for later lifecycle changes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | Activation dates, term, termination-notice, and renewal settings. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Record Auto-Renewal

**Slug:** `IRONCLAD_CANCEL_RECORD_AUTO_RENEWAL`

Cancel auto-renewal for a record. This lifecycle intent takes no renewal properties; use IRONCLAD_EDIT_RECORD_RENEWAL to change renewal settings.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Workflow

**Slug:** `IRONCLAD_CANCEL_WORKFLOW`

Cancel a workflow, recording a comment that explains why. This cannot be undone: no operation reopens a cancelled workflow. To stop one for a while use IRONCLAD_PAUSE_WORKFLOW; to recall only the signature request use IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment` | object | Yes | Comment recorded with the action, as {"message": "text"}. To mention a user write <@user_id_or_email> inside message, and add "addUsersToWorkflow": true when a mentioned user is not yet a participant of the workflow. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Cancel Workflow Signature Request

**Slug:** `IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST`

Cancel the signature request (the signature packet sent to the signers) that is out for signature on a workflow, with a reason. This cannot be undone; the request has to be sent again with IRONCLAD_SEND_WORKFLOW_SIGNATURE_REQUEST. Cancellation may email signers; mute_cancellation_notifications suppresses those emails only for Ironclad Signature and Adobe Sign. To cancel the whole workflow use IRONCLAD_CANCEL_WORKFLOW; to remove a send that is only scheduled use IRONCLAD_DELETE_SCHEDULED_WORKFLOW_SIGNATURE_REQUEST.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `reason` | string | Yes | The reason for cancelling the signature request. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `mute_cancellation_notifications` | boolean | No | When true, the eSignature provider does not email signers to tell them the request was cancelled. Only Ironclad Signature and Adobe Sign support suppression: DocuSign cannot suppress cancellation emails, and Dropbox Sign does not send one. If an in-flight request uses an unsupported provider, true returns a 400 INVALID_PARAM error. Ignored when no request is out for signature. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Data Export

**Slug:** `IRONCLAD_CREATE_DATA_EXPORT`

Start a data export job for workflow activity or the audit log, optionally limited to a date range; it does not wait for the file and returns a pollable job_id. job_status may be omitted, which means the current state is unknown, not that the job_id is unusable. Poll IRONCLAD_GET_DATA_EXPORT_STATUS with that job_id until job_status is done (Ironclad documents no polling interval), then fetch the file with IRONCLAD_DOWNLOAD_DATA_EXPORT within 14 days of creating the export. Requires Ironclad's paid Security & Data Pro add-on. For a spreadsheet of records use IRONCLAD_EXPORT_RECORDS_XLSX. Needs the public.export.createReports scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `end_date` | string | No | End date of the data to include, in ISO 8601 format: a date or a date-time. Data is available with a delay of up to 36 hours, so an export may stop short of an end date within the last 36 hours. |
| `start_date` | string | No | Starting date of the data to include, in ISO 8601 format: a date or a date-time. |
| `export_type` | string ("workflow_activities" | "audit_log") | Yes | What to export: workflow_activities or audit_log. |
| `export_format` | string ("CSV" | "JSON") | No | File format of the export: CSV or JSON, which produces JSON Lines. Ironclad uses CSV when this is omitted. |
| `export_configs` | object | No | Extra options of the chosen export_type. For workflow_activities: {"metadataProperties": ["counterpartyName"], "includeCommentDetail": true}. For audit_log: {"eventCategories": ["user_entitlement", "integration_errors"]}. Do not mix the keys of the two types. |
| `signed_url_enabled` | boolean | No | Set true to enable a signed URL for downloading the exported file. Ironclad treats it as false when omitted. How the download responds in either case is not documented, so leave it unset unless a signed URL is specifically wanted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Embedded Workflow Signature Recipient URL

**Slug:** `IRONCLAD_CREATE_EMBEDDED_WORKFLOW_SIGNATURE_RECIPIENT_URL`

Create a signing link for one signer that is allowed to load inside a frame on the given parent site. It works only with Ironclad Signature as the signature provider, and the workflow must be on the Sign step. For a plain link, or one for a view-only recipient, use IRONCLAD_CREATE_WORKFLOW_SIGNATURE_RECIPIENT_URL. The returned URL is a sensitive bearer capability: anyone with it may view or sign as the recipient. Do not log it, persist it unnecessarily, put it in comments, or share it outside the intended recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `frame_ancestor` | string | Yes | Site that will embed the link, as a bare hostname with optional port or an HTTP/HTTPS origin, e.g. example.com or https://example.com:443. Do not include credentials, a path, query, fragment, wildcard, or CSP source-list syntax. |
| `recipient_type` | string | No | Kind of recipient. signer is the only value Ironclad accepts here, and it is sent on every call. |
| `signer_role_name` | string | Yes | Role name of the signer to create the link for, e.g. Counterparty Signer, exactly as returned in role_name by IRONCLAD_LIST_WORKFLOW_SIGNERS or IRONCLAD_GET_WORKFLOW_SIGN_STATUS. |
| `allow_multiple_usages` | boolean | No | Set true only with explicit caller intent: it makes the sensitive signing link replayable until expiry. False, or omitted, preserves single-use behavior; Ironclad treats an omitted value as false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Entity

**Slug:** `IRONCLAD_CREATE_ENTITY`

Create an entity (a counterparty or other party that contracts refer to) with a name and, optionally, a relationship type, status, parent and properties. Get the relationship type key from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES; property ids are defined per company and can only be read from an existing entity with IRONCLAD_GET_ENTITY. Property values are wrapped as {type, value}. To change an existing entity use IRONCLAD_UPDATE_ENTITY.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Name of the entity. |
| `parent` | object | No | Parent entity, as {"recordId": "ENTITY-5"}, holding an entity id or Ironclad id. |
| `status` | string ("ACTIVE" | "INACTIVE") | No | ACTIVE or INACTIVE. Ironclad uses ACTIVE when this is omitted. |
| `properties` | object | No | Properties of the new entity as {propertyId: {type, value}}. The property ids are defined per company and no tool lists them: read them from properties on an existing entity with IRONCLAD_GET_ENTITY. Each value is an object with two keys, type and value. Types and value shapes: string, number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...}). This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"entity_externalID": {"type": "string", "value": "1234567890"}}. |
| `relationship_type_key` | array | No | Relationship type of the entity, as a list with one key, e.g. ["customer"]. The keys are defined per company: use a name from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES. Ironclad supports only one relationship type per entity for now. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Obligation

**Slug:** `IRONCLAD_CREATE_OBLIGATION`

Create a standalone obligation on a contract record. To record a triggered occurrence of an existing obligation, use IRONCLAD_CREATE_OBLIGATION_OCCURRENCE instead. The tenant-defined obligation type key must already be known and cannot be discovered by this toolkit because the documented public.obligations.readTypes scope is absent from OAuth's scope catalog. Property ids belong to that type and no tool lists them, so read them from an existing obligation with IRONCLAD_GET_OBLIGATION, and wrap each value as {type, value}. Recurrence cadence cannot be set through the API. Needs the public.obligations.createObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Name of the obligation. |
| `parent_id` | string | Yes | Contract the obligation belongs to: the record's Ironclad id (e.g. IC-6) or its record id. |
| `properties` | object | No | Values for properties already defined on the obligation's type; this cannot create new properties. Keys are property ids, defined per company: read them from properties on IRONCLAD_GET_OBLIGATION. Values are objects with type and value. Types and value shapes: string, number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...})., clause, playbookClause, array, reference. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"userFacingObligations_description": {"type": "string", "value": "Foobar"}}. |
| `obligation_type_key` | array | Yes | Obligation type, as a list with one tenant-defined key, e.g. ["payment"]. The key must already be known and cannot be discovered by this toolkit because the documented public.obligations.readTypes scope is absent from OAuth's scope catalog. Only one type per obligation is supported. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Obligation Occurrence

**Slug:** `IRONCLAD_CREATE_OBLIGATION_OCCURRENCE`

Record a new triggered occurrence of an existing source obligation. Triggered obligations must be enabled for the account. The occurrence requires its source id, status, due date, and assignee. It inherits the source obligation's contract and type when parent_id and obligation_type_key are omitted. Property ids belong to that type and no tool lists them, so read them from an existing obligation with IRONCLAD_GET_OBLIGATION and wrap each value as {type, value}. Needs the public.obligations.createObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Name of the occurrence. |
| `status` | string | Yes | Status of the occurrence, for example NOT_STARTED, IN_PROGRESS, OVERDUE, COMPLETED, WAIVED or CANCELLED; the available set depends on the obligation's type and cadence. |
| `due_date` | string | Yes | Due date of the occurrence as yyyy-MM-dd. |
| `parent_id` | string | No | Contract the occurrence belongs to: the record's Ironclad id (e.g. IC-6) or its record id. Omit to inherit the source obligation's contract; if provided, it must match that contract. |
| `properties` | object | No | Values for properties already defined on the obligation's type; this cannot create new properties. Keys are property ids, defined per company: read them from properties on IRONCLAD_GET_OBLIGATION. Values are objects with type and value. Types and value shapes: string, number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...})., clause, playbookClause, array, reference. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"userFacingObligations_description": {"type": "string", "value": "Foobar"}}. |
| `description` | string | No | Human-readable description of the occurrence. |
| `assignee_user_id` | string | Yes | Id of the user assigned to the occurrence. |
| `obligation_type_key` | array | No | Obligation type, as a list with one tenant-defined key, e.g. ["payment"]. Omit to inherit the source obligation's type; if provided, it must match that type. The key must already be known and cannot be discovered by this toolkit because the documented public.obligations.readTypes scope is absent from OAuth's scope catalog. |
| `source_obligation_id` | string | Yes | Id of the existing source obligation to record a new triggered occurrence from. Triggered obligations must be enabled for the account. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Record

**Slug:** `IRONCLAD_CREATE_RECORD`

Create a contract record in the repository with a record type, a name and metadata properties. Call IRONCLAD_GET_RECORDS_SCHEMA first for the valid record type keys and the property ids and types, which each company defines; every property value is wrapped as {type, value}. This stores a record directly, without a workflow: to start a contract process use IRONCLAD_LAUNCH_WORKFLOW, and to change an existing record use IRONCLAD_UPDATE_RECORD. Ironclad may return either the created record or only {success: true}; the acknowledgement does not contain a record id, so use IRONCLAD_LIST_RECORDS to find the new record when its id is needed.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Name of the record. |
| `links` | array | No | Records to link as related records. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. A workflow can be linked by writing workflow: before its id, e.g. {"recordId": "workflow:632cab598a95cb469deccd8b"}. |
| `parent` | object | No | Parent of this record: {"recordId": "IC-456", "parentLinkType": "amendment"}. Use parentLinkType amendment when this record amends the parent. |
| `children` | array | No | Records to set as children of this record. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `properties` | object | Yes | Metadata of the new record as {propertyId: {type, value}}. Property ids and their types are defined per company: read them from IRONCLAD_GET_RECORDS_SCHEMA. Each value is an object with two keys, type and value. Types and value shapes: string (dropdown, multi-select and table fields are stored as string too), number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...}). Linked entities go under entity_references as {"type": "array", "value": [{"recordId": "ENTITY-1"}]}. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"counterpartyName": {"type": "string", "value": "Acme LLC"}, "agreementDate": {"type": "date", "value": "2021-05-11T17:16:53Z"}}. Send {} to create the record without properties. |
| `record_type` | string | Yes | Record type key, e.g. mutualNDA. The keys are defined per company: use a key of record_types from IRONCLAD_GET_RECORDS_SCHEMA. |
| `address_as_object` | boolean | No | Set true to get address properties back as objects (lines, locality, region, postcode, country) instead of one string. Default false. |
| `properties_to_amend` | object | No | For an amendment record only (parent with parentLinkType amendment): which property ids roll up to the parent, as {propertyId: {"amendmentType": "replace"}}. Property ids come from IRONCLAD_GET_RECORDS_SCHEMA; replace is the only amendment type. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Smart Import Record

**Slug:** `IRONCLAD_CREATE_SMART_IMPORT_RECORD`

Upload a contract file and use Smart Import to create a record and predict its properties. Omit import_id to start a new import; provide it to add the record to an existing import. With an existing import and no type parameter, record_type imported is sent; new record type fields are available only when starting a new import. It may return record_id, import_id and remaining credits. A response without record_id fails confirmation instead of reporting successful execution. If import_id was returned, poll it and verify the result with IRONCLAD_LIST_RECORDS; if no import_id was returned, check IRONCLAD_LIST_RECORDS before retrying. Poll IRONCLAD_GET_SMART_IMPORT_PREDICTIONS because predictions take time. Smart Import is separately priced. Use IRONCLAD_CREATE_RECORD instead to create a record from known values. Needs the public.records.createSmartImportRecords scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `file` | object | Yes | The contract file to import, up to 100 MB. Accepted extensions: .adoc, .asice, .bdoc, .csv, .ddoc, .doc, .docx, .edoc, .eml, .gif, .htm, .jpeg, .jpg, .json, .jsonl, .msg, .pdf, .png, .ppt, .pptx, .rtf, .tif, .txt, .xls, .xlsm, .xlsx and .xml. |
| `import_id` | string | No | Id of an existing Smart Import to add the file to. Omit to start a new import. |
| `record_type` | string | No | Existing record type key to import the file as: a key of record_types from IRONCLAD_GET_RECORDS_SCHEMA. Optional: when record_type, new_record_type_id and new_record_type_display_name are all left out, nothing is sent and Ironclad uses its documented default, the Imported type. Cannot be combined with new_record_type_id or new_record_type_display_name. |
| `new_record_type_id` | string | No | Key for a record type that does not exist yet, to create it and import the file as that type. Requires new_record_type_display_name and cannot be combined with record_type. Available only when starting a new import. |
| `new_record_type_display_name` | string | No | Display name of the new record type to create. It may be sent alone or with new_record_type_id, but not with record_type. Available only when starting a new import. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Workflow Comment

**Slug:** `IRONCLAD_CREATE_WORKFLOW_COMMENT`

Post a comment to a workflow's activity feed as the connected user, optionally as a reply to another comment and with @-mentions. When add_users_to_workflow is true, mentioned users who are not already workflow participants are added to the workflow. Returns the created comment. Read existing comments and their ids with IRONCLAD_LIST_WORKFLOW_COMMENTS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment` | string | Yes | Comment text to add to the workflow's activity feed, as a plain string: not the {"message": ...} object that IRONCLAD_PAUSE_WORKFLOW, IRONCLAD_RESUME_WORKFLOW, IRONCLAD_CANCEL_WORKFLOW and IRONCLAD_UPLOAD_WORKFLOW_DOCUMENT take. To @-mention a user write <@email> inside the text, e.g. <@john.doe@example.com> please review. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `add_users_to_workflow` | boolean | No | Must be true when the comment mentions users who are not participants of the workflow. |
| `replied_to_comment_id` | string | No | Id of the comment to reply to: an id from IRONCLAD_LIST_WORKFLOW_COMMENTS. Omit for a top-level comment. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Create Workflow Signature Recipient URL

**Slug:** `IRONCLAD_CREATE_WORKFLOW_SIGNATURE_RECIPIENT_URL`

Create a link that a signer, or a view-only recipient, can open to reach the workflow's signature request. It works only with Ironclad Signature as the signature provider, and the workflow must be on the Sign step. For a signing link that can be embedded in a frame on another site use IRONCLAD_CREATE_EMBEDDED_WORKFLOW_SIGNATURE_RECIPIENT_URL. The returned URL is a sensitive bearer capability: anyone with it may view or sign as the recipient. Do not log it, persist it unnecessarily, put it in comments, or share it outside the intended recipient.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `email` | string | No | Email address of the view-only (CC) recipient. Required when recipient_type is viewer; not used for signer. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `recipient_type` | string ("signer" | "viewer") | Yes | signer for someone who signs (give signer_role_name), viewer for a view-only (CC) recipient (give email). |
| `signer_role_name` | string | No | Role name of the signer to create the link for, e.g. Counterparty Signer, exactly as returned in role_name by IRONCLAD_LIST_WORKFLOW_SIGNERS or IRONCLAD_GET_WORKFLOW_SIGN_STATUS. Required when recipient_type is signer; not used for viewer. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Entity

**Slug:** `IRONCLAD_DELETE_ENTITY`

Delete an entity. No restore operation is documented, so treat this as permanent; to keep the entity but stop using it, set its status to INACTIVE with IRONCLAD_UPDATE_ENTITY instead.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_id` | string | Yes | Entity id (UUID, e.g. 123e4567-e89b-12d3-a456-426614174000) or the entity's Ironclad id (e.g. ENTITY-1). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Obligation

**Slug:** `IRONCLAD_DELETE_OBLIGATION`

Delete an obligation. A triggered occurrence is deleted directly. A recurring occurrence cannot be deleted on its own: Ironclad answers 409 with the source obligation's id in sourceObligationId, and that source obligation is the one to delete. No restore operation is documented, so treat the deletion as permanent. Needs the public.obligations.deleteObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `obligation_id` | string | Yes | Obligation id (UUID) or the obligation's Ironclad id (e.g. OB-1), as returned by IRONCLAD_LIST_OBLIGATIONS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Record

**Slug:** `IRONCLAD_DELETE_RECORD`

Delete a contract record from the repository. No restore operation is documented, so treat it as permanent. To remove only a file from the record use IRONCLAD_DELETE_RECORD_ATTACHMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Record Attachment

**Slug:** `IRONCLAD_DELETE_RECORD_ATTACHMENT`

Remove one file from a contract record by its attachment key; the record itself stays. Attachment keys are listed under attachments on IRONCLAD_GET_RECORD. No restore operation is documented, so treat it as permanent. Do this before IRONCLAD_UPLOAD_RECORD_ATTACHMENT when replacing a file under the same key. To delete the whole record use IRONCLAD_DELETE_RECORD.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `attachment_key` | string | Yes | Attachment key of the file to remove, e.g. signedCopy: a key under attachments on IRONCLAD_GET_RECORD. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Scheduled Workflow Signature Request

**Slug:** `IRONCLAD_DELETE_SCHEDULED_WORKFLOW_SIGNATURE_REQUEST`

Remove the scheduled send from a workflow, so its signature request (the signature packet for the signers) is no longer sent at the scheduled time. The workflow must be in the Sign step and not yet out for signature. Schedule again with IRONCLAD_SCHEDULE_WORKFLOW_SIGNATURE_REQUEST. To recall a request that was already sent use IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Delete Workflow Signer

**Slug:** `IRONCLAD_DELETE_WORKFLOW_SIGNER`

Remove a signer from a workflow's signature packet. If the packet is out collecting signatures this cancels it, and it has to be sent again with IRONCLAD_SEND_WORKFLOW_SIGNATURE_REQUEST. That cancellation may email signers; mute_cancellation_notifications suppresses those emails only for Ironclad Signature and Adobe Sign. To replace the signer instead use IRONCLAD_UPDATE_WORKFLOW_SIGNER.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `signer_role_name` | string | Yes | Role name of the signer to remove, e.g. Counterparty Signer, exactly as returned in role_name by IRONCLAD_LIST_WORKFLOW_SIGNERS or IRONCLAD_GET_WORKFLOW_SIGN_STATUS. Pass it as plain text; it is URL-encoded for you. |
| `mute_cancellation_notifications` | boolean | No | When removing the signer cancels an in-flight request, true asks the eSignature provider not to email signers about the cancellation. Only Ironclad Signature and Adobe Sign support suppression: DocuSign cannot suppress cancellation emails, and Dropbox Sign does not send one. If the in-flight request uses an unsupported provider, true returns a 400 INVALID_PARAM error. Ignored when no request is out for signature. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Data Export

**Slug:** `IRONCLAD_DOWNLOAD_DATA_EXPORT`

Download the file of a finished data export job: CSV, or JSON Lines if the job was created with export_format JSON. It works only after IRONCLAD_GET_DATA_EXPORT_STATUS reports done, and only within 14 days of the job's creation. Start the job with IRONCLAD_CREATE_DATA_EXPORT and call IRONCLAD_GET_DATA_EXPORT_STATUS again until job_status is done; the docs give no polling interval. Data export is a paid Ironclad add-on. Needs the public.export.readReports scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `job_id` | string | Yes | The job_id returned by IRONCLAD_CREATE_DATA_EXPORT, once IRONCLAD_GET_DATA_EXPORT_STATUS reports the job as done. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Record Attachment

**Slug:** `IRONCLAD_DOWNLOAD_RECORD_ATTACHMENT`

Download one file attached to a record by its attachment key; signedCopy is the key of the signed copy. The record's attachment keys are listed under attachments on IRONCLAD_GET_RECORD. For a contract that came from a workflow, the record id is in record_ids on IRONCLAD_GET_WORKFLOW. For documents of a workflow still in progress use IRONCLAD_DOWNLOAD_WORKFLOW_DOCUMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f). The docs do not say the Ironclad id is accepted by this operation. |
| `attachment_key` | string | Yes | Attachment key of the file to download: a key under attachments on IRONCLAD_GET_RECORD. signedCopy is the key of the signed copy. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Workflow Document

**Slug:** `IRONCLAD_DOWNLOAD_WORKFLOW_DOCUMENT`

Download one document of a workflow by its document key: a draft (usually DOCX) or the signed PDF. Get the key from IRONCLAD_LIST_WORKFLOW_DOCUMENTS, or from IRONCLAD_GET_WORKFLOW where it is the path segment before /download in a file attribute's download link (attributes.draft, attributes.signed). Once the workflow has created its record, the signed copy is also stored there: take a record id from record_ids on IRONCLAD_GET_WORKFLOW and use IRONCLAD_DOWNLOAD_RECORD_ATTACHMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `document_key` | string | Yes | Document key: a key from IRONCLAD_LIST_WORKFLOW_DOCUMENTS, or the segment before /download in a download link returned by IRONCLAD_GET_WORKFLOW (.../document/{key}/download). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Download Workflow Email Attachment

**Slug:** `IRONCLAD_DOWNLOAD_WORKFLOW_EMAIL_ATTACHMENT`

Download one file attached to an email thread of a workflow. Get the email thread id from IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS; the attachment id is the last path segment of that attachment's download link there. For the workflow's own documents use IRONCLAD_DOWNLOAD_WORKFLOW_DOCUMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |
| `attachment_id` | string | Yes | Id of the attachment: the last path segment of the attachment's download link in IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS or IRONCLAD_GET_WORKFLOW_EMAIL_THREAD. |
| `email_thread_id` | string | Yes | Id of the email thread that carries the attachment, from IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Edit Record Renewal

**Slug:** `IRONCLAD_EDIT_RECORD_RENEWAL`

Edit a record's renewal type, term, opt-out timing, remaining renewal count, initial term, and expiration settings.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | Renewal settings to edit on the record. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Export Data

**Slug:** `IRONCLAD_EXPORT_DATA`

Create an Ironclad workflow-activity or audit-log data export job, poll its status with a bounded configurable wait, then download and return the completed CSV or JSON Lines file. A failed job or polling timeout fails deterministically without attempting the download. Requires Ironclad's paid Security & Data Pro add-on and both public.export.createReports and public.export.readReports scopes.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `end_date` | string | No | End date of the data to include, in ISO 8601 format: a date or a date-time. Data is available with a delay of up to 36 hours, so an export may stop short of an end date within the last 36 hours. |
| `start_date` | string | No | Starting date of the data to include, in ISO 8601 format: a date or a date-time. |
| `export_type` | string ("workflow_activities" | "audit_log") | Yes | What to export: workflow_activities or audit_log. |
| `export_format` | string ("CSV" | "JSON") | No | File format of the export: CSV or JSON, which produces JSON Lines. Ironclad uses CSV when this is omitted. |
| `export_configs` | object | No | Extra options of the chosen export_type. For workflow_activities: {"metadataProperties": ["counterpartyName"], "includeCommentDetail": true}. For audit_log: {"eventCategories": ["user_entitlement", "integration_errors"]}. Do not mix the keys of the two types. |
| `signed_url_enabled` | boolean | No | Set true to enable a signed URL for downloading the exported file. Ironclad treats it as false when omitted. How the download responds in either case is not documented, so leave it unset unless a signed URL is specifically wanted. |
| `poll_timeout_seconds` | number | No | Maximum wall-clock seconds to wait for the export job, from 10 to 240 seconds. A timeout fails without attempting the download. |
| `poll_interval_seconds` | number | No | Seconds between export status checks, from 2 to 30 seconds. |
| `download_timeout_seconds` | number | No | Maximum seconds to wait for the completed export file download, from 30 to 300 seconds. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Export Records XLSX

**Slug:** `IRONCLAD_EXPORT_RECORDS_XLSX`

Download an XLSX spreadsheet of records for the record types and property columns you name. Both lists are required and their values are defined per company: get the record type keys and property ids from IRONCLAD_GET_RECORDS_SCHEMA. Limited to 10 calls per minute. For workflow activity or audit-log data use IRONCLAD_CREATE_DATA_EXPORT; to read records as data use IRONCLAD_LIST_RECORDS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `property_ids` | array | Yes | Property ids to export as columns, as a list, e.g. ["counterpartyName", "agreementDate"]. The ids are defined per company: use keys of properties from IRONCLAD_GET_RECORDS_SCHEMA. |
| `record_types` | array | Yes | Record type keys to export, as a list, e.g. ["mutualNDA", "NDA"]. The keys are defined per company: use keys of record_types from IRONCLAD_GET_RECORDS_SCHEMA. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Extend Record

**Slug:** `IRONCLAD_EXTEND_RECORD`

Extend a record, optionally setting the renewal term length.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | Extension settings. Pass an empty object to omit the optional term length. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Data Export Status

**Slug:** `IRONCLAD_GET_DATA_EXPORT_STATUS`

Check a data export job started with IRONCLAD_CREATE_DATA_EXPORT. job_status is pending, running, done or failed: call again while it is pending or running (Ironclad documents no polling interval), and when it is done fetch the file with IRONCLAD_DOWNLOAD_DATA_EXPORT, which works for 14 days after the export was created. If job_status is absent, the provider response does not confirm the job's state: do not report completion or success, and call this read tool again later. No tool retries a failed job: start a new one with IRONCLAD_CREATE_DATA_EXPORT. It does not apply to IRONCLAD_EXPORT_RECORDS_XLSX, which returns its file in the same call. Requires Ironclad's paid Security & Data Pro add-on. Needs the public.export.readReports scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `job_id` | string | Yes | Id of the export job: the job_id returned by IRONCLAD_CREATE_DATA_EXPORT. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Entity

**Slug:** `IRONCLAD_GET_ENTITY`

Get one entity by id or Ironclad id: its name, status, relationship type ids, parent and properties (each as {type, value}). Its properties show the property ids the company uses, which no other tool lists, so read an entity before IRONCLAD_CREATE_ENTITY or IRONCLAD_UPDATE_ENTITY; relationship type ids are explained by IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `entity_id` | string | Yes | Entity id (UUID, e.g. 123e4567-e89b-12d3-a456-426614174000) or the entity's Ironclad id (e.g. ENTITY-1). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Obligation

**Slug:** `IRONCLAD_GET_OBLIGATION`

Get one obligation by id or Ironclad id: its name, parent contract, status, due date, assignee and properties (each as {type, value}), and whether it is a source obligation or an occurrence; a source obligation's occurrences are listed by IRONCLAD_LIST_OBLIGATION_INSTANCES. Its properties show property ids of its obligation type; no tool lists those ids. Needs the public.obligations.readObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `obligation_id` | string | Yes | Obligation id (UUID) or the obligation's Ironclad id (e.g. OB-1), as returned by IRONCLAD_LIST_OBLIGATIONS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Record

**Slug:** `IRONCLAD_GET_RECORD`

Get one contract record by id or Ironclad id: its type, name, properties (each as {type, value}), attachments, links, parent and children, and contract status. Property ids are defined per company; their display names and types are in IRONCLAD_GET_RECORDS_SCHEMA. The attachment keys it returns are what IRONCLAD_DOWNLOAD_RECORD_ATTACHMENT takes (signedCopy is the signed copy). For a contract that came from a workflow, the record id is in record_ids on IRONCLAD_GET_WORKFLOW; for a contract still in progress use IRONCLAD_GET_WORKFLOW itself.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `hydrate_entities` | boolean | No | Set true to return full details of linked entities (readable id, relationship types, properties) instead of only their ids. Default false. |
| `address_as_object` | boolean | No | Set true to get address properties back as objects (lines, locality, region, postcode, country) instead of one string. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Records Schema

**Slug:** `IRONCLAD_GET_RECORDS_SCHEMA`

Get the record schema of the company's repository: the record type keys, every property id with its display name and type, and the attachment keys. Call it before creating, updating, filtering or exporting records, because all of these are defined per company; IRONCLAD_LIST_RECORDS shows real values. It covers the whole repository, not one record type. Workflow launch forms are described by IRONCLAD_GET_WORKFLOW_SCHEMA instead.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Smart Import Predictions

**Slug:** `IRONCLAD_GET_SMART_IMPORT_PREDICTIONS`

Check whether Smart Import has finished predicting properties, for one record (record_id) or for every record of an import (import_id); one of the two is required. Use the ids returned by IRONCLAD_CREATE_SMART_IMPORT_RECORD (including when import_id adds a record to an existing import), and call again while a status is pending (Ironclad documents no polling interval). It returns status only: read the predicted values with IRONCLAD_GET_RECORD. Smart Import is a separately priced feature. Needs the public.records.readSmartImportRecords scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `import_id` | string | No | Id of an import, to check every record in it: the import_id returned by IRONCLAD_CREATE_SMART_IMPORT_RECORD. Give this or record_id. |
| `record_id` | string | No | Id of one smart-import record to check: the record_id returned by IRONCLAD_CREATE_SMART_IMPORT_RECORD. Give this or import_id. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow

**Slug:** `IRONCLAD_GET_WORKFLOW`

Get one workflow by id or Ironclad id: its step, status, roles, approvals, signatures, attribute values and the schema that types each attribute. Read it before IRONCLAD_UPDATE_WORKFLOW_ATTRIBUTES to learn the attribute ids and current values, and to find document keys for IRONCLAD_DOWNLOAD_WORKFLOW_DOCUMENT. The launch-form subset of the attributes is described by IRONCLAD_GET_WORKFLOW_SCHEMA. record_ids holds the ids of the records the workflow created: pass one to IRONCLAD_GET_RECORD, or to IRONCLAD_DOWNLOAD_RECORD_ATTACHMENT with the key signedCopy for the archived signed copy. It is empty while the workflow has created no record.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `hydrate_entities` | boolean | No | Set true to return full details of linked entities (readable id, relationship types, properties) instead of only their ids. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow Comment

**Slug:** `IRONCLAD_GET_WORKFLOW_COMMENT`

Get one comment of a workflow by its comment id, with author, time, mentions, the comment it replies to and reactions. To browse comments use IRONCLAD_LIST_WORKFLOW_COMMENTS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment_id` | string | Yes | Id of the comment: an id from IRONCLAD_LIST_WORKFLOW_COMMENTS. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow Email Thread

**Slug:** `IRONCLAD_GET_WORKFLOW_EMAIL_THREAD`

Get one email thread of a workflow by its email thread id. Ironclad returns it as one inbound or outbound email with author, subject, body and attachments. Find the ids with IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS. Activity-feed comments are read with IRONCLAD_GET_WORKFLOW_COMMENT instead.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |
| `email_thread_id` | string | Yes | Id of the email thread: the email_thread_id of an email from IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow Launch Status

**Slug:** `IRONCLAD_GET_WORKFLOW_LAUNCH_STATUS`

Check a workflow launch started with IRONCLAD_LAUNCH_WORKFLOW using execution_mode async. status is in_progress, success (the launched workflow is under workflow) or failed (the cause is under error; when error.metadata.workflowId is present a workflow was created anyway, so read it with IRONCLAD_GET_WORKFLOW instead of launching again, which would create a second one). While it is in_progress call again, waiting at least 2 seconds between calls, and do not start another launch. The attribute keys in the returned workflow are the template's ids from IRONCLAD_GET_WORKFLOW_SCHEMA. To read a workflow that already exists use IRONCLAD_GET_WORKFLOW.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `async_job_id` | string | Yes | The async_job_id returned by IRONCLAD_LAUNCH_WORKFLOW when execution_mode is async. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow Schema

**Slug:** `IRONCLAD_GET_WORKFLOW_SCHEMA`

Get the launch-form schema of one workflow template: every attribute id with its type, display name, whether it is required (always, never or conditional) and its dropdown options. Call it before IRONCLAD_LAUNCH_WORKFLOW to know which attributes to send and in what shape. IRONCLAD_LIST_WORKFLOW_SCHEMAS returns the template ids, with the same schema for every template. For record properties use IRONCLAD_GET_RECORDS_SCHEMA.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `form` | string | No | Which form to describe. launch (the launch form) is the value Ironclad documents, and the one it uses when this is omitted. |
| `template_id` | string | Yes | Workflow template id (24 hex characters, e.g. 600b296c3e15a234ab88f884): an id value from IRONCLAD_LIST_WORKFLOW_SCHEMAS. Only published workflow designs have one. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Get Workflow Sign Status

**Slug:** `IRONCLAD_GET_WORKFLOW_SIGN_STATUS`

Get the signing state of a workflow that is in the Sign step: signers and their status, routing order, the signature provider, whether a signed upload is required and any scheduled send. It fails when the workflow is not in the Sign step, so an error after the signers have signed may only mean the workflow has left that step: check step on IRONCLAD_GET_WORKFLOW before treating it as a failed signature.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Launch Workflow

**Slug:** `IRONCLAD_LAUNCH_WORKFLOW`

Launch a workflow from a template. execution_mode wait (default) returns the workflow; async returns a job id. Poll an async job with IRONCLAD_GET_WORKFLOW_LAUNCH_STATUS no faster than every 2 seconds until success or failure, and do not relaunch while it is in_progress. Discover template and attribute ids with IRONCLAD_LIST_WORKFLOW_SCHEMAS or IRONCLAD_GET_WORKFLOW_SCHEMA. A wait-mode timeout does not prove failure: check IRONCLAD_LIST_WORKFLOWS before retrying. A 409 can mean a workflow was already created; list recent workflows for this template and use IRONCLAD_GET_WORKFLOW instead of creating a duplicate. Wait mode accepts direct uploads through files; async mode accepts file attributes only as URLs. Workflow writes are limited to 40 per minute per company.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `files` | object | No | Files for documented multipart launch attributes, keyed by multipart part name. Reference each key from one attribute as [{"file": "partName"}]. Available only when execution_mode is wait; use URL-backed file attributes in async mode. Omit this map for a normal JSON launch. At most 5 files and 100 MB total are accepted. |
| `attributes` | object | Yes | Launch-form values as {attributeId: value}; ids and types are in IRONCLAD_GET_WORKFLOW_SCHEMA. Omit optional attributes and formula fields. Fixed keys: paperSource, "Our paper" or "Counterparty paper", required when the template asks for it; localLinkedRecord, localParentRecord, localChildRecord: a record id or "IC-123" to link as related, parent or child. Values are bare; the shape depends on the attribute type: text, number, boolean and email as plain values; date as "2021-05-11"; monetaryAmount as {"currency": "USD", "amount": 25.37}; duration as {"years": 1, "months": 2} (any of years, months, weeks, days); address as {lines: [...], locality, region, postcode, country}; multi-select as a list of option strings; table as a list of rows keyed by column attribute id; user, record and entity fields as one id string (an email, "IC-68", "ENTITY-1"); files as [{"url":"https://h/f.pdf"}] (public HTTPS; extension required). Record/entity/obligation tools use {type, value}; do not copy values between them. |
| `template_id` | string | Yes | Template to launch. Workflow template id (24 hex characters, e.g. 600b296c3e15a234ab88f884): an id value from IRONCLAD_LIST_WORKFLOW_SCHEMAS. |
| `execution_mode` | string ("wait" | "async") | No | wait to return the launched workflow, or async to return a job id for polling with IRONCLAD_GET_WORKFLOW_LAUNCH_STATUS. |
| `use_default_values` | boolean | No | Set true to fill attributes you did not send with the default values configured on the launch form. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Launch Workflow From Attribute Source

**Slug:** `IRONCLAD_LAUNCH_WORKFLOW_FROM_ATTRIBUTE_SOURCE`

Launch from an existing Coupa or Salesforce workflow sync mapping. The source id and object must already be known; no tool discovers them or describes the body. HTTP 202 means missing or invalid values (MISSING_PARAM/INVALID_PARAM) and no launch; error details are withheld, so correct the request or finish manually in the Ironclad UI. A free-form 200 returns outcome workflow_created only with a nonblank workflow id, conflict for a recognized conflict, and unknown otherwise; conflict or unknown does not confirm creation. A 409 can mean a workflow was created but did not finish; check recent workflows with IRONCLAD_LIST_WORKFLOWS before retrying. For explicit template values use IRONCLAD_LAUNCH_WORKFLOW; read a result with IRONCLAD_GET_WORKFLOW.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `source_id` | string | Yes | Id of the attribute source configuration (the workflow sync mapping set up in Ironclad). No tool lists these ids; the Ironclad admin or the integration that owns the mapping provides it. |
| `external_id` | string | No | Salesforce sources only: the Salesforce record id to launch from. Not used for Coupa sources, which take the id from the body. |
| `approval_type` | string | No | Coupa sources only: the launch flow type. The only documented value is LaunchContract. |
| `source_object` | object | No | The source system's object, sent as the whole request body exactly as given (nulls and empty values included). Its fields are whatever the configured workflow sync mapping reads, so they are defined per company and no Ironclad tool describes them: use the payload the source system (Coupa or Salesforce) produces. Ironclad does not document the fields. When omitted no body is sent. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Entities

**Slug:** `IRONCLAD_LIST_ENTITIES`

List the entities (counterparties and other parties) of the company, one page per call, optionally narrowed by free-text search or a formula and sorted. Each entity's properties come back as {type, value} under property ids the company defines. Relationship type ids for the formula come from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES and property ids from IRONCLAD_GET_ENTITY. Set result_format=ids_only to return only ids, with the IDs endpoint's larger page limit.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `filter` | string | No | Formula that keeps only the entities whose property values match, written as Function([propertyId], 'value') with the property id in square brackets and text in quotes; functions are Equals, NotEqual, Contains, IsEmpty, IsNotEmpty, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, And, Or, and for dates Date(year, month, day), Today() and RelativeDate(Today(), 30, 'days'). Example: And(Equals([entityStatus], "ACTIVE"), Equals([relationshipType], "cddd4b1e-a219-43b8-a86e-6da0fa6aba4a")). Property ids are defined per company: get them from the keys under properties on IRONCLAD_GET_ENTITY (e.g. entity_pocEmail). Ironclad's examples also filter on entityStatus (ACTIVE) and on relationshipType with a relationship type id from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES. Combined with the other parameters using AND. |
| `search` | string | No | Free-text search across all entity properties, the same as the in-app search. Up to 1000 characters; combined with filter and the other parameters using AND. |
| `page_size` | integer | No | Results per page. For result_format=full, 1 to 100 (default 20); for ids_only, 1 to 10000 (default 10000). |
| `sort_field` | string ("name" | "lastUpdated") | No | Field to sort by: name or lastUpdated. Only one field can be used. Ironclad sorts by name when this is omitted. |
| `result_format` | string ("full" | "ids_only") | No | Return full entity objects from /entities, or only id and ironclad_id from /entities/ids. ids_only supports page_size up to 10000; full supports at most 100. |
| `sort_direction` | string ("ASC" | "DESC") | No | Sort order for sort_field: ASC or DESC. Ironclad sorts DESC when this is omitted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Entity Relationship Types

**Slug:** `IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES`

List the entity relationship types the company has defined, such as customer or vendor, all in one call. Each has an id, which entity filters use, and a name, which Ironclad's examples pass as relationship_type_key to IRONCLAD_CREATE_ENTITY and IRONCLAD_UPDATE_ENTITY. It does not list entity property ids: read those from an existing entity with IRONCLAD_GET_ENTITY.

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Obligation Instances

**Slug:** `IRONCLAD_LIST_OBLIGATION_INSTANCES`

List the instances (occurrences) of one source obligation, by id or Ironclad id, one page per call, ordered by due date with undated instances last; every item has obligation_type OCCURRENCE. Recurring occurrences are generated by Ironclad; triggered ones are recorded with IRONCLAD_CREATE_OBLIGATION_OCCURRENCE. Ironclad requires triggered obligations to be enabled for the account. IRONCLAD_LIST_OBLIGATIONS with include=occurrences shows only the first 5 per source obligation; the spec uses instances and occurrences as one and the same. Needs the public.obligations.readObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `obligation_id` | string | Yes | Id (UUID) or Ironclad id (e.g. OB-1) of the source obligation whose instances to list, as returned by IRONCLAD_LIST_OBLIGATIONS. An occurrence names its source in source_obligation_id. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Obligations

**Slug:** `IRONCLAD_LIST_OBLIGATIONS`

List the source obligations of the company, one page per call, optionally narrowed by free-text search or a formula and sorted. Set include to occurrences to add each source obligation's first 5 occurrences and its occurrence_count; IRONCLAD_LIST_OBLIGATION_INSTANCES pages through all instances (occurrences) of one source obligation. Property ids used in filter are defined per company: read them from the properties of an obligation, here or with IRONCLAD_GET_OBLIGATION. Needs the public.obligations.readObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `filter` | string | No | Formula that keeps only the obligations whose property values match, written as Function([propertyId], 'value') with the property id in square brackets and text in quotes; functions are Equals, NotEqual, Contains, IsEmpty, IsNotEmpty, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, And, Or, and for dates Date(year, month, day), Today() and RelativeDate(Today(), 30, 'days'). Example: Equals([name], 'Obligation Name'). Property ids are defined per company: get them from the keys under properties of an obligation returned by IRONCLAD_GET_OBLIGATION or this tool. Combined with the other parameters using AND. |
| `search` | string | No | Free-text search across all obligation properties, the same as the in-app search. Up to 1000 characters; combined with filter and the other parameters using AND. |
| `include` | string | No | Set to occurrences to add occurrences (each source obligation's first 5 occurrences, ordered by due date with undated last) and occurrence_count (its total) to every obligation in the list. Left out, neither field is returned. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `sort_field` | string ("name" | "lastUpdated") | No | Field to sort by: name or lastUpdated. Ironclad sorts by name when this is omitted. |
| `sort_direction` | string ("ASC" | "DESC") | No | Sort order, ASC or DESC. Ironclad sorts DESC when this is omitted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Records

**Slug:** `IRONCLAD_LIST_RECORDS`

List the contract records in the repository, one page per call, optionally filtered by record type, update time, free-text search or a property formula, and sorted. Record type keys and property ids are defined per company: get them from IRONCLAD_GET_RECORDS_SCHEMA. Set result_format=ids_only when only ids are needed, and use IRONCLAD_LIST_WORKFLOWS for contracts still in progress.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `filter` | string | No | Formula that keeps only the records whose property values match, written as Function([propertyId], 'value') with the property id in square brackets and text in quotes; functions are Equals, NotEqual, Contains, IsEmpty, IsNotEmpty, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, And, Or, and for dates Date(year, month, day), Today() and RelativeDate(Today(), 30, 'days'). Example: LessThan([endDate], RelativeDate(Today(), 30, "days")). Property ids are defined per company: get them from IRONCLAD_GET_RECORDS_SCHEMA. Combined with the other parameters using AND. |
| `search` | string | No | Free-text search across all record properties, the same as the in-app search. Up to 1000 characters; combined with filter and the other parameters using AND. |
| `page_size` | integer | No | Results per page. For result_format=full, 1 to 100 (default 20); for ids_only, 1 to 10000 (default 10000). |
| `sort_field` | string ("agreementDate" | "name" | "lastUpdated") | No | Field to sort by: agreementDate, name or lastUpdated. Only one field can be used. Ironclad sorts by agreementDate when this is omitted. |
| `last_updated` | string | No | Return only records updated since this UTC date-time. |
| `record_types` | array | No | Record type keys to include, as a list, e.g. ["mutualNDA", "NDA"]. The keys are defined per company: use keys of record_types from IRONCLAD_GET_RECORDS_SCHEMA. |
| `result_format` | string ("full" | "ids_only") | No | Return full records from /records, or only id and ironclad_id from /records/ids. ids_only supports page_size up to 10000 but does not support hydrate_entities or address_as_object. |
| `sort_direction` | string ("ASC" | "DESC") | No | Sort order, ASC or DESC. Ironclad sorts DESC when this is omitted. |
| `hydrate_entities` | boolean | No | Set true to return full details of linked entities (readable id, relationship types, properties) instead of only their ids. Default false. |
| `address_as_object` | boolean | No | Set true to get address properties back as objects (lines, locality, region, postcode, country) instead of one string. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Approval Requests

**Slug:** `IRONCLAD_LIST_WORKFLOW_APPROVAL_REQUESTS`

List the approval requests that have taken place on a workflow, one page per call: who was asked, when, the outcome and how long it took. It is a history; for the current approval status per role, and the role ids, use IRONCLAD_LIST_WORKFLOW_APPROVALS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `request_type` | string ("role" | "user") | No | Type of approval requests to return: by user or by role. Ironclad uses user when this is omitted. |
| `actor_details` | boolean | No | Set true to add information about the actor (actor_details: name, email, department) to each request. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Approvals

**Slug:** `IRONCLAD_LIST_WORKFLOW_APPROVALS`

Get the current approvals of a workflow in one call (not paged): its approval groups with their order and each reviewer's status, and the workflow's roles with their ids, display names and assignees. Only approvals that have been triggered appear. Use it to find what is waiting for approval and the role_id to approve with IRONCLAD_UPDATE_WORKFLOW_APPROVAL; the docs do not say which field holds it, and role ids appear as role on each reviewer and as id on each role. For the timeline of past approval requests use IRONCLAD_LIST_WORKFLOW_APPROVAL_REQUESTS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Comments

**Slug:** `IRONCLAD_LIST_WORKFLOW_COMMENTS`

List the comments in a workflow's activity feed, one page per call, with author, time, mentions, replies and reactions. Use the comment ids to reply with IRONCLAD_CREATE_WORKFLOW_COMMENT. Emails are listed separately by IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Documents

**Slug:** `IRONCLAD_LIST_WORKFLOW_DOCUMENTS`

List a workflow's documents in two groups, those in the signature packet and those left out of it, each with its document key, filename and version. All documents are returned in one call. Use the keys with IRONCLAD_DOWNLOAD_WORKFLOW_DOCUMENT and IRONCLAD_UPDATE_WORKFLOW_SIGNATURE_PACKET. The signed copy, once there is one, is the file under attributes.signed on IRONCLAD_GET_WORKFLOW. Files stored on a record are under attachments on IRONCLAD_GET_RECORD.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Email Threads

**Slug:** `IRONCLAD_LIST_WORKFLOW_EMAIL_THREADS`

List the email threads of a workflow, one page per call. Ironclad returns each item as one inbound or outbound email with sender, subject, body and attachments, and for outbound emails the recipients. Use an email thread id with IRONCLAD_GET_WORKFLOW_EMAIL_THREAD. To download an inbound attachment pass the email thread id and the attachment id, which is the last path segment of the attachment's download link, to IRONCLAD_DOWNLOAD_WORKFLOW_EMAIL_ATTACHMENT. Activity-feed comments are listed by IRONCLAD_LIST_WORKFLOW_COMMENTS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Participants

**Slug:** `IRONCLAD_LIST_WORKFLOW_PARTICIPANTS`

List the users who participate in a workflow (user id and email), one page per call, optionally narrowed to one email. Use it to get user ids for IRONCLAD_UPDATE_WORKFLOW_SIGNER or to check whether a user must be added before being @-mentioned in a comment.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `email` | string | No | Return only the participant with this Ironclad user email address. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Role Eligible Assignees

**Slug:** `IRONCLAD_LIST_WORKFLOW_ROLE_ELIGIBLE_ASSIGNEES`

List the users who may be assigned to one role of a workflow, one page per call, plus the role's default assignee where Ironclad returns one. role_name is the role's display name from roles on IRONCLAD_GET_WORKFLOW or IRONCLAD_LIST_WORKFLOW_APPROVALS. Call it before IRONCLAD_UPDATE_WORKFLOW_ROLE_ASSIGNMENT to pick a valid user_id.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `role_name` | string | Yes | Display name of the workflow role to list eligible users for, e.g. Legal Approver, up to 200 characters: the display_name of an entry in roles on IRONCLAD_GET_WORKFLOW or IRONCLAD_LIST_WORKFLOW_APPROVALS, not that entry's id and not a signer role name. Pass it as plain text; it is URL-encoded for you. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflows

**Slug:** `IRONCLAD_LIST_WORKFLOWS`

List the workflows the connected user can see, one page per call, optionally filtered by status, template, update time, free-text search or an attribute formula. Only active workflows are returned unless status is set. Attribute ids used in filter are defined per company: get them from IRONCLAD_GET_WORKFLOW_SCHEMA (launch-form attributes of one template) or from the attributes of a workflow on IRONCLAD_GET_WORKFLOW. Set result_format=ids_only when only ids are needed, and use IRONCLAD_LIST_RECORDS for completed contracts stored in the repository.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `filter` | string | No | Formula that keeps only the workflows whose attribute values match, written as Function([attributeId], 'value') with the attribute id in square brackets and text in quotes; functions are Equals, NotEqual, Contains, IsEmpty, IsNotEmpty, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, And, Or, and for dates Date(year, month, day), Today() and RelativeDate(Today(), 30, 'days'). Example: And(GreaterThan([amount], '1000'), Contains([counterpartyName], 'Acme')). Attribute ids are defined per company: get them from IRONCLAD_GET_WORKFLOW_SCHEMA (the launch-form attributes of one template) or the attributes of a workflow returned by IRONCLAD_GET_WORKFLOW. Combined with the other parameters using AND. |
| `search` | string | No | Free-text search across all workflow fields, the same as the in-app search. Up to 1000 characters; combined with filter and the other parameters using AND. |
| `status` | array | No | Workflow statuses to include, as a list of active, paused, completed and cancelled. When omitted only active workflows (those in the Create, Review, Sign or Archive step) are returned. |
| `page_size` | integer | No | Results per page. For result_format=full, 1 to 100 (default 20); for ids_only, 1 to 10000 (default 10000). |
| `template_id` | string | No | Return only workflows launched from this workflow template. Template ids are the id values from IRONCLAD_LIST_WORKFLOW_SCHEMAS. |
| `last_updated` | string | No | Return only workflows updated since this UTC date-time. |
| `result_format` | string ("full" | "ids_only") | No | Return full workflows from /workflows, or only id and ironclad_id from /workflows/ids. ids_only supports page_size up to 10000 and sort_direction, but not hydrate_entities. |
| `sort_direction` | string ("ASC" | "DESC") | No | Ids-only mode only. Sort by workflow last-update time in ASC or DESC order; Ironclad defaults to DESC. Rejected in full mode. |
| `hydrate_entities` | boolean | No | Set true to return full details of linked entities (readable id, relationship types, properties) instead of only their ids. Default false. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Schemas

**Slug:** `IRONCLAD_LIST_WORKFLOW_SCHEMAS`

List the workflow templates that can be launched, with their launch-form schemas: each entry has the template id, name, the same launch-form schema IRONCLAD_GET_WORKFLOW_SCHEMA returns for one template (attribute ids, types, required, options) and what the connected user may do with it (permissions). Call it first to find the template_id for IRONCLAD_LAUNCH_WORKFLOW; set execution_mode to async for an asynchronous launch. These are workflow launch forms: record properties are described by IRONCLAD_GET_RECORDS_SCHEMA.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `form` | string | No | Which form to describe. Only launch (the launch form) is supported; Ironclad requires the parameter, so launch is sent when this is omitted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Signers

**Slug:** `IRONCLAD_LIST_WORKFLOW_SIGNERS`

List the signers of a workflow with name, email, role name, signature status and delegates. Use it to see who has signed and to get the role names that the signer, reminder and recipient-link tools take as signer_role_name. Ironclad documents an INVALID_STATE error when the workflow is not at the Sign step, so an error after the signers have signed may only mean the workflow has left that step: check step on IRONCLAD_GET_WORKFLOW before treating it as a failed signature. For routing, provider and scheduled-send details use IRONCLAD_GET_WORKFLOW_SIGN_STATUS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### List Workflow Turn History

**Slug:** `IRONCLAD_LIST_WORKFLOW_TURN_HISTORY`

List the turn history of a workflow, one page per call: each turn names the party that held the workflow, the user, the location and the start and end times. Use it to see whose turn the workflow has been on and for how long.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Zero-based page number: 0 is the first page. Prefer next_page for continuation; set this directly only to start at a known page. |
| `cursor` | string | No | Opaque continuation from next_page in the previous response. Pass it back unchanged; it preserves page_size and all filters and identifiers. |
| `page_size` | integer | No | Results per page, 1 to 100. A larger value is rejected, not reduced. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Pause Workflow

**Slug:** `IRONCLAD_PAUSE_WORKFLOW`

Pause an active workflow that is in the Review step, recording a comment that explains why; Ironclad documents that only active workflows in the Review step can be paused. Undo it with IRONCLAD_RESUME_WORKFLOW. To end the workflow for good use IRONCLAD_CANCEL_WORKFLOW.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment` | object | Yes | Comment recorded with the action, as {"message": "text"}. To mention a user write <@user_id_or_email> inside message, and add "addUsersToWorkflow": true when a mentioned user is not yet a participant of the workflow. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Refresh Workflow From Attribute Source

**Slug:** `IRONCLAD_REFRESH_WORKFLOW_FROM_ATTRIBUTE_SOURCE`

Only for an existing attribute source configuration, such as a Coupa or Salesforce workflow sync mapping: refresh a workflow from it. It is the counterpart of IRONCLAD_LAUNCH_WORKFLOW_FROM_ATTRIBUTE_SOURCE. Use it only when the attribute source id and the source object are already known: nothing in this toolkit lists sources or describes the body, and the response does not name the workflow (read it afterwards with IRONCLAD_GET_WORKFLOW). To change single attributes yourself use IRONCLAD_UPDATE_WORKFLOW_ATTRIBUTES.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `source_id` | string | Yes | Id of the attribute source configuration (the workflow sync mapping) set up in Ironclad. No tool lists these ids; the Ironclad admin or the integration that owns the mapping provides it. |
| `external_id` | string | No | Salesforce sources only: the Salesforce record id. Not used for Coupa sources, which take the external id from the body. |
| `approval_type` | string | No | Coupa sources only: the refresh flow type. The only documented value is ContractExecution. |
| `source_object` | object | No | The source system's object, sent as the whole request body exactly as given, nulls and nesting included. Ironclad documents the body only as a free-form object: its keys are whatever the configured workflow sync mapping reads, so they are defined per company and no Ironclad tool describes them. Use the payload the source system produces (for Coupa it carries the external id). No body is sent when this is omitted. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Remind Workflow Signer

**Slug:** `IRONCLAD_REMIND_WORKFLOW_SIGNER`

Email a signer a reminder that their signature is needed. The email cannot be unsent. It works only after the packet has been sent for signature, and Ironclad allows one reminder per hour; with Adobe Sign it reminds every signer who has not signed.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `signer_role_name` | string | Yes | Role name of the signer to remind, e.g. Counterparty Signer, exactly as returned in role_name by IRONCLAD_LIST_WORKFLOW_SIGNERS or IRONCLAD_GET_WORKFLOW_SIGN_STATUS. Pass it as plain text; it is URL-encoded for you. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Replace Record

**Slug:** `IRONCLAD_REPLACE_RECORD`

Replace a record with a new type, name and complete set of properties. Ironclad documents this as supplying the whole new state, so treat any property you leave out as removed: read the record with IRONCLAD_GET_RECORD first and resend what should stay. Property ids and types are defined per company: get them from IRONCLAD_GET_RECORDS_SCHEMA, and wrap each value as {type, value}. To change only some fields use IRONCLAD_UPDATE_RECORD instead.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | Yes | Name the record should have. |
| `parent` | object | No | Parent the record should have: {"recordId": "IC-456", "parentLinkType": "amendment"}, where recordId is a record id or Ironclad id and parentLinkType is amendment or obligation. |
| `children` | array | No | Records to set as children of this record. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | The complete metadata the record should have after the call, as {propertyId: {type, value}}; resend every property that should stay. Property ids and their types are defined per company: read them from IRONCLAD_GET_RECORDS_SCHEMA. Each value is an object with two keys, type and value. Types and value shapes: string (dropdown, multi-select and table fields are stored as string too), number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...}). Linked entities go under entity_references as {"type": "array", "value": [{"recordId": "ENTITY-1"}]}. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"counterpartyName": {"type": "string", "value": "Acme LLC"}, "agreementDate": {"type": "date", "value": "2021-05-11T17:16:53Z"}}. |
| `record_type` | string | Yes | Record type key the record should have, e.g. mutualNDA. The keys are defined per company: use a key of record_types from IRONCLAD_GET_RECORDS_SCHEMA. |
| `address_as_object` | boolean | No | Set true to get address properties back as objects (lines, locality, region, postcode, country) instead of one string. Default false. |
| `properties_to_amend` | object | No | For an amendment record only (parent with parentLinkType amendment): which property ids roll up to the parent, as {propertyId: {"amendmentType": "replace"}}. Property ids come from IRONCLAD_GET_RECORDS_SCHEMA; replace is the only amendment type. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Resume Workflow

**Slug:** `IRONCLAD_RESUME_WORKFLOW`

Resume a workflow that was paused with IRONCLAD_PAUSE_WORKFLOW, recording a comment. Only paused workflows in the Review step can be resumed, so it does not reopen a cancelled workflow. Pause it again with IRONCLAD_PAUSE_WORKFLOW.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment` | object | Yes | Comment recorded with the action, as {"message": "text"}. To mention a user write <@user_id_or_email> inside message, and add "addUsersToWorkflow": true when a mentioned user is not yet a participant of the workflow. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Revert Workflow To Review

**Slug:** `IRONCLAD_REVERT_WORKFLOW_TO_REVIEW`

Move a workflow from the Sign step back to the Review step. Only workflows built in Workflow Designer that are in the Sign step can be reverted: check is_revertible_to_review on IRONCLAD_GET_WORKFLOW first. This cannot be undone: no operation reverses the revert, and the workflow has to go through review and signing again.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Schedule Workflow Signature Request

**Slug:** `IRONCLAD_SCHEDULE_WORKFLOW_SIGNATURE_REQUEST`

Schedule a workflow's signature request (the signature packet sent to the signers) to go out at a set time, optionally with a reminder email to the signature coordinator beforehand. At notify_at Ironclad sends the request with no further call, and a sent request cannot be unsent, only cancelled with IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST. Until then change the schedule with IRONCLAD_UPDATE_SCHEDULED_WORKFLOW_SIGNATURE_REQUEST or remove it with IRONCLAD_DELETE_SCHEDULED_WORKFLOW_SIGNATURE_REQUEST. The workflow must be in the Sign step and not yet out for signature. To send now use IRONCLAD_SEND_WORKFLOW_SIGNATURE_REQUEST.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `reminder` | object | No | Optional reminder email to the signature coordinator before the scheduled send: {"daysBefore": N} with N from 1 to 7. |
| `notify_at` | string | Yes | When Ironclad sends the signature request to the signers, as an ISO 8601 date-time, e.g. 2026-03-01T12:00:00Z. The send happens at this time without another call. Ironclad documents no minimum lead time. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Send Workflow Signature Request

**Slug:** `IRONCLAD_SEND_WORKFLOW_SIGNATURE_REQUEST`

Send a workflow's signature request (the signature packet sent to the signers) out for signature now. This cannot be undone: a sent request can only be cancelled with IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST. The workflow must be in the Sign step and every signer must have a signature or initials tag in the packet (tag requirements depend on the signature provider). No tool moves a workflow into the Sign step: it gets there from the Review step once it is fully approved. Track progress with IRONCLAD_LIST_WORKFLOW_SIGNERS (or IRONCLAD_GET_WORKFLOW_SIGN_STATUS on OAuth connections). To send at a later time use IRONCLAD_SCHEDULE_WORKFLOW_SIGNATURE_REQUEST.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Supersede Record

**Slug:** `IRONCLAD_SUPERSEDE_RECORD`

Mark a record as superseded on specified recorded and effective dates, optionally linking its replacement record.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | Supersession dates and optional superseding record. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Terminate Record

**Slug:** `IRONCLAD_TERMINATE_RECORD`

Terminate a record on specified recorded and effective dates, optionally linking the record that caused termination.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | Termination dates and optional terminating record. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Undo Record Lifecycle Action

**Slug:** `IRONCLAD_UNDO_RECORD_LIFECYCLE_ACTION`

Reverse a specified lifecycle action previously applied to a record. This does not edit ordinary record metadata.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `properties` | object | Yes | The earlier lifecycle action to reverse. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Entity

**Slug:** `IRONCLAD_UPDATE_ENTITY`

Change selected parts of an entity: its name, relationship type, status, parent, and properties to add or remove. Read the entity with IRONCLAD_GET_ENTITY first to see its property ids, which are defined per company, and get relationship type keys from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES. Property values are wrapped as {type, value}.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | New name of the entity. Omit to keep the name. |
| `status` | string ("ACTIVE" | "INACTIVE") | No | ACTIVE or INACTIVE. Omit to keep the current status. |
| `entity_id` | string | Yes | Entity id (UUID, e.g. 123e4567-e89b-12d3-a456-426614174000) or the entity's Ironclad id (e.g. ENTITY-1). |
| `set_parent` | object | No | Set the parent entity, as {"recordId": "ENTITY-5"}, holding an entity id or Ironclad id. Ironclad rejects an entity as its own parent and a parent that would create a cycle. |
| `remove_parent` | boolean | No | Set true to detach the entity from its parent. |
| `add_properties` | object | No | Properties to add, as {propertyId: {type, value}}. The property ids are defined per company and no tool lists them: read them from properties on IRONCLAD_GET_ENTITY. Each value is an object with two keys, type and value. Types and value shapes: string, number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...}). This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"entity_externalID": {"type": "string", "value": "1234567890"}}. |
| `remove_properties` | array | No | Property ids to remove from the entity if it has them. Read the ids from properties on IRONCLAD_GET_ENTITY. |
| `relationship_type_key` | array | No | New relationship type, as a list with one key, e.g. ["customer"]: a name from IRONCLAD_LIST_ENTITY_RELATIONSHIP_TYPES. Ironclad supports only one relationship type per entity for now. Omit to keep the current type. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Obligation

**Slug:** `IRONCLAD_UPDATE_OBLIGATION`

Change an obligation's name, type or properties; send at least one field to change. status, due_date, assignee_user_id and description can be changed only on an occurrence, and only when source_obligation_id is sent too. Read the obligation with IRONCLAD_GET_OBLIGATION first to see its property ids, and wrap each value as {type, value}. The tenant-defined obligation type key must already be known and cannot be discovered by this toolkit because the documented public.obligations.readTypes scope is absent from OAuth's scope catalog. Needs the public.obligations.updateObligations scope, a paid add-on not requested by default: add it to the auth config.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | New name of the obligation. Omit to keep the name. |
| `status` | string | No | New status of the occurrence, for example NOT_STARTED, IN_PROGRESS, OVERDUE, COMPLETED, WAIVED or CANCELLED (the examples Ironclad documents for creating an occurrence); the set available depends on the obligation's type and cadence. Changeable only on an occurrence and rejected on a source obligation: send source_obligation_id with it. |
| `due_date` | string | No | New due date as yyyy-MM-dd. Changeable only on an occurrence and rejected on a source obligation: send source_obligation_id with it. It cannot be changed on a recurring occurrence. |
| `description` | string | No | New human-readable description. Changeable only on an occurrence and rejected on a source obligation: send source_obligation_id with it. |
| `obligation_id` | string | Yes | Obligation id (UUID) or the obligation's Ironclad id (e.g. OB-1), as returned by IRONCLAD_LIST_OBLIGATIONS. |
| `add_properties` | object | No | Values to set for properties already defined on the obligation's type; it cannot create new ones. Keys are property ids, defined per company: read them from properties on IRONCLAD_GET_OBLIGATION. Values are objects with type and value. Types and value shapes: string, number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...})., clause, playbookClause, array, reference. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"userFacingObligations_description": {"type": "string", "value": "Foobar"}}. |
| `assignee_user_id` | string | No | Id of the user to assign to the obligation. Changeable only on an occurrence and rejected on a source obligation: send source_obligation_id with it. |
| `remove_properties` | array | No | Property ids to remove from the obligation. Read the ids from properties on IRONCLAD_GET_OBLIGATION. |
| `obligation_type_key` | array | No | New obligation type, as a list with one tenant-defined key, e.g. ["payment"]. The key must already be known and cannot be discovered by this toolkit because the documented public.obligations.readTypes scope is absent from OAuth's scope catalog. Only one type per obligation is supported. Omit to keep the current type. |
| `source_obligation_id` | string | No | Id of the occurrence's source obligation. Send it to say that obligation_id is a triggered occurrence, so that status, due_date, assignee_user_id and description can be changed. Omit it to update a source obligation. Needs triggered obligations to be enabled for the account. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Record

**Slug:** `IRONCLAD_UPDATE_RECORD`

Change selected parts of a record and leave the rest as it is: add or overwrite properties, remove properties, rename it, change its type, and edit its links, parent and children. Property ids and types are defined per company: get them from IRONCLAD_GET_RECORDS_SCHEMA, and wrap each value as {type, value}. To overwrite the whole record use IRONCLAD_REPLACE_RECORD; fields of a workflow in progress are changed with IRONCLAD_UPDATE_WORKFLOW_ATTRIBUTES. address_as_object only changes the representation of addresses in the update response and does not count as a field update; use IRONCLAD_GET_RECORD for a read-only request.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `name` | string | No | New name of the record. Omit to keep the name. |
| `add_links` | array | No | Related records to link. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `set_parent` | object | No | Set the record's parent: {"recordId": "IC-456", "parentLinkType": "amendment"}, where parentLinkType is amendment or obligation. |
| `record_type` | string | No | New record type key: a key of record_types from IRONCLAD_GET_RECORDS_SCHEMA. Omit to keep the type. |
| `add_children` | array | No | Records to add as children of this record. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `remove_links` | array | No | Related-record links to remove. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `remove_parent` | boolean | No | Set true to detach the record from its parent. |
| `add_properties` | object | No | Properties to add or overwrite, as {propertyId: {type, value}}; others are left unchanged. Property ids and their types are defined per company: read them from IRONCLAD_GET_RECORDS_SCHEMA. Each value is an object with two keys, type and value. Types and value shapes: string (dropdown, multi-select and table fields are stored as string too), number (integer), boolean, email, date (date-time such as "2021-05-11T17:16:53Z"), monetary_amount ({"currency": "USD", "amount": 10.7}), duration (ISO 8601 text such as "P3Y3M7W8D"), address ({"lines": [...], "locality": ..., "region": ..., "postcode": ..., "country": ...}). Linked entities go under entity_references as {"type": "array", "value": [{"recordId": "ENTITY-1"}]}. This {type, value} form differs from the bare values that workflow attributes take, so do not copy values between them. Example: {"counterpartyName": {"type": "string", "value": "Acme LLC"}, "agreementDate": {"type": "date", "value": "2021-05-11T17:16:53Z"}}. |
| `remove_children` | array | No | Child records to detach from this record. Each item is {"recordId": "IC-123"}, holding a record id or Ironclad id. |
| `address_as_object` | boolean | No | Set true to get address properties back as objects (lines, locality, region, postcode, country) instead of one string. Default false. |
| `remove_properties` | array | No | Property ids to remove from the record. Ids come from IRONCLAD_GET_RECORDS_SCHEMA or the record's own properties. |
| `add_properties_to_amend` | object | No | For an amendment record only: property ids to start rolling up to the parent, as {propertyId: {"amendmentType": "replace"}}. Property ids come from IRONCLAD_GET_RECORDS_SCHEMA. |
| `remove_properties_to_amend` | array | No | For an amendment record only: property ids to stop rolling up to the parent, so the parent shows its own value again. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Scheduled Workflow Signature Request

**Slug:** `IRONCLAD_UPDATE_SCHEDULED_WORKFLOW_SIGNATURE_REQUEST`

Change the send time or the reminder of the signature request already scheduled on a workflow with IRONCLAD_SCHEDULE_WORKFLOW_SIGNATURE_REQUEST. notify_at may be earlier as well as later than the current time (Ironclad documents no limit): at the new time Ironclad sends the request to the signers with no further call, and a sent request cannot be unsent, only cancelled with IRONCLAD_CANCEL_WORKFLOW_SIGNATURE_REQUEST. The workflow must be in the Sign step and not yet out for signature. Pass reminder as null to remove an existing reminder.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `reminder` | object | No | Add or change the reminder email to the signature coordinator: {"daysBefore": N} with N from 1 to 7. Omit to keep the current reminder, or pass null to remove it. |
| `notify_at` | string | No | New time at which Ironclad sends the signature request to the signers, as an ISO 8601 date-time, e.g. 2026-03-01T12:00:00Z; it may be earlier than the current one. Omit to keep the current time. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Workflow Approval

**Slug:** `IRONCLAD_UPDATE_WORKFLOW_APPROVAL`

Approve a workflow on behalf of one approver role, or set that approval back to pending, as the user the connection acts as. Ironclad allows the change only in the Review step while that role's approval group is active (its turn to approve), so this tool cannot withdraw an approval once the group is no longer active. It also works only when that user is currently assigned as the approver: compare with the role's assignees on IRONCLAD_LIST_WORKFLOW_APPROVALS, which gives role_id and shows which group is active. No tool in this toolkit names the connected user.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `status` | string ("approved" | "pending") | Yes | The new approval status: approved to approve, pending to set an approval back to not yet approved. |
| `role_id` | string | Yes | Id of the approver role whose status is changed. Get it from IRONCLAD_LIST_WORKFLOW_APPROVALS. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Workflow Attributes

**Slug:** `IRONCLAD_UPDATE_WORKFLOW_ATTRIBUTES`

Set or clear attribute (form field) values on a workflow that is in the Review step, and return the updated workflow. Call IRONCLAD_GET_WORKFLOW first: its attributes give the attribute ids and current values and its schema_ gives each type (IRONCLAD_GET_WORKFLOW_SCHEMA covers only launch-form fields). Form validation applies: a required attribute cannot be removed, a read-only one cannot be changed, and Ironclad rejects a call that changes nothing. It cannot change document attributes (use IRONCLAD_UPLOAD_WORKFLOW_DOCUMENT or IRONCLAD_UPDATE_WORKFLOW_SIGNATURE_PACKET), and stored records are changed with IRONCLAD_UPDATE_RECORD.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `comment` | string | No | Comment that explains the updates, as plain text (a string, not the {message} object other workflow actions take). |
| `updates` | array | Yes | Changes to apply, each {action, path, value}: action is set or remove, path is a workflow attribute id from attributes on IRONCLAD_GET_WORKFLOW, value is left out for remove. Values are bare; the shape depends on the attribute type: text, number, boolean and email as plain values; date as "2021-05-11"; monetaryAmount as {"currency": "USD", "amount": 25.37}; duration as {"years": 1, "months": 2} (any of years, months, weeks, days); address as {lines: [...], locality, region, postcode, country}; multi-select as a list of option strings; table as a list of rows keyed by column attribute id; user, record and entity fields as one id string (an email, "IC-68", "ENTITY-1"). Record/entity/obligation tools use {type, value}; do not copy values between them. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Workflow Role Assignment

**Slug:** `IRONCLAD_UPDATE_WORKFLOW_ROLE_ASSIGNMENT`

Assign a workflow role such as Archiver or Signature Coordinator to a different user. role_name is the role's display name from roles on IRONCLAD_GET_WORKFLOW or IRONCLAD_LIST_WORKFLOW_APPROVALS, not a role id. The user must be eligible for the role: check with IRONCLAD_LIST_WORKFLOW_ROLE_ELIGIBLE_ASSIGNEES. If the role is tied to another role in the workflow design the user is assigned to both. To change who signs use IRONCLAD_UPDATE_WORKFLOW_SIGNER.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `user_id` | string | Yes | Id of the Ironclad user to assign (24 hex characters, e.g. 61968ae4945dcecf4a78cc83): a user_id from IRONCLAD_LIST_WORKFLOW_ROLE_ELIGIBLE_ASSIGNEES. |
| `role_name` | string | Yes | Display name of the workflow role to reassign, e.g. Legal Approver, up to 200 characters: the display_name of an entry in roles on IRONCLAD_GET_WORKFLOW or IRONCLAD_LIST_WORKFLOW_APPROVALS, not that entry's id and not a signer role name. Pass it as plain text; it is URL-encoded for you. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Workflow Signature Packet

**Slug:** `IRONCLAD_UPDATE_WORKFLOW_SIGNATURE_PACKET`

Replace the ordered list of documents in a workflow's signature packet, the documents a signature request sends to the signers. Documents you list are put in the packet in that order; documents currently in the packet that you leave out are moved out of it. The workflow must be in the Review step. Get the document keys from IRONCLAD_LIST_WORKFLOW_DOCUMENTS.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `signature_packet_document_keys` | array | Yes | Document keys in the order the packet should have, from IRONCLAD_LIST_WORKFLOW_DOCUMENTS. Only .doc, .docx and .pdf documents are allowed, and the list cannot be empty when the workflow has a Sign step. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Update Workflow Signer

**Slug:** `IRONCLAD_UPDATE_WORKFLOW_SIGNER`

Reassign a signer role of a workflow to another signer, or change an external signer's name or email. If the request is already out for signature, the original signer is emailed that it was reassigned, and with Adobe Sign the signature request is cancelled; neither can be undone. A signer who has already signed cannot be updated. Get role names from IRONCLAD_LIST_WORKFLOW_SIGNERS. For a workflow role that is not a signer use IRONCLAD_UPDATE_WORKFLOW_ROLE_ASSIGNMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `reason` | string | Yes | The reason for updating the signer. |
| `assigned` | object | Yes | The signer to assign to the role. For an Ironclad user of the company: {"type": "internal", "userId": "63d415e0dd0d828c3a878548"}, with userId from IRONCLAD_LIST_WORKFLOW_PARTICIPANTS. For an external signer: {"type": "external", "email": "jane.doe@test.com", "name": "Jane Doe"}. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea) or the workflow's Ironclad id (e.g. IC-123). |
| `signer_role_name` | string | Yes | Role name of the signer to update, e.g. Counterparty Signer, exactly as returned in role_name by IRONCLAD_LIST_WORKFLOW_SIGNERS or IRONCLAD_GET_WORKFLOW_SIGN_STATUS. Pass it as plain text; it is URL-encoded for you. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upload Record Attachment

**Slug:** `IRONCLAD_UPLOAD_RECORD_ATTACHMENT`

Attach a file to a contract record under an attachment key. A key the record already uses is rejected: the keys in use are listed under attachments on IRONCLAD_GET_RECORD, and the keys the repository defines (such as signedCopy) under attachments in IRONCLAD_GET_RECORDS_SCHEMA. To replace a file, remove the old one with IRONCLAD_DELETE_RECORD_ATTACHMENT first, then upload under the same key. For documents of a workflow in progress use IRONCLAD_UPLOAD_WORKFLOW_DOCUMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `file` | object | Yes | The file to attach, up to 100 MB. Its name, or filename when given, must end in a supported extension: .doc, .docx, .pdf, .xls, .xlsm, .xlsx, .eml, .tif, .jpg, .png, .jpeg, .txt, .ppt, .pptx, .msg, .csv, .gif, .htm, .rtf, .xml, .asice, .adoc, .bdoc, .ddoc, .edoc, .json, .jsonl. |
| `filename` | string | No | Name to store the file under, including a supported extension, e.g. NDA - Acme LLC.pdf. When omitted the tool sends the uploaded file's own name. |
| `record_id` | string | Yes | Record id (UUID, e.g. 22e2ff72-56a1-4711-a4ca-41328d311e9f) or the record's Ironclad id (e.g. IC-123). |
| `attachment_key` | string | Yes | Attachment key to store the file under, e.g. signedCopy for the signed copy. A key the record already holds a file under is rejected. The reference says any text is accepted, yet it also documents an unknown-attachment-key error, so prefer a key the repository defines (attachments in IRONCLAD_GET_RECORDS_SCHEMA). |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upload Signed Workflow Document

**Slug:** `IRONCLAD_UPLOAD_SIGNED_WORKFLOW_DOCUMENT`

Upload a signed PDF to a workflow that is in the Sign step. Without signer_role_names the document counts as fully signed and the workflow completes the Sign step, which cannot be undone; pass signer_role_names to record a partially signed copy instead. Uploading while a signature packet is out cancels the in-flight request and may email signers. mute_cancellation_notifications can suppress that email only for Ironclad Signature and Adobe Sign; DocuSign cannot suppress it, Dropbox Sign does not send one, and unsupported in-flight providers return 400 INVALID_PARAM when the flag is true. The flag is ignored when no request is out. For drafts and supporting documents use IRONCLAD_UPLOAD_WORKFLOW_DOCUMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `file` | object | Yes | The signed document to upload, as a PDF up to 100 MB. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |
| `signer_role_names` | array | No | Role names of the signers who have already signed this copy, from IRONCLAD_LIST_WORKFLOW_SIGNERS. Give it only when the document does not yet carry every required signature: when omitted or empty the document is treated as fully signed and the workflow completes the Sign step. |
| `mute_cancellation_notifications` | boolean | No | When uploading cancels an in-flight signature request, true asks the eSignature provider not to email signers about the cancellation. Only Ironclad Signature and Adobe Sign support suppression: DocuSign cannot suppress cancellation emails, and Dropbox Sign does not send one. If the in-flight request uses an unsupported provider, true returns a 400 INVALID_PARAM error. Ignored when no request is out for signature. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |

### Upload Workflow Document

**Slug:** `IRONCLAD_UPLOAD_WORKFLOW_DOCUMENT`

Upload a PDF or Word file into a document attribute of a workflow, with a required comment. With document_key the file becomes a new version of that existing draft document; without it the file is added to the attribute. For a signed copy use IRONCLAD_UPLOAD_SIGNED_WORKFLOW_DOCUMENT; for a file on a stored record use IRONCLAD_UPLOAD_RECORD_ATTACHMENT.

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `file` | object | Yes | The file to upload: a PDF, DOC or DOCX, up to 100 MB. |
| `comment` | object | Yes | Comment recorded with the action, as {"message": "text"}. To mention a user write <@user_id_or_email> inside message, and add "addUsersToWorkflow": true when a mentioned user is not yet a participant of the workflow. |
| `workflow_id` | string | Yes | Workflow id (24 hex characters, e.g. 681b91ce943b808e0503eeea). The docs do not say the Ironclad id (IC-123) is accepted by this operation; read the id from IRONCLAD_GET_WORKFLOW. |
| `attribute_id` | string | Yes | Id of the document attribute to upload into, e.g. draft. Document attributes are the ones whose type is document in schema_ on IRONCLAD_GET_WORKFLOW. |
| `document_key` | string | No | Key of an existing draft document to add a new version to, from IRONCLAD_LIST_WORKFLOW_DOCUMENTS. Only draft documents can be versioned; omit it to add a new document. |

#### Output

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | string | Yes | Data from the action execution |
| `error` | string | No | Error if any occurred during the execution of the action |
| `successful` | boolean | Yes | Whether or not the action execution was successful or not |
