---
title: "GA4 report"
method: POST
path: "/api/v1/data/ga4_run_report"
---

# GA4 report

`POST /api/v1/data/ga4_run_report`

## Request

- Base URL: `https://app.attache.studio`
- URL: `https://app.attache.studio/api/v1/data/ga4_run_report`
- Auth: HTTP bearer

Run a GA4 report. Dimensions/metrics use GA4 API names (e.g. sessionDefaultChannelGroup, sessions, keyEvents).

## Request body

- object
  - `property_id` string, required: GA4 property id, from list_sources
  - `metrics` string[], required
  - `dimensions` string[]
  - `start_date` string, required: YYYY-MM-DD or NdaysAgo or yesterday
  - `end_date` string, required
  - `limit` integer
  - `order_bys` object[]: GA4 orderBys objects
  - `dimension_filter` object: GA4 FilterExpression object

## Response `200`

Raw result of the underlying Google / Meta API, as JSON.

## Other responses

- `400`: { "error": string } — bad parameters or resource not shared.
- `401`: Missing, unknown or revoked key.
- `403`: Called from a browser — call from your backend.
- `429`: Rate limit: 60 requests per minute per key.

---

[API](https://skmtc.dev/attache/apis/attache-data-api.md) · [All operations](https://skmtc.dev/attache/apis/attache-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/attache/apis/attache-data-api/revisions/83d5d32a3fea?raw)
