API pipeline: Browse Cabi.Chat and open any card
Index: API pipelines — index
Goal: browse Cabi.Chat without an account, open any card you may see (project, article, post, workspace…) together with the cards around it, and get its public link.
No token needed: anonymous calls return what is public to everyone. With a token the same calls also return what is visible to signed-in people and what was shared with you.
Steps
- Landing feed.
GET /v0/graph/public/landing?page=1
→ {"root": {"nonce": "…", "title": "IAB Taxonomies"},
"rows": [{"rubric": {"nonce": "…", "title": "Education"},
"items": [{"card_type": "project", "nonce": "470000000000000001", "title": "…", "snippet": "…", …}],
"total": 4}, …],
"page": 1, "total_pages": 2}
Rows are industries with their projects: up to 8 rows per page, 12 tiles per row; total = projects in the row. root=<rubric nonce> starts from another rubric.
- List one type.
GET /v0/graph/{projects|articles|posts|workspaces|docs|sheets|boards|rubrics}?limit=20&offset=0→{"projects": [tiles], "total": 42}(the key is the type, plural).
A tile: card_type, nonce, handle, title, snippet, visibility, publicity, project, rubrics, location, media, created_at, updated_at.
Resolve a reference.
GET /v0/graph/resolve/{nonce | @handle | handle}→{"card_type": "article", "nonce": "…", "handle": "…", "title": "…", "kind": null}. A renamed handle still resolves.Open the card.
GET /v0/graph/{type}s/{nonce | @handle}for projects, articles, posts, workspaces, docs, sheets, boards, rubrics and telegram_groups;GET /v0/graph/oracles/{nonce};GET /v0/graph/agendas/{nonce | @handle}.
GET /v0/graph/articles/470000000000000002
→ {"nonce": "470000000000000002", "card_type": "article", "canonical_lang": "en",
"i18n": [{"lang": "en", "title": "…", "content": "…"}, {"lang": "ru", …}],
"visibility": "Public", "publicity": "Everyone", "project": "470000000000000001",
"rubrics": [{"nonce": "…", "title": "…"}], "location": {…},
"mentioned": [{tile}, …], "tagged": [{tile}, …],
"like_count": 0, "fav_count": 1, "writable": false, "created_at": "…", "updated_at": "…"}
- The cards around it:
mentioned(cards it links to),tagged(related by tag),rubrics,location,project(the project it belongs to); workspaces and rubrics also carrycontained. - Type extras: a project has
contactsandmembership; a post its source group. media(avatars, gallery) holds signed links that expire: read the card again for fresh ones.- A workspace or rubric with many cards:
?contained_limit=1..200&contained_offset=0, then followcontained_next_offsetuntil it is absent.
- Public link.
https://cabi.chat/@<handle>when the card has a handle, elsehttps://cabi.chat/<card_type>/<nonce>, e.g.https://cabi.chat/article/470000000000000002.
Behind
- What you get follows each card's visibility: Public + Everyone = anyone; Public + Ecosystem = signed-in people; Unlisted = only with a grant or an access link; Private = the owner only. A card you may not see answers 404, as if it did not exist; lists simply leave it out. Cabi.Chat Graph — Card Policies
- Hidden project contacts come without
value: API pipeline: Reveal a project's contact - Searching instead of browsing: API pipeline: Search the graph
Rules
- Landing: 400
root must be a rubric nonce; 404 for a page past the end. - 404
not foundfor an unknown card or one you may not see.
API surface
| Endpoint | Purpose | FE | AI / oracle |
|---|---|---|---|
GET /v0/graph/public/landing |
Landing rows by industry | yes | yes, to sample the graph |
GET /v0/graph/{type}s |
Visible cards of one type | yes | yes |
GET /v0/graph/resolve/{ident} |
Card type and nonce for a handle or nonce | yes | yes |
GET /v0/graph/{type}s/{ident} |
Card page with the cards around it | yes | yes |
GET /v0/graph/oracles/{nonce}, /v0/graph/agendas/{ident} |
Oracle and agenda pages | yes | yes |