{"openapi":"3.0.0","info":{"title":"Lookout API","version":"1.0.0","description":"Access to a Lookout workspace's boards and sites: the same figures as the dashboard. Reads work with any key; notes and exports (POST) need a key created with \"Allow notes and exports\". Authenticate with an API key from Settings › API & MCP (Authorization: Bearer lk_live_…). 600 requests an hour per key."},"servers":[{"url":"https://api.lookoutstats.com"}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An API key from Settings › API & MCP: lk_live_…"}},"schemas":{},"parameters":{}},"paths":{"/v1/boards":{"get":{"security":[{"apiKey":[]}],"responses":{"200":{"description":"The workspace's boards","content":{"application/json":{"schema":{"type":"object","properties":{"boards":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"siteCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","siteCount","createdAt"]}}},"required":["boards"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/boards/{id}/sites":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"Every site on the board for the range, busiest first","content":{"application/json":{"schema":{"type":"object","properties":{"board":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"range":{"type":"string"},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","nullable":true,"minimum":0},"change":{"type":"number","nullable":true},"pageviews":{"type":"integer","minimum":0},"pagesPerVisit":{"type":"number","nullable":true},"topSource":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"share":{"type":"number"}},"required":["name","share"]},"topCountry":{"type":"object","nullable":true,"properties":{"name":{"type":"string"},"share":{"type":"number"}},"required":["name","share"]},"goal":{"type":"string","nullable":true},"conversions":{"type":"integer","nullable":true,"minimum":0}},"required":["id","domain","visitors","previousVisitors","change","pageviews","pagesPerVisit","topSource","topCountry","goal","conversions"]}},"unavailable":{"type":"array","items":{"type":"string"}}},"required":["board","range","sites","unavailable"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such board"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/boards/{id}/flow":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"Traffic between the board's sites: each site's visitors, and hops (visitors to a site whose referrer is another site of the board)","content":{"application/json":{"schema":{"type":"object","properties":{"range":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"domain":{"type":"string"},"visitors":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"string"},"maxItems":3}},"required":["projectId","domain","visitors","sources"]}},"hops":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"visitors":{"type":"integer","minimum":0}},"required":["from","to","visitors"]}}},"required":["range","nodes","hops"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such board"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/boards/{id}/scorecard":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"The board's landing pages graded A–D against each other: trend, pages per visit, conversion, Core Web Vitals, visitors sent onward","content":{"application/json":{"schema":{"type":"object","properties":{"range":{"type":"string"},"mainSite":{"type":"object","nullable":true,"properties":{"projectId":{"type":"string"},"domain":{"type":"string"}},"required":["projectId","domain"]},"rows":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"domain":{"type":"string"},"visitors":{"type":"integer","minimum":0},"grade":{"type":"string","enum":["A","B","C","D"]},"score":{"type":"number","minimum":0,"maximum":1},"factors":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["trend","pages","conv","speed","flow"]},"label":{"type":"string"},"value":{"type":"string"},"rating":{"type":"string","enum":["good","ok","weak","na"]},"bench":{"type":"string"},"note":{"type":"string"},"bar":{"type":"number","minimum":0,"maximum":100}},"required":["key","label","value","rating","bench","note","bar"]}},"why":{"type":"string"},"reason":{"type":"string"},"next":{"type":"string"},"fixable":{"type":"boolean"},"partial":{"type":"boolean"},"vitals":{"type":"object","nullable":true,"properties":{"lcp":{"type":"number","nullable":true},"inp":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true}},"required":["lcp","inp","cls"]}},"required":["projectId","domain","visitors","grade","score","factors","why","reason","next","fixable","partial","vitals"]}},"unavailable":{"type":"array","items":{"type":"string"}}},"required":["range","mainSite","rows","unavailable"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such board"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"The site and its Core Web Vitals (Speed Insights, p75, production) for the range","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"}},"required":["id","name","domain"]},"range":{"type":"string"},"speed":{"type":"object","properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0},"status":{"type":"string","enum":["passing","needs_work","poor","off"]},"mobile":{"type":"object","nullable":true,"properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0}},"required":["lcpMs","inpMs","cls","samples"]},"desktop":{"type":"object","nullable":true,"properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0}},"required":["lcpMs","inpMs","cls","samples"]}},"required":["lcpMs","inpMs","cls","samples","status","mobile","desktop"]}},"required":["site","range","speed"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/series":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"Visitors per hour (24h) or day, with the previous period","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]},"range":{"type":"string"},"granularity":{"type":"string","enum":["hour","day"]},"points":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","nullable":true,"minimum":0}},"required":["start","visitors","previousVisitors"]}},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","nullable":true,"minimum":0},"change":{"type":"number","nullable":true},"pageviews":{"type":"integer","minimum":0}},"required":["site","range","granularity","points","visitors","previousVisitors","change","pageviews"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/campaigns":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"Visitors by UTM campaign, source and medium (Vercel Web Analytics Plus)","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]},"range":{"type":"string"},"status":{"type":"string","enum":["ok","plan_required"]},"goal":{"type":"string","nullable":true},"visitors":{"type":"integer","minimum":0},"campaigns":{"type":"array","items":{"type":"object","properties":{"campaign":{"type":"string"},"source":{"type":"string"},"medium":{"type":"string"},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","minimum":0},"pageviews":{"type":"integer","minimum":0},"conversions":{"type":"integer","nullable":true,"minimum":0}},"required":["campaign","source","medium","visitors","previousVisitors","pageviews","conversions"]}}},"required":["site","range","status","goal","visitors","campaigns"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/overview":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board the site is on (id or name): adds its notes dated in the range"},"required":false,"description":"A board the site is on (id or name): adds its notes dated in the range","name":"board","in":"query"}],"responses":{"200":{"description":"One site in depth in one request: series, top referrers, countries and pages, production deployments, Core Web Vitals and, with a board, its notes","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"}},"required":["id","name","domain"]},"range":{"type":"string"},"goal":{"type":"string","nullable":true},"granularity":{"type":"string","enum":["hour","day"]},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","nullable":true,"minimum":0},"change":{"type":"number","nullable":true},"pageviews":{"type":"integer","minimum":0},"points":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"visitors":{"type":"integer","minimum":0},"previousVisitors":{"type":"integer","nullable":true,"minimum":0}},"required":["start","visitors","previousVisitors"]}},"referrers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}},"countries":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}},"pages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}},"deployments":{"type":"array","nullable":true,"items":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"message":{"type":"string","nullable":true},"branch":{"type":"string","nullable":true},"state":{"type":"string"}},"required":["at","message","branch","state"]}},"speed":{"type":"object","properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0},"status":{"type":"string","enum":["passing","needs_work","poor","off"]},"mobile":{"type":"object","nullable":true,"properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0}},"required":["lcpMs","inpMs","cls","samples"]},"desktop":{"type":"object","nullable":true,"properties":{"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0}},"required":["lcpMs","inpMs","cls","samples"]}},"required":["lcpMs","inpMs","cls","samples","status","mobile","desktop"]},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"siteId":{"type":"string","nullable":true},"date":{"type":"string","format":"date"},"text":{"type":"string"}},"required":["id","siteId","date","text"]}}},"required":["site","range","goal","granularity","visitors","previousVisitors","change","pageviews","points","referrers","countries","pages","deployments","speed"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site (or board)"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/breakdowns":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"The site's top 5 referrers, countries and pages, with each one's share of visitors","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]},"range":{"type":"string"},"referrers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}},"countries":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}},"pages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":0},"share":{"type":"number"}},"required":["name","visitors","share"]}}},"required":["site","range","referrers","countries","pages"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/deployments":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"The site's production deployments in the range, newest first (at most 20)","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]},"range":{"type":"string"},"deployments":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"message":{"type":"string","nullable":true},"branch":{"type":"string","nullable":true},"state":{"type":"string"}},"required":["at","message","branch","state"]}}},"required":["site","range","deployments"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/sites/{id}/speed":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"A site's Vercel project id, from GET /v1/boards/{id}/sites"},"required":true,"description":"A site's Vercel project id, from GET /v1/boards/{id}/sites","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"default":"7d"},"required":false,"name":"range","in":"query"},{"schema":{"type":"string","enum":["all","mobile","desktop"],"default":"all","description":"all, mobile or desktop"},"required":false,"description":"all, mobile or desktop","name":"device","in":"query"}],"responses":{"200":{"description":"Core Web Vitals (Speed Insights p75, production) for one device, and its slowest routes by LCP","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]},"range":{"type":"string"},"device":{"type":"string","enum":["all","mobile","desktop"]},"status":{"type":"string","enum":["passing","needs_work","poor","off"]},"lcpMs":{"type":"number","nullable":true},"inpMs":{"type":"number","nullable":true},"cls":{"type":"number","nullable":true},"samples":{"type":"integer","minimum":0},"routes":{"type":"array","items":{"type":"object","properties":{"route":{"type":"string"},"lcpMs":{"type":"number"},"samples":{"type":"integer","minimum":0}},"required":["route","lcpMs","samples"]}}},"required":["site","range","device","status","lcpMs","inpMs","cls","samples","routes"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such site"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/boards/{id}/annotations":{"get":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"},{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"Only this site's notes (and the board-wide ones)"},"required":false,"description":"Only this site's notes (and the board-wide ones)","name":"site","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["24h","7d","30d"]},{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})\\.\\.(\\d{4}-\\d{2}-\\d{2})$"}],"description":"Only the notes dated in this range"},"required":false,"description":"Only the notes dated in this range","name":"range","in":"query"}],"responses":{"200":{"description":"The board's notes (dated annotations), oldest first","content":{"application/json":{"schema":{"type":"object","properties":{"board":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"boardId":{"type":"string","format":"uuid"},"siteId":{"type":"string","nullable":true},"date":{"type":"string","format":"date"},"text":{"type":"string"}},"required":["id","boardId","siteId","date","text"]}}},"required":["board","notes"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"404":{"description":"No such board"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}},"post":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date"},"text":{"type":"string","minLength":1,"maxLength":200},"siteId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"}},"required":["date","text"]}}}},"responses":{"201":{"description":"The note, pinned to the day on the board's charts","content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"boardId":{"type":"string","format":"uuid"},"siteId":{"type":"string","nullable":true},"date":{"type":"string","format":"date"},"text":{"type":"string"}},"required":["id","boardId","siteId","date","text"]}},"required":["note"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"403":{"description":"The key is read-only: create one with \"Allow notes and exports\""},"404":{"description":"No such board (or site on it)"},"422":{"description":"The board holds as many notes as it can"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}},"/v1/boards/{id}/export":{"post":{"security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)"},"required":true,"description":"A board's id from GET /v1/boards, or its exact name (case-insensitive)","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","enum":["pdf","csv"],"default":"pdf"},"range":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}}}}}},"responses":{"200":{"description":"A download link for the board as a PDF or CSV; it works for 5 minutes","content":{"application/json":{"schema":{"type":"object","properties":{"board":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"format":{"type":"string","enum":["pdf","csv"]},"range":{"type":"string"},"url":{"type":"string","format":"uri"},"expiresAt":{"type":"string","format":"date-time"}},"required":["board","format","range","url","expiresAt"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"403":{"description":"The key is read-only: create one with \"Allow notes and exports\""},"404":{"description":"No such board (or site on it)"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"},"503":{"description":"Exports aren't set up on this server"}}}},"/v1/alerts":{"get":{"security":[{"apiKey":[]}],"responses":{"200":{"description":"Alert rules and what fired in the last 30 days","content":{"application/json":{"schema":{"type":"object","properties":{"alerts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"board":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"metric":{"type":"string"},"direction":{"type":"string","enum":["drop","rise"]},"threshold":{"type":"integer"},"enabled":{"type":"boolean"},"lastFiredAt":{"type":"string","nullable":true,"format":"date-time"}},"required":["id","board","metric","direction","threshold","enabled","lastFiredAt"]}},"recent":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"text":{"type":"string"},"board":{"type":"string","nullable":true}},"required":["at","text","board"]}}},"required":["alerts","recent"]}}}},"401":{"description":"Missing, invalid or revoked API key"},"429":{"description":"Over 600 requests an hour per key; see Retry-After"}}}}}}