Browse the docs
API reference
Projects
Products, the spine everything else hangs off, plus the roadmap and changelog.
List products
GET/v1/projects
Up to 60 products ordered by stage then name, each with its count of planned work and live stats. Pipeline amounts are empty unless the token holds crm.value and the account may view deal values.
Requires projects.read
curl "https://atrix.dev/api/v1/projects" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"items": [
{
"id": "cm7a1b2c30000qr12st34uv56",
"name": "Atrix Mail",
"slug": "atrix-mail",
"stage": "BUILDING",
"summary": "Email hosting for small teams.",
"accent": "#F97316",
"logoUrl": null,
"icon": "mail",
"platforms": [
"WEB",
"BACKEND"
],
"openWork": 13,
"stats": {
"battery": {
"done": 18,
"progress": 4,
"todo": 9,
"total": 31,
"pct": 58,
"overdue": 2
},
"unassigned": 3,
"undated": 5,
"pipeline": {
"open": 4,
"byCurrency": [
{
"currency": "USD",
"amount": 12000,
"deals": 3
}
],
"unpriced": 1,
"won90": [
{
"currency": "USD",
"amount": 4500,
"deals": 1
}
],
"nextClose": "2026-11-10T00:00:00.000Z",
"stale": 0
},
"health": "late"
}
}
]
}Get a product
GET/v1/projects/{slug}
One product as a hub: up to 12 open work items (epics excluded), 8 recent pages, 6 posts, 12 team members with their open work, and stats. Nothing paginates.
Requires projects.read
Path parameters
slugstringrequiredThe product's slug.
curl "https://atrix.dev/api/v1/projects/SLUG" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"id": "cm7a1b2c30000qr12st34uv56",
"name": "Atrix Mail",
"slug": "atrix-mail",
"stage": "BUILDING",
"summary": "Email hosting for small teams.",
"accent": "#F97316",
"icon": "mail",
"logoUrl": null,
"platforms": [
"WEB",
"BACKEND"
],
"url": "https://atrix.dev/dashboard/projects/atrix-mail",
"openWork": 13,
"work": [
{
"id": "cm9x2k7f40001ab12cd34ef56",
"title": "Retry failed Stripe webhooks",
"status": "IN_PROGRESS",
"daysLate": 2,
"assignee": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null
}
}
],
"pages": [
{
"id": "cm9p0q1r20005gh67ij89kl01",
"title": "Pricing decision",
"icon": null,
"excerpt": "We charge per mailbox because…",
"at": "2026-10-22T10:00:00.000Z"
}
],
"posts": [
{
"id": "cm9s2t3u40008mn23op45qr67",
"body": "Billing is live.",
"at": "2026-10-24T08:30:00.000Z",
"author": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null
}
}
],
"team": [
{
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null,
"openWork": 4
}
],
"stats": {
"battery": {
"done": 18,
"progress": 4,
"todo": 9,
"total": 31,
"pct": 58,
"overdue": 2
},
"unassigned": 3,
"undated": 5,
"pipeline": {
"open": 4,
"byCurrency": [
{
"currency": "USD",
"amount": 12000,
"deals": 3
}
],
"unpriced": 1,
"won90": [
{
"currency": "USD",
"amount": 4500,
"deals": 1
}
],
"nextClose": "2026-11-10T00:00:00.000Z",
"stale": 0
},
"health": "late"
}
}Update a product
PATCH/v1/projects/{slug}
Moves a product's stage, renames it or rewrites its summary. A stage move is recorded in the product's stage history; the response carries the resulting stage.
Requires projects.writeand the matching permission on the account
Path parameters
slugstringrequiredThe product's slug.
Body
stageenumThe new stage.
IDEAVALIDATINGBUILDINGLAUNCHEDPAUSEDnamestringNew name, 1 to 120 characters.
summarystring | nullWhat it is for, up to 2000 characters.
curl -X PATCH "https://atrix.dev/api/v1/projects/SLUG" \
-H "Authorization: Bearer $ATRIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "stage": "IDEA", "name": "…" }'{
"ok": true,
"stage": "LAUNCHED"
}List a product's deals
GET/v1/projects/{slug}/deals
The product's pipeline grouped by stage (up to 50 per stage; LOST and won totals cover the last 90 days). Also needs crm.read; amounts are null and totals empty unless the token holds crm.value and the account may view deal values.
Requires projects.read
Path parameters
slugstringrequiredThe product's slug.
curl "https://atrix.dev/api/v1/projects/SLUG/deals" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"valueVisible": true,
"totals": {
"open": [
{
"currency": "USD",
"amount": 12000,
"deals": 3
}
],
"won90": [],
"unpriced": 1,
"stale": 0
},
"groups": [
{
"stage": "QUALIFIED",
"count": 1,
"deals": [
{
"id": "cm9d1e2f30011st45uv67wx89",
"title": "Clinic group pilot",
"stage": "QUALIFIED",
"amount": 3500,
"currency": "USD",
"company": {
"id": "cm9c0d1e20010yz12ab34cd56",
"name": "MediCare Group"
},
"owner": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null
},
"expectedCloseOn": "2026-11-10",
"daysPastClose": null,
"stale": false
}
]
}
]
}List a product's updates
GET/v1/projects/{slug}/updates
Posts and stage moves for one product merged newest first, cursored on time. Pass next back as before for the next page.
Requires projects.read
Path parameters
slugstringrequiredThe product's slug.
Query parameters
limitintegerItems per page, 1 to 30; defaults to 20.
beforeISO dateOnly items older than this time.
curl "https://atrix.dev/api/v1/projects/SLUG/updates" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"items": [
{
"kind": "post",
"id": "cm9s2t3u40008mn23op45qr67",
"body": "Billing is live.",
"at": "2026-10-24T08:30:00.000Z",
"author": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null
},
"replies": 2
},
{
"kind": "stage",
"id": "cm9s1t2u30007mn23op45qr67",
"from": "VALIDATING",
"to": "BUILDING",
"at": "2026-09-02T12:00:00.000Z",
"by": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null
}
}
],
"next": null
}Get a product's profile
GET/v1/projects/{slug}/profile
A product as a company page: identity, links, current team, stage journey, counts and the latest metrics snapshot. counts.deals is null without crm.read.
Requires projects.read
Path parameters
slugstringrequiredThe product's slug.
curl "https://atrix.dev/api/v1/projects/SLUG/profile" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"identity": {
"name": "Atrix Mail",
"slug": "atrix-mail",
"tagline": "Email hosting for small teams.",
"pitch": "Mailboxes that come with an agent.",
"stage": "BUILDING",
"kind": "OWN_VENTURE",
"category": "Email",
"targetCustomer": "Teams of 2 to 50",
"foundedOn": "2026-06-01",
"logoUrl": null,
"coverUrl": null,
"icon": "mail",
"accent": "#F97316",
"platforms": [
"WEB",
"BACKEND"
],
"company": null,
"webUrl": "https://atrix.dev/dashboard/projects/atrix-mail"
},
"links": [
{
"id": "cm9l1m2n30012ab34cd56ef78",
"kind": "WEBSITE",
"label": "Site",
"url": "https://mail.atrix.dev"
}
],
"team": [
{
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan",
"image": null,
"title": "Engineer",
"role": "LEAD",
"since": "2026-06-01T00:00:00.000Z",
"openWork": 4
}
],
"journey": [
{
"stage": "IDEA",
"at": "2026-06-01T00:00:00.000Z",
"by": null
},
{
"stage": "BUILDING",
"at": "2026-09-02T12:00:00.000Z",
"by": {
"id": "cm8q1z0a10003xy98wv76ut54",
"name": "Sara Khan"
}
}
],
"counts": {
"work": 13,
"pages": 9,
"updates": 21,
"deals": 4
},
"metrics": {
"capturedAt": "2026-10-27T06:00:00.000Z",
"p95Ms": 210,
"errorRate": 0.002,
"throughput": 38
}
}List a product's pages
GET/v1/projects/{slug}/pages
Every page of a product, newest edit first, with an excerpt. Pass next back as before for the next page.
Requires projects.read
Path parameters
slugstringrequiredThe product's slug.
Query parameters
limitintegerItems per page, 1 to 50; defaults to 20.
beforeISO dateOnly pages last edited before this time.
qstringCase-insensitive title search.
curl "https://atrix.dev/api/v1/projects/SLUG/pages" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"items": [
{
"id": "cm9p0q1r20005gh67ij89kl01",
"title": "Pricing decision",
"icon": null,
"excerpt": "We charge per mailbox because…",
"at": "2026-10-22T10:00:00.000Z"
}
],
"next": null
}List the roadmap
GET/v1/roadmap
Initiatives (with linked product ids and done/total issue counts) and milestones. Read only; filters keep items overlapping the date window or matching the status.
Requires roadmap.read
Query parameters
fromISO dateOnly items ending (or due) on or after this day, YYYY-MM-DD.
toISO dateOnly items starting (or due) on or before this day, YYYY-MM-DD.
statusenumAn initiative or milestone status.
PLANNEDACTIVEPAUSEDDONEIN_PROGRESSCANCELLED
curl "https://atrix.dev/api/v1/roadmap" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"initiatives": [
{
"id": "cm9i1n2t30013gh45ij67kl89",
"kind": "initiative",
"title": "Self-serve billing",
"description": "Card trial and add-ons.",
"startOn": "2026-10-01",
"endOn": "2026-11-30",
"status": "ACTIVE",
"ownerId": "cm8q1z0a10001xy98wv76ut54",
"ownerName": "Moeid Saleem",
"projectIds": [
"cm7a1b2c30000qr12st34uv56"
],
"work": {
"done": 18,
"total": 31
}
}
],
"milestones": [
{
"id": "cm9m1s2t30014mn67op89qr01",
"projectId": "cm7a1b2c30000qr12st34uv56",
"projectName": "Atrix Mail",
"title": "Public beta",
"description": null,
"dueOn": "2026-11-15",
"status": "PLANNED",
"ownerId": null,
"ownerName": null
}
]
}List changelog posts
GET/v1/changelog
Changelog posts, newest edit first, without bodies. Read only; nothing can be published from here.
Requires roadmap.read
Query parameters
statusenumOnly posts in this state.
DRAFTSCHEDULEDPUBLISHEDlimitinteger1 to 100; defaults to 50.
curl "https://atrix.dev/api/v1/changelog" \
-H "Authorization: Bearer $ATRIX_TOKEN"{
"posts": [
{
"id": "cm9c1h2g30015st89uv01wx23",
"title": "Yearly pricing",
"slug": "yearly-pricing",
"status": "PUBLISHED",
"tags": [
"billing"
],
"projectId": "cm7a1b2c30000qr12st34uv56",
"projectName": "Atrix Mail",
"scheduledFor": null,
"publishedAt": "2026-10-20T09:00:00.000Z",
"updatedAt": "2026-10-20T09:00:00.000Z",
"emailed": true
}
]
}