<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="generator" content="ExDoc v0.31.1"> <meta name="project" content="Plausible v0.0.1"> <title>API Reference — Plausible v0.0.1</title> <link rel="stylesheet" href="dist/html-elixir-FM2CSD74.css" /> <script src="dist/handlebars.runtime-NWIB6V2M.js"></script> <script src="dist/handlebars.templates-43PMFBC7.js"></script> <script src="dist/sidebar_items-156D207A.js"></script> <script src="docs_config.js"></script> <script async src="dist/html-L4O5OK2K.js"></script> </head> <body data-type="extras" class="page-extra"> <script> try { var settings = JSON.parse(localStorage.getItem('ex_doc:settings') || '{}'); if (settings.theme === 'dark' || ((settings.theme === 'system' || settings.theme == null) && window.matchMedia('(prefers-color-scheme: dark)').matches) ) { document.body.classList.add('dark') } } catch (error) { } </script> <div class="main"> <button id="sidebar-menu" class="sidebar-button sidebar-toggle" aria-label="toggle sidebar" aria-controls="sidebar"> <i class="ri-menu-line ri-lg" title="Collapse/expand sidebar"></i> </button> <div class="background-layer"></div> <nav id="sidebar" class="sidebar"> <div class="sidebar-header"> <div class="sidebar-projectInfo"> <a href="readme.html" class="sidebar-projectImage"> <img src="assets/logo.png" alt="Plausible" /> </a> <div> <a href="readme.html" class="sidebar-projectName" translate="no"> Plausible </a> <div class="sidebar-projectVersion" translate="no"> v0.0.1 </div> </div> </div> <ul id="sidebar-listNav" class="sidebar-listNav" role="tablist"> <li> <button id="extras-list-tab-button" role="tab" data-type="extras" aria-controls="extras-tab-panel" aria-selected="true" tabindex="0"> Pages </button> </li> <li> <button id="modules-list-tab-button" role="tab" data-type="modules" aria-controls="modules-tab-panel" aria-selected="false" tabindex="-1"> Modules </button> </li> <li> <button id="tasks-list-tab-button" role="tab" data-type="tasks" aria-controls="tasks-tab-panel" aria-selected="false" tabindex="-1"> <span translate="no">Mix</span> Tasks </button> </li> </ul> </div> <div id="extras-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="extras-list-tab-button"> <ul id="extras-full-list" class="full-list"></ul> </div> <div id="modules-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="modules-list-tab-button" hidden> <ul id="modules-full-list" class="full-list"></ul> </div> <div id="tasks-tab-panel" class="sidebar-tabpanel" role="tabpanel" aria-labelledby="tasks-list-tab-button" hidden> <ul id="tasks-full-list" class="full-list"></ul> </div> </nav> <main class="content"> <output role="status" id="toast"></output> <div class="content-outer"> <div id="content" class="content-inner"> <div class="top-search"> <div class="search-settings"> <form class="search-bar" action="search.html"> <label class="search-label"> <span class="sr-only">Search documentation of Plausible</span> <input name="q" type="text" class="search-input" placeholder="Search Documentation (press /)" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /> </label> <button type="submit" class="search-button" aria-label="Submit Search"> <i class="ri-search-2-line ri-lg" aria-hidden="true" title="Submit search"></i> </button> <button type="button" tabindex="-1" class="search-close-button" aria-hidden="true"> <i class="ri-close-line ri-lg" title="Cancel search"></i> </button> </form> <div class="autocomplete"> </div> <button class="icon-settings display-settings"> <i class="ri-settings-3-line"></i> <span class="sr-only">Settings</span> </button> </div> </div> <h1> <a href="https://github.com/plausible/analytics" title="View Source" class="icon-action" rel="help"> <i class="ri-code-s-slash-line" aria-hidden="true"></i> <span class="sr-only">View Source</span> </a> <span>API Reference <small class="app-vsn">Plausible v0.0.1</small></span> </h1> <section class="details-list"> <h2 id="modules" class="section-heading"> <a href="#modules" class="hover-link"> <i class="ri-link-m" aria-hidden="true"></i> </a> <span class="text">Modules</span> </h2> <div class="summary"> <div class="summary-row"> <div class="summary-signature"> <a href="CompiledRegex.html" translate="no">CompiledRegex</a> </div> <div class="summary-synopsis"><p>Ensures that the regex is compiled on load</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="ObanErrorReporter.html" translate="no">ObanErrorReporter</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.html" translate="no">Plausible</a> </div> <div class="summary-synopsis"><p>Build-related macros</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.AsyncInsertRepo.html" translate="no">Plausible.AsyncInsertRepo</a> </div> <div class="summary-synopsis"><p>Clickhouse access with async inserts enabled</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.html" translate="no">Plausible.Auth</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.ApiKey.html" translate="no">Plausible.Auth.ApiKey</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.ApiKeyAdmin.html" translate="no">Plausible.Auth.ApiKeyAdmin</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.EmailActivationCode.html" translate="no">Plausible.Auth.EmailActivationCode</a> </div> <div class="summary-synopsis"><p>Schema for email activation codes.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.EmailVerification.html" translate="no">Plausible.Auth.EmailVerification</a> </div> <div class="summary-synopsis"><p>API for verifying emails.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.GracePeriod.html" translate="no">Plausible.Auth.GracePeriod</a> </div> <div class="summary-synopsis"><p>This embedded schema stores information about the account locking grace period.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.Invitation.html" translate="no">Plausible.Auth.Invitation</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.Password.html" translate="no">Plausible.Auth.Password</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.TOTP.html" translate="no">Plausible.Auth.TOTP</a> </div> <div class="summary-synopsis"><p>TOTP auth context</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.TOTP.EncryptedBinary.html" translate="no">Plausible.Auth.TOTP.EncryptedBinary</a> </div> <div class="summary-synopsis"><p>Defines an Ecto type so Cloak.Ecto can encrypt/decrypt a binary field.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.TOTP.RecoveryCode.html" translate="no">Plausible.Auth.TOTP.RecoveryCode</a> </div> <div class="summary-synopsis"><p>Schema for TOTP recovery codes.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.TOTP.Vault.html" translate="no">Plausible.Auth.TOTP.Vault</a> </div> <div class="summary-synopsis"><p>Provides a vault that will be used to encrypt/decrypt the TOTP secrets of users who enable it.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.Token.html" translate="no">Plausible.Auth.Token</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.User.html" translate="no">Plausible.Auth.User</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Auth.UserAdmin.html" translate="no">Plausible.Auth.UserAdmin</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.html" translate="no">Plausible.Billing</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Ecto.Feature.html" translate="no">Plausible.Billing.Ecto.Feature</a> </div> <div class="summary-synopsis"><p>Ecto type representing a feature. Features are cast and stored in the database as strings and loaded as modules, for example: <code class="inline">"props"</code> is loaded as <code class="inline">Plausible.Billing.Feature.Props</code>.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Ecto.FeatureList.html" translate="no">Plausible.Billing.Ecto.FeatureList</a> </div> <div class="summary-synopsis"><p>Ecto type representing a list of features. This is a proxy for <code class="inline">{:array, Plausible.Billing.Ecto.Feature}</code> and is required for Kaffy to render the HTML input correctly.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Ecto.Limit.html" translate="no">Plausible.Billing.Ecto.Limit</a> </div> <div class="summary-synopsis"><p>Ecto type representing a limit, that can be either a number or unlimited. Unlimited is dumped to the database as <code class="inline">-1</code> and loaded as <code class="inline">:unlimited</code> to keep compatibility with the rest of the codebase.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.EnterprisePlan.html" translate="no">Plausible.Billing.EnterprisePlan</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.EnterprisePlanAdmin.html" translate="no">Plausible.Billing.EnterprisePlanAdmin</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Feature.html" translate="no">Plausible.Billing.Feature</a> </div> <div class="summary-synopsis"><p>This module provides an interface for managing features, e.g. Revenue Goals, Funnels and Custom Properties.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.PaddleApi.html" translate="no">Plausible.Billing.PaddleApi</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Plans.html" translate="no">Plausible.Billing.Plans</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Quota.html" translate="no">Plausible.Billing.Quota</a> </div> <div class="summary-synopsis"><p>This module provides functions to work with plans usage and limits.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.SiteLocker.html" translate="no">Plausible.Billing.SiteLocker</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Billing.Subscription.Status.html" translate="no">Plausible.Billing.Subscription.Status</a> </div> <div class="summary-synopsis"><p>The subscription statuses are stored in Paddle. They can only be changed through Paddle webhooks, which always send the current subscription status via the payload.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cache.html" translate="no">Plausible.Cache</a> </div> <div class="summary-synopsis"><p>Caching interface specific for Plausible. Usage</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cache.Adapter.html" translate="no">Plausible.Cache.Adapter</a> </div> <div class="summary-synopsis"><p>Interface for the underlying cache implementation. Currently: ConCache</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cache.Stats.html" translate="no">Plausible.Cache.Stats</a> </div> <div class="summary-synopsis"><p>Keeps track of hit/miss ratio for various caches.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cache.Warmer.html" translate="no">Plausible.Cache.Warmer</a> </div> <div class="summary-synopsis"><p>A periodic cache warmer.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ChangesetHelpers.html" translate="no">Plausible.ChangesetHelpers</a> </div> <div class="summary-synopsis"><p>Helper function for working with Ecto changesets</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.html" translate="no">Plausible.Cldr</a> </div> <div class="summary-synopsis"><p>Provides the core functions to retrieve and manage the CLDR data that supports formatting and localisation.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.AcceptLanguage.html" translate="no">Plausible.Cldr.AcceptLanguage</a> </div> <div class="summary-synopsis"><p>Parses HTTP <code class="inline">Accept-Language</code> header values as defined in <a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4">rfc2616</a>.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Currency.html" translate="no">Plausible.Cldr.Currency</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Locale.html" translate="no">Plausible.Cldr.Locale</a> </div> <div class="summary-synopsis"><p>Backend module that provides functions to define new locales and display human-readable locale names for presentation purposes.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.html" translate="no">Plausible.Cldr.Number</a> </div> <div class="summary-synopsis"><p>Formats numbers and currencies based upon CLDR's decimal formats specification.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Cardinal.html" translate="no">Plausible.Cldr.Number.Cardinal</a> </div> <div class="summary-synopsis"><p>Implements cardinal plural rules for numbers.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Format.html" translate="no">Plausible.Cldr.Number.Format</a> </div> <div class="summary-synopsis"><p>Functions to manage the collection of number patterns defined in Cldr.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Formatter.Decimal.html" translate="no">Plausible.Cldr.Number.Formatter.Decimal</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Ordinal.html" translate="no">Plausible.Cldr.Number.Ordinal</a> </div> <div class="summary-synopsis"><p>Implements ordinal plural rules for numbers.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.PluralRule.Range.html" translate="no">Plausible.Cldr.Number.PluralRule.Range</a> </div> <div class="summary-synopsis"><p>Implements plural rules for ranges</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Symbol.html" translate="no">Plausible.Cldr.Number.Symbol</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.System.html" translate="no">Plausible.Cldr.Number.System</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Number.Transliterate.html" translate="no">Plausible.Cldr.Number.Transliterate</a> </div> <div class="summary-synopsis"><p>Transliteration for digits and separators.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Rbnf.NumberSystem.html" translate="no">Plausible.Cldr.Rbnf.NumberSystem</a> </div> <div class="summary-synopsis"><p>Functions to implement the number system rule-based-number-format rules of CLDR.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Rbnf.Ordinal.html" translate="no">Plausible.Cldr.Rbnf.Ordinal</a> </div> <div class="summary-synopsis"><p>Functions to implement the ordinal rule-based-number-format rules of CLDR.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Cldr.Rbnf.Spellout.html" translate="no">Plausible.Cldr.Rbnf.Spellout</a> </div> <div class="summary-synopsis"><p>Functions to implement the spellout rule-based-number-format rules of CLDR.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ClickhouseEventV2.html" translate="no">Plausible.ClickhouseEventV2</a> </div> <div class="summary-synopsis"><p>Event schema for when NumericIDs migration is complete</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ClickhouseRepo.html" translate="no">Plausible.ClickhouseRepo</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ClickhouseSessionV2.html" translate="no">Plausible.ClickhouseSessionV2</a> </div> <div class="summary-synopsis"><p>Session schema for when NumericIDs migration is complete</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ClickhouseSessionV2.BoolUInt8.html" translate="no">Plausible.ClickhouseSessionV2.BoolUInt8</a> </div> <div class="summary-synopsis"><p>Custom type to cast Bool as UInt8</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ConfigHelpers.html" translate="no">Plausible.ConfigHelpers</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataCase.html" translate="no">Plausible.DataCase</a> </div> <div class="summary-synopsis"><p>This module defines the setup for tests requiring access to the application's data layer.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.html" translate="no">Plausible.DataMigration</a> </div> <div class="summary-synopsis"><p>Base module for coordinated Clickhouse data migrations run via remote shell or otherwise (TBD).</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.NumericIDs.html" translate="no">Plausible.DataMigration.NumericIDs</a> </div> <div class="summary-synopsis"><p>Numeric IDs migration, SQL files available at: priv/data_migrations/NumericIDs/sql</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.PopulateEventSessionColumns.html" translate="no">Plausible.DataMigration.PopulateEventSessionColumns</a> </div> <div class="summary-synopsis"><p>Populates event session columns with data from sessions table.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.Repo.html" translate="no">Plausible.DataMigration.Repo</a> </div> <div class="summary-synopsis"><p>Ecto.Repo for Clickhouse data migrations, to be started manually, outside of the main application supervision tree.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.SiteImports.html" translate="no">Plausible.DataMigration.SiteImports</a> </div> <div class="summary-synopsis"><p>Site imports migration backfilling SiteImport entries for old imports and alters import end dates to match actual end date of respective import stats.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DataMigration.VersionedSessions.html" translate="no">Plausible.DataMigration.VersionedSessions</a> </div> <div class="summary-synopsis"><p>Sessions CollapsingMergeTree -> VersionedCollapsingMergeTree migration, SQL files available at: priv/data_migrations/VersionedSessions/sql</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.DebugReplayInfo.html" translate="no">Plausible.DebugReplayInfo</a> </div> <div class="summary-synopsis"><p>Function execution context (with arguments) to Sentry reports.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ecto.EventName.html" translate="no">Plausible.Ecto.EventName</a> </div> <div class="summary-synopsis"><p> Custom type for event name. Accepts Strings and Integers and stores them as String. Returns cast error if any other type is provided. Accepting integers is important for 404 tracking.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Exports.html" translate="no">Plausible.Exports</a> </div> <div class="summary-synopsis"><p>Contains functions to export data for events and sessions as Zip archives.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Factory.html" translate="no">Plausible.Factory</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Funnel.html" translate="no">Plausible.Funnel</a> </div> <div class="summary-synopsis"><p>A funnel is a marketing term used to capture and describe the journey that users go through, from initial step to conversion. A funnel consists of several steps (here: 2..8).</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Funnel.Const.html" translate="no">Plausible.Funnel.Const</a> </div> <div class="summary-synopsis"><p>Compile-time convience constants for funnel characteristics.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Funnel.Step.html" translate="no">Plausible.Funnel.Step</a> </div> <div class="summary-synopsis"><p>This module defines the database schema for a single Funnel step. See: <a href="Plausible.Funnel.html"><code class="inline">Plausible.Funnel</code></a> for more information.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Funnels.html" translate="no">Plausible.Funnels</a> </div> <div class="summary-synopsis"><p>This module implements contextual Funnel interface, allowing listing, creating and deleting funnel definitions.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Geo.html" translate="no">Plausible.Geo</a> </div> <div class="summary-synopsis"><p>This module provides an API for fetching IP geolocation.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Goal.html" translate="no">Plausible.Goal</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Goal.Revenue.html" translate="no">Plausible.Goal.Revenue</a> </div> <div class="summary-synopsis"><p>Currency specific functions for revenue goals</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Goals.html" translate="no">Plausible.Goals</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.API.html" translate="no">Plausible.Google.API</a> </div> <div class="summary-synopsis"><p>API to Google services.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.API.Mock.html" translate="no">Plausible.Google.API.Mock</a> </div> <div class="summary-synopsis"><p>Mock of API to Google services.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.GA4.API.html" translate="no">Plausible.Google.GA4.API</a> </div> <div class="summary-synopsis"><p>API for Google Analytics 4.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.GA4.HTTP.html" translate="no">Plausible.Google.GA4.HTTP</a> </div> <div class="summary-synopsis"><p>HTTP client implementation for Google Analytics 4 API.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.GA4.ReportRequest.html" translate="no">Plausible.Google.GA4.ReportRequest</a> </div> <div class="summary-synopsis"><p>Report request struct for Google Analytics 4 API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.HTTP.html" translate="no">Plausible.Google.HTTP</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.UA.API.html" translate="no">Plausible.Google.UA.API</a> </div> <div class="summary-synopsis"><p>API for Universal Analytics</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.UA.HTTP.html" translate="no">Plausible.Google.UA.HTTP</a> </div> <div class="summary-synopsis"><p>HTTP client implementation for Universal Analytics API.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Google.UA.ReportRequest.html" translate="no">Plausible.Google.UA.ReportRequest</a> </div> <div class="summary-synopsis"><p>Report request struct for Universal Analytics API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.HTTPClient.html" translate="no">Plausible.HTTPClient</a> </div> <div class="summary-synopsis"><p>HTTP Client built on top of Finch.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.HTTPClient.Interface.html" translate="no">Plausible.HTTPClient.Interface</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.HTTPClient.Non200Error.html" translate="no">Plausible.HTTPClient.Non200Error</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Helpers.JSON.html" translate="no">Plausible.Helpers.JSON</a> </div> <div class="summary-synopsis"><p>Common helpers for JSON handling</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.ImportDeletionRepo.html" translate="no">Plausible.ImportDeletionRepo</a> </div> <div class="summary-synopsis"><p>A dedicated repo for import related mutations</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.html" translate="no">Plausible.Imported</a> </div> <div class="summary-synopsis"><p>Context for managing site statistics imports.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.Buffer.html" translate="no">Plausible.Imported.Buffer</a> </div> <div class="summary-synopsis"><p>This GenServer inserts records into Clickhouse <code class="inline">imported_*</code> tables. Multiple buffers are automatically created for each table. Records are flushed when the table buffer reaches the maximum size, defined by <code class="inline">max_buffer_size/0</code>.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.CSVImporter.html" translate="no">Plausible.Imported.CSVImporter</a> </div> <div class="summary-synopsis"><p>CSV importer from S3 that uses ClickHouse <a href="https://clickhouse.com/docs/en/sql-reference/table-functions/s3">s3 table function.</a></p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.GoogleAnalytics4.html" translate="no">Plausible.Imported.GoogleAnalytics4</a> </div> <div class="summary-synopsis"><p>Import implementation for Google Analytics 4.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.ImportSources.html" translate="no">Plausible.Imported.ImportSources</a> </div> <div class="summary-synopsis"><p>Definitions of import sources.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.Importer.html" translate="no">Plausible.Imported.Importer</a> </div> <div class="summary-synopsis"><p>Behaviour that should be implemented for each import source.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.NoopImporter.html" translate="no">Plausible.Imported.NoopImporter</a> </div> <div class="summary-synopsis"><p>Stub import implementation.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.SiteImport.html" translate="no">Plausible.Imported.SiteImport</a> </div> <div class="summary-synopsis"><p>Site import schema.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Imported.UniversalAnalytics.html" translate="no">Plausible.Imported.UniversalAnalytics</a> </div> <div class="summary-synopsis"><p>Import implementation for Universal Analytics.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.IngestRepo.html" translate="no">Plausible.IngestRepo</a> </div> <div class="summary-synopsis"><p>Write-centric Clickhouse access interface</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Counters.html" translate="no">Plausible.Ingestion.Counters</a> </div> <div class="summary-synopsis"><p>This is instrumentation necessary for keeping track of per-domain internal metrics. Due to metric labels cardinality (domain x metric_name), these statistics are not suitable for prometheus/grafana exposure, hence an internal storage is used.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Counters.Buffer.html" translate="no">Plausible.Ingestion.Counters.Buffer</a> </div> <div class="summary-synopsis"><p>A buffer aggregating counters for internal metrics, within 10 seconds time buckets.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Counters.Record.html" translate="no">Plausible.Ingestion.Counters.Record</a> </div> <div class="summary-synopsis"><p>Clickhouse schema for storing ingest counter metrics</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Counters.TelemetryHandler.html" translate="no">Plausible.Ingestion.Counters.TelemetryHandler</a> </div> <div class="summary-synopsis"><p>Subscribes to telemetry events emitted by <a href="Plausible.Ingestion.Event.html"><code class="inline">Plausible.Ingestion.Event</code></a>. Every time a request derived event is either dispatched to clickhouse or dropped, a telemetry event is emitted respectively. That event is captured here, its metadata is extracted and sent for internal stats aggregation via <code class="inline">Counters.Buffer</code> interface.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Event.html" translate="no">Plausible.Ingestion.Event</a> </div> <div class="summary-synopsis"><p>This module exposes the <a href="#build_and_buffer/1"><code class="inline">build_and_buffer/1</code></a> function capable of turning %Plausible.Ingestion.Request{} into a series of events that in turn are uniformly either buffered in batches (to Clickhouse) or dropped (e.g. due to spam blocklist) from the processing pipeline.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Event.Revenue.html" translate="no">Plausible.Ingestion.Event.Revenue</a> </div> <div class="summary-synopsis"><p>Revenue specific functions for the ingestion scope</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Request.html" translate="no">Plausible.Ingestion.Request</a> </div> <div class="summary-synopsis"><p>The %Plausible.Ingestion.Request{} struct stores all needed fields to create an event downstream. Pre-eliminary validation is made to detect user errors early.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Ingestion.Request.Revenue.html" translate="no">Plausible.Ingestion.Request.Revenue</a> </div> <div class="summary-synopsis"><p>Revenue specific functions for the ingestion scope</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.License.html" translate="no">Plausible.License</a> </div> <div class="summary-synopsis"><p> This module ensures that you cannot run Plausible Analytics Enterprise Edition without a valid license key. The software contained within the ee/ and assets/js/dashboard/ee directories are Copyright © Plausible Insights OÜ. We have made this code available solely for informational and transparency purposes. No rights are granted to use, distribute, or exploit this software in any form.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Mailer.html" translate="no">Plausible.Mailer</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.MigrationUtils.html" translate="no">Plausible.MigrationUtils</a> </div> <div class="summary-synopsis"><p>Base module for to use in Clickhouse migrations</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.OpenTelemetry.Sampler.html" translate="no">Plausible.OpenTelemetry.Sampler</a> </div> <div class="summary-synopsis"><p><a href="https://hexdocs.pm/opentelemetry/readme.html#samplers">Custom OpenTelemetry sampler</a> implementation that ignores particular traces to reduce noise. Ingestion HTTP requests and queries to Oban tables are ignored, for example.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.PaddleApi.Mock.html" translate="no">Plausible.PaddleApi.Mock</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Pagination.html" translate="no">Plausible.Pagination</a> </div> <div class="summary-synopsis"><p>Cursor-based pagination.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.Capabilities.html" translate="no">Plausible.Plugins.API.Capabilities</a> </div> <div class="summary-synopsis"><p>Context module for querying API capabilities</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.CustomProps.html" translate="no">Plausible.Plugins.API.CustomProps</a> </div> <div class="summary-synopsis"><p>Plugins API context module for Custom Props. All high level Custom Props operations should be implemented here.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.Goals.html" translate="no">Plausible.Plugins.API.Goals</a> </div> <div class="summary-synopsis"><p>Plugins API context module for Goals. All high level Goal operations should be implemented here.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.SharedLinks.html" translate="no">Plausible.Plugins.API.SharedLinks</a> </div> <div class="summary-synopsis"><p>Plugins API context module for Shared Links. All high level Shared Links operations should be implemented here.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.Token.html" translate="no">Plausible.Plugins.API.Token</a> </div> <div class="summary-synopsis"><p>Ecto schema for Plugins API Tokens. Tokens are stored hashed and require a description.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Plugins.API.Tokens.html" translate="no">Plausible.Plugins.API.Tokens</a> </div> <div class="summary-synopsis"><p>Context module for Plugins API Tokens. Exposes high-level operation for token-based authentication flows.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.PromEx.html" translate="no">Plausible.PromEx</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.PromEx.Plugins.PlausibleMetrics.html" translate="no">Plausible.PromEx.Plugins.PlausibleMetrics</a> </div> <div class="summary-synopsis"><p>Custom PromEx plugin for instrumenting code within Plausible app.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Props.html" translate="no">Plausible.Props</a> </div> <div class="summary-synopsis"><p>Context module for handling custom event props.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Purge.html" translate="no">Plausible.Purge</a> </div> <div class="summary-synopsis"><p>Deletes data from a site.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.RateLimit.html" translate="no">Plausible.RateLimit</a> </div> <div class="summary-synopsis"><p>Thin wrapper around <a href="https://www.erlang.org/doc/man/ets.html#update_counter-4"><code class="inline">:ets.update_counter/4</code></a> and a clean-up process to act as a rate limiter.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Release.html" translate="no">Plausible.Release</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Repo.html" translate="no">Plausible.Repo</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.S3.html" translate="no">Plausible.S3</a> </div> <div class="summary-synopsis"><p>Helper functions for S3 exports/imports.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Sentry.Client.html" translate="no">Plausible.Sentry.Client</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.SentryFilter.html" translate="no">Plausible.SentryFilter</a> </div> <div class="summary-synopsis"><p>Sentry callbacks for filtering and grouping events</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Session.CacheStore.html" translate="no">Plausible.Session.CacheStore</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Session.Salts.html" translate="no">Plausible.Session.Salts</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.CountryRule.html" translate="no">Plausible.Shield.CountryRule</a> </div> <div class="summary-synopsis"><p>Schema for Country Block List</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.CountryRuleCache.html" translate="no">Plausible.Shield.CountryRuleCache</a> </div> <div class="summary-synopsis"><p>Allows retrieving Country Rules by domain and country code</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.IPRule.html" translate="no">Plausible.Shield.IPRule</a> </div> <div class="summary-synopsis"><p>Schema for IP block list</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.IPRuleCache.html" translate="no">Plausible.Shield.IPRuleCache</a> </div> <div class="summary-synopsis"><p>Allows retrieving IP Rules by domain and IP</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.PageRule.html" translate="no">Plausible.Shield.PageRule</a> </div> <div class="summary-synopsis"><p>Schema for Pages block list</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shield.PageRuleCache.html" translate="no">Plausible.Shield.PageRuleCache</a> </div> <div class="summary-synopsis"><p>Allows retrieving Page Rules by domain</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Shields.html" translate="no">Plausible.Shields</a> </div> <div class="summary-synopsis"><p>Contextual interface for shields.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.html" translate="no">Plausible.Site</a> </div> <div class="summary-synopsis"><p>Site schema</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Cache.html" translate="no">Plausible.Site.Cache</a> </div> <div class="summary-synopsis"><p>The cache allows lookups by both <code class="inline">domain</code> and <code class="inline">domain_changed_from</code> fields - this is to allow traffic from sites whose domains changed within a certain grace period (see: <code class="inline">Plausible.Site.Transfer</code>).</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Domain.html" translate="no">Plausible.Site.Domain</a> </div> <div class="summary-synopsis"><p>Basic interface for domain changes.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.GateKeeper.html" translate="no">Plausible.Site.GateKeeper</a> </div> <div class="summary-synopsis"><p>Thin wrapper around <a href="Plausible.RateLimit.html"><code class="inline">Plausible.RateLimit</code></a> for gate keeping domain-specific events during the ingestion phase. When the site is allowed, gate keeping check returns <code class="inline">:allow</code>, otherwise a <code class="inline">:deny</code> tagged tuple is returned with one of the following policy markers</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.GoogleAuth.html" translate="no">Plausible.Site.GoogleAuth</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.ImportedData.html" translate="no">Plausible.Site.ImportedData</a> </div> <div class="summary-synopsis"><p>Embedded schema for analytics imports</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Membership.html" translate="no">Plausible.Site.Membership</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Memberships.html" translate="no">Plausible.Site.Memberships</a> </div> <div class="summary-synopsis"><p>API for site memberships and invitations</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Memberships.AcceptInvitation.html" translate="no">Plausible.Site.Memberships.AcceptInvitation</a> </div> <div class="summary-synopsis"><p>Service for accepting invitations, including ownership transfers.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Memberships.CreateInvitation.html" translate="no">Plausible.Site.Memberships.CreateInvitation</a> </div> <div class="summary-synopsis"><p>Service for inviting new or existing users to a sites, including ownershhip transfers.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Memberships.RejectInvitation.html" translate="no">Plausible.Site.Memberships.RejectInvitation</a> </div> <div class="summary-synopsis"><p>Service for rejecting invitations.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Memberships.RemoveInvitation.html" translate="no">Plausible.Site.Memberships.RemoveInvitation</a> </div> <div class="summary-synopsis"><p>Service for removing invitations.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.MonthlyReport.html" translate="no">Plausible.Site.MonthlyReport</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.Removal.html" translate="no">Plausible.Site.Removal</a> </div> <div class="summary-synopsis"><p>A site deletion service stub.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.SharedLink.html" translate="no">Plausible.Site.SharedLink</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.SpikeNotification.html" translate="no">Plausible.Site.SpikeNotification</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.UserPreference.html" translate="no">Plausible.Site.UserPreference</a> </div> <div class="summary-synopsis"><p>User-specific site preferences schema</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Site.WeeklyReport.html" translate="no">Plausible.Site.WeeklyReport</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.SiteAdmin.html" translate="no">Plausible.SiteAdmin</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Sites.html" translate="no">Plausible.Sites</a> </div> <div class="summary-synopsis"><p>Sites context functions.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.html" translate="no">Plausible.Stats</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Aggregate.html" translate="no">Plausible.Stats.Aggregate</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Base.html" translate="no">Plausible.Stats.Base</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Breakdown.html" translate="no">Plausible.Stats.Breakdown</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Clickhouse.html" translate="no">Plausible.Stats.Clickhouse</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Compare.html" translate="no">Plausible.Stats.Compare</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Comparisons.html" translate="no">Plausible.Stats.Comparisons</a> </div> <div class="summary-synopsis"><p>This module provides functions for comparing query periods.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.CurrentVisitors.html" translate="no">Plausible.Stats.CurrentVisitors</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.CustomProps.html" translate="no">Plausible.Stats.CustomProps</a> </div> <div class="summary-synopsis"><p>Module for querying user defined 'custom properties'.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.EmailReport.html" translate="no">Plausible.Stats.EmailReport</a> </div> <div class="summary-synopsis"><p>This module exposes a <a href="#get/2"><code class="inline">get/2</code></a> function that returns a map of stats needed for email reports. These stats include</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.FilterSuggestions.html" translate="no">Plausible.Stats.FilterSuggestions</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Filters.html" translate="no">Plausible.Stats.Filters</a> </div> <div class="summary-synopsis"><p>A module for parsing filters used in stat queries.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Filters.Utils.html" translate="no">Plausible.Stats.Filters.Utils</a> </div> <div class="summary-synopsis"><p>Contains utility functions shared between <code class="inline">DashboardFilterParser</code> and <code class="inline">StatsAPIFilterParser</code>.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Fragments.html" translate="no">Plausible.Stats.Fragments</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Funnel.html" translate="no">Plausible.Stats.Funnel</a> </div> <div class="summary-synopsis"><p>Module responsible for funnel evaluation, i.e. building and executing ClickHouse funnel query based on <a href="Plausible.Funnel.html"><code class="inline">Plausible.Funnel</code></a> definition.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Goal.Revenue.html" translate="no">Plausible.Stats.Goal.Revenue</a> </div> <div class="summary-synopsis"><p>Revenue specific functions for the stats scope</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Imported.html" translate="no">Plausible.Stats.Imported</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Interval.html" translate="no">Plausible.Stats.Interval</a> </div> <div class="summary-synopsis"><p>Collection of functions to work with intervals.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Metrics.html" translate="no">Plausible.Stats.Metrics</a> </div> <div class="summary-synopsis"><p>A module listing all available metrics in Plausible.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Props.html" translate="no">Plausible.Stats.Props</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Query.html" translate="no">Plausible.Stats.Query</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Sampling.html" translate="no">Plausible.Stats.Sampling</a> </div> <div class="summary-synopsis"><p>Sampling related functions</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.TableDecider.html" translate="no">Plausible.Stats.TableDecider</a> </div> <div class="summary-synopsis"><p>This module contains logic for deciding which tables need to be queried given a query and metrics, with the purpose of reducing the number of queries and JOINs needed to perform.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Timeseries.html" translate="no">Plausible.Stats.Timeseries</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Stats.Util.html" translate="no">Plausible.Stats.Util</a> </div> <div class="summary-synopsis"><p>Utilities for modifying stat results</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Test.Support.HTML.html" translate="no">Plausible.Test.Support.HTML</a> </div> <div class="summary-synopsis"><p>Floki wrappers to help make assertions about HTML/DOM structures</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Test.Support.HTTPMocker.html" translate="no">Plausible.Test.Support.HTTPMocker</a> </div> <div class="summary-synopsis"><p>Currently only supports post request, it's a drop-in replacement for our exvcr usage that wasn't ever needed (e.g. we had no way to re-record the cassettes anyway).</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.TestUtils.html" translate="no">Plausible.TestUtils</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Themes.html" translate="no">Plausible.Themes</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Timezones.html" translate="no">Plausible.Timezones</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Users.html" translate="no">Plausible.Users</a> </div> <div class="summary-synopsis"><p>User context</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.AcceptTrafficUntil.html" translate="no">Plausible.Workers.AcceptTrafficUntil</a> </div> <div class="summary-synopsis"><p>A worker meant to be run once a day that sends out e-mail notifications to site owners assuming</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.CheckUsage.html" translate="no">Plausible.Workers.CheckUsage</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.CleanInvitations.html" translate="no">Plausible.Workers.CleanInvitations</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.ExpireDomainChangeTransitions.html" translate="no">Plausible.Workers.ExpireDomainChangeTransitions</a> </div> <div class="summary-synopsis"><p>Periodic worker that expires domain change transition period. Old domains are frozen for a given time, so users can still access them before redeploying their scripts and integrations.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.ExportCSV.html" translate="no">Plausible.Workers.ExportCSV</a> </div> <div class="summary-synopsis"><p>Worker for running CSV export jobs.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.ImportAnalytics.html" translate="no">Plausible.Workers.ImportAnalytics</a> </div> <div class="summary-synopsis"><p>Worker for running analytics import jobs.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.LockSites.html" translate="no">Plausible.Workers.LockSites</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.NotifyAnnualRenewal.html" translate="no">Plausible.Workers.NotifyAnnualRenewal</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.RotateSalts.html" translate="no">Plausible.Workers.RotateSalts</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.ScheduleEmailReports.html" translate="no">Plausible.Workers.ScheduleEmailReports</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.SendCheckStatsEmails.html" translate="no">Plausible.Workers.SendCheckStatsEmails</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.SendEmailReport.html" translate="no">Plausible.Workers.SendEmailReport</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.SendSiteSetupEmails.html" translate="no">Plausible.Workers.SendSiteSetupEmails</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.SendTrialNotifications.html" translate="no">Plausible.Workers.SendTrialNotifications</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Plausible.Workers.SpikeNotifier.html" translate="no">Plausible.Workers.SpikeNotifier</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.html" translate="no">PlausibleWeb</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AdminController.html" translate="no">PlausibleWeb.AdminController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.ExternalController.html" translate="no">PlausibleWeb.Api.ExternalController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.ExternalSitesController.html" translate="no">PlausibleWeb.Api.ExternalSitesController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.ExternalStatsController.html" translate="no">PlausibleWeb.Api.ExternalStatsController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.Helpers.html" translate="no">PlausibleWeb.Api.Helpers</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.InternalController.html" translate="no">PlausibleWeb.Api.InternalController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.PaddleController.html" translate="no">PlausibleWeb.Api.PaddleController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Api.StatsController.html" translate="no">PlausibleWeb.Api.StatsController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthController.html" translate="no">PlausibleWeb.AuthController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthPlug.html" translate="no">PlausibleWeb.AuthPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthView.html" translate="no">PlausibleWeb.AuthView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthorizeSiteAccess.html" translate="no">PlausibleWeb.AuthorizeSiteAccess</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthorizeSitesApiPlug.html" translate="no">PlausibleWeb.AuthorizeSitesApiPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AuthorizeStatsApiPlug.html" translate="no">PlausibleWeb.AuthorizeStatsApiPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.AvatarController.html" translate="no">PlausibleWeb.AvatarController</a> </div> <div class="summary-synopsis"><p>This module proxies requests to BASE_URL/avatar/:hash to www.gravatar.com/avatar/:hash.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.BillingController.html" translate="no">PlausibleWeb.BillingController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.BillingView.html" translate="no">PlausibleWeb.BillingView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.CRMAuthPlug.html" translate="no">PlausibleWeb.CRMAuthPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Captcha.html" translate="no">PlausibleWeb.Captcha</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.Billing.PlanBenefits.html" translate="no">PlausibleWeb.Components.Billing.PlanBenefits</a> </div> <div class="summary-synopsis"><p>This module exposes functions for rendering and returning plan benefits for Growth, Business, and Enterprise plans.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.FirstDashboardLaunchBanner.html" translate="no">PlausibleWeb.Components.FirstDashboardLaunchBanner</a> </div> <div class="summary-synopsis"><p>A banner that appears on the first dashboard launch</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.Generic.html" translate="no">PlausibleWeb.Components.Generic</a> </div> <div class="summary-synopsis"><p>Generic reusable components</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.Google.html" translate="no">PlausibleWeb.Components.Google</a> </div> <div class="summary-synopsis"><p>Google-related components</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.Settings.html" translate="no">PlausibleWeb.Components.Settings</a> </div> <div class="summary-synopsis"><p>An umbrella module for the Integrations settings section</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.Site.Feature.html" translate="no">PlausibleWeb.Components.Site.Feature</a> </div> <div class="summary-synopsis"><p>Phoenix Component for rendering a user-facing feature toggle capable of flipping booleans in <a href="Plausible.Site.html"><code class="inline">Plausible.Site</code></a> via the <code class="inline">toggle_feature</code> controller action.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Components.TwoFactor.html" translate="no">PlausibleWeb.Components.TwoFactor</a> </div> <div class="summary-synopsis"><p>Reusable components specific to 2FA</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.ConnCase.html" translate="no">PlausibleWeb.ConnCase</a> </div> <div class="summary-synopsis"><p>This module defines the test case to be used by tests that require setting up a connection.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.ControllerHelpers.html" translate="no">PlausibleWeb.ControllerHelpers</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Controllers.API.Revenue.html" translate="no">PlausibleWeb.Controllers.API.Revenue</a> </div> <div class="summary-synopsis"><p>Revenue specific functions for the API scope</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Dogfood.html" translate="no">PlausibleWeb.Dogfood</a> </div> <div class="summary-synopsis"><p>Plausible tracking itself functions</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Email.html" translate="no">PlausibleWeb.Email</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.EmailView.html" translate="no">PlausibleWeb.EmailView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Endpoint.html" translate="no">PlausibleWeb.Endpoint</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.ErrorHelpers.html" translate="no">PlausibleWeb.ErrorHelpers</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.ErrorReportController.html" translate="no">PlausibleWeb.ErrorReportController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.ErrorView.html" translate="no">PlausibleWeb.ErrorView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Favicon.html" translate="no">PlausibleWeb.Favicon</a> </div> <div class="summary-synopsis"><p>A Plug that fetches favicon images from DuckDuckGo and returns them to the Plausible frontend.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.FirstLaunchPlug.html" translate="no">PlausibleWeb.FirstLaunchPlug</a> </div> <div class="summary-synopsis"><p>Redirects first-launch users to registration page.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.FirstLaunchPlug.Test.html" translate="no">PlausibleWeb.FirstLaunchPlug.Test</a> </div> <div class="summary-synopsis"><p>Test helper for setup blocks allowing to skip the plug processing</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.FormHelpers.html" translate="no">PlausibleWeb.FormHelpers</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.GoogleAnalyticsController.html" translate="no">PlausibleWeb.GoogleAnalyticsController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.GoogleAnalyticsView.html" translate="no">PlausibleWeb.GoogleAnalyticsView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.InvitationController.html" translate="no">PlausibleWeb.InvitationController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.LastSeenPlug.html" translate="no">PlausibleWeb.LastSeenPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.LayoutView.html" translate="no">PlausibleWeb.LayoutView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.LayoutView.JWT.html" translate="no">PlausibleWeb.LayoutView.JWT</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.CSVImport.html" translate="no">PlausibleWeb.Live.CSVImport</a> </div> <div class="summary-synopsis"><p>LiveView allowing uploading CSVs for imported tables to S3</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.ChoosePlan.html" translate="no">PlausibleWeb.Live.ChoosePlan</a> </div> <div class="summary-synopsis"><p>LiveView for upgrading to a plan, or changing an existing plan.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.ComboBox.html" translate="no">PlausibleWeb.Live.Components.ComboBox</a> </div> <div class="summary-synopsis"><p>Phoenix LiveComponent for a combobox UI element with search and selection functionality.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.ComboBox.StaticSearch.html" translate="no">PlausibleWeb.Live.Components.ComboBox.StaticSearch</a> </div> <div class="summary-synopsis"><p>Default suggestion engine for the <code class="inline">ComboBox</code> component.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.Form.html" translate="no">PlausibleWeb.Live.Components.Form</a> </div> <div class="summary-synopsis"><p>Generic components stolen from mix phx.new templates</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.Modal.html" translate="no">PlausibleWeb.Live.Components.Modal</a> </div> <div class="summary-synopsis"><p>LiveView implementation of modal component.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.Pagination.html" translate="no">PlausibleWeb.Live.Components.Pagination</a> </div> <div class="summary-synopsis"><p>Pagination components for LiveViews.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Components.Visitors.html" translate="no">PlausibleWeb.Live.Components.Visitors</a> </div> <div class="summary-synopsis"><p>Component rendering mini-graph of site's visitors over the last 24 hours.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Flash.html" translate="no">PlausibleWeb.Live.Flash</a> </div> <div class="summary-synopsis"><p>Flash component for LiveViews - works also when embedded within dead views</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.FunnelSettings.html" translate="no">PlausibleWeb.Live.FunnelSettings</a> </div> <div class="summary-synopsis"><p>LiveView allowing listing, creating and deleting funnels.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.FunnelSettings.Form.html" translate="no">PlausibleWeb.Live.FunnelSettings.Form</a> </div> <div class="summary-synopsis"><p>Phoenix LiveComponent that renders a form used for setting up funnels. Makes use of dynamically placed <code class="inline">PlausibleWeb.Live.FunnelSettings.ComboBox</code> components to allow building searchable funnel definitions out of list of goals available.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.FunnelSettings.List.html" translate="no">PlausibleWeb.Live.FunnelSettings.List</a> </div> <div class="summary-synopsis"><p>Phoenix LiveComponent module that renders a list of funnels with their names and the number of steps they have.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.GoalSettings.html" translate="no">PlausibleWeb.Live.GoalSettings</a> </div> <div class="summary-synopsis"><p>LiveView allowing listing, creating and deleting goals.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.GoalSettings.Form.html" translate="no">PlausibleWeb.Live.GoalSettings.Form</a> </div> <div class="summary-synopsis"><p>Live view for the goal creation form</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.GoalSettings.List.html" translate="no">PlausibleWeb.Live.GoalSettings.List</a> </div> <div class="summary-synopsis"><p>Phoenix LiveComponent module that renders a list of goals</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.ImportsExportsSettings.html" translate="no">PlausibleWeb.Live.ImportsExportsSettings</a> </div> <div class="summary-synopsis"><p>LiveView allowing listing and deleting imports.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Plugins.API.Settings.html" translate="no">PlausibleWeb.Live.Plugins.API.Settings</a> </div> <div class="summary-synopsis"><p>LiveView allowing listing, creating and revoking Plugins API tokens.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Plugins.API.TokenForm.html" translate="no">PlausibleWeb.Live.Plugins.API.TokenForm</a> </div> <div class="summary-synopsis"><p>Live view for the goal creation form</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.PropsSettings.html" translate="no">PlausibleWeb.Live.PropsSettings</a> </div> <div class="summary-synopsis"><p>LiveView allowing listing, allowing and disallowing custom event properties.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.PropsSettings.Form.html" translate="no">PlausibleWeb.Live.PropsSettings.Form</a> </div> <div class="summary-synopsis"><p>Live view for the custom props creation form</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.PropsSettings.List.html" translate="no">PlausibleWeb.Live.PropsSettings.List</a> </div> <div class="summary-synopsis"><p>Phoenix LiveComponent module that renders a list of custom properties</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.RegisterForm.html" translate="no">PlausibleWeb.Live.RegisterForm</a> </div> <div class="summary-synopsis"><p>LiveView for registration form.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.ResetPasswordForm.html" translate="no">PlausibleWeb.Live.ResetPasswordForm</a> </div> <div class="summary-synopsis"><p>LiveView for password reset form.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.SentryContext.html" translate="no">PlausibleWeb.Live.SentryContext</a> </div> <div class="summary-synopsis"><p>This module tries to supply LiveViews with some common Sentry context (without it, there is practically none).</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.Countries.html" translate="no">PlausibleWeb.Live.Shields.Countries</a> </div> <div class="summary-synopsis"><p>LiveView for IP Addresses Shield</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.CountryRules.html" translate="no">PlausibleWeb.Live.Shields.CountryRules</a> </div> <div class="summary-synopsis"><p>LiveView allowing Country Rules management</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.IPAddresses.html" translate="no">PlausibleWeb.Live.Shields.IPAddresses</a> </div> <div class="summary-synopsis"><p>LiveView for IP Addresses Shield</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.IPRules.html" translate="no">PlausibleWeb.Live.Shields.IPRules</a> </div> <div class="summary-synopsis"><p>LiveView allowing IP Rules management</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.PageRules.html" translate="no">PlausibleWeb.Live.Shields.PageRules</a> </div> <div class="summary-synopsis"><p>LiveView allowing page Rules management</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Shields.Pages.html" translate="no">PlausibleWeb.Live.Shields.Pages</a> </div> <div class="summary-synopsis"><p>LiveView for IP Addresses Shield</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Live.Sites.html" translate="no">PlausibleWeb.Live.Sites</a> </div> <div class="summary-synopsis"><p>LiveView for sites index.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.MJML.StatsReport.html" translate="no">PlausibleWeb.MJML.StatsReport</a> </div> <div class="summary-synopsis"><p>MJML rendered for the weekly or monthly report e-mail</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.PageController.html" translate="no">PlausibleWeb.PageController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.PageView.html" translate="no">PlausibleWeb.PageView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Controllers.Capabilities.html" translate="no">PlausibleWeb.Plugins.API.Controllers.Capabilities</a> </div> <div class="summary-synopsis"><p>Controller for Plugins API Capabilities - doesn't enforce authentication, serves as a comprehensive health check</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Controllers.CustomProps.html" translate="no">PlausibleWeb.Plugins.API.Controllers.CustomProps</a> </div> <div class="summary-synopsis"><p>Controller for the CustomProp resource under Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Controllers.Goals.html" translate="no">PlausibleWeb.Plugins.API.Controllers.Goals</a> </div> <div class="summary-synopsis"><p>Controller for the Goal resource under Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Controllers.SharedLinks.html" translate="no">PlausibleWeb.Plugins.API.Controllers.SharedLinks</a> </div> <div class="summary-synopsis"><p>Controller for the Shared Link resource under Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Errors.html" translate="no">PlausibleWeb.Plugins.API.Errors</a> </div> <div class="summary-synopsis"><p>Common responses for Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Capabilities.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Capabilities</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Capabilities</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.CustomProp.html" translate="no">PlausibleWeb.Plugins.API.Schemas.CustomProp</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Goal</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.CustomProp.DisableRequest.html" translate="no">PlausibleWeb.Plugins.API.Schemas.CustomProp.DisableRequest</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Custom Property disable request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.CustomProp.EnableRequest.html" translate="no">PlausibleWeb.Plugins.API.Schemas.CustomProp.EnableRequest</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Custom Property creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.CustomProp.ListResponse.html" translate="no">PlausibleWeb.Plugins.API.Schemas.CustomProp.ListResponse</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for SharedLink list response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Error.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Error</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for an error included in a response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Goal</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Goal creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Custom Event Goal creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Pageview Goal creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Custom Event Goal creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Custom Event Goal object</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.DeleteBulkRequest.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.DeleteBulkRequest</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for bulk Goal deletion request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Goals list response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.Pageview.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.Pageview</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Pageview Goal object</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.Revenue.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.Revenue</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for Revenue Goal object</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Goal.Type.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Goal.Type</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for common Goal Type</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Link.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Link</a> </div> <div class="summary-synopsis"><p>OpenAPI Link schema</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.NotFound.html" translate="no">PlausibleWeb.Plugins.API.Schemas.NotFound</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for a generic 404 response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.PaginationMetadata.html" translate="no">PlausibleWeb.Plugins.API.Schemas.PaginationMetadata</a> </div> <div class="summary-synopsis"><p>Pagination metadata OpenAPI schema</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.PaymentRequired.html" translate="no">PlausibleWeb.Plugins.API.Schemas.PaymentRequired</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for a generic 402 response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.SharedLink.html" translate="no">PlausibleWeb.Plugins.API.Schemas.SharedLink</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for SharedLink object</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest.html" translate="no">PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for SharedLink creation request</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse.html" translate="no">PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for SharedLink list response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.Unauthorized.html" translate="no">PlausibleWeb.Plugins.API.Schemas.Unauthorized</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for a generic 401 response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity.html" translate="no">PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity</a> </div> <div class="summary-synopsis"><p>OpenAPI schema for a generic 422 response</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Spec.html" translate="no">PlausibleWeb.Plugins.API.Spec</a> </div> <div class="summary-synopsis"><p>OpenAPI specification for the Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.Capabilities.html" translate="no">PlausibleWeb.Plugins.API.Views.Capabilities</a> </div> <div class="summary-synopsis"><p>View for rendering Capabilities on the Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.CustomProp.html" translate="no">PlausibleWeb.Plugins.API.Views.CustomProp</a> </div> <div class="summary-synopsis"><p>View for rendering Custom Props in the Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.Error.html" translate="no">PlausibleWeb.Plugins.API.Views.Error</a> </div> <div class="summary-synopsis"><p>View for rendering Plugins REST API errors</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.Goal.html" translate="no">PlausibleWeb.Plugins.API.Views.Goal</a> </div> <div class="summary-synopsis"><p>View for rendering Goals in the Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.Pagination.html" translate="no">PlausibleWeb.Plugins.API.Views.Pagination</a> </div> <div class="summary-synopsis"><p>A view capable of rendering pagination metadata included in responses containing lists of objects.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugins.API.Views.SharedLink.html" translate="no">PlausibleWeb.Plugins.API.Views.SharedLink</a> </div> <div class="summary-synopsis"><p>View for rendering Shared Links in the Plugins API</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.PluginsAPICase.html" translate="no">PlausibleWeb.PluginsAPICase</a> </div> <div class="summary-synopsis"><p>This module defines the test case to be used by tests that require setting up a Plugins API connection.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugs.AuthorizePluginsAPI.html" translate="no">PlausibleWeb.Plugs.AuthorizePluginsAPI</a> </div> <div class="summary-synopsis"><p>Plug for Basic HTTP Authentication using Plugins API Tokens lookup.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugs.ErrorHandler.html" translate="no">PlausibleWeb.Plugs.ErrorHandler</a> </div> <div class="summary-synopsis"><p> A thin macro wrapper around Plug.ErrorHandler that adds Sentry context containing a readable support hash presented to the users. To be used in the user-facing APIs, so that we don't leak internal server errors.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugs.MaybeDisableRegistration.html" translate="no">PlausibleWeb.Plugs.MaybeDisableRegistration</a> </div> <div class="summary-synopsis"><p>Plug toggling registration according to selfhosted state.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Plugs.NoRobots.html" translate="no">PlausibleWeb.Plugs.NoRobots</a> </div> <div class="summary-synopsis"><p>Rejects bot requests by any means available.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.RefInspector.html" translate="no">PlausibleWeb.RefInspector</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.RemoteIP.html" translate="no">PlausibleWeb.RemoteIP</a> </div> <div class="summary-synopsis"><p>Implements the strategy of retrieving client's remote IP</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.RequireAccountPlug.html" translate="no">PlausibleWeb.RequireAccountPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.RequireLoggedOutPlug.html" translate="no">PlausibleWeb.RequireLoggedOutPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Router.html" translate="no">PlausibleWeb.Router</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.SessionTimeoutPlug.html" translate="no">PlausibleWeb.SessionTimeoutPlug</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Site.MembershipController.html" translate="no">PlausibleWeb.Site.MembershipController</a> </div> <div class="summary-synopsis"><p> This controller deals with user management via the UI in Site Settings -> People. It's important to enforce permissions in this controller.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Site.MembershipView.html" translate="no">PlausibleWeb.Site.MembershipView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.SiteController.html" translate="no">PlausibleWeb.SiteController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.SiteView.html" translate="no">PlausibleWeb.SiteView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.StatsController.html" translate="no">PlausibleWeb.StatsController</a> </div> <div class="summary-synopsis"><p>This controller is responsible for rendering stats dashboards.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.StatsView.html" translate="no">PlausibleWeb.StatsView</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.Tracker.html" translate="no">PlausibleWeb.Tracker</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.TwoFactor.Session.html" translate="no">PlausibleWeb.TwoFactor.Session</a> </div> <div class="summary-synopsis"><p>Functions for managing session data related to Two-Factor Authentication.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.UnsubscribeController.html" translate="no">PlausibleWeb.UnsubscribeController</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="PlausibleWeb.UnsubscribeView.html" translate="no">PlausibleWeb.UnsubscribeView</a> </div> </div> </div> </section> <section class="details-list"> <h2 id="mix-tasks" class="section-heading"> <a href="#mix-tasks" class="hover-link"> <i class="ri-link-m" aria-hidden="true"></i> </a> <span class="text">Mix Tasks</span> </h2> <div class="summary"> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.CancelSubscription.html" translate="no">mix cancel_subscription</a> </div> <div class="summary-synopsis"><p>This task is meant to replicate the behavior of cancelling a subscription. On production, this action is initiated by a Paddle webhook. Currently, only the subscription status is changed with that action.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.CleanClickhouse.html" translate="no">mix clean_clickhouse</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.CreateFreeSubscription.html" translate="no">mix create_free_subscription</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.DownloadCountryDatabase.html" translate="no">mix download_country_database</a> </div> <div class="summary-synopsis"><p>This task downloads the Country Lite database from DB-IP for self-hosted or development purposes. Plausible Cloud runs a paid version of DB-IP with more detailed geolocation data.</p></div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.GenerateReferrerFavicons.html" translate="no">mix generate_referrer_favicons</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.PullSandboxSubscription.html" translate="no">mix pull_sandbox_subscription</a> </div> </div> <div class="summary-row"> <div class="summary-signature"> <a href="Mix.Tasks.SendPageview.html" translate="no">mix send_pageview</a> </div> <div class="summary-synopsis"><p>It's often necessary to generate fake events for development and testing purposes. This Mix Task provides a quick and easy way to generate a pageview or custom event, either in your development environment or a remote Plausible instance.</p></div> </div> </div> </section> <div class="bottom-actions"> <div class="bottom-actions-item"> </div> <div class="bottom-actions-item"> <a href="readme.html" class="bottom-actions-button" rel="next"> <span class="subheader"> Next Page → </span> <span class="title"> Introduction </span> </a> </div> </div> <footer class="footer"> <p> <span class="line"> <button class="a-main footer-button display-quick-switch" title="Search HexDocs packages"> Search HexDocs </button> <a href="Plausible.epub" title="ePub version"> Download ePub version </a> </span> </p> <p class="built-using"> Built using <a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener" translate="no">ExDoc</a> (v0.31.1) for the <a href="https://elixir-lang.org" title="Elixir" target="_blank" translate="no">Elixir programming language</a> </p> </footer> </div> </div> </main> </div> <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script> <script>mermaid.initialize({startOnLoad: true})</script> </body> </html>