Guide

Limits

Page sizes, plan history windows and request rates for the API and the MCP server.

Page sizes

WhereDefaultMaximum
REST list endpoints20100. A larger limit is capped, not rejected
GET /v1/events20200
search_events1550
search_people, search_companies20100
resolve_search_terms2050
get_company_aum_history24120

Plan history windows

PlanEventsProfiles and organisations
FreeLeadership moves from the last 7 daysNot included
StarterEvery event type from the last 30 daysNot included
Professional and aboveFull historyIncluded, not windowed

GET /v1/events is held to your plan's window whatever publishedDateFrom asks for. When it has been, the response meta carries window with the number of days and the first date included. No meta.window means full history.

On Free and Starter, profile, organisation, report and workspace endpoints answer 403 with code: "plan_feature_locked", the locked feature and the plan that includes it under upgrade. Free accounts can't create an API key, so the MCP server starts on Starter.

search_events states the window in every response under applied.date_window, so an empty result is never mistaken for a quiet period.

Request rates

Chikara Intelligence doesn't apply a per-minute request limit to the API or the MCP server at present. Per-plan limits will be published on this page before they're enforced.

The one exception is the Free plan, which is limited to 60 event requests an hour across listing events, reading one event and searching them. Past that the API answers 429.

Build for them now. Treat a 429 as a signal to wait and retry with exponential backoff, and keep concurrent requests to a handful per token.

Retry on 429
async function get(url, attempt = 0) {
  const res = await fetch(url, {
    headers: { Authorization: `Bearer ${process.env.CHIKARA_API_TOKEN}` }
  });
  if (res.status === 429 && attempt < 5) {
    await new Promise((r) => setTimeout(r, 2 ** attempt * 500));
    return get(url, attempt + 1);
  }
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  return res.json();
}

const { success } = await get("https://api.chikaraintel.com/v1/events?eventType=move&limit=20");
console.log(success.length);

Fair use

The Terms cover acceptable use, including not working around published limits. If a workload needs more than a handful of concurrent requests, book a call and we'll size it with you.

Related