/api/v1/ext/meRead keyThe key's workspace, scope and rate limit; a cheap check that a key works
Developers
Read and write your workspace's feedback from your own code: posts, votes, comments, customers, the roadmap and the changelog. Webhooks tell you when something happens.
New here? Start with the getting-started guide →https://app.antnexo.com/api/v1/ext/api/v1/ext/meRead keyThe key's workspace, scope and rate limit; a cheap check that a key works
/api/v1/ext/boardsRead keyEvery live board, public, private and inbox; one page
200 OK · ExtBoardList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/boards/{board_id}Read keyOne board
board_id (path, uuid, required)/api/v1/ext/postsRead keyPosts on every board, newest first or by votes. Merged and spam posts only with include
cursor (query, string, optional) — Opaque; the previous page's next_cursor. Omit it for the first page; a cursor of another list is 400 invalid_cursor.limit (query, integer, optional)board_id (query, uuid, optional)status (query, list of string, optional) — Any of these (repeat the parameter)category (query, string, optional)initiative_id (query, uuid, optional)author_email (query, string, optional)q (query, string, optional) — Text in the title or bodycreated_after (query, date-time, optional)updated_after (query, date-time, optional) — Changed after this time (a sync: pass the last run's start)sort (query, string: newest | top, optional)include (query, list of string, optional)200 OK · ExtPostList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/postsWrite keyFile a post for a customer (idempotent by id): the author is made or updated by email and votes for it; source api, triaged as a customer's post. Any board; an inbox board needs the plan (403 plan_required)
/api/v1/ext/posts/{post_id}Read keyOne post; a merged one has merged_into_id set
post_id (path, uuid, required)/api/v1/ext/posts/{post_id}Write keyChange a post's status, category or initiative; followers hear of a status change as from the admin. If-Match (the version) is optional; a stale one is 412
post_id (path, uuid, required)If-Match (header, string, optional)/api/v1/ext/posts/{post_id}/votesRead keyThe customers who voted for the post, earliest first (the team's own votes aren't listed)
post_id (path, uuid, required)cursor (query, string, optional) — Opaque; the previous page's next_cursor. Omit it for the first page; a cursor of another list is 400 invalid_cursor.limit (query, integer, optional)200 OK · ExtVoteList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/posts/{post_id}/votesWrite keyAdd a customer's vote by their email (made or updated, as /ext/users); theirs, not the team's. 422 inbox_post on an inbox post, 409 post_merged on a merged one
post_id (path, uuid, required)200 Already there · ExtVoteResult201 Added · ExtVoteResult429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/posts/{post_id}/votes/{user_id}Write keyTake an end user's vote back; 204 also when there was none
post_id (path, uuid, required)user_id (path, uuid, required)/api/v1/ext/usersRead keyThe end user with this email, if any (a list of zero or one)
email (query, string, required)200 OK · ExtUserList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/usersWrite keyMake or update the end user with this email (201 new, 200 known: the fields given win, the rest stay); made verified
/api/v1/ext/users/{user_id}Read keyOne end user; 404 once erased
user_id (path, uuid, required)/api/v1/ext/initiativesRead keyEvery initiative (the backlog and the roadmap); one page
200 OK · ExtInitiativeList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/initiatives/{initiative_id}Read keyOne initiative
initiative_id (path, uuid, required)200 OK · ExtInitiative429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/initiatives/{initiative_id}/linksWrite keyLink the initiative to a work item in a tracker, like a Jira epic (idempotent by id). 409 link_exists, too_many_links (10).
initiative_id (path, uuid, required)200 Already linked with this id (a retry) · ExtTrackerLink201 Linked · ExtTrackerLink429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/initiatives/{initiative_id}/links/{link_id}Write keyRemove a tracker link from the initiative. 404 link_not_found.
initiative_id (path, uuid, required)link_id (path, uuid, required)/api/v1/ext/changelogRead keyChangelog entries, drafts first (newest edited), then published (newest first)
cursor (query, string, optional) — Opaque; the previous page's next_cursor. Omit it for the first page; a cursor of another list is 400 invalid_cursor.limit (query, integer, optional)state (query, string: draft | published, optional)200 OK · ExtChangelogList429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/changelogWrite keyWrite a changelog draft (idempotent by id); publishing stays in the admin, as it emails customers
200 Already there (a retry, or a known person updated) · ExtChangelogEntry201 Created · ExtChangelogEntry429 Rate limited · Problemdefault An error (RFC 9457) · Problem/api/v1/ext/changelog/{entry_id}Read keyOne changelog entry
entry_id (path, uuid, required)200 OK · ExtChangelogEntry429 Rate limited · Problemdefault An error (RFC 9457) · ProblemExtAuthor| Field | Type | |
|---|---|---|
email | string | required |
id | uuid | required · The end user (see /ext/users) |
name | string or null | required |
ExtBoard| Field | Type | |
|---|---|---|
categories | list of string | required |
created_at | date-time | required |
id | uuid | required |
name | string | required |
slug | string | required |
url | string or null | required · The board's page; null for private and inbox boards |
visibility | string | required · One of public, private, inbox · public: anyone sees it; private: the team only; inbox: anyone posts, only the team reads |
ExtBoardList| Field | Type | |
|---|---|---|
items | list of ExtBoard | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtChangelogCreate| Field | Type | |
|---|---|---|
body | string | required · Markdown |
id | uuid | required |
initiative_ids | list of uuid | optional |
title | string | required |
ExtChangelogEntry| Field | Type | |
|---|---|---|
body | string | required · Markdown |
created_at | date-time | required |
id | uuid | required |
initiative_ids | list of uuid | required |
published_at | date-time or null | required |
state | string | required · One of draft, published |
title | string | required |
updated_at | date-time | required |
url | string or null | required · The board's changelog page; null for drafts |
ExtChangelogList| Field | Type | |
|---|---|---|
items | list of ExtChangelogEntry | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtComment| Field | Type | |
|---|---|---|
author | ExtCommentAuthor or null | required · Null once the author deleted their account or erased their data |
body | string | required |
created_at | date-time | required |
id | uuid | required |
internal | boolean | required · A note only the team sees |
parent_id | uuid or null | required |
post_id | uuid | required |
ExtCommentAuthor| Field | Type | |
|---|---|---|
email | string | required |
name | string or null | required |
type | string | required · One of member, customer · member: the team; customer: an end user |
ExtCommentCreate| Field | Type | |
|---|---|---|
author | ExtUserInput | required |
body | string | required |
id | uuid | required · Client-generated (UUID v7) |
internal | boolean | optional · A note only the team sees; members only |
parent_id | uuid | optional · The comment this one answers |
ExtCommentList| Field | Type | |
|---|---|---|
items | list of ExtComment | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtInitiative| Field | Type | |
|---|---|---|
column | string | required · One of backlog, next, now, done · backlog: the team's only; next, now, done: also on the public roadmap |
created_at | date-time | required |
id | uuid | required |
links | list of ExtTrackerLink | required · Links to work items in a tracker, oldest first |
post_count | integer | required |
summary | string | required |
title | string | required |
updated_at | date-time | required |
vote_count | integer | required |
ExtInitiativeList| Field | Type | |
|---|---|---|
items | list of ExtInitiative | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtKey| Field | Type | |
|---|---|---|
id | uuid | required |
name | string | required |
scope | string | required · One of read, write · read reads everything; write also creates and changes |
ExtMe| Field | Type | |
|---|---|---|
key | ExtKey | required |
rate_limit | integer | required · Requests per minute the workspace's keys may make together (its plan's limit) |
workspace | ExtWorkspace | required |
ExtPost| Field | Type | |
|---|---|---|
author | ExtAuthor or null | required · Null for a guest post or once the author erased their data |
board_id | uuid | required |
body | string | required |
category | string or null | required |
comment_count | integer | required |
created_at | date-time | required |
id | uuid | required |
initiative_id | uuid or null | required |
merged_into_id | uuid or null | required · The post this one was merged into |
source | string | required · Where it came from: board, widget, api, team, support, guest… (new values may appear) |
status | string | required · One of open, under_review, planned, in_progress, done, closed |
title | string | required |
triage | string | required · One of new, accepted, spam · new: waits in the inbox; accepted: the team kept it; spam |
updated_at | date-time | required |
url | string or null | required · The post's page on the board; null on private and inbox boards |
version | integer | required · Changes with every edit |
vote_count | integer | required |
ExtPostCreate| Field | Type | |
|---|---|---|
author | ExtUserInput | required |
board_id | uuid | required |
body | string | optional |
category | string | optional · One of the board's categories |
id | uuid | required · Client-generated (UUID v7); a retry with it returns the post |
title | string | required |
ExtPostList| Field | Type | |
|---|---|---|
items | list of ExtPost | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtPostUpdate| Field | Type | |
|---|---|---|
category | string | optional · One of the board's categories; "" clears it |
initiative_id | string | optional · An initiative's id; "" takes the post off its initiative |
status | string | optional · One of open, under_review, planned, in_progress, done, closed |
ExtTrackerLink| Field | Type | |
|---|---|---|
created_at | date-time | required |
id | uuid | required |
key | string | required · The work item's key, like SPL-1234; empty if none was given |
title | string | required · Empty if none was given |
tracker | string | required · One of jira, linear, github, other · From the URL's host: *.atlassian.net, linear.app, github.com |
url | string | required · An https address |
ExtTrackerLinkCreate| Field | Type | |
|---|---|---|
id | uuid | required · Client-generated (UUID v7) |
key | string | optional · Like SPL-1234 |
title | string | optional |
url | string | required · An https address |
ExtUser| Field | Type | |
|---|---|---|
company | string or null | required |
created_at | date-time | required |
email | string | required |
id | uuid | required |
mrr | number or null | required · Monthly revenue from this customer, as you set it |
name | string or null | required |
ExtUserInput| Field | Type | |
|---|---|---|
company | string | optional |
email | string | required |
mrr | number | optional · Monthly revenue from this customer |
name | string | optional |
ExtUserList| Field | Type | |
|---|---|---|
items | list of ExtUser | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtVote| Field | Type | |
|---|---|---|
created_at | date-time | required |
user | ExtAuthor | required |
ExtVoteInput| Field | Type | |
|---|---|---|
user | ExtUserInput | required |
ExtVoteList| Field | Type | |
|---|---|---|
items | list of ExtVote | required |
next_cursor | string or null | required · Pass it as cursor for the next page; null on the last one |
ExtVoteResult| Field | Type | |
|---|---|---|
post_id | uuid | required |
user | ExtAuthor | required |
vote_count | integer | required |
ExtWorkspace| Field | Type | |
|---|---|---|
id | uuid | required |
name | string | required |
slug | string | required |
FieldError| Field | Type | |
|---|---|---|
field | string | required |
message | string | required |
Problem| Field | Type | |
|---|---|---|
code | string | optional · Stable machine-readable reason, e.g. invalid_code, slug_taken, stale |
detail | string | optional |
errors | list of FieldError | optional |
redirect_to | string | optional · Where to send the browser instead of showing this error (an AI assistant's authorization request) |
request_id | string | optional |
status | integer | required |
title | string | required |
type | string | required |
Comments
/api/v1/ext/posts/{post_id}/commentsRead keyThe post's comments, oldest first, internal notes included
Parameters
post_id(path, uuid, required)cursor(query, string, optional) — Opaque; the previous page's next_cursor. Omit it for the first page; a cursor of another list is 400 invalid_cursor.limit(query, integer, optional)Responses
200OK · ExtCommentList429Rate limited · ProblemdefaultAn error (RFC 9457) · Problem/api/v1/ext/posts/{post_id}/commentsWrite keyWrite a comment (idempotent by id). A member's address makes it the team's (internal allowed); any other is the customer's, made or updated by email, only on a post the public sees (403 not_allowed otherwise) and never internal
Parameters
post_id(path, uuid, required)Request body
ExtCommentCreate
Responses
200Already there · ExtComment201Added · ExtComment429Rate limited · ProblemdefaultAn error (RFC 9457) · Problem