Integrations & API
If you can do it in the app,
you can do it with curl.
Zergboard treats the UI as one client, not the source of truth. Every feature ships to the API in the same release. Anything else is backwards.
01 · The shape of it
REST + webhooks. Boring on purpose.
Read
# List boards in a workspace GET /v1/workspaces/acme-eng/boards Authorization: Bearer $ZB_TOKEN # Get a card with full history GET /v1/cards/card_8f2a?expand=history,comments # Search across the workspace GET /v1/search?q="5xx errors"&workspace=acme-eng
Write
# Create a card (idempotent) POST /v1/cards Idempotency-Key: req_a8f... { "board": "board_42", "title": "User reports billing 5xx", "column": "triage", "labels": ["bug", "p1"] } # Move + comment in one call PATCH /v1/cards/card_8f2a { "column": "shipped", "comment": "v3.2.1" }
02 · Webhooks
Push, not just pull.
Subscribe once, get every change as a signed POST. Retries, dead-letter queue, and replay all built in. We send the events you'd expect — and let you wildcard them.
# Webhook payload (signed via HMAC-SHA256 in header) { "event": "card.moved", "id": "evt_b91c...", "workspace": "acme-eng", "timestamp": "2026-04-30T14:22:18Z", "actor": { "type": "agent", "id": "agent_claude-code" }, "data": { "card_id": "card_8f2a", "from_column": "in_progress", "to_column": "shipped", "comment": "Deployed in v3.2.1" } } # Verify with one HMAC check — example header: # X-Zergboard-Signature: t=1714400538,v1=8d2...
03 · SDKs
First-class for the languages you actually use.
TypeScript
import { Zergboard } from "@zergboard/sdk"; const zb = new Zergboard({ token: process.env.ZB_TOKEN, }); await zb.cards.create({ board: "board_42", title: "Fix billing 5xx", });
Python
from zergboard import Zergboard zb = Zergboard(token=os.environ["ZB_TOKEN"]) zb.cards.create( board="board_42", title="Fix billing 5xx", )
Go
zb := zergboard.New(os.Getenv("ZB_TOKEN")) card, err := zb.Cards.Create(ctx, &zergboard.CardCreate{ Board: "board_42", Title: "Fix billing 5xx", })
04 · Agents
An MCP server. So your agents already know how to use it.
Zergboard ships an official Model Context Protocol server. Plug it into Claude Code, Cursor, or any MCP-compatible runtime — your agent can list boards, create cards, move them, and post comments using standard MCP tool calls. No glue code.
Standard MCP transport
stdio & SSE. Pin the version, scope the tools, audit the calls.
Built-in scopes
Hand an agent a token scoped to cards:write on one workspace. Done.
Idempotent writes
Agents retry. Idempotency keys mean no duplicate cards.
# Add Zergboard to Claude Code in one line claude mcp add zergboard -- npx @zergboard/mcp # Or in your config: { "mcpServers": { "zergboard": { "command": "npx", "args": ["@zergboard/mcp"], "env": { "ZB_TOKEN": "$ZB_TOKEN" } } } } # Agent now has these tools: - zergboard_list_boards - zergboard_create_card - zergboard_move_card - zergboard_comment - zergboard_search
05 · Pre-built integrations
The handful you actually need.
We don't ship 800 half-broken integrations. We ship the dozen people ask for, maintain them, and document the API for the rest.
GitHub
Auto-link PRs to cards. Move on merge.
GitLab
Same as GitHub, self-hosted included.
Slack
Card events → channels. Slash-command create.
Discord
Channel notifications, board summaries.
Sentry
Issue → triage card with stack trace.
Datadog
Monitors → cards. SLA timers tied to severity.
PagerDuty
Incidents create cards. Resolution closes them.
Linear
One-shot importer. Bring your tickets.
Jira
Importer + bidirectional sync (beta).
Trello
One-click migrate, including Power-Ups.
Asana
Importer with project hierarchy mapping.
Inbound: workspace@in.zergboard.com.
Zapier
300+ apps for the long tail.
n8n
Self-hosted automation, open-source.
Webhook out
14 events, 7-day retry, signed payloads.
+ your own
Anything we don't ship, you can build in an afternoon.
Built like a tool, not a fortress
Hand it to your team. Hand it to your agents.
Free for teams under ten. The API is the same on every tier.