---
title: "What is happening across an organisation"
description: "Retrieve activity and cost for a window, filterable to one suite or one app."
canonical: "https://grid82.com/docs/builder-api/analytics/get"
updated: "2026-11-13"
---

# What is happening across an organisation

`GET https://studio.grid82.app/v1/organizations/{organizationId}/analytics`

Retrieve activity and cost for a window, filterable to one suite or one app.

Counts come from the platform's event log, which records that something happened, never its contents: for example, a row was created in a table, not the row. Answer where work is happening, who is using an app, and what the assistant is costing.

Requires the `account:read` scope. Operation `analytics.get`. MCP tool `analytics_get`. CLI: `grid82 analytics get` (`npx grid82`).

## Path parameters

| Name             | Type   | Required | Description |
| ---------------- | ------ | -------- | ----------- |
| `organizationId` | string | yes      |             |

## Query parameters

| Name      | Type    | Required | Description   |
| --------- | ------- | -------- | ------------- |
| `suiteId` | string  | no       |               |
| `appId`   | string  | no       |               |
| `days`    | integer | no       | Default `30`. |

**Authorizations**

- `Authorization` (bearer, in header, required)

## Response

**200**: Success

- `data` (`object`, required)
- `data.window` (`object`, required)
- `data.window.days` (`number`, required)
- `data.window.from` (`string`, required)
- `data.window.to` (`string`, required)
- `data.totals` (`object`, required)
- `data.totals.suites` (`number`, required)
- `data.totals.apps` (`number`, required)
- `data.totals.users` (`number`, required)
- `data.totals.builders` (`number`, required)
- `data.totals.activeUsers` (`number`, required)
- `data.totals.recordsWritten` (`number`, required)
- `data.totals.machineCalls` (`number`, required)
- `data.totals.signIns` (`number`, required)
- `data.daily` (`object[]`, required)
- `data.daily.day` (`string`, required)
- `data.daily.activeUsers` (`number`, required)
- `data.daily.records` (`number`, required)
- `data.daily.calls` (`number`, required)
- `data.byApp` (`object[]`, required)
- `data.byApp.appId` (`string`, required)
- `data.byApp.name` (`string`, required)
- `data.byApp.suiteId` (`string`, required)
- `data.byApp.activeUsers` (`number`, required)
- `data.byApp.records` (`number`, required)
- `data.byApp.calls` (`number`, required)
- `data.byApp.members` (`number`, required)
- `data.bySurface` (`object[]`, required)
- `data.bySurface.via` (`string`, required)
- `data.bySurface.count` (`number`, required)
- `data.assistant` (`object`, required)
- `data.assistant.runs` (`number`, required)
- `data.assistant.proposed` (`number`, required)
- `data.assistant.applied` (`number`, required)
- `data.assistant.costUsd` (`number`, required)
- `data.assistant.tokens` (`number`, required)
- `data.plan` (`object`, required)
- `data.plan.id` (`enum<string>`, required, one of: `free, starter, pro, custom`)
- `data.plan.usage` (`object`, required)
- `data.plan.usage.suites` (`integer`, required)
- `data.plan.usage.apps` (`integer`, required)
- `data.plan.usage.users` (`integer`, required)
- `data.plan.usage.builders` (`integer`, required)
- `data.plan.usage.storageBytes` (`integer`)
- `data.plan.usage.customDomains` (`integer`)
- `data.plan.limits` (`Record<string, number,boolean,null>`, required)

```json
{
  "data": {
    "window": {
      "days": 123.45,
      "from": "<string>",
      "to": "<string>"
    },
    "totals": {
      "suites": 123.45,
      "apps": 123.45,
      "users": 123.45,
      "builders": 123.45,
      "activeUsers": 123.45,
      "recordsWritten": 123.45,
      "machineCalls": 123.45,
      "signIns": 123.45
    },
    "daily": [
      {
        "day": "<string>",
        "activeUsers": 123.45,
        "records": 123.45,
        "calls": 123.45
      }
    ],
    "byApp": [
      {
        "appId": "<string>",
        "name": "<string>",
        "suiteId": "<string>",
        "activeUsers": 123.45,
        "records": 123.45,
        "calls": 123.45,
        "members": 123.45
      }
    ],
    "bySurface": [
      {
        "via": "<string>",
        "count": 123.45
      }
    ],
    "assistant": {
      "runs": 123.45,
      "proposed": 123.45,
      "applied": 123.45,
      "costUsd": 123.45,
      "tokens": 123.45
    },
    "plan": {
      "id": "free",
      "usage": {
        "suites": 123,
        "apps": 123,
        "users": 123,
        "builders": 123,
        "storageBytes": 123,
        "customDomains": 123
      },
      "limits": {}
    }
  }
}
```

**4XX**: Refused

- `error` (`object`, required)
- `error.code` (`enum<string>`, required, one of: `not_found, forbidden, unauthenticated, validation_failed, conflict, rate_limited, payment_required, not_implemented, internal`)
- `error.message` (`string`, required)
- `error.details` (`Record<string, unknown>`)

```json
{
  "error": {
    "code": "not_found",
    "message": "<string>",
    "details": {}
  }
}
```

**Example request**

```bash
curl --request GET \
  --url 'https://studio.grid82.app/v1/organizations/<organizationId>/analytics' \
  --header 'Authorization: Bearer <token>'
```
