# Describe Workflow Template — Ironclad

> Retrieves the fillable attribute schema for an Ironclad workflow template — the required call before Launch Workflow. Returns each field's type, display name, enum options, and whether it's required. Every field's description already…

- Key: `ironclad-describe-workflow-template`
- Type: Action (Read-only)
- Version: 0.0.2
- App: Ironclad (`ironclad`) — https://pipedream.com/apps/ironclad.md
- This page (HTML): https://pipedream.com/apps/ironclad/actions/describe-workflow-template
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/ironclad/actions/describe-workflow-template/describe-workflow-template.mjs

## Description

Retrieves the fillable attribute schema for an Ironclad workflow template — the required call before **Launch Workflow**. Returns each field's type, display name, enum options, and whether it's required. Every field's `description` already includes a worked value-format example for complex types (`address`, `monetaryAmount`, `date`, `duration`, `document`/`array`) — use those examples verbatim, do not guess a shape. A field's `required` may be `"conditional"`: when Ironclad's naming convention makes the trigger inferable (e.g. a field named `set1Question2` triggered by a selector field set to `"Set 1"`), a `dependsOn: {field, value}` hint is included; whenever you set the selector to that value, also include the dependent field. If a conditional field has no `dependsOn` hint, its trigger isn't inferable from naming — watch for a `MISSING_PARAM` error naming it after you submit **Launch Workflow**, and retry with it included. Run **Describe Workspace** first to find a template ID. Example: set `templateId` to `"tmpl_abc123"` to retrieve a schema where each field looks like `{"counterpartyName": {"type": "string", "displayName": "Counterparty Name", "required": "always", "description": "Value of Counterparty Name"}, "requiredAddress": {"type": "address", "displayName": "Required Address", "required": "always", "description": "Value of Required Address. Example: {\"lines\": [...], \"locality\": ..., \"region\": ..., \"postcode\": ..., \"country\": ...}"}}`. [See the documentation](https://developer.ironcladapp.com/reference/retrieve-a-workflow-schema)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `templateId` | `string` | Yes | The identifier of a workflow template. Obtain via Describe Workspace (e.g. tmpl_abc123). Options are loaded from the connected account. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "ironclad",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "ironclad-describe-workflow-template",
  arguments: {
    templateId: "Template ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "ironclad-describe-workflow-template",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    ironclad: { authProvisionId: "apn_xxxxxxx" },
    templateId: "Template ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "ironclad-describe-workflow-template",
    "configured_props": {
      "ironclad": { "authProvisionId": "apn_xxxxxxx" },
      "templateId": "Template ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/ironclad.md · All apps: https://pipedream.com/apps
