API pipeline: Receive a free 7-day starter radar for your project and watch its matches
Index: API pipelines — index
Goal: a person with a project page on Cabi.Chat gets a free 7-day radar for that project and watches its matches.
What the person gets
- A radar run by Cabi.Chat for their project, free for 7 days. It finds public messages in Telegram groups where people ask for what the project offers and collects them as matches.
- The radar writes to no one: the person decides whom to contact.
- Two links, already claimed for the person on their project: trial (run it: start / stop, edit keywords; 7 days) and view (read the radar and its matches; no end).
- After 7 days the radar pauses; matches stay readable. Keeping a radar running is a Pro step: API pipeline: Listen to Telegram groups for people who need you: create and tune a radar, work its matches and make first contact (draft, send, auto outreach)
Who calls it
The project's owner: with their own session or PAT, or through a Cabi.Chat oracle they gave setup access to. One starter radar per person.
Steps
1. Open. The body is optional: without it the keywords come from the project's rubrics or title, and its city.
POST /v0/my/projects/470000000000000020/starter-radar
{"keywords": [["dentist", "dental clinic"]], "not_groups": ["vacancy"], "city": "bali"}
→ {"campaign": "470000000000000021", "matches_workspace": "470000000000000022",
"links": {"trial": {"nonce": "…", "token": "…", "url": "https://cabi.chat/l/…"},
"view": {"nonce": "…", "token": "…", "url": "https://cabi.chat/l/…"}},
"trial_ends_at": "2026-10-22T…Z", "status": "Active", "is_active": true,
"keyword_groups": [["dentist", "dental clinic"], ["bali"]], "not_groups": [["vacancy"]], "created": true}
keywords: groups (OR inside a group, AND across groups), the city included; words of 4+ letters; lowercased and normalised.not_groups: words of 2+ letters, flat or as groups.- Calling again for the same project returns the same radar (
created: false, body ignored).
2. Read matches.
GET /v0/my/workspaces/470000000000000022?contained_limit=200
→ {"contained": [{"card_type": "post", "nonce": "…", "snippet": "…", "source_url": "https://t.me/example_group/123", …}], …}
3. Adjust during the trial. PATCH /v0/my/campaigns/470000000000000021 {"keyword_groups": [[…]], "not_groups": [[…]]}, and POST …/start / …/stop. Other fields are set by Cabi.Chat.
Rules
- Project not yours → 404. Another starter radar of yours on another project → 409
… one starter radar per person. Starter radars may be unavailable at times → 400starter radars are not available right now. - Keyword errors → 400 with the reason (
keywords hold no usable word (4+ letters),could not derive keywords from the project …: pass keywords). - A trial that ended is not restarted by calling again.
API surface
| Endpoint | Purpose | FE | AI / oracle |
|---|---|---|---|
POST /v0/my/projects/{nonce}/starter-radar |
Open (or return) the project's starter radar | no | the owner's own AI, or a Cabi.Chat oracle with setup access |
GET /v0/my/workspaces/{matches_workspace} |
Read matches | yes | yes |
PATCH /v0/my/campaigns/{nonce} |
Keywords and excludes during the trial | yes | yes |
POST /v0/my/campaigns/{nonce}/start, /stop |
Run / pause during the trial | yes | yes |
GET /v0/linked/{token}?project= |
Claim a link on another project of yours | yes | user's own AI |