> ## Documentation Index
> Fetch the complete documentation index at: https://arcmira.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Arcmira has three API capabilities: Search (entities, mentions, appearances, commercial intelligence), Monitors (trackers plus alert delivery), and Transcripts (read, generate, correct). Community Review is the cross-surface correction layer.
> Discover pages at https://arcmira.com/docs/llms.txt, then fetch the matching page's .md export. Each capability has a self-contained '<capability> for coding agents' page; prefer it.
> Auth: Authorization: Bearer arc_sk_... or x-api-key: arc_sk_... (x-api-key wins if both are sent). Never put keys in browser code. Check GET /v1/me for tier, scopes, and remaining rows before metered pulls.
> Search: resolve names with GET /v1/entities/lookup and pin ent_* IDs before pulling metered rows. Only person entities have appearances. Mention and recommendation rows carry canonical numeric timestamps in start_seconds/end_seconds (integer seconds; 0 means full episode); the MM:SS string fields are deprecated. Commercial routes need Pro+ tier AND the recommendations:read scope and bill 10 rows per row.
> Monitors: a tracker watches one entity; a monitor groups trackers with shared delivery (email, Slack, HMAC-signed webhooks). Create trackers with POST /v1/trackers, then attach by id: POST /v1/monitors/{id}/trackers { trackerIds: [...] }. Each fired alert occurrence debits 100 rows. Poll GET /v1/monitors/{id}/alerts?n= for recent deliveries. Send Idempotency-Key on every POST/PATCH.
> Transcripts: switch on the access field (unlocked, locked, premium_pending, not_transcribed, unauthenticated). Honor Retry-After when polling POST /v1/transcriptions jobs. Corrections (POST /v1/videos/{video_id}/corrections; kinds line_edit, speaker_reassign, speaker_identify, add_person, entity_tag, segment_rewrite) cost 0 rows; anchored kinds need revision + anchor.contentHash (djb2 base-36); handle 409 (re-anchor) and 412 (expectedSeq). segment_rewrite replaces an inclusive segment range with new segments (empty replacements array deletes; timestamps repaired server-side).
> Community Review is free (0 rows) and surface-typed: POST /v1/feedback with a type matching the surface you called, the reproducing query, and corrections targeting public IDs (ent_*, men_*, com_*). Nothing auto-applies. Do not send untyped notes.
> Errors: switch on error.code, follow doc_url, quote X-Request-Id to support. Honor Retry-After on 429. Retries of POST/PATCH must reuse the same Idempotency-Key; replays return Idempotency-Replayed: true.
> Teams Admin API: GET /v1/team/members, /v1/team/spend, /v1/team/usage-events (cursor-paginated, 90-day bound) are read-only and require a team-scoped API key created by a team admin; personal keys get 403 team_key_required.

# Team analytics

> Team usage analytics on the dashboard Overview tab, CSV export, and the read-only Teams Admin API.

