Monday.com Integration
Connect Drafted to Monday.com to trigger contract reviews directly from board items and automatically write results back to your board.
Prerequisites
- A Monday.com account with a board containing contract files
- A Drafted account with at least one MegaAgent team configured
- A Drafted API key with
missions:writescope
How it works
Monday.com item changes status
↓
Monday.com automation fires webhook
↓
Drafted receives webhook, fetches file from Monday.com
↓
Mission runs (1–5 minutes)
↓
Drafted writes results back to Monday.com columns
Step 1 — Create an API key
- In Drafted, go to Settings → Developer
- Click Create API key
- Name it
monday-integration - Select scopes:
missions:write,missions:read - Copy the key
Step 2 — Configure the Monday.com integration in Drafted
- In Drafted, go to Settings → Integrations → Monday.com
- Click Connect Monday.com and authorize the OAuth connection
- Select the board you want to connect
- Map the columns:
- File column — which column contains the contract file
- Status trigger column — which status value triggers a review (e.g. "Ready for Review")
- Result columns — where to write risk level, findings count, and summary
Step 3 — Set up the Monday.com automation
In your Monday.com board:
- Click Automate in the top-right
- Choose Create custom automation
- Set the trigger: When status changes to → select your trigger status (e.g. "Ready for Review")
- Set the action: Send a webhook → enter the Drafted webhook URL shown in your integration settings
The webhook URL looks like:
https://app.drafted.li/api/external/v1/webhooks/monday
tip
You can also trigger on file uploaded to a column instead of a status change — useful if reviewers upload contracts directly.
Step 4 — Test the integration
- Add a contract file to your board item
- Change the status to your trigger value
- Watch the Drafted dashboard — a new mission should appear within seconds
- After 1–5 minutes, the results columns on your Monday.com item will update automatically
What gets written back
When a mission completes, Drafted updates the following columns on the Monday.com item:
| Column | Value |
|---|---|
| Risk Level | low, medium, high, or critical |
| Findings Count | Number of issues found |
| Review Summary | Short text summary of the review |
| Redlined Document | Link to download the redlined DOCX |
| Review Status | Set to "Review Complete" |
Troubleshooting
Webhook not firing
- Verify the automation is active (not paused) in Monday.com
- Check that the status column value matches exactly — Monday.com automations are case-sensitive
- Confirm the webhook URL is correct in the automation settings
File not found
- Ensure the file is attached to the file column mapped in Drafted settings, not a different column
- Monday.com file columns require the file to be uploaded directly — linked files from Google Drive are not supported
Token scope error
- The Monday.com OAuth token needs
boards:readandfiles:readscopes - Re-authorize the connection in Settings → Integrations → Monday.com if you see scope errors
Results not writing back
- Confirm the result columns are mapped correctly in Drafted settings
- Check that the Monday.com OAuth token has
boards:writescope - Results write-back can take up to 30 seconds after mission completion
Using the API directly with Monday.com
If you prefer to build a custom integration, you can use the Drafted API directly from a Monday.com automation webhook or from your own backend:
// Receive Monday.com webhook, trigger Drafted mission
app.post('/monday-webhook', async (req, res) => {
const { event } = req.body;
// Fetch the file from Monday.com
const fileUrl = await getMondayFileUrl(event.fileColumnValue);
const fileBuffer = await fetch(fileUrl).then(r => r.buffer());
// Submit to Drafted
await fetch('https://app.drafted.li/api/external/v1/missions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.DRAFTED_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
teamId: process.env.DRAFTED_TEAM_ID,
missionType: 'redline',
document: {
base64: fileBuffer.toString('base64'),
filename: event.fileName,
mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
},
callbackUrl: 'https://your-server.com/drafted-callback',
externalRef: `monday-item-${event.pulseId}`,
}),
});
res.sendStatus(200);
});
Use externalRef to store the Monday.com item ID — it's echoed back in the callback payload so you can look up which item to update.