{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "site_id": { "type": "string", "description": "Domain of site to query" }, "metrics": { "type": "array", "items": { "$ref": "#/definitions/metric" }, "minItems": 1, "uniqueItems": true, "description": "List of metrics to query" }, "date_range": { "oneOf": [ { "$ref": "#/definitions/date_range_shorthand" }, { "$ref": "#/definitions/date_time_range" }, { "$ref": "#/definitions/date_range" } ], "description": "Date range to query" }, "dimensions": { "type": "array", "items": { "$ref": "#/definitions/dimensions" }, "description": "What to group the results by. Same as `property` in Plausible API v1", "uniqueItems": true }, "filters": { "type": "array", "items": { "$ref": "#/definitions/filter_tree" }, "description": "How to drill into your data" }, "order_by": { "type": "array", "items": { "$ref": "#/definitions/order_by_entry" }, "description": "How to order query results" }, "include": { "type": "object", "additionalProperties": false, "properties": { "time_labels": { "type": "boolean", "markdownDescription": "Requires a `time` dimension. If enabled, returns each time bucket under `meta.time_labels`" }, "imports": { "type": "boolean" }, "total_rows": { "type": "boolean", "default": false, "description": "If set, returns the total number of result rows rows before pagination under `meta.total_rows`" }, "trim_relative_date_range": { "type": "boolean", "default": false, "description": "If set and using `day`, `month` or `year` date_ranges, the query will be trimmed to the current date" } } }, "pagination": { "$ref": "#/definitions/pagination" } }, "required": ["site_id", "metrics", "date_range"], "additionalProperties": false, "definitions": { "date_time_range": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "markdownDescription": "A list of two ISO8601 datetimes.", "examples": [["2024-01-01T00:00:00+03:00", "2024-01-02T12:00:00+03:00"]], "items": [ { "type": "string", "format": "date-time" }, { "type": "string", "format": "date-time" } ] }, "date_range": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "markdownDescription": "A list of two ISO8601 dates.", "examples": [["2024-09-01", "2024-09-30"]], "items": [ { "type": "string", "format": "date" }, { "type": "string", "format": "date" } ] }, "date_range_shorthand": { "anyOf": [ { "const": "all", "description": "Since the start of stats in Plausible" }, { "const": "day", "description": "Last day" }, { "const": "24h", "description": "Last 24 hours (rolling window from now-24h to now)" }, { "const": "7d", "description": "Last 7 days relative to today" }, { "const": "28d", "description": "Last 28 days relative to today" }, { "const": "30d", "description": "Last 30 days relative to today" }, { "const": "91d", "description": "Last 91 days relative to today" }, { "const": "month", "description": "Current calendar month" }, { "const": "6mo", "description": "Last 6 calendar months relative to this month" }, { "const": "12mo", "description": "Last 12 calendar months relative to this month" }, { "const": "year", "description": "Since the start of this year" }, { "type": "string", "pattern": "^\\d+d$", "description": "Last n days relative to today" }, { "type": "string", "pattern": "^\\d+mo$", "description": "Last n months relative to this month" } ] }, "comparison_mode": { "oneOf": [ { "const": "previous_period", "description": "Comparison date range shortcut - shift back the original query date range by its length" }, { "const": "year_over_year", "description": "Comparison date range shortcut - shift back the original query date range by a year" } ] }, "metric": { "oneOf": [ { "const": "visitors", "description": "Metric counting the number of unique visitors" }, { "const": "visits", "description": "Metric counting the number of visits/sessions" }, { "const": "pageviews", "markdownDescription": "Metric counting the number of `pageview` events" }, { "const": "views_per_visit", "description": "Metric for the number of pageviews divided by the number of visits. Returns a floating point number." }, { "const": "bounce_rate", "description": "Bounce rate percentage" }, { "const": "visit_duration", "description": "Visit duration in seconds" }, { "const": "events", "markdownDescription": "The number of events (pageviews + custom events). When filtering by a goal, this metric corresponds to `Total Conversions` in the dashboard." }, { "const": "percentage", "markdownDescription": "The percentage of visitors of total who fall into this category. Requires `dimensions` not to be empty" }, { "const": "conversion_rate", "markdownDescription": "The percentage of visitors who completed the goal. Requires: `dimension` list passed, an `event:goal` filter or `event:goal` dimension" }, { "const": "group_conversion_rate", "markdownDescription": "The percentage of visitors who completed the goal with the same dimension. Requires: dimension list passed, an `event:goal` filter or `event:goal` dimension" }, { "const": "time_on_page", "markdownDescription": "Average time spent on a given page in a visit in seconds. Requires: `event:page` filter or dimension." }, { "const": "total_revenue", "markdownDescription": "Total revenue", "$comment": "only :ee" }, { "const": "average_revenue", "markdownDescription": "Average revenue", "$comment": "only :ee" }, { "const": "scroll_depth", "markdownDescription": "Average page scroll depth. Requires: `event:page` filter or `event:page` dimension" } ] }, "simple_filter_dimensions": { "type": "string", "enum": [ "event:name", "event:page", "event:hostname", "visit:source", "visit:channel", "visit:referrer", "visit:utm_medium", "visit:utm_source", "visit:utm_campaign", "visit:utm_content", "visit:utm_term", "visit:screen", "visit:device", "visit:browser", "visit:browser_version", "visit:os", "visit:os_version", "visit:country", "visit:region", "visit:city", "visit:country_name", "visit:region_name", "visit:city_name", "visit:entry_page", "visit:exit_page", "visit:entry_page_hostname", "visit:exit_page_hostname" ] }, "custom_property_filter_dimensions": { "type": "string", "tsType": "`event:props:${string}`", "pattern": "^event:props:.+", "markdownDescription": "Custom property. See [documentation](https://plausible.io/docs/custom-props/introduction) for more information", "examples": ["event:props:url", "event:props:path"] }, "goal_dimension": { "const": "event:goal", "markdownDescription": "Goal dimension" }, "time_dimensions": { "oneOf": [ { "type": "string", "enum": ["time", "time:month", "time:week", "time:day", "time:hour"] } ] }, "dimensions": { "oneOf": [ { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" }, { "$ref": "#/definitions/goal_dimension" }, { "$ref": "#/definitions/time_dimensions" } ] }, "clauses": { "type": "array", "minItems": 1, "items": { "type": ["string", "integer"] } }, "filter_operation_wildcard": { "type": "string", "enum": ["matches_wildcard", "matches_wildcard_not"], "description": "filter operation" }, "filter_operation_regex": { "type": "string", "enum": ["matches", "matches_not"], "description": "filter operation" }, "filter_operation_without_goals": { "type": "string", "enum": ["is_not", "contains_not"], "description": "filter operation" }, "filter_with_pattern": { "type": "array", "additionalItems": false, "minItems": 3, "maxItems": 3, "items": [ { "$ref": "#/definitions/filter_operation_regex" }, { "oneOf": [ { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" } ] }, { "$ref": "#/definitions/clauses" } ] }, "filter_without_goals": { "type": "array", "additionalItems": false, "minItems": 3, "maxItems": 4, "items": [ { "$ref": "#/definitions/filter_operation_without_goals" }, { "oneOf": [ { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" } ] }, { "$ref": "#/definitions/clauses" }, { "type": "object", "additionalProperties": false, "properties": { "case_sensitive": { "type": "boolean", "default": true } } } ] }, "filter_with_is": { "type": "array", "additionalItems": false, "minItems": 3, "maxItems": 4, "items": [ { "const": "is", "description": "filter operation" }, { "oneOf": [ { "$ref": "#/definitions/goal_dimension" }, { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" }, { "const": "segment" } ] }, { "$ref": "#/definitions/clauses" }, { "type": "object", "additionalProperties": false, "properties": { "case_sensitive": { "type": "boolean", "default": true } } } ] }, "filter_with_contains": { "type": "array", "additionalItems": false, "minItems": 3, "maxItems": 4, "items": [ { "const": "contains", "description": "filter operation" }, { "oneOf": [ { "$ref": "#/definitions/goal_dimension" }, { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" } ] }, { "$ref": "#/definitions/clauses" }, { "type": "object", "additionalProperties": false, "properties": { "case_sensitive": { "type": "boolean", "default": true } } } ] }, "filter_entry": { "oneOf": [ { "$ref": "#/definitions/filter_without_goals" }, { "$ref": "#/definitions/filter_with_is" }, { "$ref": "#/definitions/filter_with_contains" }, { "$ref": "#/definitions/filter_with_pattern" } ] }, "filter_tree": { "oneOf": [ { "$ref": "#/definitions/filter_entry" }, { "$ref": "#/definitions/filter_and_or" }, { "$ref": "#/definitions/filter_not" }, { "$ref": "#/definitions/filter_has_done" } ] }, "filter_not": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "items": [ { "type": "string", "enum": ["not"] }, { "$ref": "#/definitions/filter_tree" } ] }, "filter_and_or": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "items": [ { "type": "string", "enum": ["and", "or"] }, { "type": "array", "items": { "$ref": "#/definitions/filter_tree" }, "minItems": 1 } ] }, "filter_has_done": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "items": [ { "type": "string", "enum": ["has_done", "has_not_done"] }, { "$ref": "#/definitions/filter_tree" } ] }, "pagination": { "type": "object", "additionalProperties": false, "properties": { "limit": { "type": "integer", "minimum": 1, "maximum": 10000, "description": "Number of rows to limit result to." }, "offset": { "type": "integer", "minimum": 0, "default": 0, "description": "Pagination offset." } } }, "sort_direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sorting order" }, "order_by_entry": { "type": "array", "additionalItems": false, "minItems": 2, "maxItems": 2, "items": [ { "oneOf": [ { "$ref": "#/definitions/metric" }, { "$ref": "#/definitions/simple_filter_dimensions" }, { "$ref": "#/definitions/custom_property_filter_dimensions" }, { "$ref": "#/definitions/time_dimensions" } ], "markdownDescription": "Metric or dimension to order by. Must be listed under `metrics` or `dimensions`" }, { "$ref": "#/definitions/sort_direction" } ] } } }