Skip to content

Monday.com Integration Guide

spectryn supports Monday.com for syncing markdown specifications. This guide covers configuration, authentication, board setup, and column mapping.

Overview

The Monday.com adapter supports:

  • ✅ Boards, Groups (epics), Items (stories), and Subitems (subtasks)
  • ✅ Status, Priority, and Story Points columns
  • ✅ Timeline/Gantt view integration
  • ✅ File attachments
  • ✅ Updates (comments) sync
  • ✅ Webhooks for real-time sync
  • ✅ Custom column mapping

Quick Start

bash
# Install spectryn
pip install spectryn

# Sync markdown to Monday.com
spectryn --markdown EPIC.md --tracker monday --execute

Configuration

Config File (YAML)

Create .spectryn.yaml:

yaml
# Monday.com connection settings
monday:
  api_token: your-monday-api-token-v2
  board_id: "123456789"  # Board ID (numeric)
  workspace_id: "987654321"  # Optional: Workspace ID
  api_url: https://api.monday.com/v2  # Optional: defaults to production API

  # Column mapping (optional - auto-detected if not specified)
  status_column_id: "status"  # Status column ID
  priority_column_id: "priority"  # Priority column ID
  story_points_column_id: "numbers"  # Story points column ID

# Sync settings
sync:
  execute: false  # Set to true for live mode
  verbose: true

Config File (TOML)

Create .spectryn.toml:

toml
[monday]
api_token = "your-monday-api-token-v2"
board_id = "123456789"
workspace_id = "987654321"
api_url = "https://api.monday.com/v2"

[monday.column_mapping]
status_column_id = "status"
priority_column_id = "priority"
story_points_column_id = "numbers"

[sync]
execute = false
verbose = true

Environment Variables

bash
# Required
export MONDAY_API_TOKEN=your-monday-api-token-v2
export MONDAY_BOARD_ID=123456789

# Optional
export MONDAY_WORKSPACE_ID=987654321
export MONDAY_API_URL=https://api.monday.com/v2
export MONDAY_STATUS_COLUMN_ID=status
export MONDAY_PRIORITY_COLUMN_ID=priority
export MONDAY_STORY_POINTS_COLUMN_ID=numbers

CLI Arguments

bash
spectryn \
  --markdown EPIC.md \
  --tracker monday \
  --monday-api-token your-token \
  --monday-board-id 123456789 \
  --execute

API Token Setup

Getting Your Monday.com API Token (v2)

  1. Navigate to Monday.com Developer Settings

  2. Create API Token

    • Click "Generate new token" or "Create token"
    • Give it a descriptive name (e.g., "spectryn CLI")
    • Select the appropriate scope:
      • Read - View boards, items, columns
      • Write - Create and update items, columns
      • Full access - Complete access (recommended for spectryn)
  3. Copy Token

    • Copy the token immediately (shown only once)
    • Format: Long alphanumeric string (e.g., eyJhbGciOiJIUzI1NiJ9...)
  4. Configure spectryn

    bash
    export MONDAY_API_TOKEN=your-token-here

Security

  • Never commit tokens to version control
  • Use environment variables or .env files (add to .gitignore)
  • Rotate tokens regularly
  • Use tokens with minimal required permissions

Token Permissions

PermissionRequired For
ReadView boards, items, columns
WriteCreate/update items, columns, comments
Full accessAll operations (recommended)

Testing Your Token

Test your token with a simple API call:

bash
curl -H "Authorization: YOUR_TOKEN" \
  https://api.monday.com/v2 \
  -H "Content-Type: application/json" \
  -d '{"query": "{ me { id name email } }"}'

You should receive a response with your user information.

Board and Column Configuration

Finding Your Board ID

  1. Open your board in Monday.com
  2. Check the URL
    • Format: https://monday.com/boards/123456789
    • The number after /boards/ is your board ID
  3. Or use the API
    bash
    curl -H "Authorization: YOUR_TOKEN" \
      https://api.monday.com/v2 \
      -H "Content-Type: application/json" \
      -d '{"query": "{ boards { id name } }"}'

Finding Your Workspace ID (Optional)

