Reports
Using reports through the api.
Endpoints
GET /api/reports
POST /api/reports
GET /api/reports/:reportId
POST /api/reports/:reportId
DELETE /api/reports/:reportId
POST /api/reports/attribution
POST /api/reports/breakdown
POST /api/reports/funnel
POST /api/reports/goal
POST /api/reports/journey
POST /api/reports/performance
POST /api/reports/retention
POST /api/reports/revenue
POST /api/reports/utmFilters
All reports can now be filtered with the filters property in the request body.
| Parameter | Type | Description |
|---|---|---|
path | string | Name of URL. |
referrer | string | Name of referrer. |
title | string | Name of page title. |
query | string | Name of query parameter. |
browser | string | Name of browser. |
os | string | Name of operating system. |
device | string | Name of device (ex. Mobile). |
country | string | Name of country. |
region | string | Name of region/state/province. |
city | string | Name of city. |
language | string | Name of browser language. |
hostname | string | Name of hostname. |
tag | string | Name of tag. |
event | string | Name of event. |
distinctId | string | Name of distinct ID. |
utmSource | string | UTM source. |
utmMedium | string | UTM medium. |
utmCampaign | string | UTM campaign name. |
utmContent | string | UTM content. |
utmTerm | string | UTM term. |
segment | uuid | UUID of segment. |
cohort | uuid | UUID of cohort. |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "attribution",
"filters": { "os": "Mac OS", "device": "desktop" },
"parameters": {
"startDate": "2025-10-19T07:00:00.000Z",
"endDate": "2025-10-26T06:59:59.999Z",
"timezone": "America/Los_Angeles",
"model": "first-click",
"type": "path",
"step": "/"
}
}GET /api/reports
Get all reports by website ID.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (attribution | breakdown | funnel | goal | journey | retention | revenue | utm). |
page | number | (optional, default 1) Determines page. |
pageSize | number | (optional) Determines how many results to return. |
Sample response
{
"data": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"name": "Visited /pricing",
"description": "Test",
"parameters": {
"type": "path",
"value": "/pricing"
},
"createdAt": "2025-07-23T17:28:55.192Z",
"updatedAt": "2025-10-07T07:46:57.918Z"
},
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"name": "Triggered live-demo-button",
"description": "",
"parameters": {
"type": "event",
"value": "live-demo-button"
},
"createdAt": "2025-10-07T07:46:24.120Z",
"updatedAt": "2025-10-07T07:46:24.120Z"
}
],
"count": 2,
"page": 1,
"pageSize": 20
}POST /api/reports
Creates a report.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (attribution | breakdown | funnel | goal | journey | retention | revenue | utm). |
name | string | Name of report. |
description | string | (optional) Description of report. |
parameters | object | Parameters for report. |
Request body
{
"name": "Triggered Login-button ",
"parameters": { "type": "event", "value": "login-button-header" },
"type": "goal",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Sample response
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"name": "Triggered Login-button ",
"description": "",
"parameters": {
"type": "event",
"value": "login-button-header"
},
"createdAt": "2025-10-14T00:12:33.203Z",
"updatedAt": "2025-10-14T00:12:33.203Z"
}GET /api/reports/:reportId
Gets a report by ID.
Sample response
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"name": "Triggered Login-button ",
"description": "",
"parameters": {
"type": "event",
"value": "login-button-header"
},
"createdAt": "2025-10-14T00:12:33.203Z",
"updatedAt": "2025-10-14T00:12:33.203Z"
}POST /api/reports/:reportId
Updates a report.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (attribution | breakdown | funnel | goal | journey | retention | revenue | utm). |
name | string | Name of report. |
description | string | (optional) Description of report. |
parameters | object | Parameters for report. |
Request body
{
"name": "Triggered Login-button ",
"parameters": { "type": "event", "value": "login-button-header" },
"type": "goal",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Sample response
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"name": "Triggered Login-button ",
"description": "",
"parameters": {
"type": "event",
"value": "login-button-header"
},
"createdAt": "2025-10-14T00:12:33.203Z",
"updatedAt": "2025-10-14T00:12:33.203Z"
}DELETE /api/reports/:reportId
Deletes a report.
Sample response
{
"ok": true
}POST /api/reports/attribution
See how users engage with your marketing and what drives conversions.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (attribution). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
model | string | Attribution model (firstClick | lastClick). |
type | string | Conversion type (path | event). |
step | string | Conversion step. |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "attribution",
"filters": { "os": "Mac OS" },
"parameters": {
"startDate": "2025-10-19T07:00:00.000Z",
"endDate": "2025-10-26T06:59:59.999Z",
"model": "first-click",
"type": "path",
"step": "/"
}
}Sample response
{
"referrer": [
{
"name": "google.com",
"value": 30082
},
{
"name": "chatgpt.com",
"value": 1672
}
],
"paidAds": [
{
"name": "Facebook / Meta",
"value": 106
},
{
"name": "Google Ads",
"value": 6
}
],
"utm_source": [
{
"name": "coolify.io",
"value": 465
},
{
"name": "chatgpt.com",
"value": 338
}
],
"utm_medium": [
{
"name": "referral",
"value": 75
},
{
"name": "email",
"value": 16
}
],
"utm_campaign": [
{
"name": "navigation",
"value": 60
},
{
"name": "website_analytics",
"value": 8
}
],
"utm_content": [
{
"name": "comparison-page",
"value": 1
},
{
"name": "sidebar-cta",
"value": 1
}
],
"utm_term": [
{
"name": "data analysis",
"value": 1
},
{
"name": "0_df65b6d7c8-e2c14ebdc7-59136105",
"value": 1
}
],
"total": {
"pageviews": 171481,
"visitors": 104727,
"visits": 138391
}
}POST /api/reports/breakdown
Dive deeper into your data by using segments and filters.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (breakdown). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
fields | array | List of column fields. |
Available Fields
path | title | query | referrer | browser | os | device | country | region | city | hostname | tag | event | distinctId |
utmSource | utmMedium | utmCampaign | utmContent | utmTerm |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "breakdown",
"filters": {},
"parameters": {
"startDate": "2025-07-23T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"fields": ["os", "country"]
}
}Sample response
[
{
"views": 37856,
"visitors": 9229,
"visits": 13145,
"bounces": 8105,
"totaltime": 12985151,
"os": "Mac OS",
"country": "US"
},
{
"views": 24399,
"visitors": 6628,
"visits": 10673,
"bounces": 7119,
"totaltime": 21398417,
"os": "Windows 10",
"country": "US"
},
{
"views": 21561,
"visitors": 4916,
"visits": 6532,
"bounces": 3452,
"totaltime": 22984512,
"os": "Mac OS",
"country": "DE"
},
{
"views": 12977,
"visitors": 2976,
"visits": 4180,
"bounces": 2440,
"totaltime": 9962317,
"os": "Windows 10",
"country": "DE"
}
]POST /api/reports/funnel
Understand the conversion and drop-off rate of users.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (funnel). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
steps | array | Minimum two required. Each step has a type (path | event) and a value. |
window | number | Window of days between funnel steps to be considered a conversion. |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "funnel",
"filters": {},
"parameters": {
"startDate": "2025-07-23T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"steps": [
{ "type": "path", "value": "/" },
{ "type": "event", "value": "live-demo-button" }
],
"window": 60
}
}Sample response
[
{
"type": "path",
"value": "/",
"visitors": 106594,
"previous": 0,
"dropped": 0,
"dropoff": null,
"remaining": 1
},
{
"type": "event",
"value": "live-demo-button",
"visitors": 10269,
"previous": 106594,
"dropped": 96325,
"dropoff": 0.9036624950747697,
"remaining": 0.09633750492523031
}
]POST /api/reports/goal
Track your goals for pageviews and events.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (goal). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
type | string | Conversion type (path | event). |
value | string | Conversion step value. |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "goal",
"filters": {},
"parameters": {
"startDate": "2025-07-23T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"type": "event",
"value": "live-demo-button"
}
}Sample response
{
"num": 11935,
"total": 50602
}POST /api/reports/journey
Understand how users navigate through your website.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (journey). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
steps | number | Number of steps from 3 to 7. |
startStep | string | Starting step URL or event name. |
endStep | string | (optional) Ending step URL or event name. |
Request body
{
"websiteId": "86d4095c-a2a8-4fc8-9521-103e858e2b41",
"type": "journey",
"filters": {},
"parameters": {
"startDate": "2025-07-23T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"steps": 3,
"startStep": "/",
"endStep": "/pricing"
}
}Sample response
[
{
"items": ["/", "/pricing", null, null],
"count": 6433
},
{
"items": ["/", "live-demo-button", "/pricing", null],
"count": 918
},
{
"items": ["/", "/features", "/pricing", null],
"count": 857
},
{
"items": ["/", "/pricing", null],
"count": 434
},
{
"items": ["/", "/pricing", null],
"count": 306
},
{
"items": ["/", "/docs", "/pricing", null],
"count": 257
},
{
"items": ["/", "get-started-button", "/pricing", null],
"count": 237
},
{
"items": ["/", "login-button-header", "/pricing", null],
"count": 102
}
]POST /api/reports/performance
Get Core Web Vitals performance metrics for a given date range.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (performance). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
unit | string | (optional) Time unit (year | month | hour | day). |
timezone | string | (optional) Timezone (ex. America/Los_Angeles). |
metric | string | (optional) Metric to focus on (lcp | inp | cls | fcp | ttfb). |
Request body
{
"websiteId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "performance",
"filters": {},
"parameters": {
"startDate": "2025-10-01T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"timezone": "America/Los_Angeles",
"metric": "lcp"
}
}Sample response
{
"chart": [
{
"t": "2026-03-11T16:00:00Z",
"p50": 24748,
"p75": 24748,
"p95": 24748
},
{
"t": "2026-03-11T17:00:00Z",
"p50": 920,
"p75": 920,
"p95": 920
},
{
"t": "2026-03-11T21:00:00Z",
"p50": 1408,
"p75": 1408,
"p95": 1408
}
],
"summary": {
"lcp": {
"p50": 1408,
"p75": 13078,
"p95": 22413.9
},
"inp": {
"p50": 48,
"p75": 56,
"p95": 86.3
},
"cls": {
"p50": 0.0015,
"p75": 0.0067,
"p95": 0.0231
},
"fcp": {
"p50": 720,
"p75": 10264,
"p95": 17899.1
},
"ttfb": {
"p50": 274.7,
"p75": 9062.2,
"p95": 16092.2
},
"count": 28
},
"pages": [
{
"name": "/analytics/websites",
"p50": 1408,
"p75": 1408,
"p95": 1408,
"count": 1
},
],
"pageTitles": [
{
"name": "Websites | Umami",
"p50": 1408,
"p75": 13078,
"p95": 22413.9,
"count": 8
},
{
"name": "Pixels | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 2
},
{
"name": "Settings | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 1
},
{
"name": "Board | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 6
},
{
"name": "Links | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 2
},
{
"name": "Boards | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 2
},
{
"name": "Design Board | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 3
},
{
"name": "Edit Link | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 1
},
{
"name": "Edit Pixel | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 1
},
{
"name": "Edit Board | Umami",
"p50": null,
"p75": null,
"p95": null,
"count": 2
}
],
"devices": [
{
"name": "laptop",
"p50": 12834,
"p75": 18791,
"p95": 23556.6,
"count": 27
},
{
"name": "desktop",
"p50": 1408,
"p75": 1408,
"p95": 1408,
"count": 1
}
],
"browsers": [
{
"name": "chrome",
"p50": 1408,
"p75": 13078,
"p95": 22413.9,
"count": 28
}
]
}POST /api/reports/retention
Measure your website stickiness by tracking how often users return.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (retention). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
timezone | string | Timezone (ex. America/Los_Angeles). |
Request body
{
"websiteId": "86d4095c-a2a8-4fc8-9521-103e858e2b41",
"type": "retention",
"filters": {},
"parameters": {
"startDate": "2025-10-01T07:00:00.000Z",
"endDate": "2025-11-01T06:59:59.999Z",
"timezone": "America/Los_Angeles"
}
}Sample response
[
{
"date": "2025-10-01T07:00:00Z",
"day": 0,
"visitors": 1499,
"returnVisitors": 1499,
"percentage": 100
},
{
"date": "2025-10-01T07:00:00Z",
"day": 1,
"visitors": 1499,
"returnVisitors": 151,
"percentage": 10.073382254836558
},
{
"date": "2025-10-01T07:00:00Z",
"day": 2,
"visitors": 1499,
"returnVisitors": 83,
"percentage": 5.537024683122081
},
{
"date": "2025-10-01T07:00:00Z",
"day": 3,
"visitors": 1499,
"returnVisitors": 45,
"percentage": 3.002001334222815
}
]POST /api/reports/revenue
Get currency for given range. Needed for Revenue and optional in Attribution reports.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (revenue). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
timezone | string | Timezone (ex. America/Los_Angeles). |
currency | string | Currency code (ISO 4217). |
compare | string | (optional) Comparison period (prev | yoy). |
Request body
{
"websiteId": "86d4095c-a2a8-4fc8-9521-103e858e2b41",
"type": "revenue",
"filters": {},
"parameters": {
"startDate": "2025-07-23T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z",
"timezone": "America/Los_Angeles",
"currency": "USD"
}
}Sample response
{
"chart": [
{
"x": "revenue-demo",
"t": "2026-03-11T08:00:00Z",
"y": 70,
"count": 2
},
{
"x": "revenue-demo",
"t": "2026-03-11T09:00:00Z",
"y": 40,
"count": 2
},
{
"x": "revenue-demo",
"t": "2026-03-11T10:00:00Z",
"y": 80,
"count": 2
},
{
"x": "revenue-demo",
"t": "2026-03-11T11:00:00Z",
"y": 70,
"count": 2
},
{
"x": "revenue-demo",
"t": "2026-03-11T12:00:00Z",
"y": 50,
"count": 3
},
{
"x": "revenue-demo",
"t": "2026-03-11T13:00:00Z",
"y": 10,
"count": 1
}
],
"total": {
"sum": 320,
"count": 12,
"unique_count": 12,
"total_sessions": 1300,
"average": 26.666666666666668,
"arpu": 0.24615384615384617,
"comparison": {
"sum": 2470,
"count": 66,
"unique_count": 66,
"total_sessions": 2994,
"average": 37.42424242424242,
"arpu": 0.8249832999331997
}
},
"country": [
{
"name": "GB",
"value": 100
},
{
"name": "FR",
"value": 100
},
{
"name": "DE",
"value": 60
},
{
"name": "US",
"value": 40
},
{
"name": "CN",
"value": 20
}
],
"region": [
{
"country": "FR",
"name": "FR-IDF",
"value": 100
},
{
"country": "GB",
"name": "GB-ENG",
"value": 100
},
{
"country": "DE",
"name": "DE-HE",
"value": 60
},
{
"country": "US",
"name": "US-CA",
"value": 40
},
{
"country": "CN",
"name": "CN-GD",
"value": 20
}
],
"referrer": [
{
"name": "chatgpt.com",
"value": 100
},
{
"name": "github.com",
"value": 100
},
{
"name": "google.com",
"value": 60
},
{
"name": "reddit.com",
"value": 60
}
],
"channel": [
{
"name": "referral",
"value": 100
},
{
"name": "organicSearch",
"value": 100
},
{
"name": "paidSearch",
"value": 60
},
{
"name": "organicSocial",
"value": 60
}
]
}POST /api/reports/utm
Track your campaigns through UTM parameters.
Parameters
| Parameter | Type | Description |
|---|---|---|
websiteId | string | Your website id. |
type | string | Report type (utm). |
filters | object | Can accept filter parameters. |
startDate | string | Start date. |
endDate | string | End date. |
Request body
{
"websiteId": "86d4095c-a2a8-4fc8-9521-103e858e2b41",
"type": "utm",
"filters": {},
"parameters": {
"startDate": "2025-10-14T07:00:00.000Z",
"endDate": "2025-10-22T06:59:59.999Z"
}
}Sample response
{
"utm_source": [
{
"utm": "chatgpt.com",
"views": 341
},
{
"utm": "coolify.io",
"views": 235
},
{
"utm": "openalternative.co",
"views": 89
},
{
"utm": "facebook",
"views": 28
}
],
"utm_medium": [
{
"utm": "cpc",
"views": 28
},
{
"utm": "referral",
"views": 26
}
],
"utm_campaign": [
{
"utm": "website_analytics",
"views": 28
},
{
"utm": "navigation",
"views": 16
}
],
"utm_term": [
{
"utm": "0_df65b6d7c8-e2c14ebdc7-59136105",
"views": 1
}
],
"utm_content": [
{
"utm": "comparison-page",
"views": 1
},
{
"utm": "sidebar-cta",
"views": 1
}
]
}