Skip to main content

Shared behavior

Every /v1 endpoint follows the same rules, so what you learn on one endpoint applies to all of them. The API is read-only: every endpoint is a GET, and nothing is mutated. Feedback is ingested through your connected integrations, not this API.

Authentication

Send your key on every request as an X-API-Key header:
Keys are team-scoped (every response is limited to your team’s data) and region-scoped (a key issued in the EU only works against https://eu.api.closedloop.sh/v1). Create keys in Settings, API Keys in the app. See API keys for the full lifecycle.

Pagination

List endpoints accept limit and offset: Responses wrap the page in data and include a pagination object whose total is the full-set count of matching records, not the size of the page:
Page through a result set by increasing offset until you have read total records.

Filtering

Filters are query parameters, and multiple filters combine with AND semantics:
  • Free-text search: most list endpoints accept q, a free-text search over titles and content.
  • Date ranges: date_from and date_to are inclusive ISO 8601 dates.
  • Resource-specific filters: each endpoint documents its own. For example, insights filter by category, severity, and customer_id; themes accept status and sort; features accept theme_id; context accepts type.
Call /facets to discover which filter values exist in your dataset (categories, severities, sources) along with their counts.

Errors

Non-2xx responses return a JSON body with a user-safe message, a stable code, and an optional hint. Internal details are never exposed.

Rate limits

Limits are enforced per API key, by plan: Exceeding the limit returns 429 with X-RateLimit-* headers describing the window. Back off and retry after the window resets.

Timestamps

All timestamps are ISO 8601 in UTC, for example 2026-05-14T10:30:00Z. Date filters (date_from, date_to) accept ISO 8601 dates and are inclusive on both ends.

Linking insights and context

Insight and context records carry the same resolved customer_id, so you can line up an insight with the strategic context (churn, competitor, satisfaction) for the same customer. Filter either list by customer_id. New to the API? Start with the API reference introduction.