PHP code example of adriengras / umami-php

1. Go to this page and download the library: Download adriengras/umami-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

adriengras / umami-php example snippets


use AdrienGras\Umami\UmamiApi;

$umami = new UmamiApi(
    baseUrl: 'https://umami.example.com',
    apiToken: null, // optional: a reporting Bearer token, if you already have one
);

$websiteId = '01234567-89ab-cdef-0123-456789abcdef';

// Page view
$umami->tracking->pageview(
    websiteId: $websiteId,
    url: '/pricing',
    title: 'Pricing',
    referrer: 'https://google.com',
    hostname: 'example.com',
    userAgent: $request->getHeader('User-Agent'),
);

// Custom event
$umami->tracking->event(
    websiteId: $websiteId,
    name: 'signup',
    data: ['plan' => 'pro'],
    userAgent: $request->getHeader('User-Agent'),
);

// Attach a stable identity to the session
$umami->tracking->identify(
    websiteId: $websiteId,
    distinctId: 'user-42',
    data: ['email' => '[email protected]'],
    userAgent: $request->getHeader('User-Agent'),
);

$result = $umami->auth->login('admin', 's3cr3t-password');
// $result->token, $result->user

// ... make reporting calls ...

$umami->auth->logout(); // forgets the token client-side

use AdrienGras\Umami\Stats\Period;
use AdrienGras\Umami\Enums\MetricType;

// epoch milliseconds
$period = Period::between(startAt: 1_700_000_000_000, endAt: 1_700_086_400_000);

$summary  = $umami->stats->stats($websiteId, $period);
$topPaths = $umami->stats->metrics($websiteId, MetricType::Path, $period);
$series   = $umami->stats->pageviews($websiteId, $period);
$active   = $umami->stats->active($websiteId);
$realtime = $umami->stats->realtime($websiteId); // current activity window

$period = Period::between(startAt: 1_700_000_000_000, endAt: 1_700_086_400_000);

$records = $umami->eventData->list($websiteId, $period);
$props   = $umami->eventData->properties($websiteId, $period);
$rows    = $umami->eventData->events($websiteId, $period, 'signup'); // event name is 

$page    = $umami->websites->list(pageSize: 100);
$website = $umami->websites->get($websiteId);

$created = $umami->websites->create(name: 'My Site', domain: 'example.com');
$umami->websites->update($created['id'], name: 'Renamed');
$umami->websites->delete($created['id']);

use AdrienGras\Umami\Enums\UserRole;

$users = $umami->users->list(pageSize: 100); // GET /api/admin/users
$user  = $umami->users->create(
    username: 'jane',
    password: 'at-least-8-chars',
    role: UserRole::User,
);
$umami->users->update($user['id'], role: UserRole::ViewOnly);
$umami->users->delete($user['id']);

use AdrienGras\Umami\Enums\TeamRole;

$team = $umami->teams->create(name: 'Marketing');

// Membership
$umami->teams->addMember($team['id'], $user['id'], TeamRole::Member);
$umami->teams->updateMember($team['id'], $user['id'], TeamRole::Manager);
$umami->teams->removeMember($team['id'], $user['id']);

// Join an existing team with its access code
$umami->teams->join($team['accessCode']);

use AdrienGras\Umami\Enums\ReportType;
use AdrienGras\Umami\Stats\Filters;

// Saved reports
$saved = $umami->reports->create(
    websiteId: $websiteId,
    type: ReportType::Funnel,
    name: 'Checkout funnel',
    parameters: ['window' => 3_600_000, 'steps' => [/* ... */]],
);
$reports = $umami->reports->list($websiteId, ReportType::Funnel);

// Ad-hoc generation (one method per report type)
$funnel = $umami->reports->funnel($websiteId, [
    'startDate' => '2026-01-01',
    'endDate'   => '2026-01-31',
    'window'    => 3_600_000,
    'steps'     => [
        ['type' => 'path', 'value' => '/'],
        ['type' => 'event', 'value' => 'signup'],
    ],
], new Filters(country: 'FR'));

$utm = $umami->reports->utm($websiteId, ['startDate' => '2026-01-01', 'endDate' => '2026-01-31']);

use AdrienGras\Umami\Exceptions\UmamiApiException;
use AdrienGras\Umami\Exceptions\BotFilteredException;

try {
    $umami->tracking->pageview(websiteId: $websiteId, userAgent: $ua);
} catch (BotFilteredException $e) {
    // Umami returned 200 with `{"beep":"boop"}` — the hit was dropped as a bot.
} catch (UmamiApiException $e) {
    // Any other API error (4xx/5xx).
}
bash
composer