# Legal contract intake desk your teams use instead of email

> One place for sales and ops to request an NDA or vendor agreement, watch its status, and let legal launch the contract in a single click.

- Workflow type: app
- Services: Ironclad, Slack Bot, General Input Database
- Categories: Operations
- Published: 2026-08-24

## What it does

- A request form where anyone picks what they need (NDA, vendor agreement, order form), names the other company, fills in the deal terms, and attaches a draft.
- A queue for the legal team showing every request in columns, with simple standard requests marked low touch and anything unusual or incomplete held in a needs legal input column.
- A Review and launch button that starts the matching contract in Ironclad, attaches the draft, and posts a kickoff summary on the contract's activity feed.
- Requesters see the live status of their own submissions, and your legal channel in Slack gets a message with the contract link whenever a new one starts.

## What you'll need

- An Ironclad account with permission to launch contracts and upload documents
- Your contract templates already set up in Ironclad
- A Slack workspace with a channel for the legal team
- The list of email addresses that count as the legal team, since they see every request while everyone else sees only their own

## Prompt

Build me a legal contract intake desk that my business teams open instead of emailing legal. Sales, procurement, and ops submit contract requests through it, legal works the resulting queue, and approved requests get launched as real contract workflows in Ironclad. Store the request rows in the General Input Database so the app has its own record of every submission alongside the live state in Ironclad.

The main screen is a request form. The requester picks what they need from a short list of request types (NDA, vendor agreement, order form), names the counterparty, and fills in the deal terms: contract value, term length, start date, whether it auto renews, governing law, payment terms, and a free text box for anything non standard. They can attach a draft document, add a business justification, and set a needed by date. On submit, save a request row in the General Input Database capturing the submitter's identity and email, every field above, the uploaded draft, a status, a triage flag, and empty slots for the Ironclad workflow id and link that get filled in later.

Apply a triage rule at submit time and show the result on the row. Mark a request low touch when it is a standard request type, every required field is filled in, and the terms sit inside the thresholds I configure, for example contract value under a ceiling, a standard term length, no custom indemnity or liability language, and governing law left at the default. Anything with non standard terms or a missing field goes to a needs legal input column instead, and the Review and launch button stays disabled on those rows until a member of the legal team clears the flag or fills in the gap. Make the thresholds easy to edit in one place.

Give the app two main views besides the form. A queue view for legal shows every request as a column board: New, Low touch, Needs legal input, In Ironclad, and Completed, with the counterparty, request type, value, requester, and age on each card. A my requests view shows a requester the live status of their own submissions only. Enforce this as a real permission rule: a viewer sees only the rows they submitted unless their email is on a configurable legal team list, in which case they see everything and get the queue view. Deal terms should not leak between business teams.

Opening a request shows the full detail: the submitted terms, the attached draft, the triage flag and why it was set, and once the contract exists, the live Ironclad state. Pull that state with Retrieve a Workflow for the linked workflow, and show where it currently sits along with the audit trail of step transitions from Get Workflow Turn History so a requester can see it moved from review into approval without asking anyone. Use List Workflows to refresh status across the whole queue in one pass, and page through results rather than assuming a single page covers everything.

Every request has a Review and launch button that kicks off a background agent. The agent reads the request row and the attached draft, then calls List Workflow Schemas to see the contract templates configured in Ironclad and picks the one that matches the request type and the terms it just read. It then calls Get Workflow Launch Schema for that template to resolve the required fields. This part matters: Ironclad launch forms are dynamic, so the agent must read the launch schema and resolve the actual field ids before it builds the launch body, never guessing at field names. It maps the request's counterparty and deal terms onto those resolved fields, and if a required field cannot be filled from the request, it stops rather than inventing a value, moves the row to needs legal input, and notes exactly which field is missing.

When the fields resolve cleanly, the agent starts the contract with Launch a Workflow, attaches the submitted draft to it with Upload Workflow Document, and posts a kickoff summary to the contract's activity feed with Create Workflow Comment. That comment should be genuinely useful to the lawyer who picks this up: who requested it, the counterparty, the key deal terms, whether triage called it low touch or flagged something non standard, and anything in the draft worth a closer look.

When the agent finishes, it writes the new workflow id and a link to it back into the app row, moves the row to In Ironclad, and posts a message to the legal channel in Slack with Send a Message so the assigned lawyer knows what landed. The Slack message should name the counterparty and request type, say whether it is low touch or needs a closer read, name the requester, and link straight to the contract in Ironclad. Post it as the bot rather than as whoever connected the account, so notifications are not misattributed to one person. If the launch fails at any step, leave the row in place with the error visible in the app instead of silently failing, so legal can retry.

## How to customize

- Which request types appear on the form, and which Ironclad template each one maps to
- The rules that decide low touch, for example a deal value ceiling, standard term lengths, or governing law left untouched
- Which Slack channel gets notified, and whether the message goes to the channel or straight to the assigned lawyer

## FAQ

### Do the people submitting requests need an Ironclad login?

No. They just open the app, fill in the form, and follow the status of their own requests. Only the legal team's Ironclad connection is used to start contracts.

### Can someone see other people's contract requests?

Only if their email is on the legal team list you set up. Everyone else sees just the requests they submitted themselves, which keeps deal terms private between the requester and legal.

### What happens if a request is missing information?

It lands in the needs legal input column instead of being launched, so a lawyer can chase the missing detail before any contract is started. The same happens when the terms look non standard.

### Does this work with our own contract templates?

Yes. It reads the templates already configured in your Ironclad account and matches each request type to one of them, so nothing new has to be built.

### Can we still work on the contract in Ironclad afterwards?

Yes. The app starts the contract, attaches the draft, and posts a summary. Everything after that, including review, approvals, and signature, happens in Ironclad exactly as it does today.

Use this prompt in General Input: https://www.generalinput.com/prompts/legal-contract-intake-desk-your-teams-use-instead-of-email