Workspace ID is optional but useful for organization:

  1. Check the URL
    • Format: https://monday.com/workspaces/987654321
    • The number after /workspaces/ is your workspace ID
  2. Or use the API
    bash
    curl -H "Authorization: YOUR_TOKEN" \
      https://api.monday.com/v2 \
      -H "Content-Type: application/json" \
      -d '{"query": "{ workspaces { id name } }"}'

Understanding Monday.com Structure

Monday.com uses a hierarchical structure:

Workspace
  └── Board
      └── Group (Epic)
          └── Item (Story)
              └── Subitem (Subtask)

Mapping to spectryn:

  • Epic → Group (column/group within a board)
  • Story → Item (row/item on the board)
  • Subtask → Subitem (child item linked to parent)
  • Status → Status column
  • Priority → Priority column
  • Story Points → Numbers column

Required Columns

For full spectryn functionality, your board should have these columns:

Column TypeColumn NamePurpose
StatusStatusTrack story status (Planned, In Progress, Done)
PriorityPrioritySet story priority (Critical, High, Medium, Low)
NumbersStory PointsEstimate story complexity
Timeline (optional)TimelineGantt view for start/end dates

Creating Columns

If your board doesn't have the required columns:

  1. Open your board

  2. Click the "+" button to add a column

  3. Select column type:

    • Status - For status tracking
    • Priority - For priority levels
    • Numbers - For story points
    • Timeline - For Gantt view (optional)
  4. Name the column:

    • Status column: Status
    • Priority column: Priority
    • Story points column: Story Points
    • Timeline column: Timeline

Custom Column Mapping Guide

spectryn automatically detects columns by type and name, but you can specify custom mappings if your board uses different column names.

Auto-Detection

By default, spectryn automatically finds columns by:

  1. Type match - Finds columns by type (status, priority, numbers, timeline)
  2. Name match - If multiple columns of same type, matches by name hints

Manual Column Mapping

If your board uses custom column names, specify them explicitly:

Using Config File

yaml
monday:
  api_token: your-token
  board_id: "123456789"

  # Custom column IDs (get from board settings)
  status_column_id: "status_col_abc123"
  priority_column_id: "priority_col_xyz789"
  story_points_column_id: "numbers_col_def456"

Using Environment Variables

bash
export MONDAY_STATUS_COLUMN_ID=status_col_abc123
export MONDAY_PRIORITY_COLUMN_ID=priority_col_xyz789
export MONDAY_STORY_POINTS_COLUMN_ID=numbers_col_def456

Finding Column IDs

To find your column IDs:

  1. Use the API

    bash
    curl -H "Authorization: YOUR_TOKEN" \
      https://api.monday.com/v2 \
      -H "Content-Type: application/json" \
      -d '{"query": "{ boards(ids: [123456789]) { columns { id title type } } }"}'
  2. Response example:

    json
    {
      "data": {
        "boards": [{
          "columns": [
            {"id": "status", "title": "Status", "type": "status"},
            {"id": "priority", "title": "Priority", "type": "priority"},
            {"id": "numbers", "title": "Story Points", "type": "numbers"}
          ]
        }]
      }
    }
  3. Use the id field from the response

Column Type Reference

Column TypeMonday.com TypeUse Case
StatusstatusWorkflow states (Not Started, In Progress, Done)
PrioritypriorityPriority levels (Critical, High, Medium, Low)
Story PointsnumbersNumeric estimates (1, 2, 3, 5, 8, 13)
TimelinetimelineStart/end dates for Gantt view
DatedateIndividual start/end dates (alternative to timeline)

Status Column Configuration

Status columns need specific labels. Configure them in Monday.com:

  1. Open column settings

  2. Add status labels:

    • Not Started
    • Working on it
    • Done
    • (Add more as needed)
  3. spectryn will map:

    • Planned → "Not Started"
    • In Progress → "Working on it"
    • Done → "Done"

Priority Column Configuration

Priority columns use index-based values:

PriorityIndexLabel
Critical0Critical
High1High
Medium2Medium
Low3Low

spectryn automatically maps priority values to the correct index.

Story Points Column Configuration

Story Points use a Numbers column:

  • Accepts numeric values (integers or decimals)
  • Common values: 1, 2, 3, 5, 8, 13 (Fibonacci)
  • Can use any numeric scale

Advanced Features

Timeline/Gantt View Integration

Set start and end dates for items to enable Gantt view:

python
from spectryn.adapters.monday import MondayAdapter

