Worlds / Legal
Ironclad API
A local Ironclad with contract workflows, templates, approvals, clause library and the repository of executed records. Test the legal ops agent that launches, routes and approves contracts through each workflow step.
- Base path
/public/api/v1- Auth
- OAuth bearer token, the world key
- Endpoints
- 15
- Status
- Active today
This reference previews the surface the Ironclad world serves in the closed beta. Paths mirror the public Ironclad API; the exact subset is confirmed when your workflow is scoped.
Connect
The run gives your agent these bindings. Keep your SDK; change only where it sends requests.
| binding | meaning |
|---|---|
WORLDS_IRONCLAD_URL | This world's origin followed by /public/api/v1 |
WORLDS_API_KEY | The world key, accepted wherever Ironclad expects a credential |
WORLDS_WORLD_ID | The isolated world's identity |
const base = process.env.WORLDS_IRONCLAD_URL;
const res = await fetch(base + "/public/api/v1/workflows?page=0&pageSize=20", {
headers: {
Authorization: "Bearer " + process.env.WORLDS_API_KEY,
},
});
const { list } = await res.json();API reference
Workflows
Contract requests moving through review and approval.
- GET
/public/api/v1/workflowsList workflows - POST
/public/api/v1/workflowsLaunch a workflow - GET
/public/api/v1/workflows/{id}Retrieve a workflow - PATCH
/public/api/v1/workflows/{id}/attributesUpdate workflow attributes - GET
/public/api/v1/workflows/{id}/approvalsList workflow approvals - PATCH
/public/api/v1/workflows/{id}/approvals/{roleId}Update an approval
Fields · 6
id | string | Workflow id |
title | string | Title |
template | string | Template id |
status | string | active, completed, cancelled or paused |
step | string | Current step |
attributes | object | Form values |
Workflow schemas
The fields each workflow template collects.
- GET
/public/api/v1/workflow-schemasList workflow schemas - GET
/public/api/v1/workflow-schemas/{id}Retrieve a workflow schema - POST
/public/api/v1/workflows/asyncLaunch a workflow asynchronously
Fields · 4
id | string | Template id |
name | string | Template name |
schema | object | Attribute definitions |
roles | array | Approver and reviewer roles |
Records
Executed contracts stored in the repository.
- GET
/public/api/v1/recordsList records - GET
/public/api/v1/records/{id}Retrieve a record - PATCH
/public/api/v1/records/{id}Update a record
Fields · 5
id | string | Record id |
name | string | Record name |
type | string | Record type |
properties | object | Contract metadata |
lastUpdated | datetime | Last update |
Workflow comments
Discussion on a contract request.
- GET
/public/api/v1/workflows/{id}/commentsList workflow comments - POST
/public/api/v1/workflows/{id}/commentCreate a comment - GET
/public/api/v1/workflows/{id}/participantsList workflow participants
Fields · 4
id | string | Comment id |
user | object | Author |
message | string | Comment text |
createdAt | datetime | Time posted |
Test workflow
- Prepare. Select the Ironclad setup for your workflow and review its starting records, including workflows, workflow schemas, records.
- Connect. Configure your agent with this world's URL and key using the SDK example. Check that it reaches the intended API before running a test.
- Define. Describe the task, expected final changes and records that must stay untouched. Keep expected outcomes separate from the agent's instructions.
- Run and inspect. Use the dashboard or your workflow's generated CLI setup. Review final records and changes, then rerun from the same starting setup with the relevant failure conditions. Use Deployment and CI to automate the same workflow.
What to verify
- Northwind NDA moved to Sign
- Globex MSA still in Review with Finance pending
- Initech DPA unchanged
- Umbrella order form in Review
- No approvals recorded on another user's role
Test file
A task file names the jobs, the policy your agent is given and what the grader reads back from the world's final state. The agent never sees the expected outcomes.
# worlds/tasks.yaml · Ironclad
version: 2
connector: ironclad
seed: ironclad-starter
mode: isolated
policy: >
Move contracts forward where every approval is complete, and launch the
Umbrella order form for review. Never mark an approval for a role you don't
hold.
tasks:
- id: launch-an-nda-workflow-from-the-right-template
prompt: Launch an NDA workflow from the right template
- id: route-a-redlined-contract-to-the-required-approvers
prompt: Route a redlined contract to the required approvers
- id: move-a-fully-approved-contract-to-the-sign-step
prompt: Move a fully approved contract to the Sign step
expected:
- Northwind NDA moved to Sign
- Globex MSA still in Review with Finance pending
- Initech DPA unchanged
- Umbrella order form in Review
- "No approvals recorded on another user's role"
scenarios:
- rate-limited
- missing-launch-field
- permission-deniedSee Tasks and outcomes for every field, and Deployment and CI to run the file on every pull request.
Failure conditions
Each one fires before the handler, at the same step on every run.
| condition | what the agent sees |
|---|---|
rate-limited | The API returns 429 |
missing-launch-field | Launch without a required form field returns 400 |
permission-denied | Approving a role the user doesn't hold returns 403 |
webhook-twice | The workflow updated webhook arrives two times |
Starting data
Start each run from the same records and relationships. The overview below describes the Ironclad starter; use the setup supplied for your workflow when preparing your own snapshot.
| Records | Starting setup |
|---|---|
| workflows | 40 in Create, Review, Sign and Archive steps |
| templates | NDA, MSA, DPA and order form templates with launch forms |
| approvals | Legal, Finance and Security approver roles |
| clause library | Standard and fallback clauses for liability and term |
| records | 300 executed contracts with metadata |
The record shapes below reuse this world's API field definitions. They show illustrative values and placeholders, not an importable seed. API responses and seed input can differ; include all required records and references in the accepted import format for your workflow.
Workflows records
Workflows
Contract requests moving through review and approval.
| Field | Type | Meaning / relationship |
|---|---|---|
id | string | Workflow id |
title | string | Title |
template | string | Template id |
status | string | active, completed, cancelled or paused |
step | string | Current step |
attributes | object | Form values |
{
"id": "<Workflow id>",
"title": "<Title>",
"template": "<Template id>",
"status": "<active, completed, cancelled or paused>",
"step": "<Current step>",
"attributes": {}
}Workflow schemas records
Workflow schemas
The fields each workflow template collects.
| Field | Type | Meaning / relationship |
|---|---|---|
id | string | Template id |
name | string | Template name |
schema | object | Attribute definitions |
roles | array | Approver and reviewer roles |
{
"id": "<Template id>",
"name": "<Template name>",
"schema": {},
"roles": []
}Records records
Records
Executed contracts stored in the repository.
| Field | Type | Meaning / relationship |
|---|---|---|
id | string | Record id |
name | string | Record name |
type | string | Record type |
properties | object | Contract metadata |
lastUpdated | datetime | Last update |
{
"id": "<Record id>",
"name": "<Record name>",
"type": "<Record type>",
"properties": {},
"lastUpdated": "<Last update>"
}Workflow comments records
Workflow comments
Discussion on a contract request.
| Field | Type | Meaning / relationship |
|---|---|---|
id | string | Comment id |
user | object | Author |
message | string | Comment text |
createdAt | datetime | Time posted |
{
"id": "<Comment id>",
"user": {},
"message": "<Comment text>",
"createdAt": "<Time posted>"
}