API
Umami allows you to pull data directly by calling the API endpoints.
The endpoints are available at http://<your-umami>/api.
All data is returned as JSON.
Any operation you can do thorugh the Umami admin panel is available in the API, but it might not yet be documented.
Authentication
POST /api/auth/login
First you need to get a token in order to make API requests. You need to make a
POST request to the /api/auth/login endpoint with the following data:
{
  "username": "your-username",
  "password": "your-password"
}
If successful you should get a response like the following:
{
  "token": "eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A"
}
Save the token value and send an Authorization header with all your data requests with the value Bearer <token>. Your request header should look something like this:
Authorization: Bearer eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A
For example, with curl it would look like this:
curl https://yoursever/api/websites
   -H "Accept: application/json"
   -H "Authorization: Bearer <token>"
Prior to v1.26.0, Umami used cookies. If using an older version, you would do the following instead:
Save the token value and pass it as a cookie with all your data requests.
The cookie name is umami.auth. Your request header should look something like this:
Cookie: umami.auth=eyTMjU2IiwiY...4Q0JDLUhWxnIjoiUE_A
Websites
Operations around Websites that Umami is tracking.
POST /api/website
Creates a website.
Parameters
domain: (string) The full domain of the tracked websitename: (string) The name of the website in Umamienable_share_url: (boolean) Enables a public URL for the stats for this Websitepublic: (boolean) false by default
Sample response
{
    website_id: 4,
    website_uuid: "51f73213-3f01-4343-a135-25496a3ffd31",
    user_id: 2,
    name: "Umami",
    domain: "umami.is",
    share_id: "8PWex1pa",
    "created_at":"2021-07-26T17:17:52.846Z"
}
GET /api/websites
Returns all tracked websites.
Parameters
None
Sample response
[
    {
        website_id: 4,
        website_uuid: "51f73213-3f01-4343-a135-25496a3ffd31",
        user_id: 2,
        name: "Umami",
        domain: "umami.is",
        share_id: "8PWex1pa",
        "created_at":"2021-07-26T17:17:52.846Z"
    },
    {
        ...
    }
]
Getting stats
There are several endpoints your can call to get stats for your website. All the
stats endpoints require sending a GET request with the umami.auth authentication cookie.
GET /api/website/{id}/stats
Gets summarized website statistics.
Query Parameters
start_at: Timestamp (in ms) of starting dateend_at: Timestamp (in ms) of end date
Sample example
GET (with Authorization header) from url : https://umami.mydomain.com/api/website/1/stats?start_at=1656679719687&end_at=1656766119687
{
  pageviews: { value: 5, change: 5 },
  uniques: { value: 1, change: 1 },
  bounces: { value: 0, change: 0 },
  totaltime: { value: 4, change: 4 }
}
pageviews: Pages hitsuniques: Number of unique visitorbounces: Number of returning visitortotaltime: Time spent on the website
GET /api/website/{id}/pageviews
Gets pageviews within a given time range.
Parameters
start_at: Timestamp (in ms) of starting dateend_at: Timestamp (in ms) of end dateunit: Time unit (year | month | hour | day)tz: Timezone (ex. America/Los_Angeles)
Sample response
{
    pageviews: [
        {t: "2020-04-20 01:00:00", y: 3},
        {t: "2020-04-20 02:00:00", y: 7}
    ],
    sessions: [
        {t: "2020-04-20 01:00:00", y: 2},
        {t: "2020-04-20 02:00:00", y: 4}
    ]
}
GET /api/website/{id}/events
Gets events within a given time range.
Parameters
start_at: Timestamp (in ms) of starting dateend_at: Timestamp (in ms) of end dateunit: Time unit (year | month | hour | day)tz: Timezone (ex. America/Los_Angeles)
Sample response
[
    {x: "download-button", t: "2020-04-20 02:00:00", y: 2},
    {x: "signup-button", t: "2020-04-20 02:00:00", y: 1}
]
GET /api/website/{id}/metrics
Gets metrics for a given time range.
Parameters
start_at: Timestamp (in ms) of starting dateend_at: Timestamp (in ms) of end datetype: Metrics type (url | referrer | browser | os | device | country | event)
Sample response
[
    {x: "/", y: 46}
    {x: "/docs", y: 17}
    {x: "/download", y: 14}
]
Sending stats
POST /api/collect
To register a pageview or event, you need to send a POST to /api/collect with
the following data:
{
    payload: {
        website: "your-website-id",
        url: "/",
        referrer: "",
        hostname: "your-hostname",
        language: "en-US",
        screen: "1920x1080",
    },
    type: "pageview"
}
For events you would send:
{
    payload: {
        website: "your-website-id",
        url: "/",
        event_type: "click",
        event_value: "signup-button",
        hostname: "your-hostname",
        language: "en-US",
        screen: "1920x1080"
    },
    type: "event"
}
Note, for /api/collect requests you do not need to send an
authentication token.
Also, you need to send a proper User-Agent HTTP header or
your request won't be registered.