Skip to main content

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:write scope

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

  1. In Drafted, go to Settings → Developer
  2. Click Create API key
  3. Name it monday-integration
  4. Select scopes: missions:write, missions:read
  5. Copy the key

Step 2 — Configure the Monday.com integration in Drafted

  1. In Drafted, go to Settings → Integrations → Monday.com
  2. Click Connect Monday.com and authorize the OAuth connection
  3. Select the board you want to connect
  4. 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

Monday.com webhook config

Step 3 — Set up the Monday.com automation

In your Monday.com board:

  1. Click Automate in the top-right
  2. Choose Create custom automation
  3. Set the trigger: When status changes to → select your trigger status (e.g. "Ready for Review")
  4. 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

Monday.com automation setup

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

  1. Add a contract file to your board item
  2. Change the status to your trigger value
  3. Watch the Drafted dashboard — a new mission should appear within seconds
  4. 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:

ColumnValue
Risk Levellow, medium, high, or critical
Findings CountNumber of issues found
Review SummaryShort text summary of the review
Redlined DocumentLink to download the redlined DOCX
Review StatusSet 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:read and files:read scopes
  • 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:write scope
  • 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.