PM integrations — GitHub Issues, Linear, Jira¶
AntCrew can push every ticket a pipeline produces directly to your issue tracker. No copy-paste: when a run finishes, tickets appear automatically in GitHub Issues, Linear, or Jira.
How it works¶
- You configure one or more destinations (
POST /integrations/) with provider credentials. - When any run in your workspace completes, AntCrew reads the tickets it produced and calls the provider API for each one.
manual_actiontickets (human-only work items) are skipped — only automatable tickets are synced.
You can have multiple destinations at once — for example, GitHub Issues for your main repo and Linear for your product backlog.
Supported providers¶
| Provider | What gets created | Auth |
|---|---|---|
github |
GitHub Issue in a specific repo | Personal access token (repo scope) |
linear |
Linear Issue in a specific team | Linear API key + team ID |
jira |
Jira Task in a project | Jira cloud URL + email + API token + project key |
Configure a destination¶
POST /integrations/
Content-Type: application/json
X-Api-Key: acw_...
{
"provider": "github",
"label": "Main backend repo",
"config_json": {
"token": "ghp_...",
"owner": "myorg",
"repo": "backend"
}
}
GitHub config¶
Requires a personal access token with repo scope (or public_repo for public repos).
Linear config¶
Generate a Linear API key in workspace settings. The team ID is the UUID from your Linear team URL.
Jira config¶
{
"base_url": "https://mycompany.atlassian.net",
"email": "you@company.com",
"api_token": "ATATT...",
"project_key": "BACK"
}
Generate a Jira API token in your Atlassian account settings.
Filter by team¶
Pass team_filter to restrict a destination to a specific team:
{
"provider": "linear",
"label": "DevTeam → Linear",
"team_filter": "DevTeam",
"config_json": { ... }
}
Omit team_filter (or set it to null) to sync from all teams.
Test the connection¶
Sends a harmless test ticket to the provider and returns {"success": true, "url": "..."}. Use this to verify credentials before relying on it in production.
Manage destinations¶
# List all destinations (credentials are masked in the response)
GET /integrations/
# Update label, toggle enabled, change team_filter
PATCH /integrations/{dest_id}
{ "enabled": false }
# Remove a destination
DELETE /integrations/{dest_id}
What gets synced¶
Each ticket becomes one issue in the provider. AntCrew maps the fields as follows:
| AntCrew field | GitHub | Linear | Jira |
|---|---|---|---|
title |
title | title | summary |
description + acceptance_criteria |
body | description | description |
priority |
label (not set) | priority (1–4) | not set |
Tickets with ticket_type = "manual_action" are never synced.
Credential security¶
Credentials stored in config_json are kept in your workspace and never logged. The list endpoints return a masked view (first 4 chars + ***) — the raw values are only read at sync time.