Team analytics live on the dashboard [Overview tab](https://arcmira.com/dashboard). There is no separate analytics console.

## What admins see

* Team spend against the monthly limit, current period.
* A summary stat row: active members, rows consumed, and API requests for the selected range.
* A team-wide rows-per-day chart.
* The per-member table with full spend columns.

## What members see

The per-member usage table, searchable and sortable, defaulting to rows used. It works as a usage leaderboard: every member can see who is consuming what. Spend columns are admin-only.

## Time ranges and export

Pick 7, 30, or 90 days; 90 days is the bound. Both the chart and the member table export to CSV.

## Teams Admin API

Three read-only endpoints under `/v1/team/*` pull member, spend, and usage data programmatically. They require a **team-scoped API key**, created by an admin from the [API Keys tab](https://arcmira.com/dashboard?tab=api-keys) with the team scope selected. Personal keys receive `403 team_key_required`.

* [`GET /v1/team/members`](/docs/api-reference/team/list-team-members): members with roles and seat types.
* [`GET /v1/team/spend`](/docs/api-reference/team/per-member-spend-and-rows-used-this-period): per-member rows used and on-demand spend for the current period.
* [`GET /v1/team/usage-events`](/docs/api-reference/team/list-team-usage-events): cursor-paginated usage log across the team, bounded to a 90-day look-back.

The aggregated chart data itself is not exposed through this API; the analytics API is an [Enterprise](/docs/teams/enterprise) feature.

### Pull the current period's spend

<CodeGroup>
  ```typescript TypeScript theme={null}
  const res = await fetch('https://api.arcmira.com/v1/team/spend', {
    headers: { Authorization: `Bearer ${process.env.ARCMIRA_TEAM_API_KEY}` },
  });
  const spend = await res.json();
  ```

  ```python Python theme={null}
  import os, httpx

  spend = httpx.get(
      'https://api.arcmira.com/v1/team/spend',
      headers={'Authorization': f"Bearer {os.environ['ARCMIRA_TEAM_API_KEY']}"},
  ).json()
  ```

  ```bash cURL theme={null}
  curl https://api.arcmira.com/v1/team/spend \
    -H "Authorization: Bearer $ARCMIRA_TEAM_API_KEY"
  ```
</CodeGroup>

```json Response theme={null}
{
  "period_start": "2026-07-01",
  "data": [
    {
      "user_id": "usr_k2m8x4",
      "name": "Dana Osei",
      "email": "dana@example.com",
      "role": "admin",
      "seat_type": "premium",
      "rows_used": 18240,
      "on_demand_spend_cents": 0,
      "on_demand_enabled": true
    },
    {
      "user_id": "usr_p7q1n9",
      "name": "Sam Alvarez",
      "email": "sam@example.com",
      "role": "member",
      "seat_type": "standard",
      "rows_used": 5615,
      "on_demand_spend_cents": 246,
      "on_demand_enabled": true
    }
  ]
}
```

`on_demand_spend_cents` bills the team, not the member, at the flat \$0.004/row overage rate.

### Page through usage events

`GET /v1/team/usage-events` paginates with an opaque cursor and accepts `limit` (1 to 100, default 50) and `days` (1 to 90, default 30):

<CodeGroup>
  ```typescript TypeScript theme={null}
  const events = [];
  let cursor: string | null = null;
  do {
    const url = new URL('https://api.arcmira.com/v1/team/usage-events');
    url.searchParams.set('limit', '100');
    url.searchParams.set('days', '30');
    if (cursor) url.searchParams.set('cursor', cursor);
    const res = await fetch(url, {
      headers: { Authorization: `Bearer ${process.env.ARCMIRA_TEAM_API_KEY}` },
    });
    const page = await res.json();
    events.push(...page.data);
    cursor = page.next_cursor;
  } while (cursor);
  ```

  ```python Python theme={null}
  import os, httpx

  events, cursor = [], None
  while True:
      params = {'limit': 100, 'days': 30}
      if cursor:
          params['cursor'] = cursor
      page = httpx.get(
          'https://api.arcmira.com/v1/team/usage-events',
          params=params,
          headers={'Authorization': f"Bearer {os.environ['ARCMIRA_TEAM_API_KEY']}"},
      ).json()
      events.extend(page['data'])
      cursor = page['next_cursor']
      if not cursor:
          break
  ```

  ```bash cURL theme={null}
  curl "https://api.arcmira.com/v1/team/usage-events?limit=100&days=30" \
    -H "Authorization: Bearer $ARCMIRA_TEAM_API_KEY"
  ```
</CodeGroup>

```json Response theme={null}
{
  "data": [
    {
      "id": 908213,
      "user_id": "usr_p7q1n9",
      "action": "entity_view",
      "entity_type": "organization",
      "entity_name": "Ramp",
      "total_rows": 40,
      "premium_rows": 35,
      "request_path": "/v1/entities/ent_123881/mentions",
      "is_overage": false,
      "created_at": "2026-07-29 18:42:11"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJvZmZzZXQiOjEwMH0"
}
```

Rate limits are the standard per-key buckets: 600 requests/minute on Teams. See [Usage, limits & billing](/docs/usage-and-billing#rate-limits).
