{
  "openapi": "3.0.0",
  "info": {
    "title": "Fathom Analytics API",
    "version": "v1",
    "description": "Early‑access REST API for Fathom Analytics (site, event, aggregation, account management)"
  },
  "servers": [
    {
      "url": "https://api.usefathom.com/v1",
      "description": "Fathom API v1"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "Account": {
        "type": "object",
        "properties": {
          "id": { "type": "integer" },
          "object": { "type": "string", "enum": ["account"] },
          "name": { "type": "string", "example": "Homer Simpson" },
          "email": { "type": "string", "format": "email", "example": "homer@simpsonsfamily.doh"}
        },
        "required": ["id", "object", "name", "email"]
      },
      "Site": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "example": "CDBUGS"},
          "object": { "type": "string", "enum": ["site"] },
          "name": { "type": "string", "example": "Bugs Bunny Portfolio" },
          "sharing": { "type": "string", "enum": ["none", "private", "public"] },
          "created_at": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "object", "name", "sharing", "created_at"]
      },
      "SiteList": {
        "type": "object",
        "properties": {
          "object": { "type": "string", "enum": ["list"] },
          "url": { "type": "string", "enum": ["/v1/sites"] },
          "has_more": { "type": "boolean" },
          "data": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/Site" }
          }
        },
        "required": ["object", "url", "has_more", "data"]
      },
      "Event": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "example": "signed-up-to-newsletter" },
          "object": { "type": "string", "enum": ["event"] },
          "name": { "type": "string", "example": "Signed up to newsletter" },
          "site_id": { "type": "string", "example": "CDBUGS" },
          "created_at": { "type": "string", "format": "date-time" }
        },
        "required": ["id", "object", "name", "site_id", "created_at"]
      },
      "EventList": {
        "type": "object",
        "properties": {
          "object": { "type": "string", "enum": ["list"] },
          "url": { "type": "string", "example": "/v1/sites/CDBUGS/events" },
          "has_more": { "type": "boolean" },
          "data": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/Event" }
          }
        },
        "required": ["object", "url", "has_more", "data"]
      },
      "Milestone": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "example": "ddc9cdff-ab83-41fa-96c6-dfb276a862e7" },
          "object": { "type": "string", "enum": ["milestone"] },
          "name": { "type": "string", "example": "Website redesign" },
          "milestone_date": { "$ref": "#/components/schemas/DateTimeUTCTimezone" },
          "created_at": { "$ref": "#/components/schemas/DateTimeUTCTimezone" },
          "updated_at": { "$ref": "#/components/schemas/DateTimeUTCTimezone" }
        },
        "required": ["id", "object", "name", "milestone_date", "created_at", "updated_at"]
      },
      "MilestoneList": {
        "type": "object",
        "properties": {
          "object": { "type": "string", "enum": ["list"] },
          "url": { "type": "string", "example": "/v1/sites/CDBUGS/milestones" },
          "has_more": { "type": "boolean" },
          "data": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/Milestone" }
          }
        },
        "required": ["object", "url", "has_more", "data"]
      },
      "Aggregation": {
        "type": "object",
        "properties": {
          "object": { "type": "string", "enum": ["list"] },
          "url": { "type": "string" },
          "has_more": { "type": "boolean" },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "browser": {
                  "type": "string",
                  "example": "Chrome"
                },
                "device_type": {
                  "type": "string",
                  "example": "Desktop"
                },
                "pageviews": {
                  "type": "integer",
                  "example": 30000,
                  "description": "Number of pageviews"
                }
              }
            }
          }
        },
        "required": ["object", "url", "has_more", "data"]
      },
      "CurrentVisitors": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer"
          },
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pathname": { "type": "string" },
                "hostname": { "type": "string" },
                "total": { "type": "integer" }
              },
              "required": ["pathname", "hostname", "total"]
            }
          },
          "referrers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "referrer_hostname": { "type": "string" },
                "referrer_pathname": { "type": "string" },
                "total": { "type": "integer" }
              },
              "required": ["referrer_hostname", "referrer_pathname", "total"]
            }
          }
        }
      },
      "DateTimeUTCTimezone": {
        "type": "string",
        "description": "Datetime in format `YYYY-MM-DD HH:MM:SS` (UTC timezone).",
        "example": "2023-11-07 05:31:56",
        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$"
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "paths": {
    "/account": {
      "get": {
        "summary": "Get account info",
        "responses": {
          "200": {
            "description": "Account details",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Account" }
              }
            }
          }
        }
      }
    },
    "/sites": {
      "get": {
        "summary": "List sites",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 10, "minimum": 1, "maximum": 100 },
            "description": "A limit on the number of objects to be returned, between 1 and 100."
          },
          {
            "name": "starting_after",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. starting_after is an object ID. For example, if you requested 10 site objects, and the last item in the list was ABCDEF, you would send your next request with starting_after=ABCDEF."
          },
          {
            "name": "ending_before",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. ending_before is an object ID. For example, if you requested 10 site objects, and the first item in the list was ABCDEF, you would send your next request with ending_before=ABCDEF."
          }
        ],
        "responses": {
          "200": {
            "description": "List of sites",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/SiteList" } }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new site",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the website. Any string (up to 255 characters) is acceptable, and it doesn't have to match the website URL"
                  },
                  "sharing": {
                    "type": "string",
                    "enum": ["none", "private", "public"],
                    "description": "The sharing configuration. Supported values are: none, private or public."
                  },
                  "share_password": {
                    "type": "string",
                    "description": "When sharing is set to private, you must also send a password to access the site with."
                  }
                },
                "required": ["name"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Site created",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/Site" } }
            }
          }
        }
      }
    },
    "/sites/{site_id}": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
            "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        }
      ],
      "get": {
        "summary": "Get a site",
        "responses": {
          "200": {
            "description": "A site object",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Site" }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Update a site",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the website. Any string (up to 255 characters) is acceptable, and it doesn't have to match the website URL"
                  },
                  "sharing": {
                    "type": "string",
                    "enum": ["none", "private", "public"],
                    "description": "The sharing configuration. Supported values are: none, private or public."
                  },
                  "share_password": {
                    "type": "string",
                    "description": "When sharing is set to private, you must also send a password to access the site with."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated site",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Site" }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a site",
        "responses": {
          "200": {
            "description": "Updated site",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": { "type": "string", "example": "CDBUGS"},
                    "object": { "type": "string", "enum": ["site"] },
                    "deleted": { "type": "boolean", "example": true }
                  },
                  "required": ["id", "object", "deleted"]
                }
              }
            }
          }
        }
      }
    },
    "/sites/{site_id}/data": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        }
      ],
      "delete": {
        "summary": "Wipe a site",
        "responses": {
          "200": {
            "description": "A site object",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Site" }
              }
            }
          }
        }
      }
    },
    "/sites/{site_id}/events": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        }
      ],
      "get": {
        "summary": "List events",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 10, "minimum": 1, "maximum": 100 },
            "description": "A limit on the number of objects to be returned, between 1 and 100."
          },
          {
            "name": "starting_after",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. starting_after is an object ID. For example, if you requested 10 site objects, and the last item in the list was ABCDEF, you would send your next request with starting_after=ABCDEF."
          },
          {
            "name": "ending_before",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. ending_before is an object ID. For example, if you requested 10 site objects, and the first item in the list was ABCDEF, you would send your next request with ending_before=ABCDEF."
          }
        ],
        "responses": {
          "200": {
            "description": "List of events",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/EventList" } }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new event",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the event (up to 255 characters)"
                  }
                },
                "required": ["name"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Event created",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/Event" } }
            }
          }
        }
      }
    },
    "/sites/{site_id}/events/{event_id}": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site that the event belongs to. This is the same string you use in the tracking code."
        },
        {
          "name": "event_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the event you wish to retrieve or modify."
        }
      ],
      "get": {
        "summary": "Get an event",
        "responses": {
          "200": {
            "description": "An event object",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Event" }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Update an event",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the event (up to 255 characters)"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated event",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Event" }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an event",
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Event" }
              }
            }
          }
        }
      }
    },
    "/sites/{site_id}/milestones": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        }
      ],
      "get": {
        "summary": "List milestones",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer", "default": 10, "minimum": 1, "maximum": 100 },
            "description": "A limit on the number of objects to be returned, between 1 and 100."
          },
          {
            "name": "starting_after",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. starting_after is an object ID. For example, if you requested 10 site objects, and the last item in the list was ABCDEF, you would send your next request with starting_after=ABCDEF."
          },
          {
            "name": "ending_before",
            "in": "query",
            "schema": { "type": "string" },
            "description": "A cursor for pagination/navigation. ending_before is an object ID. For example, if you requested 10 site objects, and the first item in the list was ABCDEF, you would send your next request with ending_before=ABCDEF."
          }
        ],
        "responses": {
          "200": {
            "description": "List of milestones",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/MilestoneList" } }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new milestone",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the milestone.",
                    "maxLength": 255
                  },
                  "milestone_date": {
                    "type": "string",
                    "description": "The date of the milestone in format `YYYY-MM-DD` (UTC timezone). The date must be before today's date.",
                    "example": "2025-04-06"
                  }
                },
                "required": ["name", "milestone_date"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/Milestone" } }
            }
          }
        }
      }
    },
    "/sites/{site_id}/milestones/{milestone_id}": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        },
        {
          "name": "milestone_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the milestone.",
          "example": "ddc9cdff-ab83-41fa-96c6-dfb276a862e7"
        }
      ],
      "get": {
        "summary": "Get a milestone",
        "responses": {
          "200": {
            "description": "A milestone object",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Milestone" }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Update a milestone",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the milestone.",
                    "maxLength": 255
                  },
                  "milestone_date": {
                    "type": "string",
                    "description": "The date of the milestone in format `YYYY-MM-DD` (no timezone). The date must be before today's date.",
                    "example": "2025-04-06"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated milestone",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Milestone" }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a milestone",
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": { "type": "string", "example": "ddc9cdff-ab83-41fa-96c6-dfb276a862e7" },
                    "object": { "type": "string", "enum": ["milestone"] },
                    "deleted": { "type": "boolean", "example": true }
                  },
                  "required": ["id", "object", "deleted"]
                }
              }
            }
          }
        }
      }
    },
    "/sites/{site_id}/events/{event_id}/data": {
      "parameters": [
        {
          "name": "site_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the site you wish to load. This is the same string you use in the tracking code."
        },
        {
          "name": "event_id",
          "in": "path",
          "required": true,
          "schema": { "type": "string" },
          "description": "The ID of the event you wish to track. You have to create this event first before sending us completions."
        }
      ],
      "delete": {
        "summary": "Wipe an event",
        "responses": {
          "200": {
            "description": "An event object",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Event" }
              }
            }
          }
        }
      }
    },
    "/aggregations": {
      "get": {
        "summary": "Get analytics aggregation",
        "parameters": [
          {
            "name": "entity",
            "in": "query",
            "required": true,
            "schema": { "type": "string", "enum": ["pageview", "event"] },
            "description": "The entity you want to report on. Events are treated separately from pageviews. Supported values: pageview and event."
          },
          {
            "name": "entity_id",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Required when entity is \"pageview\". The ID of the site that you want to aggregate pageviews on. Do not include this parameter when entity is set to \"event\".\n\nDeprecation note: For backward compatibility, we still support goal IDs in this field but we don't recommend using this field for that anymore. Use site_id and entity_name parameters instead."
          },
          {
            "name": "site_id",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Required when entity is \"event\". The ID of the site the event belongs to."
          },
          {
            "name": "entity_name",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Required when entity is \"event\". The name of the event you want to report on. Example: purchase."
          },
          {
            "name": "aggregates",
            "in": "query",
            "required": true,
            "schema": { "type": "string" },
            "description": "The SUM aggregates you wish to include, separated by a comma.\n\nSupported values for pageview entities: visits, uniques, pageviews, avg_duration and bounce_rate. The difference between \"visitors\" and \"uniques\" is that visitors are unique site visits whilst uniques are unique page visits. So a single user can only have one \"visit\" to your site, but they can view 10 unique pages.\n\nSupported values for event entities: conversions, unique_conversions and value. Note: Value will be returned in cents."
          },
          {
            "name": "date_grouping",
            "in": "query",
            "schema": { "type": "string", "default": "none", "enum": ["none", "hour", "day", "month", "year"] },
            "description": "By default, we don't do any kind of date grouping, and we offer \"total\" aggregations. You can override this but you still have limits such as: When grouping daily, you cannot aggregate over 6 months of data."
          },
          {
            "name": "field_grouping",
            "in": "query",
            "schema": { "type": "string" },
            "description": "The fields you want to group by. Supported values are hostname, pathname, referrer_hostname, referrer_pathname, referrer_source, browser, country_code, city, region, device_type, operating_system, utm_campaign, utm_content, utm_medium, utm_source, utm_term, keyword, q, ref and s.\n\nYou can group by multiple fields using a comma hostname,pathname."
          },
          {
            "name": "sort_by",
            "in": "query",
            "schema": { "type": "string", "example": "pageviews:desc" },
            "description": "The field you want to sort by. Format is: field:asc|desc. You can use any field that you've asked for in the aggregations and field_grouping options. If using date_grouping, you can also use timestamp:asc or timestamp:desc here, which allows you to sort by date."
          },
          {
            "name": "timezone",
            "in": "query",
            "schema": { "type": "string", "default": "UTC" },
            "description": "The timezone you want us to use in our queries. We store all data in UTC, and use that by default, but can support any timezone. The timezone you send should be a TZ database name."
          },
          {
            "name": "date_from",
            "in": "query",
            "schema": { "type": "string", "format": "date" },
            "description": "Timestamp (e.g. 2022-04-01 15:31:00). This should match the timezone you specified."
          },
          {
            "name": "date_to",
            "in": "query",
            "schema": { "type": "string", "format": "date", "default": "now" },
            "description": "Timestamp (e.g. 2022-04-01 15:31:00). This should match the timezone you specified."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": { "type": "integer" },
            "description": "A limit on the number of entries to return. For example, if your site had 10,000 unique pathnames, and you had \"pathname\" in field_grouping, you might get 10,000 rows back by default. You should limit this to prevent timeouts. We have no limits right now but we'll be introducing pagination for this endpoint in the future, and setting a maximum amount of rows that can be returned."
          },
          {
            "name": "starting_after",
            "in": "query",
            "schema": { "type": "string" }
          },
          {
            "name": "filters",
            "in": "query",
            "schema": {
              "type": "object",
              "properties": {
                "filters": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "property": {
                        "type": "string",
                        "enum": [
                          "hostname",
                          "pathname",
                          "referrer_hostname",
                          "referrer_pathname",
                          "referrer_source",
                          "ref",
                          "device_type",
                          "operating_system",
                          "browser",
                          "country_code",
                          "city",
                          "region",
                          "utm_campaign",
                          "utm_source",
                          "utm_medium",
                          "utm_content",
                          "utm_term"
                        ],
                        "description": "The property to filter by. Allowed values:\n\n- `hostname`: The hostname of the content viewed. Example: https://bugsbunny.ca\n- `pathname`: The pathname of the content viewed. Example: /about\n- `referrer_hostname`: The hostname of the referrer. Example: https://daffyduck.com\n- `referrer_pathname`: The pathname of the referrer. Example: /friends\n- `referrer_source`: The source of the pageview. Example: Paid/campaign\n- `ref`: The ref of the inbound link. Example: producthunt\n- `device_type`: The device type. Example: Desktop\n- `operating_system`: The OS of the device. Example: Windows\n- `browser`: The browser used. Example: Chrome\n- `country_code`: The 2-letter country code. Example: UK\n- `city`: The name of the city (e.g. London)\n- `region`: The region. Example: Texas\n- `utm_campaign`: The UTM campaign. Example: relaunch\n- `utm_source`: The UTM source. Example: twitter\n- `utm_medium`: The UTM medium. Example: social\n- `utm_content`: The UTM content. Example: blog-post-relaunch\n- `utm_term`: The UTM term. Example: best+privacy+first+analytics+software"
                      },
                      "operator": {
                        "type": "string",
                        "description": "Operator used in the filter. Use 'is'/'is not' for exact matches, 'is like'/'is not like' for contains matching (supports wildcards % and *), and 'matching'/'not matching' for Regular Expression (regex) pattern matching.",
                        "enum": ["is", "is not", "is like", "is not like", "matching", "not matching"]
                      },
                      "value": {
                        "type": "string",
                        "description": "Value to compare the property against"
                      }
                    },
                    "required": ["property", "operator", "value"]
                  },
                  "description": "Array of filter objects for narrowing analytics data"
                }
              }
            },
            "description": "JSON payload. An array of objects. You can add as many filters as you like.\n\nThe filtering is hyper flexible and is best illustrated via some JSON payload examples to the right (or below if you're on a mobile).\n\nWe support the following operators: is, is not, is like, is not like, matching (regex), and not matching (regex)."
          }
        ],
        "responses": {
          "200": {
            "description": "Aggregation data",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Aggregation" }
              }
            }
          }
        }
      }
    },
    "/current_visitors": {
      "get": {
        "summary": "Current visitors",
        "parameters": [
          {
            "name": "site_id",
            "in": "query",
            "required": true,
            "schema": { "type": "string" },
            "description": "The ID of the site."
          },
          {
            "name": "detailed",
            "in": "query",
            "schema": { "type": "boolean", "default": false },
            "description": "Set this parameter if you want a detailed breakdown. Otherwise you'll only get a count."
          }
        ],
        "responses": {
          "200": {
            "description": "Current visitor data",
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/CurrentVisitors" }
              }
            }
          }
        }
      }
    }
  }
}
