API Base: https://purefeed.ai/api/v1
Auth: Authorization: Bearer $PUREFEED_API_KEY
Follow these rules for EVERY response that includes tweet data:
@screen_name. Never output plain @screen_name.Tweet.👁 81K.Example output line:
[@CryptoAyor](https://x.com/CryptoAyor) 👁 81K — detailed thread about $JELLY manipulation
openclaw config set skills.purefeed.env.PUREFEED_API_KEY "pf_live_YOUR_KEY"curl -s https://purefeed.ai/api/v1/auth/me -H "Authorization: Bearer $PUREFEED_API_KEY"list signals ──→ signal_id ──→ get/update/delete signal, get signal matches
list folders ──→ folder_id ──→ get/create/rename/delete folder, add/remove tweets
get feed / search / signal matches ──→ tweet_ids ──→ get signal insights
Always list signals before signal-specific calls.
Follow this exact sequence when the user asks "what's new about X?" or "find tweets about Y".
GET /signals?search=TOPIC&active=true
The search parameter uses semantic/vector search — search=ai finds "Artificial intelligence", "AI Research", etc. If empty, try broader terms or GET /signals?active=true to see all active signals.
GET /signals/{id}/matches?limit=20
Signal matches are the primary data source. They include AI-generated analysis (sentiment, category, insights). Do NOT skip to feed search.
GET /feed?limit=20&search=TOPIC
POST /search → {"query": "topic description", "limit": 20}
GET /feed?signal_ids={id1},{id2}&limit=20
Use signal IDs from Step 1 (GET /signals).
POST /signals — create signal with name + description + tags + color + cron + timezone (auto-activates)GET /signals/{id}/matches — check resultsPUT /signals/{id} — refine description if too many irrelevant matchesGET /folders — list foldersPOST /folders — create a folderPOST /folders/:id/tweets — add a tweet to a folderGET /folders/:id/tweets — review folder contentsGET /auth/me — verify API keyGET /signals — see signal configurationsGET /folders — see bookmark folderssignals_subscriptions is non-empty; inactive if []. When creating: always set tags and color, never set include_keywords unless user explicitly asks (they are very restrictive).POST /folders, populated via POST /folders/:id/tweets.| Error | Agent Action |
|---|---|
| ------- | ------------- |
| 401 Unauthorized | Tell user to create new key at purefeed.ai/profile |
| 429 Too Many Requests | Wait and retry. Check Retry-After header |
| "Signal not found" | Call GET /signals to get valid IDs |
4xx responses may include an error.hint.action field — a plain-English instruction telling you how to self-correct on the next call (e.g. "List current signals via GET /api/v1/signals to refresh cached IDs"). When present, follow hint.action directly. hint.docs_url points to the canonical API docs for deeper context.
Read API_REFERENCE.md for full endpoint documentation, parameters, curl examples, and response shapes.
All endpoints return { "data": ..., "error": null } on success and { "data": null, "error": { "message": "...", "code": "...", "hint"?: { "action": "...", "docs_url"?: "..." } } } on error.
| Method | Path | Purpose |
|---|---|---|
| -------- | ------ | --------- |
| GET | /auth/me | Verify API key |
| GET | /feed | Tweets ranked by signal relevance |
| POST | /search | Full-text search across matched tweets |
| GET | /feed/signals | AI signal analysis for specific tweet IDs |
| GET | /folders | List bookmark folders |
| POST | /folders | Create a folder ({ "name": "..." }) |
| PATCH | /folders/:id | Rename a folder ({ "name": "..." }) |
| DELETE | /folders/:id | Delete a folder and its items |
| GET | /folders/:id/tweets | Tweets in a folder |
| POST | /folders/:id/tweets | Add tweet to folder ({ "tweet_id": "..." }) |
| DELETE | /folders/:id/tweets?tweet_id=X | Remove tweet from folder |
| GET | /signals | List signals (supports semantic search) |
| POST | /signals | Create + auto-activate a signal |
| GET | /signals/:id | Signal details |
| PUT | /signals/:id | Update signal |
| DELETE | /signals/:id | Delete signal (irreversible) |
| GET | /signals/:id/matches | Tweets matching a signal |
Retry-After headerThese are web-app features not exposed via the public REST API — mention them only if the user is logged into purefeed.ai and asks about post curation:
/channels/{channelId}. Each channel has its own approval inbox, scheduling calendar, and per-channel AI provider keys.共 5 个版本