{"openapi":"3.1.0","info":{"title":"Tinylytics API","version":"v1","description":"Machine-readable schema for Tinylytics API v1."},"servers":[{"url":"https://tinylytics.app/api/v1"}],"paths":{"/":{"get":{"summary":"API discovery metadata","description":"Public discovery endpoint with authentication details, docs links, and endpoint directory.","operationId":"getApiDiscovery","tags":["Discovery"],"responses":{"200":{"description":"Successful response."}},"security":[]}},"/accounts":{"get":{"summary":"List accounts","description":"List the personal account and active team accounts available to the current API key.","operationId":"listAccounts","tags":["Account"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}]}},"/agent_signups":{"post":{"summary":"Start agent signup","description":"Start Tinylytics signup for a human owner. The 14-day trial starts when they activate. Public and unauthenticated. Does not mint API keys.","operationId":"createAgentSignup","tags":["Agent signup"],"responses":{"201":{"description":"Pending owner signup created."},"200":{"description":"Email already has an account."},"422":{"description":"Invalid email, ToS, plan, or blocked address."},"429":{"description":"Rate limit exceeded."}},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","tos_accepted"],"properties":{"email":{"type":"string"},"tos_accepted":{"type":"boolean"},"agent_name":{"type":"string"},"agent_client":{"type":"string"},"site_url":{"type":"string"},"intended_plan":{"type":"string","enum":["zen","pro","ultra"]}}}}}}}},"/agent_signups/:id":{"get":{"summary":"Poll agent signup","description":"Poll signup status with X-Agent-Signup-Token or token from create. Never returns API keys or passwords.","operationId":"getAgentSignup","tags":["Agent signup"],"responses":{"200":{"description":"Signup status."},"404":{"description":"Unknown id or bad token."},"429":{"description":"Rate limit exceeded."}},"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"Secret token from create. Fallback if `X-Agent-Signup-Token` is not sent.","schema":{"type":"string"}},{"name":"X-Agent-Signup-Token","in":"header","required":false,"description":"Secret token from create. Prefer this over `token` so it is less likely to land in access logs.","schema":{"type":"string"}}]}},"/groups":{"get":{"summary":"List groups","description":"List site groups for the current user. Requires an Ultra subscription.","operationId":"listGroups","tags":["Groups"],"responses":{"200":{"description":"Successful response."},"403":{"description":"This endpoint requires an Ultra subscription."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create group","description":"Create a site group for the current user. Requires a full-access API key and Ultra subscription.","operationId":"createGroup","tags":["Groups"],"responses":{"201":{"description":"Group created."},"403":{"description":"Write access required or Ultra subscription required."},"422":{"description":"Validation error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"accent_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"pinned":{"type":"boolean"},"default_chart_view":{"type":"string","enum":["separate","combined"]},"site_ids":{"type":"array","items":{"type":"integer"}}},"required":["name"]}}}}}},"/groups/:id":{"delete":{"summary":"Delete group","description":"Delete one site group by numeric ID. Requires a full-access API key and Ultra subscription.","operationId":"deleteGroup","tags":["Groups"],"responses":{"204":{"description":"Group deleted."},"403":{"description":"Write access required or Ultra subscription required."},"404":{"description":"Group not found."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"get":{"summary":"Get group","description":"Fetch one site group by numeric ID. Requires an Ultra subscription.","operationId":"getGroup","tags":["Groups"],"responses":{"200":{"description":"Successful response."},"403":{"description":"This endpoint requires an Ultra subscription."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"patch":{"summary":"Update group","description":"Update one site group by numeric ID. Requires a full-access API key and Ultra subscription.","operationId":"updateGroup","tags":["Groups"],"responses":{"200":{"description":"Group updated."},"403":{"description":"Write access required or Ultra subscription required."},"404":{"description":"Group not found."},"422":{"description":"Validation error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"accent_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"pinned":{"type":"boolean"},"default_chart_view":{"type":"string","enum":["separate","combined"]},"site_ids":{"type":"array","items":{"type":"integer"}}}}}}}},"put":{"summary":"Update group","description":"Update one site group by numeric ID. Requires a full-access API key and Ultra subscription.","operationId":"replaceGroup","tags":["Groups"],"responses":{"200":{"description":"Group updated."},"403":{"description":"Write access required or Ultra subscription required."},"404":{"description":"Group not found."},"422":{"description":"Validation error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"accent_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},"pinned":{"type":"boolean"},"default_chart_view":{"type":"string","enum":["separate","combined"]},"site_ids":{"type":"array","items":{"type":"integer"}}}}}}}}},"/me":{"get":{"summary":"Get current user","description":"Validate API key and return current account plus API key metadata.","operationId":"getCurrentUser","tags":["Account"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}]}},"/openapi.json":{"get":{"summary":"OpenAPI schema","description":"OpenAPI 3.1 schema for Tinylytics API v1.","operationId":"getOpenApiSchema","tags":["Discovery"],"responses":{"200":{"description":"Successful response."}},"security":[]}},"/sites":{"get":{"summary":"List sites","description":"List sites available to the current authenticated user.","operationId":"listSites","tags":["Sites"],"responses":{"200":{"description":"Successful response."},"400":{"description":"Invalid parameter value or date format."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"description":"Range start date (`YYYY-MM-DD`). When set, each site includes period_hits and period_unique_hits.","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Range end date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"time_zone","in":"query","required":false,"description":"Date-boundary mode.","schema":{"type":"string","enum":["utc","user"]}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create site","description":"Create a site for the selected account owner. Omit account_id for the key owner's personal account. Requires a full-access API key and owner or team-admin access.","operationId":"createSite","tags":["Sites"],"responses":{"201":{"description":"Site created."},"422":{"description":"Validation or plan limit error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"label":{"type":"string"},"display_root_path":{"type":"string"},"public":{"type":"boolean"},"is_public":{"type":"boolean"},"active":{"type":"boolean"},"allow_from_any_domain":{"type":"boolean"}},"required":["url"]}}}}}},"/sites/:id":{"delete":{"summary":"Delete site","description":"Soft-delete one site by numeric ID and queue background cleanup. Requires a full-access API key.","operationId":"deleteSite","tags":["Sites"],"responses":{"204":{"description":"Site deleted."},"404":{"description":"Site not found."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"get":{"summary":"Get site","description":"Fetch one site by numeric ID.","operationId":"getSite","tags":["Sites"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"patch":{"summary":"Update site","description":"Update one site by numeric ID. Requires a full-access API key.","operationId":"updateSite","tags":["Sites"],"responses":{"200":{"description":"Site updated."},"404":{"description":"Site not found."},"422":{"description":"Validation error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"label":{"type":"string"},"display_root_path":{"type":"string"},"public":{"type":"boolean"},"is_public":{"type":"boolean"},"active":{"type":"boolean"},"allow_from_any_domain":{"type":"boolean"}}}}}}},"put":{"summary":"Update site","description":"Update one site by numeric ID. Requires a full-access API key.","operationId":"replaceSite","tags":["Sites"],"responses":{"200":{"description":"Site updated."},"404":{"description":"Site not found."},"422":{"description":"Validation error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"label":{"type":"string"},"display_root_path":{"type":"string"},"public":{"type":"boolean"},"is_public":{"type":"boolean"},"active":{"type":"boolean"},"allow_from_any_domain":{"type":"boolean"}}}}}}}},"/sites/:id/agent_visits":{"get":{"summary":"List AI agent visits","description":"Read AI assistant and crawler visits for a site. These are stored separately from human hits.","operationId":"listSiteAgentVisits","tags":["Analytics"],"responses":{"200":{"description":"Successful response."},"400":{"description":"Invalid parameter value or date format."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","required":false,"description":"Range start date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Range end date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"time_zone","in":"query","required":false,"description":"Date-boundary mode.","schema":{"type":"string","enum":["utc","user"]}},{"name":"path","in":"query","required":false,"description":"Exact path filter.","schema":{"type":"string"}},{"name":"agent_name","in":"query","required":false,"description":"Exact agent name filter.","schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"description":"Exact provider filter.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Exact category filter.","schema":{"type":"string","enum":["answer_fetch","search_index","training","ai_crawler"]}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Page size.","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create AI agent visit","description":"Record one AI crawler request. Known crawler user agents are classified automatically. Requires a full-access API key.","operationId":"createSiteAgentVisit","tags":["Analytics"],"responses":{"201":{"description":"Agent visit created."},"202":{"description":"Request accepted but not a known AI crawler."},"422":{"description":"Validation or payload error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"ip_address":{"type":"string"},"url":{"type":"string"},"referrer":{"type":"string"},"user_agent":{"type":"string"},"visitor_id":{"type":"string"},"source":{"type":"string"}}}}}}}},"/sites/:id/content":{"get":{"summary":"Get content monitoring","description":"Return content monitoring status, issues, and stats for a site. Requires an active subscription.","operationId":"getSiteContentMonitoring","tags":["Monitoring"],"responses":{"200":{"description":"Successful response."},"403":{"description":"This endpoint requires an active subscription."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/events":{"post":{"summary":"Create event","description":"Create one event for a site. Requires a full-access API key.","operationId":"createSiteEvent","tags":["Analytics"],"responses":{"201":{"description":"Event created."},"202":{"description":"Event accepted but ignored by rules."},"422":{"description":"Validation or payload error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["event"],"properties":{"event":{"type":"string"},"value":{"type":"string"},"path":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"ip_address":{"type":"string"},"url":{"type":"string"},"referrer":{"type":"string"},"user_agent":{"type":"string"},"visitor_id":{"type":"string"},"source":{"type":"string"}}}}}}}},"/sites/:id/events/batch":{"post":{"summary":"Batch create events","description":"Create many events in one request. Requires a full-access API key.","operationId":"createSiteEventsBatch","tags":["Analytics"],"responses":{"200":{"description":"Batch processed with per-row statuses."},"422":{"description":"Payload must be a JSON array."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["event"],"properties":{"event":{"type":"string"},"value":{"type":"string"},"path":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"ip_address":{"type":"string"},"url":{"type":"string"},"referrer":{"type":"string"},"user_agent":{"type":"string"},"visitor_id":{"type":"string"},"source":{"type":"string"}}}}}}}}},"/sites/:id/features":{"patch":{"summary":"Update site features","description":"Enable or disable content monitoring and uptime monitoring for one site. Requires a full-access API key.","operationId":"updateSiteFeatures","tags":["Sites"],"responses":{"200":{"description":"Site features updated."},"403":{"description":"Write access required."},"404":{"description":"Site not found."},"422":{"description":"Validation or plan limit error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content_monitoring":{"type":"boolean"},"content_monitoring_emails":{"type":"boolean"},"uptime":{"type":"boolean"}}}}}}},"put":{"summary":"Update site features","description":"Enable or disable content monitoring and uptime monitoring for one site. Requires a full-access API key.","operationId":"replaceSiteFeatures","tags":["Sites"],"responses":{"200":{"description":"Site features updated."},"403":{"description":"Write access required."},"404":{"description":"Site not found."},"422":{"description":"Validation or plan limit error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content_monitoring":{"type":"boolean"},"content_monitoring_emails":{"type":"boolean"},"uptime":{"type":"boolean"}}}}}}}},"/sites/:id/hits":{"get":{"summary":"List hits","description":"Read raw or grouped analytics hits for a site.","operationId":"listSiteHits","tags":["Analytics"],"responses":{"200":{"description":"Successful response."},"400":{"description":"Invalid parameter value or date format."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","required":false,"description":"Range start date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Range end date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"time_zone","in":"query","required":false,"description":"Date-boundary mode.","schema":{"type":"string","enum":["utc","user"]}},{"name":"country","in":"query","required":false,"description":"Exact 2-letter country code.","schema":{"type":"string"}},{"name":"path","in":"query","required":false,"description":"Exact path filter.","schema":{"type":"string"}},{"name":"referrer","in":"query","required":false,"description":"Case-insensitive partial referrer filter.","schema":{"type":"string"}},{"name":"grouped","in":"query","required":false,"description":"Return grouped results when true.","schema":{"type":"boolean"}},{"name":"group_by","in":"query","required":false,"description":"Grouping field for grouped results.","schema":{"type":"string","enum":["path","country","referrer","browser_name","platform_name","source","date"]}},{"name":"interval","in":"query","required":false,"description":"Date bucket size when group_by is date.","schema":{"type":"string","enum":["day","week","month"]}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Page size.","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create hit","description":"Create one hit for a site. Requires a full-access API key.","operationId":"createSiteHit","tags":["Analytics"],"responses":{"201":{"description":"Hit created."},"202":{"description":"Hit accepted but ignored by rules."},"422":{"description":"Validation or payload error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"ip_address":{"type":"string"},"url":{"type":"string"},"referrer":{"type":"string"},"user_agent":{"type":"string"},"visitor_id":{"type":"string"},"source":{"type":"string"}}}}}}}},"/sites/:id/hits/batch":{"post":{"summary":"Batch create hits","description":"Create many hits in one request. Requires a full-access API key.","operationId":"createSiteHitsBatch","tags":["Analytics"],"responses":{"200":{"description":"Batch processed with per-row statuses."},"422":{"description":"Payload must be a JSON array."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"ip_address":{"type":"string"},"url":{"type":"string"},"referrer":{"type":"string"},"user_agent":{"type":"string"},"visitor_id":{"type":"string"},"source":{"type":"string"}}}}}}}}},"/sites/:id/insights":{"get":{"summary":"Get insights","description":"Return AI insights generated for a site. Requires an active subscription.","operationId":"getSiteInsights","tags":["Insights"],"responses":{"200":{"description":"Successful response."},"403":{"description":"This endpoint requires an active subscription."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/kudos":{"get":{"summary":"List kudos","description":"Read kudos records for a site.","operationId":"listSiteKudos","tags":["Analytics"],"responses":{"200":{"description":"Successful response."},"400":{"description":"Invalid parameter value or date format."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","required":false,"description":"Range start date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Range end date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"time_zone","in":"query","required":false,"description":"Date-boundary mode.","schema":{"type":"string","enum":["utc","user"]}},{"name":"path","in":"query","required":false,"description":"Exact path filter.","schema":{"type":"string"}},{"name":"uid","in":"query","required":false,"description":"Exact kudo UID filter.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Page size.","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create kudo","description":"Create one kudo for a site. Requires a full-access API key.","operationId":"createSiteKudo","tags":["Analytics"],"responses":{"201":{"description":"Kudo created."},"202":{"description":"Kudo accepted but ignored by rules."},"422":{"description":"Validation or payload error."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path"],"properties":{"path":{"type":"string"},"custom_uid":{"type":"string"}}}}}}}},"/sites/:id/kudos/:kudo_uid":{"delete":{"summary":"Delete kudo","description":"Delete one kudo by UID. Requires a full-access API key.","operationId":"deleteSiteKudo","tags":["Analytics"],"responses":{"200":{"description":"Kudo deleted."},"404":{"description":"Kudo not found."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kudo_uid","in":"path","required":true,"schema":{"type":"string"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/leaderboard":{"get":{"summary":"Get leaderboard","description":"Return all-time path leaderboard for a site.","operationId":"getSiteLeaderboard","tags":["Analytics"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/signals":{"get":{"summary":"List signals","description":"Return owner-submitted context signals for a site. Requires an active subscription and insights enabled.","operationId":"listSiteSignals","tags":["Insights"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]},"post":{"summary":"Create signal","description":"Submit one owner context signal for a site. Requires a full-access API key, subscription, and insights enabled.","operationId":"createSiteSignal","tags":["Insights"],"responses":{"200":{"description":"Successful response."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/uptime":{"get":{"summary":"Get uptime","description":"Return uptime, SSL/domain status, and downtime history for a site. Requires an active subscription.","operationId":"getSiteUptime","tags":["Monitoring"],"responses":{"200":{"description":"Successful response."},"403":{"description":"This endpoint requires an active subscription."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}},"/sites/:id/user_journeys":{"get":{"summary":"Get user journeys","description":"Return visitor journey analytics for a site.","operationId":"getSiteUserJourneys","tags":["Analytics"],"responses":{"200":{"description":"Successful response."},"400":{"description":"Invalid parameter value or date format."}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","required":false,"description":"Range start date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"end_date","in":"query","required":false,"description":"Range end date (`YYYY-MM-DD`).","schema":{"type":"string"}},{"name":"time_zone","in":"query","required":false,"description":"Date-boundary mode.","schema":{"type":"string","enum":["utc","user"]}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"per_page","in":"query","required":false,"description":"Page size.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"account_id","in":"query","required":false,"description":"Team account owner id. Omit for the key owner's personal account.","schema":{"type":"integer"}}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key"}}}}