DocsOpen Henkan Vision
Agents and API

REST API reference

Read sites, sessions, timelines, summaries and patterns over HTTPS with an API key. Every endpoint is read-only and returns JSON.

Up to date with v1.1.0Updated 17 October 20262 min read

The REST API exposes the same data as the MCP server. Use it for reports, notebooks or your own tools.

The tool reference on the API & MCP page, with search_sessions expanded.
The tool reference on the API & MCP page, with search_sessions expanded.
1
Tool and endpoint. Each MCP tool and its REST endpoint.
2
Parameters. Name, type and description of each parameter.
3
Returns. The response shape, with a copy button.
4
Details. Expand any tool to see its parameters and response.

Authentication#

Send your API key as a Bearer token. Base URL: https://vision.henkanpartners.ai/api/v1.

curl -H "Authorization: Bearer <your-api-key>" https://vision.henkanpartners.ai/api/v1/sites

Keys look like hv_live_ followed by 43 characters. See API keys.

Endpoints#

Method and pathMCP toolReturns
GET /api/v1/siteslist_sitesSites of your organisation.
GET /api/v1/sites/:siteId/overviewget_site_overviewFigures for a period.
GET /api/v1/sessionssearch_sessionsSessions, newest first.
GET /api/v1/sessions/:id/timelineget_session_timelineSteps and friction tags of a session.
GET /api/v1/sessions/:id/summaryget_session_summaryThe existing AI summary of a session.
GET /api/v1/patternslist_patternsPatterns over the last 30 days.
GET /api/v1/patterns/:idget_patternOne pattern with example sessions.

Parameters#

EndpointParameterTypeDescription
Sitescursor, limitstring, integerPaging. limit is 1–100, default 50.
Site overviewrange24h, 7d or 30dPeriod. Defaults to 7d.
SessionssiteUUIDOnly this site.
Sessionsfrom, toISO date-timeStart and end, for example 2026-10-01T00:00:00Z.
SessionsfrictionstringA friction type such as rage_click or checkout_exit, or any.
Sessionskindhuman, ai_agent or allVisitor type. Defaults to human.
SessionsconvertedbooleanOnly converted, or only not converted, sessions.
Sessionsentry, device, qstringEntry page, desktop / mobile / tablet, and text matched against the entry page.
Sessionscursor, limitstring, integerPaging. limit is 1–100, default 50.
Timelinecursor, limitstring, integerPaging of steps. limit is 1–400, default 200.
Patternssite, kindUUID, human or ai_agentFilters. kind defaults to human.
Patternscursor, limitstring, integerPaging. limit is 1–100, default 50.

Examples#

Mobile sessions that left from the checkout since 1 October:

curl -H "Authorization: Bearer <your-api-key>" \
  "https://vision.henkanpartners.ai/api/v1/sessions?friction=checkout_exit&device=mobile&from=2026-10-01T00:00:00Z"
{
  "sessions": [
    {
      "id": "6f1c2b9e-…",
      "site_id": "3b8d4a6f-…",
      "started_at": "2026-10-15T07:42:10Z",
      "duration_s": 79,
      "status": "ready",
      "pages": 2,
      "device": "mobile",
      "browser": "Safari",
      "os": "iOS",
      "country": "FR",
      "converted": false,
      "friction_types": ["dead_click", "checkout_exit"],
      "visitor_kind": "human",
      "agent_verified": false,
      "data": { "entry_path": "/products/linen-blazer", "agent_name": null }
    }
  ],
  "next_cursor": "…"
}

The timeline of one session:

curl -H "Authorization: Bearer <your-api-key>" \
  https://vision.henkanpartners.ai/api/v1/sessions/6f1c2b9e-…/timeline
{
  "session_id": "6f1c2b9e-…",
  "total_steps": 10,
  "truncated": false,
  "next_cursor": null,
  "data": {
    "steps": [
      { "t_ms": 0, "kind": "page_view", "page": "/products/linen-blazer" },
      { "t_ms": 26600, "kind": "click", "page": "/products/linen-blazer", "target": "Add to bag" }
    ],
    "friction_tags": [
      { "type": "dead_click", "at_ms": 26600, "page": "/products/linen-blazer", "detail": "Add to bag" }
    ]
  }
}

Paging#

Lists return up to 100 items per call. When there are more, the response has a next_cursor value: pass it as cursor to get the next page. When next_cursor is null, you have everything.

Errors#

Errors return a JSON body { "error": { "code": "…", "message": "…" } }.

StatusCodeWhen
400bad_request, invalid_cursorA parameter has the wrong format, or the cursor is not one the API returned.
401unauthorizedThe key is missing, malformed or revoked.
404not_foundUnknown endpoint, or an id that does not exist in your organisation. Ids of other organisations always return 404.
404no_summaryThe session has no AI summary yet.
429rate_limitedToo many requests. Wait for the number of seconds in the Retry-After header.
500internalSomething went wrong on our side. Try again later.