adapter = MondayAdapter(
    api_token="your-token",
    board_id="123456789",
)

# Set timeline dates
adapter.set_timeline_dates(
    issue_key="item-123",
    start_date="2025-01-01",
    end_date="2025-01-31"
)

# Get timeline dates
dates = adapter.get_timeline_dates("item-123")
# Returns: {"start_date": "2025-01-01", "end_date": "2025-01-31"}

File Attachments

Upload files to items:

python
# Upload file
result = adapter.upload_file(
    issue_key="item-123",
    file_path="./attachments/design.png"
)

# Get all files for an item
files = adapter.get_item_files("item-123")

Webhooks for Real-Time Sync

Set up webhooks to receive real-time updates:

python
# Create webhook
webhook = adapter.create_webhook(
    url="https://your-server.com/webhook",
    event="change_column_value"  # or "create_item", "create_update", etc.
)

# List webhooks
webhooks = adapter.list_webhooks()

# Delete webhook
adapter.delete_webhook(webhook_id="webhook-123")

Supported Events:

  • change_column_value - When column values change (default)
  • create_item - When new items are created
  • create_update - When updates/comments are created
  • change_status - When status changes
  • change_name - When item names change
  • create_subitem - When subitems are created

Troubleshooting

Common Issues

Issue: "Board not found"

  • Verify board_id is correct (numeric ID from URL)
  • Check token has access to the board
  • Ensure board exists and is accessible

Issue: "Status column not found"

  • Add a Status column to your board
  • Or specify status_column_id in config
  • Check column type is status

Issue: "Column value update failed"

  • Verify column ID is correct
  • Check column type matches the value type
  • Ensure token has write permissions

Issue: "Rate limit exceeded"

  • Monday.com limits: 500 requests per 10 seconds
  • The adapter handles rate limiting automatically
  • Reduce sync frequency if hitting limits

Issue: "Authentication failed"

  • Verify token is valid and not expired
  • Check token has appropriate permissions
  • Ensure token format is correct (v2 API token)

Debug Mode

Enable verbose logging:

bash
spectryn --markdown EPIC.md --tracker monday --verbose

Or in config:

yaml
sync:
  verbose: true

Testing Connection

Test your configuration:

bash
# Test connection (dry-run)
spectryn --markdown EPIC.md --tracker monday --validate

Examples

Basic Sync

bash
# Dry-run (preview changes)
spectryn --markdown EPIC.md --tracker monday

# Execute sync
spectryn --markdown EPIC.md --tracker monday --execute

With Custom Column Mapping

yaml
monday:
  api_token: your-token
  board_id: "123456789"
  status_column_id: "custom_status_col"
  priority_column_id: "custom_priority_col"
  story_points_column_id: "custom_points_col"

With Timeline Support

python
from spectryn.adapters.monday import MondayAdapter

adapter = MondayAdapter(
    api_token="your-token",
    board_id="123456789",
)

# Set timeline for Gantt view
adapter.set_timeline_dates(
    issue_key="item-123",
    start_date="2025-01-01",
    end_date="2025-01-31"
)

Reference

Configuration Options

OptionTypeDefaultDescription
api_tokenstringRequiredMonday.com API token (v2)
board_idstringRequiredBoard ID (numeric)
workspace_idstringnullWorkspace ID (optional)
api_urlstringhttps://api.monday.com/v2API endpoint
status_column_idstringAuto-detectedStatus column ID
priority_column_idstringAuto-detectedPriority column ID
story_points_column_idstringAuto-detectedStory points column ID

Environment Variables

VariableDescription
MONDAY_API_TOKENAPI token (v2)
MONDAY_BOARD_IDBoard ID
MONDAY_WORKSPACE_IDWorkspace ID (optional)
MONDAY_API_URLAPI endpoint (optional)
MONDAY_STATUS_COLUMN_IDStatus column ID (optional)
MONDAY_PRIORITY_COLUMN_IDPriority column ID (optional)
MONDAY_STORY_POINTS_COLUMN_IDStory points column ID (optional)

Column Mapping

Spectra FieldMonday.com Column TypeDefault Column Name
StatusstatusStatus
PrioritypriorityPriority
Story PointsnumbersStory Points
TimelinetimelineTimeline
Start DatedateStart Date
End DatedateEnd Date

Next Steps

Released under the MIT License.