| whoamiA | Wraps GET /me. Confirms which workspace the agent is authenticated as and returns the current subscription, competitor budget, and rate-limit snapshot. auth_type reports how you authenticated: api_key callers also get the key block; oauth callers have no API-key record, so key is null — use auth_type/subject to confirm identity. Chaining: Call first in a session to verify auth and workspace identity before any other tool.
Errors: unauthorized (key is invalid or revoked — mint a new one), rate_limited (retry after X-RateLimit-Reset). |
| list_competitorsA | Wraps GET /competitors. Lists every competitor in the authenticated workspace. Defaults to expand=full so the agent gets each competitor's social URLs (linkedin, twitter, …) and canonical page URLs (pricing, blog, …) in one call — no round-trip to get_competitor needed for that metadata. Filters: active: when true, only competitors still being tracked; when false, only archived ones.
ids: narrow to a specific subset (comma-joined upstream).
expand: full (default — profile + social + pages) or compact (id / name / website / category / active only).
Chaining: Discover competitor ids here, then pass them to get_competitor, list_activities (competitor_ids), or list_digests (competitor_id).
Errors: unauthorized, rate_limited. |
| get_competitorA | Wraps GET /competitors/{id}. Returns a single competitor's full profile plus the most recent items from each tracked section. Sections returned (with per-section item caps): blog-posts (up to 3), press-posts (3), case-studies (3)
job-listings (5), ads (5), pricing (1), messaging (5)
metrics-claimed (5), logos (5)
linkedin-posts (3), x-posts (3), reviews (3), youtube-videos (3), events (3)
These are overview caps — for the full list in any section call list_activities with competitor_ids=[id] and the relevant section and NO from/to, which returns the complete all-time roster (paginated). Chaining: Use after list_competitors — pass the id from a result row. For an activity timeline across sections, call list_activities with competitor_ids=[id] instead.
Errors: not_found (no such competitor in this workspace), competitor_inactive (archived — reactivate in dashboard), forbidden_competitor (different workspace), unauthorized, rate_limited. |
| list_activitiesA | Wraps GET /activity. Two modes, selected by whether you pass a date window: Roster (no from/to): the complete all-time catalog across the tracked competitors — including items that already existed when tracking began (the initial backfill). Use this to pull a full list, e.g. every customer a competitor has published a case study about: { competitor_ids: [id], sections: ['case-studies'] }. For versioned sections (job-listings, ads, logos, messaging, pricing) this is the current live snapshot, not removed history, so change_type is mostly added and total is the all-time count. Change feed (with from/to): detected adds/updates/removals in that window only (excludes backfill) — the 'what shipped recently' surface.
Filters: sections: restrict to specific section types (enum of 15: blog-posts, press-posts, job-listings, ads, pricing, case-studies, linkedin-posts, x-posts, reviews, youtube-videos, events, messaging, metrics-claimed, logos, sitemap-urls).
change_types: restrict to added / updated / removed (added / updated / removed).
competitor_ids: narrow to specific competitors.
from / to: ISO 8601 date-time window (inclusive). Supplying EITHER switches off roster mode; e.g. from=2026-04-16T00:00:00Z for the last 7 days.
Matching tip: for case studies the customer/company name is usually in title and/or the url slug (e.g. .../case-studies/whop) — match on both. Pagination: response carries pagination.next_cursor, pagination.has_more, and pagination.total (total rows matching the filters, not just this page). If has_more, call again with the cursor param set to next_cursor. Default limit is 50 to stay under Claude's tool-result size limit; max is 500. The roster can be large — keep paging until has_more is false. Heavy fields (description, key_points, pricing_data, excerpt) are omitted from list rows to keep them lean; fetch the full payload for rows you care about with get_activity_items (pass their ids).
Chaining: get_activity_items returns full rows by id (one call for many ids).
Errors: invalid_parameter (bad section/change_type/date), invalid_cursor (stale or tampered), unauthorized, rate_limited. |
| get_activity_itemsA | Wraps GET /activity/items. Returns the full payload for one or more activity rows — the section-specific detail (full blog description, key points, pricing table, etc.) that the list_activities feed omits to stay lean. Pass a list of row ids from a list_activities result (1–100). Resolving several at once is one call / one rate-limit hit — prefer it over many single lookups.
Partial success is normal: ids that don't resolve (unknown, in another workspace, from an inactive period, or malformed) come back in not_found, not as an error. data order is not guaranteed — match results back by id.
Digest ids are NOT activity rows: they land in not_found. Use get_digest for those.
Errors: unauthorized, rate_limited, invalid_parameter (no ids / too many). |
| list_digestsA | Wraps GET /digests. Returns cursor-paginated weekly digests (one per competitor per batch day) — the LLM-synthesized summaries. Unlike list_activities, pagination here has no total; use has_more / next_cursor only. Filters: competitor_id (narrow to one competitor), from / to (ISO 8601 date-time window on period_start). Chaining: For 'what happened last week across all competitors', prefer list_latest_digests — it's a one-shot. Use this when paging backward through history, or filtering to one competitor.
Errors: invalid_parameter, invalid_cursor, unauthorized, rate_limited. |
| list_latest_digestsA | Wraps GET /digests/latest. No parameters. Returns the most recent digest per active competitor from the same batch day — a one-shot 'what happened this week across my tracked competitors'. Chaining: One-shot entry point — no prior call needed. If the user wants older weeks or a specific competitor's history, use list_digests instead.
Errors: unauthorized, rate_limited. |
| get_digestA | Wraps GET /digests/{id}. Returns a single digest's full payload — executive summary, themes, and update count for one competitor in one period. Chaining: Use after list_digests or list_latest_digests — pass the id from a result row.
Errors: not_found (digest not in this workspace), forbidden_competitor, unauthorized, rate_limited. |