{"openapi":"3.0.3","info":{"title":"Katla API","description":"GDPR Cookie Compliance Scanner API","version":"1.0.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"serviceAccountKey":{"type":"http","scheme":"bearer","bearerFormat":"katla_sk_...","description":"A team service-account API key, for machine-to-machine access. Issued from team settings on the Business and Custom plans, scoped to one team, and never usable on account administration routes."},"oauth2":{"type":"oauth2","description":"OAuth 2.1 with PKCE. Clients may register dynamically (RFC 7591) at the registration endpoint.","flows":{"authorizationCode":{"authorizationUrl":"https://api.katla.app/oauth/authorize","tokenUrl":"https://api.katla.app/oauth/token","refreshUrl":"https://api.katla.app/oauth/token","scopes":{"katla:read":"Read teams, sites, cookies, consent records, custom cookie descriptions and plan usage","katla:write":"Add and verify sites, start scans, and update cookie classifications, cookie descriptions and site settings"}}}}},"schemas":{}},"paths":{"/webhooks/stripe":{"post":{"summary":"Stripe webhook handler","tags":["Webhooks"],"responses":{"200":{"description":"Default Response"}}}},"/webhooks/shopify":{"post":{"summary":"Shopify compliance webhook handler","tags":["Webhooks"],"responses":{"200":{"description":"Default Response"}}}},"/shopify/session":{"post":{"summary":"Sign-in, connection and billing state for the calling store","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"type":"object","properties":{"shopGid":{"type":"string","maxLength":200}},"additionalProperties":false,"nullable":true}]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/account/code":{"post":{"summary":"Email a Katla sign-in code, creating the account on first use","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":320}},"required":["email"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sent":{"type":"boolean","enum":[true]}},"required":["sent"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/account/verify":{"post":{"summary":"Sign in with an emailed code","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":320},"code":{"type":"string","pattern":"^\\d{6}$"}},"required":["email","code"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/account/password":{"post":{"summary":"Sign in with a staff-issued password","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":320},"password":{"type":"string","minLength":1,"maxLength":200}},"required":["email","password"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/account/sign-out":{"post":{"summary":"Sign out of Katla inside this Shopify admin","tags":["Shopify"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/teams":{"get":{"summary":"List the signed-in account's teams","tags":["Shopify"],"responses":{"200":{"description":"Default Response"}}},"post":{"summary":"Create a team owned by the signed-in account","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response"}}}},"/shopify/teams/{teamId}/sites":{"get":{"summary":"List a team's sites","tags":["Shopify"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"responses":{"200":{"description":"Default Response"}}},"post":{"summary":"Add a site to a team","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":253}},"required":["domain"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/shopify/store/connect":{"post":{"summary":"Connect this store to a team and the site its storefront uses","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","format":"uuid"},"siteId":{"type":"string","format":"uuid"},"shopGid":{"type":"string","maxLength":200}},"required":["teamId","siteId"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/store/site":{"put":{"summary":"Change which of the team's sites this store uses","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"siteId":{"type":"string","format":"uuid"}},"required":["siteId"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shopDomain":{"type":"string"},"account":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["email","name"],"additionalProperties":false,"nullable":true},"store":{"type":"object","properties":{"connected":{"type":"boolean"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false,"nullable":true},"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false,"nullable":true},"role":{"type":"string","enum":["owner","admin","member"],"nullable":true}},"required":["connected","team","site","role"],"additionalProperties":false},"plan":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAtPeriodEnd":{"type":"boolean"}},"required":["tier","name","status","billingInterval","currentPeriodEnd","cancelAtPeriodEnd"],"additionalProperties":false,"nullable":true},"planSelectionUrl":{"type":"string","nullable":true},"billingConfigured":{"type":"boolean"}},"required":["shopDomain","account","store","plan","planSelectionUrl","billingConfigured"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shopify/site":{"get":{"summary":"The store's site, with its latest scan","tags":["Shopify"],"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/scan":{"post":{"summary":"Scan the store's site","tags":["Shopify"],"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/scans":{"get":{"summary":"Recent scans of the store's site","tags":["Shopify"],"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/cookies":{"get":{"summary":"Cookies found on the store's site","tags":["Shopify"],"parameters":[{"schema":{"type":"string","maxLength":20},"in":"query","name":"locale","required":false}],"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/cookies/{cookieId}":{"patch":{"summary":"Change a cookie's category on the store's site","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]}},"required":["category"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"cookieId","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/settings":{"patch":{"summary":"Update the banner settings of the store's site","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":true}}}},"responses":{"200":{"description":"Default Response"}}}},"/shopify/site/consent-stats":{"get":{"summary":"Consent totals for the store's site","tags":["Shopify"],"responses":{"200":{"description":"Default Response"}}}},"/shopify/billing/refresh":{"post":{"summary":"Re-read this store's subscription from Shopify","tags":["Shopify"],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"type":"object","properties":{"planHandle":{"type":"string","maxLength":200}},"additionalProperties":false,"nullable":true}]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"planTier":{"type":"string","nullable":true},"planName":{"type":"string","nullable":true}},"required":["status","planTier","planName"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/callback":{"post":{"summary":"Handle WorkOS OAuth callback","tags":["Authentication"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["id","email","name"],"additionalProperties":false}},"required":["accessToken","refreshToken","user"],"additionalProperties":false}}}}}}},"/auth/refresh":{"post":{"summary":"Refresh access token","tags":["Authentication"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"}},"required":["accessToken","refreshToken"],"additionalProperties":false}}}}}}},"/auth/password":{"post":{"summary":"Sign in with a staff-issued password","tags":["Authentication"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1,"maxLength":200}},"required":["email","password"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["id","email","name"],"additionalProperties":false},"workosUser":{"type":"object","properties":{"object":{"type":"string","enum":["user"]},"id":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"profilePictureUrl":{"type":"string","nullable":true},"lastSignInAt":{"type":"string","nullable":true},"locale":{"type":"string","nullable":true},"externalId":{"type":"string","nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["object","id","email","emailVerified","firstName","lastName","profilePictureUrl","lastSignInAt","locale","externalId","createdAt","updatedAt"],"additionalProperties":false}},"required":["accessToken","refreshToken","user","workosUser"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/config":{"get":{"summary":"Get public auth configuration","tags":["Authentication"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"workosClientId":{"type":"string"}},"required":["workosClientId"],"additionalProperties":false}}}}}}},"/auth/sync":{"post":{"summary":"Sync user from AuthKit to local database","tags":["Authentication"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"workosUserId":{"type":"string"},"email":{"type":"string","format":"email"},"name":{"type":"string","nullable":true},"avatarUrl":{"type":"string","nullable":true}},"required":["workosUserId","email","name","avatarUrl"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["id","email","name"],"additionalProperties":false}}}}}}},"/auth/me":{"get":{"summary":"Get current user info","tags":["Authentication"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string","nullable":true},"avatarUrl":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","email","name","avatarUrl","createdAt"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/me/deletion-impact":{"get":{"summary":"Get deletion impact for current user","tags":["Users"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"soleOwnerTeams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"totalSites":{"type":"number"},"totalMembers":{"type":"number"}},"required":["id","name","slug","totalSites","totalMembers"],"additionalProperties":false}},"otherTeams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["admin","member"]}},"required":["id","name","role"],"additionalProperties":false}}},"required":["soleOwnerTeams","otherTeams"],"additionalProperties":false}}}}}}},"/users/me/mcp-connections":{"get":{"summary":"List the MCP clients connected to the current user","tags":["Users"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"clientName":{"type":"string","nullable":true},"clientUri":{"type":"string","nullable":true},"scopes":{"type":"array","items":{"type":"string"}},"connectedAt":{"type":"string"},"lastUsedAt":{"type":"string","nullable":true}},"required":["clientId","clientName","clientUri","scopes","connectedAt","lastUsedAt"],"additionalProperties":false}}}}}}}},"/users/me/mcp-connections/{clientId}":{"delete":{"summary":"Disconnect an MCP client from the current user","tags":["Users"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"path","name":"clientId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/users/me":{"delete":{"summary":"Delete current user account","tags":["Users"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirmationText":{"type":"string"}},"required":["confirmationText"],"additionalProperties":false}}},"required":true},"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams":{"get":{"summary":"List user teams","tags":["Teams"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"createdAt":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","name","slug","createdAt","role"],"additionalProperties":false}}}}}}},"post":{"summary":"Create a new team","tags":["Teams"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9-]+$"}},"required":["name","slug"],"additionalProperties":false}}},"required":true},"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","name","slug","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}":{"get":{"summary":"Get team details","tags":["Teams"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"createdAt":{"type":"string"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","admin","member"]},"joinedAt":{"type":"string"}},"required":["id","email","name","role","joinedAt"],"additionalProperties":false}}},"required":["id","name","slug","createdAt","members"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"patch":{"summary":"Update team name or slug","tags":["Teams"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z0-9-]+$"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","name","slug","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete team","tags":["Teams"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirmationText":{"type":"string"}},"required":["confirmationText"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/invite":{"post":{"summary":"Invite member to team","tags":["Teams"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","member"],"default":"member"}},"required":["email"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["admin","member"]},"invitedByUserId":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","email","role","invitedByUserId","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"limit":{"type":"number"},"current":{"type":"number"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/invites":{"get":{"summary":"List pending invites for team","tags":["Teams"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["admin","member"]},"invitedByUserId":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","email","role","invitedByUserId","createdAt"],"additionalProperties":false}}}}}}}},"/teams/{teamId}/invites/{inviteId}":{"delete":{"summary":"Revoke a pending invite","tags":["Teams"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"inviteId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/members/{userId}":{"delete":{"summary":"Remove member from team","tags":["Teams"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"userId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/by-slug/{slug}":{"get":{"summary":"Get team by slug","tags":["Teams"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"slug","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"createdAt":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","name","slug","createdAt","role"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/check-slug/{slug}":{"get":{"summary":"Check if team slug is available","tags":["Teams"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"available":{"type":"boolean"}},"required":["available"],"additionalProperties":false}}}}}}},"/teams/{teamId}/deletion-impact":{"get":{"summary":"Get deletion impact for team","tags":["Teams"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"scanCount":{"type":"number"},"pageCount":{"type":"number"},"cookieCount":{"type":"number"},"consentCount":{"type":"number"}},"required":["id","domain","scanCount","pageCount","cookieCount","consentCount"],"additionalProperties":false}},"totalMembers":{"type":"number"}},"required":["sites","totalMembers"],"additionalProperties":false}}}}}}},"/teams/{teamId}/service-accounts":{"get":{"summary":"List a team service accounts","tags":["Service Accounts"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"scopes":{"type":"array","items":{"type":"string"}},"createdByUserId":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false}}},"required":["id","name","role","scopes","createdByUserId","revokedAt","createdAt","keys"],"additionalProperties":false}}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"post":{"summary":"Create a service account and issue its first API key","tags":["Service Accounts"],"description":"The returned apiKey is shown once and cannot be retrieved again. Requires the Business or Custom plan.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"role":{"type":"string","enum":["member","admin"],"default":"member"},"scopes":{"type":"array","items":{"type":"string","enum":["katla:read","katla:write"]},"minItems":1,"default":["katla:read"]},"expiresInDays":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":3650}},"required":["name"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"scopes":{"type":"array","items":{"type":"string"}},"createdByUserId":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false}}},"required":["id","name","role","scopes","createdByUserId","revokedAt","createdAt","keys"],"additionalProperties":false},"key":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false},"apiKey":{"type":"string"}},"required":["serviceAccount","key","apiKey"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/service-accounts/{serviceAccountId}":{"patch":{"summary":"Rename a service account or change its role and scopes","tags":["Service Accounts"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"role":{"type":"string","enum":["member","admin"]},"scopes":{"type":"array","items":{"type":"string","enum":["katla:read","katla:write"]},"minItems":1}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"serviceAccountId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"scopes":{"type":"array","items":{"type":"string"}},"createdByUserId":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false}}},"required":["id","name","role","scopes","createdByUserId","revokedAt","createdAt","keys"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"summary":"Revoke a service account and all of its keys","tags":["Service Accounts"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"serviceAccountId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/service-accounts/{serviceAccountId}/keys":{"post":{"summary":"Issue an additional API key for a service account","tags":["Service Accounts"],"description":"For rotation without downtime: issue the new key, deploy it, then revoke the old one. The returned apiKey is shown once.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiresInDays":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":3650}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"serviceAccountId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccount":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"scopes":{"type":"array","items":{"type":"string"}},"createdByUserId":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false}}},"required":["id","name","role","scopes","createdByUserId","revokedAt","createdAt","keys"],"additionalProperties":false},"key":{"type":"object","properties":{"id":{"type":"string"},"maskedKey":{"type":"string"},"expiresAt":{"type":"string","nullable":true},"revokedAt":{"type":"string","nullable":true},"lastUsedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","maskedKey","expiresAt","revokedAt","lastUsedAt","createdAt"],"additionalProperties":false},"apiKey":{"type":"string"}},"required":["serviceAccount","key","apiKey"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/service-accounts/{serviceAccountId}/keys/{keyId}":{"delete":{"summary":"Revoke a single API key","tags":["Service Accounts"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"serviceAccountId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"keyId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/invites/{token}":{"get":{"summary":"Preview a team invite by token (public)","tags":["Teams"],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128},"in":"path","name":"token","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"role":{"type":"string","enum":["admin","member"]},"expiresAt":{"type":"string"},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false},"inviter":{"type":"object","properties":{"name":{"type":"string","nullable":true},"email":{"type":"string"}},"required":["name","email"],"additionalProperties":false,"nullable":true}},"required":["email","role","expiresAt","team","inviter"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/invites/{token}/accept":{"post":{"summary":"Accept a team invite by token","tags":["Teams"],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":128},"in":"path","name":"token","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["team","role"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/sites":{"get":{"summary":"List team sites","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"latestScan":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["full","lighthouse"]},"status":{"type":"string","enum":["pending","running","completed","failed"]},"pagesScanned":{"type":"array","items":{"type":"string"},"nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","type","status","pagesScanned","startedAt","completedAt","error","createdAt"],"additionalProperties":false,"nullable":true},"scanCount":{"type":"number"},"cookieCount":{"type":"number"},"consentCount":{"type":"number"},"guard":{"type":"object","properties":{"status":{"type":"string","enum":["installed","missing","unknown"]},"override":{"type":"string","enum":["confirmed","muted"],"nullable":true},"overrideAt":{"type":"string","nullable":true},"warningsMuted":{"type":"boolean"},"checkedAt":{"type":"string","nullable":true},"detectedAt":{"type":"string","nullable":true},"lastSeenAt":{"type":"string","nullable":true},"mode":{"type":"string","enum":["widget","headless"],"nullable":true},"version":{"type":"string","nullable":true},"siteIdMatches":{"type":"boolean","nullable":true},"pagesWithGuard":{"type":"number","nullable":true},"pagesChecked":{"type":"number","nullable":true}},"required":["status","override","overrideAt","warningsMuted","checkedAt","detectedAt","lastSeenAt","mode","version","siteIdMatches","pagesWithGuard","pagesChecked"],"additionalProperties":false},"compliance":{"type":"object","properties":{"status":{"type":"string"},"statusLabel":{"type":"string"},"assessmentComplete":{"type":"boolean"},"needsVerification":{"type":"number"},"critical":{"type":"number"},"warnings":{"type":"number"},"cookies":{"type":"number"},"preConsentCookies":{"type":"number"},"thirdParties":{"type":"number"},"jurisdictions":{"type":"number"},"jurisdictionsPassing":{"type":"number"},"jurisdictionsReview":{"type":"number"},"jurisdictionsFailing":{"type":"number"},"checkedAt":{"type":"string"},"reportUid":{"type":"string","nullable":true}},"required":["status","statusLabel","assessmentComplete","needsVerification","critical","warnings","cookies","preConsentCookies","thirdParties","jurisdictions","jurisdictionsPassing","jurisdictionsReview","jurisdictionsFailing","checkedAt","reportUid"],"additionalProperties":false,"nullable":true}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt","latestScan","scanCount","cookieCount","consentCount","guard","compliance"],"additionalProperties":false}}}}}}},"post":{"summary":"Add a new site","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"default":"meta_tag"}},"required":["domain"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"shopDomain":{"type":"string","nullable":true},"limit":{"type":"number"},"current":{"type":"number"}},"required":["error","code"],"additionalProperties":false}}}}}}},"/sites/{id}":{"get":{"summary":"Get site details","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"latestScan":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["full","lighthouse"]},"status":{"type":"string","enum":["pending","running","completed","failed"]},"pagesScanned":{"type":"array","items":{"type":"string"},"nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","type","status","pagesScanned","startedAt","completedAt","error","createdAt"],"additionalProperties":false,"nullable":true},"compliance":{"type":"object","properties":{"status":{"type":"string"},"statusLabel":{"type":"string"},"assessmentComplete":{"type":"boolean"},"needsVerification":{"type":"number"},"critical":{"type":"number"},"warnings":{"type":"number"},"cookies":{"type":"number"},"preConsentCookies":{"type":"number"},"thirdParties":{"type":"number"},"jurisdictions":{"type":"number"},"jurisdictionsPassing":{"type":"number"},"jurisdictionsReview":{"type":"number"},"jurisdictionsFailing":{"type":"number"},"checkedAt":{"type":"string"},"reportUid":{"type":"string","nullable":true}},"required":["status","statusLabel","assessmentComplete","needsVerification","critical","warnings","cookies","preConsentCookies","thirdParties","jurisdictions","jurisdictionsPassing","jurisdictionsReview","jurisdictionsFailing","checkedAt","reportUid"],"additionalProperties":false,"nullable":true},"installMethod":{"type":"string","enum":["widget","gtm","sdk"],"nullable":true}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt","latestScan","compliance","installMethod"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete a site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"patch":{"summary":"Update a site's domain or verification method","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1},"verificationMethod":{"type":"string","enum":["dns","meta_tag"]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/verify":{"post":{"summary":"Trigger site verification","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/scan":{"post":{"summary":"Trigger site scan","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["full","lighthouse"]},"status":{"type":"string","enum":["pending","running","completed","failed"]},"pagesScanned":{"type":"array","items":{"type":"string"},"nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","type","status","pagesScanned","startedAt","completedAt","error","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"limit":{"type":"number"},"used":{"type":"number"},"resetDate":{"type":"string","nullable":true}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/compliance-audit":{"post":{"summary":"Run a compliance audit and publish the report","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"markets":{"type":"array","items":{"type":"string","enum":["EU","US-CA"]},"minItems":1,"maxItems":8}},"required":["markets"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uid":{"type":"string"},"url":{"type":"string"},"reportUrl":{"type":"string"}},"required":["uid","url","reportUrl"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"requiredTiers":{"type":"array","items":{"type":"string"}}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/guard-check":{"post":{"summary":"Check whether the cookie guard is installed","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed"]},"found":{"type":"boolean","nullable":true},"checkedUrl":{"type":"string","nullable":true},"mode":{"type":"string","enum":["widget","headless"],"nullable":true},"version":{"type":"string","nullable":true},"siteIdMatches":{"type":"boolean","nullable":true},"error":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"alreadyRunning":{"type":"boolean"}},"required":["id","status","found","checkedUrl","mode","version","siteIdMatches","error","startedAt","completedAt","createdAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"get":{"summary":"Latest cookie guard check","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed"]},"found":{"type":"boolean","nullable":true},"checkedUrl":{"type":"string","nullable":true},"mode":{"type":"string","enum":["widget","headless"],"nullable":true},"version":{"type":"string","nullable":true},"siteIdMatches":{"type":"boolean","nullable":true},"error":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdAt":{"type":"string"},"alreadyRunning":{"type":"boolean"}},"required":["id","status","found","checkedUrl","mode","version","siteIdMatches","error","startedAt","completedAt","createdAt"],"additionalProperties":false,"nullable":true}}}}}}},"/sites/{id}/guard":{"get":{"summary":"Cookie guard installation state","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["installed","missing","unknown"]},"override":{"type":"string","enum":["confirmed","muted"],"nullable":true},"overrideAt":{"type":"string","nullable":true},"warningsMuted":{"type":"boolean"},"checkedAt":{"type":"string","nullable":true},"detectedAt":{"type":"string","nullable":true},"lastSeenAt":{"type":"string","nullable":true},"mode":{"type":"string","enum":["widget","headless"],"nullable":true},"version":{"type":"string","nullable":true},"siteIdMatches":{"type":"boolean","nullable":true},"pagesWithGuard":{"type":"number","nullable":true},"pagesChecked":{"type":"number","nullable":true}},"required":["status","override","overrideAt","warningsMuted","checkedAt","detectedAt","lastSeenAt","mode","version","siteIdMatches","pagesWithGuard","pagesChecked"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/guard-override":{"put":{"summary":"Confirm, mute, or resume cookie guard checks","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"state":{"type":"string","enum":["confirmed","muted"],"nullable":true}},"required":["state"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["installed","missing","unknown"]},"override":{"type":"string","enum":["confirmed","muted"],"nullable":true},"overrideAt":{"type":"string","nullable":true},"warningsMuted":{"type":"boolean"},"checkedAt":{"type":"string","nullable":true},"detectedAt":{"type":"string","nullable":true},"lastSeenAt":{"type":"string","nullable":true},"mode":{"type":"string","enum":["widget","headless"],"nullable":true},"version":{"type":"string","nullable":true},"siteIdMatches":{"type":"boolean","nullable":true},"pagesWithGuard":{"type":"number","nullable":true},"pagesChecked":{"type":"number","nullable":true}},"required":["status","override","overrideAt","warningsMuted","checkedAt","detectedAt","lastSeenAt","mode","version","siteIdMatches","pagesWithGuard","pagesChecked"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/scans":{"get":{"summary":"List site scans","tags":["Sites"],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":50,"default":10},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["full","lighthouse"]},"status":{"type":"string","enum":["pending","running","completed","failed"]},"pagesScanned":{"type":"array","items":{"type":"string"},"nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","type","status","pagesScanned","startedAt","completedAt","error","createdAt"],"additionalProperties":false}}}}}}}},"/sites/{id}/scheduled-scan":{"get":{"summary":"Next scheduled scan for a site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"dueAt":{"type":"string"},"interval":{"type":"string","enum":["monthly","weekly","daily"],"nullable":true}},"required":["dueAt","interval"],"additionalProperties":false,"nullable":true}}}}}}},"/sites/{id}/pages":{"get":{"summary":"List site pages","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"query","name":"scanId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"path":{"type":"string"},"statusCode":{"type":"number","nullable":true},"loadTimeMs":{"type":"number","nullable":true},"cookiesFound":{"type":"number"},"seoMetrics":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"h1":{"type":"string"},"canonical":{"type":"string"},"robots":{"type":"string"},"ogTitle":{"type":"string"},"ogDescription":{"type":"string"},"ogImage":{"type":"string"},"twitterCard":{"type":"string"},"twitterTitle":{"type":"string"},"twitterDescription":{"type":"string"},"lang":{"type":"string"},"hreflangTags":{"type":"array","items":{"type":"string"}},"structuredData":{"type":"array","items":{}}},"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"}},"required":["id","url","path","statusCode","loadTimeMs","cookiesFound","seoMetrics","createdAt"],"additionalProperties":false}}},"required":["pages"],"additionalProperties":false}}}}}}},"/sites/{id}/settings":{"patch":{"summary":"Update site widget settings","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/branding":{"put":{"summary":"Set the site's brand colours, used by the cookie banner and the accessibility widget","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"secondary":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"background":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"foreground":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"muted":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["primary","secondary","accent","background","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"secondary":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"accent":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"background":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"foreground":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"muted":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["primary","secondary","accent","background","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/install-method":{"put":{"summary":"Remember the install method picked on the Install page","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"installMethod":{"type":"string","enum":["widget","gtm","sdk"]}},"required":["installMethod"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/branding-suggestion/dismiss":{"post":{"summary":"Stop offering the brand palette a scan read off the site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/force-verify":{"post":{"summary":"Force verify a site (development only)","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"verificationStatus":{"type":"string","enum":["pending","verifying","verified","failed"]},"verificationMethod":{"type":"string","enum":["dns","meta_tag"],"nullable":true},"verificationToken":{"type":"string"},"faviconUrl":{"type":"string","nullable":true},"settings":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"theme":{"type":"string","enum":["system","light","dark"]},"layout":{"type":"string","enum":["box","banner","modal"]},"blocking":{"type":"boolean"},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right"]},"radius":{"type":"number","minimum":0,"maximum":10},"googleConsentMode":{"type":"boolean"},"regulation":{"type":"string","enum":["gdpr","ccpa","auto"]},"privacyPolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"cookiePolicyUrl":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"uri"}]},{"type":"string","enum":[""]}]},"equalButtons":{"type":"boolean"},"showSettingsButton":{"type":"boolean"}},"required":["theme","layout","position","radius"],"additionalProperties":false,"nullable":true},"branding":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false}},"required":["colors"],"additionalProperties":false,"nullable":true},"brandingSuggestion":{"type":"object","properties":{"colors":{"type":"object","properties":{"light":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false},"dark":{"type":"object","properties":{"primary":{"type":"string"},"secondary":{"type":"string"},"accent":{"type":"string"},"background":{"type":"string"},"foreground":{"type":"string"},"muted":{"type":"string"}},"required":["primary","secondary","accent","foreground","muted"],"additionalProperties":false}},"required":["light","dark"],"additionalProperties":false},"extractedAt":{"type":"string"},"dismissedAt":{"type":"string"}},"required":["colors","extractedAt"],"additionalProperties":false,"nullable":true},"scanSettings":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","domain","verificationStatus","verificationMethod","verificationToken","faviconUrl","settings","branding","brandingSuggestion","scanSettings","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/lighthouse-scan":{"post":{"summary":"Trigger lighthouse scan","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["full","lighthouse"]},"status":{"type":"string","enum":["pending","running","completed","failed"]},"pagesScanned":{"type":"array","items":{"type":"string"},"nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","type","status","pagesScanned","startedAt","completedAt","error","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"limit":{"type":"number"},"used":{"type":"number"},"resetDate":{"type":"string","nullable":true}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/scan-settings":{"patch":{"summary":"Update site scan settings","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}}},"required":["lighthousePages"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"lighthousePages":{"type":"array","items":{"type":"string"}},"enableLighthouse":{"type":"boolean"}},"required":["lighthousePages","enableLighthouse"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/lighthouse-history":{"get":{"summary":"Get lighthouse history for a site","tags":["Sites"],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":100,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"siteId":{"type":"string"},"scanId":{"type":"string"},"path":{"type":"string"},"performance":{"type":"number","nullable":true},"accessibility":{"type":"number","nullable":true},"bestPractices":{"type":"number","nullable":true},"seo":{"type":"number","nullable":true},"pwa":{"type":"number","nullable":true},"firstContentfulPaint":{"type":"number","nullable":true},"largestContentfulPaint":{"type":"number","nullable":true},"totalBlockingTime":{"type":"number","nullable":true},"cumulativeLayoutShift":{"type":"number","nullable":true},"speedIndex":{"type":"number","nullable":true},"scannedAt":{"type":"string"}},"required":["id","pageId","siteId","scanId","path","performance","accessibility","bestPractices","seo","pwa","firstContentfulPaint","largestContentfulPaint","totalBlockingTime","cumulativeLayoutShift","speedIndex","scannedAt"],"additionalProperties":false}}}}}}}},"/sites/{id}/accessibility":{"get":{"summary":"Get accessibility results for a site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"query","name":"scanId","required":false},{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":200,"default":100},"in":"query","name":"ruleLimit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scanId":{"type":"string","nullable":true},"scannedAt":{"type":"string","nullable":true},"detailAvailable":{"type":"boolean"},"summary":{"type":"object","properties":{"pagesAudited":{"type":"number"},"violations":{"type":"number"},"violationNodes":{"type":"number"},"incomplete":{"type":"number"},"incompleteNodes":{"type":"number"},"passes":{"type":"number"},"eaaViolations":{"type":"number"},"critical":{"type":"number"},"serious":{"type":"number"},"moderate":{"type":"number"},"minor":{"type":"number"},"axeVersion":{"type":"string","nullable":true},"score":{"type":"number","nullable":true},"grade":{"type":"string","enum":["Good","Needs improvement","Poor"],"nullable":true}},"required":["pagesAudited","violations","violationNodes","incomplete","incompleteNodes","passes","eaaViolations","critical","serious","moderate","minor","axeVersion","score","grade"],"additionalProperties":false,"nullable":true},"rules":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"type":{"type":"string","enum":["violation","incomplete"]},"impact":{"type":"string","enum":["minor","moderate","serious","critical"],"nullable":true},"help":{"type":"string"},"helpUrl":{"type":"string","nullable":true},"wcagCriteria":{"type":"array","items":{"type":"string"}},"enClauses":{"type":"array","items":{"type":"string"}},"pagesAffected":{"type":"number"},"nodeCount":{"type":"number"}},"required":["ruleId","type","impact","help","helpUrl","wcagCriteria","enClauses","pagesAffected","nodeCount"],"additionalProperties":false}},"pages":{"type":"array","items":{"type":"object","properties":{"pageId":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"violations":{"type":"number"},"violationNodes":{"type":"number"},"incomplete":{"type":"number"},"eaaViolations":{"type":"number"},"critical":{"type":"number"},"serious":{"type":"number"},"moderate":{"type":"number"},"minor":{"type":"number"}},"required":["pageId","path","url","violations","violationNodes","incomplete","eaaViolations","critical","serious","moderate","minor"],"additionalProperties":false}}},"required":["scanId","scannedAt","detailAvailable","summary","rules","pages"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/accessibility/findings":{"get":{"summary":"Get element-level accessibility findings for a site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"query","name":"scanId","required":false},{"schema":{"type":"string","enum":["violation","incomplete"]},"in":"query","name":"type","required":false},{"schema":{"type":"string"},"in":"query","name":"ruleId","required":false},{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":500,"default":200},"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0,"default":0},"in":"query","name":"offset","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"scanId":{"type":"string","nullable":true},"findings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"path":{"type":"string"},"type":{"type":"string","enum":["violation","incomplete"]},"ruleId":{"type":"string"},"impact":{"type":"string","enum":["minor","moderate","serious","critical"],"nullable":true},"help":{"type":"string"},"helpUrl":{"type":"string","nullable":true},"wcagCriteria":{"type":"array","items":{"type":"string"}},"enClauses":{"type":"array","items":{"type":"string"}},"nodeCount":{"type":"number"},"nodes":{"type":"array","items":{"type":"object","properties":{"target":{"type":"array","items":{"type":"string"}},"html":{"type":"string"},"failureSummary":{"type":"string"}},"required":["target","html"],"additionalProperties":false}}},"required":["id","pageId","path","type","ruleId","impact","help","helpUrl","wcagCriteria","enClauses","nodeCount","nodes"],"additionalProperties":false}}},"required":["scanId","findings"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"requiredTiers":{"type":"array","items":{"type":"string"}}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/accessibility/history":{"get":{"summary":"Get accessibility history for a site","tags":["Sites"],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":100,"default":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"scanId":{"type":"string"},"scannedAt":{"type":"string"},"pagesAudited":{"type":"number"},"violations":{"type":"number"},"eaaViolations":{"type":"number"},"score":{"type":"number","nullable":true},"grade":{"type":"string","enum":["Good","Needs improvement","Poor"],"nullable":true}},"required":["scanId","scannedAt","pagesAudited","violations","eaaViolations","score","grade"],"additionalProperties":false}}}}}}}},"/sites/{id}/privacy-policy":{"get":{"summary":"Get privacy policy data","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"privacyPolicy":{"type":"object","properties":{"companyName":{"type":"string"},"contactEmail":{"type":"string"},"dpoEmail":{"type":"string"},"companyAddress":{"type":"string"},"companyRegistrationNumber":{"type":"string"},"generatedAt":{"type":"string"}},"required":["companyName","contactEmail","generatedAt"],"additionalProperties":false,"nullable":true}},"required":["privacyPolicy"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"patch":{"summary":"Update privacy policy data","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"companyName":{"type":"string","minLength":1},"contactEmail":{"type":"string","format":"email"},"dpoEmail":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","format":"email"}]},{"type":"string","enum":[""]}]},"companyAddress":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"string","enum":[""]}]},"companyRegistrationNumber":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string"}]},{"type":"string","enum":[""]}]}},"required":["companyName","contactEmail"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"privacyPolicy":{"type":"object","properties":{"companyName":{"type":"string"},"contactEmail":{"type":"string"},"dpoEmail":{"type":"string"},"companyAddress":{"type":"string"},"companyRegistrationNumber":{"type":"string"},"generatedAt":{"type":"string"}},"required":["companyName","contactEmail","generatedAt"],"additionalProperties":false}},"required":["privacyPolicy"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/consents":{"get":{"summary":"Get consents for a site","tags":["Sites"],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":500,"default":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"consents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"consentType":{"type":"string","enum":["all","partial","rejected","optedOut"]},"categories":{"type":"array","items":{"type":"string"},"nullable":true},"userAgent":{"type":"string","nullable":true},"ipAddress":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","siteId","consentType","categories","userAgent","ipAddress","createdAt"],"additionalProperties":false}},"stats":{"type":"object","properties":{"total":{"type":"number"},"acceptAll":{"type":"number"},"partial":{"type":"number"},"rejected":{"type":"number"},"categoryStats":{"type":"object","additionalProperties":{"type":"number"}}},"required":["total","acceptAll","partial","rejected","categoryStats"],"additionalProperties":false}},"required":["consents","stats"],"additionalProperties":false}}}}}}},"/sites/{siteId}/cookies":{"get":{"summary":"List cookies for a site","tags":["Cookies"],"parameters":[{"schema":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"in":"query","name":"category","required":false},{"schema":{"type":"string","enum":["cookie","pixel"]},"in":"query","name":"type","required":false},{"schema":{"type":"string"},"in":"query","name":"locale","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"siteId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cookies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"type":{"type":"string","enum":["cookie","pixel"]},"path":{"type":"string"},"expires":{"type":"string","nullable":true},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"sameSite":{"type":"string","enum":["strict","lax","none"],"nullable":true},"classification":{"type":"object","properties":{"id":{"type":"string"},"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"source":{"type":"string","enum":["auto","manual"]},"confidence":{"type":"number","nullable":true}},"required":["id","category","source","confidence"],"additionalProperties":false,"nullable":true},"platform":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"dataController":{"type":"string","nullable":true},"gdprPortalUrl":{"type":"string","nullable":true},"descriptionSource":{"type":"string","enum":["custom","definition"],"nullable":true},"resourceType":{"type":"string","nullable":true},"sourceUrl":{"type":"string","nullable":true},"matchedDomain":{"type":"string","nullable":true},"trackerCategory":{"type":"string","nullable":true},"responseStatus":{"type":"number","nullable":true},"contentType":{"type":"string","nullable":true},"transferBytes":{"type":"number","nullable":true},"imageWidth":{"type":"number","nullable":true},"imageHeight":{"type":"number","nullable":true},"kind":{"type":"string","enum":["tracking-pixel","script","beacon","asset","unknown"],"nullable":true},"foundOnPath":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","name","domain","type","path","expires","httpOnly","secure","sameSite","classification","platform","description","dataController","gdprPortalUrl","descriptionSource","resourceType","sourceUrl","matchedDomain","trackerCategory","responseStatus","contentType","transferBytes","imageWidth","imageHeight","kind","foundOnPath","createdAt"],"additionalProperties":false}},"summary":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"count":{"type":"number"}},"required":["category","count"],"additionalProperties":false}}},"required":["cookies","summary"],"additionalProperties":false}}}}}}},"/cookies/{id}":{"patch":{"summary":"Update cookie classification","tags":["Cookies"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]}},"required":["category"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"type":{"type":"string","enum":["cookie","pixel"]},"path":{"type":"string"},"expires":{"type":"string","nullable":true},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"sameSite":{"type":"string","enum":["strict","lax","none"],"nullable":true},"classification":{"type":"object","properties":{"id":{"type":"string"},"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"source":{"type":"string","enum":["auto","manual"]},"confidence":{"type":"number","nullable":true}},"required":["id","category","source","confidence"],"additionalProperties":false,"nullable":true},"platform":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"dataController":{"type":"string","nullable":true},"gdprPortalUrl":{"type":"string","nullable":true},"descriptionSource":{"type":"string","enum":["custom","definition"],"nullable":true},"resourceType":{"type":"string","nullable":true},"sourceUrl":{"type":"string","nullable":true},"matchedDomain":{"type":"string","nullable":true},"trackerCategory":{"type":"string","nullable":true},"responseStatus":{"type":"number","nullable":true},"contentType":{"type":"string","nullable":true},"transferBytes":{"type":"number","nullable":true},"imageWidth":{"type":"number","nullable":true},"imageHeight":{"type":"number","nullable":true},"kind":{"type":"string","enum":["tracking-pixel","script","beacon","asset","unknown"],"nullable":true},"foundOnPath":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","name","domain","type","path","expires","httpOnly","secure","sameSite","classification","platform","description","dataController","gdprPortalUrl","descriptionSource","resourceType","sourceUrl","matchedDomain","trackerCategory","responseStatus","contentType","transferBytes","imageWidth","imageHeight","kind","foundOnPath","createdAt"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{siteId}/cookies/export":{"get":{"summary":"Export cookie data as JSON","tags":["Cookies"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"locale","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"siteId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"],"additionalProperties":false},"exportedAt":{"type":"string"},"cookies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"type":{"type":"string","enum":["cookie","pixel"]},"path":{"type":"string"},"expires":{"type":"string","nullable":true},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"sameSite":{"type":"string","enum":["strict","lax","none"],"nullable":true},"classification":{"type":"object","properties":{"id":{"type":"string"},"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"source":{"type":"string","enum":["auto","manual"]},"confidence":{"type":"number","nullable":true}},"required":["id","category","source","confidence"],"additionalProperties":false,"nullable":true},"platform":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"dataController":{"type":"string","nullable":true},"gdprPortalUrl":{"type":"string","nullable":true},"descriptionSource":{"type":"string","enum":["custom","definition"],"nullable":true},"resourceType":{"type":"string","nullable":true},"sourceUrl":{"type":"string","nullable":true},"matchedDomain":{"type":"string","nullable":true},"trackerCategory":{"type":"string","nullable":true},"responseStatus":{"type":"number","nullable":true},"contentType":{"type":"string","nullable":true},"transferBytes":{"type":"number","nullable":true},"imageWidth":{"type":"number","nullable":true},"imageHeight":{"type":"number","nullable":true},"kind":{"type":"string","enum":["tracking-pixel","script","beacon","asset","unknown"],"nullable":true},"foundOnPath":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","name","domain","type","path","expires","httpOnly","secure","sameSite","classification","platform","description","dataController","gdprPortalUrl","descriptionSource","resourceType","sourceUrl","matchedDomain","trackerCategory","responseStatus","contentType","transferBytes","imageWidth","imageHeight","kind","foundOnPath","createdAt"],"additionalProperties":false}},"summary":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"count":{"type":"number"}},"required":["category","count"],"additionalProperties":false}}},"required":["site","exportedAt","cookies","summary"],"additionalProperties":false}}}}}}},"/sites/{siteId}/cookie-descriptions":{"get":{"summary":"List custom cookie descriptions for a site","tags":["Cookies"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"siteId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"supportedLocales":{"type":"array","items":{"type":"string"}},"overrides":{"type":"array","items":{"type":"object","properties":{"cookieName":{"type":"string"},"cookieDomain":{"type":"string"},"locale":{"type":"string"},"description":{"type":"string"},"updatedAt":{"type":"string"}},"required":["cookieName","cookieDomain","locale","description","updatedAt"],"additionalProperties":false}}},"required":["supportedLocales","overrides"],"additionalProperties":false}}}}}}},"/cookies/{id}/descriptions":{"get":{"summary":"List custom descriptions for a single cookie","tags":["Cookies"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cookieName":{"type":"string"},"cookieDomain":{"type":"string"},"defaultDescription":{"type":"string","nullable":true},"supportedLocales":{"type":"array","items":{"type":"string"}},"overrides":{"type":"array","items":{"type":"object","properties":{"cookieName":{"type":"string"},"cookieDomain":{"type":"string"},"locale":{"type":"string"},"description":{"type":"string"},"updatedAt":{"type":"string"}},"required":["cookieName","cookieDomain","locale","description","updatedAt"],"additionalProperties":false}}},"required":["cookieName","cookieDomain","defaultDescription","supportedLocales","overrides"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/cookies/{id}/description":{"put":{"summary":"Set a custom cookie description for one locale","tags":["Cookies"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"locale":{"type":"string"},"description":{"type":"string","minLength":1,"maxLength":2000}},"required":["locale","description"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"cookieName":{"type":"string"},"cookieDomain":{"type":"string"},"locale":{"type":"string"},"description":{"type":"string"},"updatedAt":{"type":"string"}},"required":["cookieName","cookieDomain","locale","description","updatedAt"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"summary":"Remove a custom cookie description for one locale","tags":["Cookies"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"locale","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/gtm":{"get":{"summary":"Get the Google Tag Manager connection for a site","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"connected":{"type":"boolean"},"available":{"type":"boolean"},"snippet":{"type":"string"},"connection":{"type":"object","properties":{"googleEmail":{"type":"string","nullable":true},"accountId":{"type":"string"},"accountName":{"type":"string","nullable":true},"containerId":{"type":"string"},"containerPublicId":{"type":"string"},"containerName":{"type":"string","nullable":true},"workspaceId":{"type":"string"},"workspaceName":{"type":"string","nullable":true},"tagId":{"type":"string","nullable":true},"triggerId":{"type":"string","nullable":true},"versionId":{"type":"string","nullable":true},"publishedAt":{"type":"string","nullable":true},"containerUrl":{"type":"string"},"updatedAt":{"type":"string"}},"required":["googleEmail","accountId","accountName","containerId","containerPublicId","containerName","workspaceId","workspaceName","tagId","triggerId","versionId","publishedAt","containerUrl","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["connected","available","snippet","connection"],"additionalProperties":false}}}}}},"delete":{"summary":"Disconnect Google Tag Manager and remove the Katla tag","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"removedTag":{"type":"boolean"}},"required":["removedTag"],"additionalProperties":false}}}}}}},"/sites/{id}/gtm/authorize":{"post":{"summary":"Start the Google authorization for a Tag Manager install","tags":["Sites"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/gtm/connect":{"post":{"summary":"Exchange a Google authorization code and store the connection","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1},"state":{"type":"string","minLength":1}},"required":["code","state"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"name":{"type":"string"}},"required":["accountId","name"],"additionalProperties":false}}},"required":["accounts"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/gtm/containers":{"get":{"summary":"List Tag Manager containers and workspaces for an account","tags":["Sites"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"accountId","required":true},{"schema":{"type":"string"},"in":"query","name":"containerId","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"containerId":{"type":"string"},"publicId":{"type":"string"},"name":{"type":"string"},"domainName":{"type":"array","items":{"type":"string"}}},"required":["accountId","containerId","publicId","name","domainName"],"additionalProperties":false}},"workspaces":{"type":"array","items":{"type":"object","properties":{"workspaceId":{"type":"string"},"name":{"type":"string"}},"required":["workspaceId","name"],"additionalProperties":false}}},"required":["containers","workspaces"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/sites/{id}/gtm/install":{"post":{"summary":"Create the Katla tag in a Tag Manager container","tags":["Sites"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","minLength":1},"accountName":{"type":"string"},"containerId":{"type":"string","minLength":1},"containerPublicId":{"type":"string","minLength":1},"containerName":{"type":"string"},"workspaceId":{"type":"string","minLength":1},"workspaceName":{"type":"string"},"publish":{"type":"boolean","default":false},"theme":{"type":"string","enum":["system","light","dark"]},"locale":{"type":"string"}},"required":["accountId","containerId","containerPublicId","workspaceId"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"connected":{"type":"boolean"},"available":{"type":"boolean"},"snippet":{"type":"string"},"connection":{"type":"object","properties":{"googleEmail":{"type":"string","nullable":true},"accountId":{"type":"string"},"accountName":{"type":"string","nullable":true},"containerId":{"type":"string"},"containerPublicId":{"type":"string"},"containerName":{"type":"string","nullable":true},"workspaceId":{"type":"string"},"workspaceName":{"type":"string","nullable":true},"tagId":{"type":"string","nullable":true},"triggerId":{"type":"string","nullable":true},"versionId":{"type":"string","nullable":true},"publishedAt":{"type":"string","nullable":true},"containerUrl":{"type":"string"},"updatedAt":{"type":"string"}},"required":["googleEmail","accountId","accountName","containerId","containerPublicId","containerName","workspaceId","workspaceName","tagId","triggerId","versionId","publishedAt","containerUrl","updatedAt"],"additionalProperties":false,"nullable":true},"published":{"type":"boolean"}},"required":["connected","available","snippet","connection","published"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/plans":{"get":{"summary":"List available billing plans","tags":["Billing"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tier":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"monthlyPricePerSite":{"type":"number"},"annualPricePerSite":{"type":"number"},"maxPages":{"type":"number"},"maxScansPerMonth":{"type":"number"},"maxConsentsPerMonth":{"type":"number"},"maxUsers":{"type":"number"},"maxSites":{"type":"number"},"scheduledScanInterval":{"type":"string","enum":["monthly","weekly","daily"],"nullable":true},"localPrices":{"type":"object","additionalProperties":{"type":"object","properties":{"monthly":{"type":"number"},"annual":{"type":"number"}},"required":["monthly","annual"],"additionalProperties":false},"nullable":true},"features":{"type":"object","properties":{"accessibilityDetail":{"type":"boolean"},"complianceAudit":{"type":"boolean"},"serviceAccounts":{"type":"boolean"},"whitelabel":{"type":"boolean"},"unbrandedA11yWidget":{"type":"boolean"},"aiCookieDescriptions":{"type":"boolean"}},"required":["accessibilityDetail","complianceAudit","serviceAccounts","whitelabel","unbrandedA11yWidget","aiCookieDescriptions"],"additionalProperties":false},"contract":{"type":"object","properties":{"monthlyPrice":{"type":"number"},"currency":{"type":"string"},"daysUntilDue":{"type":"number"}},"required":["monthlyPrice","currency","daysUntilDue"],"additionalProperties":false,"nullable":true}},"required":["id","tier","name","description","monthlyPricePerSite","annualPricePerSite","maxPages","maxScansPerMonth","maxConsentsPerMonth","maxUsers","maxSites","scheduledScanInterval","localPrices","features","contract"],"additionalProperties":false}}}}}}}},"/admin/seed-plans":{"post":{"summary":"Seed/update billing plan limits","tags":["Admin"],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"type":"object","properties":{"shopifyPlanHandles":{"type":"object","additionalProperties":{"type":"object","properties":{"monthly":{"type":"string","nullable":true},"annual":{"type":"string","nullable":true}},"additionalProperties":false}}},"additionalProperties":false,"nullable":true}]}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"array","items":{"type":"string"}}},"required":["updated"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/admin/shopify-plans":{"get":{"summary":"Show which Shopify plan handles map to which tier","tags":["Admin"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"tier":{"type":"string"},"name":{"type":"string"},"monthlyHandle":{"type":"string","nullable":true},"annualHandle":{"type":"string","nullable":true},"sharedHandle":{"type":"boolean"}},"required":["tier","name","monthlyHandle","annualHandle","sharedHandle"],"additionalProperties":false}},"unmappedTiers":{"type":"array","items":{"type":"string"}},"duplicateHandles":{"type":"array","items":{"type":"string"}}},"required":["plans","unmappedTiers","duplicateHandles"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing":{"get":{"summary":"Get billing overview for team","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["stripe","shopify","manual"]},"subscription":{"type":"object","properties":{"id":{"type":"string"},"teamId":{"type":"string"},"planId":{"type":"string"},"provider":{"type":"string","enum":["stripe","shopify","manual"]},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"scansUsedThisPeriod":{"type":"number"},"cancelAtPeriodEnd":{"type":"boolean"},"currency":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","teamId","planId","provider","billingInterval","status","currentPeriodStart","currentPeriodEnd","scansUsedThisPeriod","cancelAtPeriodEnd","currency","createdAt"],"additionalProperties":false},"plan":{"type":"object","properties":{"id":{"type":"string"},"tier":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"monthlyPricePerSite":{"type":"number"},"annualPricePerSite":{"type":"number"},"maxPages":{"type":"number"},"maxScansPerMonth":{"type":"number"},"maxConsentsPerMonth":{"type":"number"},"maxUsers":{"type":"number"},"maxSites":{"type":"number"},"scheduledScanInterval":{"type":"string","enum":["monthly","weekly","daily"],"nullable":true},"localPrices":{"type":"object","additionalProperties":{"type":"object","properties":{"monthly":{"type":"number"},"annual":{"type":"number"}},"required":["monthly","annual"],"additionalProperties":false},"nullable":true},"features":{"type":"object","properties":{"accessibilityDetail":{"type":"boolean"},"complianceAudit":{"type":"boolean"},"serviceAccounts":{"type":"boolean"},"whitelabel":{"type":"boolean"},"unbrandedA11yWidget":{"type":"boolean"},"aiCookieDescriptions":{"type":"boolean"}},"required":["accessibilityDetail","complianceAudit","serviceAccounts","whitelabel","unbrandedA11yWidget","aiCookieDescriptions"],"additionalProperties":false},"contract":{"type":"object","properties":{"monthlyPrice":{"type":"number"},"currency":{"type":"string"},"daysUntilDue":{"type":"number"}},"required":["monthlyPrice","currency","daysUntilDue"],"additionalProperties":false,"nullable":true}},"required":["id","tier","name","description","monthlyPricePerSite","annualPricePerSite","maxPages","maxScansPerMonth","maxConsentsPerMonth","maxUsers","maxSites","scheduledScanInterval","localPrices","features","contract"],"additionalProperties":false},"usage":{"type":"object","properties":{"scansUsed":{"type":"number"},"scansLimit":{"type":"number"},"consentsUsed":{"type":"number"},"consentsLimit":{"type":"number"},"pagesLimit":{"type":"number"},"usersLimit":{"type":"number"},"sitesLimit":{"type":"number"},"siteCount":{"type":"number"}},"required":["scansUsed","scansLimit","consentsUsed","consentsLimit","pagesLimit","usersLimit","sitesLimit","siteCount"],"additionalProperties":false},"paymentMethods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"cardBrand":{"type":"string","nullable":true},"cardLast4":{"type":"string","nullable":true},"cardExpMonth":{"type":"number","nullable":true},"cardExpYear":{"type":"number","nullable":true},"isDefault":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","cardBrand","cardLast4","cardExpMonth","cardExpYear","isDefault","createdAt"],"additionalProperties":false}},"shopify":{"type":"object","properties":{"shopDomain":{"type":"string"},"planSelectionUrl":{"type":"string","nullable":true},"appHomeUrl":{"type":"string","nullable":true},"lastSyncedAt":{"type":"string","nullable":true}},"required":["shopDomain","planSelectionUrl","appHomeUrl","lastSyncedAt"],"additionalProperties":false,"nullable":true}},"required":["provider","subscription","plan","usage","paymentMethods","shopify"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/profile":{"get":{"summary":"Get the billing profile the team is invoiced as","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"profile":{"type":"object","properties":{"country":{"type":"string"},"legalName":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string","nullable":true},"postalCode":{"type":"string"},"city":{"type":"string"},"vatNumber":{"type":"string","nullable":true},"updatedAt":{"type":"string"}},"required":["country","legalName","addressLine1","addressLine2","postalCode","city","vatNumber","updatedAt"],"additionalProperties":false,"nullable":true},"currency":{"type":"string"},"lockedCurrency":{"type":"string","nullable":true}},"required":["profile","currency","lockedCurrency"],"additionalProperties":false}}}}}},"put":{"summary":"Save the billing profile","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"legalName":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string","nullable":true},"postalCode":{"type":"string"},"city":{"type":"string"},"vatNumber":{"type":"string","nullable":true}},"required":["country","legalName","addressLine1","postalCode","city"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"profile":{"type":"object","properties":{"country":{"type":"string"},"legalName":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string","nullable":true},"postalCode":{"type":"string"},"city":{"type":"string"},"vatNumber":{"type":"string","nullable":true},"updatedAt":{"type":"string"}},"required":["country","legalName","addressLine1","addressLine2","postalCode","city","vatNumber","updatedAt"],"additionalProperties":false,"nullable":true},"currency":{"type":"string"},"lockedCurrency":{"type":"string","nullable":true}},"required":["profile","currency","lockedCurrency"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"field":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/subscribe":{"post":{"summary":"Create or update subscription","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"planId":{"type":"string","format":"uuid"},"billingInterval":{"type":"string","enum":["monthly","annual"]},"successUrl":{"type":"string","format":"uri"},"cancelUrl":{"type":"string","format":"uri"},"voucher":{"type":"string","maxLength":60}},"required":["planId","billingInterval"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"checkoutUrl":{"type":"string","nullable":true}},"required":["checkoutUrl"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"field":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/change-plan":{"post":{"summary":"Change subscription plan","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"planId":{"type":"string","format":"uuid"},"billingInterval":{"type":"string","enum":["monthly","annual"]}},"required":["planId","billingInterval"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"teamId":{"type":"string"},"planId":{"type":"string"},"provider":{"type":"string","enum":["stripe","shopify","manual"]},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"scansUsedThisPeriod":{"type":"number"},"cancelAtPeriodEnd":{"type":"boolean"},"currency":{"type":"string"},"createdAt":{"type":"string"},"refund":{"type":"object","properties":{"refundAmountCents":{"type":"number"},"remainingDays":{"type":"number"}},"required":["refundAmountCents","remainingDays"],"additionalProperties":false,"nullable":true},"prorationAmountCents":{"type":"number"}},"required":["id","teamId","planId","provider","billingInterval","status","currentPeriodStart","currentPeriodEnd","scansUsedThisPeriod","cancelAtPeriodEnd","currency","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"field":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/cancel":{"post":{"summary":"Cancel subscription at end of period","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"teamId":{"type":"string"},"planId":{"type":"string"},"provider":{"type":"string","enum":["stripe","shopify","manual"]},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"scansUsedThisPeriod":{"type":"number"},"cancelAtPeriodEnd":{"type":"boolean"},"currency":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","teamId","planId","provider","billingInterval","status","currentPeriodStart","currentPeriodEnd","scansUsedThisPeriod","cancelAtPeriodEnd","currency","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/reactivate":{"post":{"summary":"Reactivate a canceled subscription","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"teamId":{"type":"string"},"planId":{"type":"string"},"provider":{"type":"string","enum":["stripe","shopify","manual"]},"billingInterval":{"type":"string","enum":["monthly","annual"],"nullable":true},"status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"scansUsedThisPeriod":{"type":"number"},"cancelAtPeriodEnd":{"type":"boolean"},"currency":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","teamId","planId","provider","billingInterval","status","currentPeriodStart","currentPeriodEnd","scansUsedThisPeriod","cancelAtPeriodEnd","currency","createdAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/payment-methods":{"get":{"summary":"List payment methods","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"cardBrand":{"type":"string","nullable":true},"cardLast4":{"type":"string","nullable":true},"cardExpMonth":{"type":"number","nullable":true},"cardExpYear":{"type":"number","nullable":true},"isDefault":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","cardBrand","cardLast4","cardExpMonth","cardExpYear","isDefault","createdAt"],"additionalProperties":false}}}}}}},"post":{"summary":"Add payment method after SetupIntent completion","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"stripePaymentMethodId":{"type":"string"},"setAsDefault":{"type":"boolean","default":true}},"required":["stripePaymentMethodId"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/setup-intent":{"post":{"summary":"Create Stripe SetupIntent for adding payment method","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"clientSecret":{"type":"string"}},"required":["clientSecret"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/payment-methods/{id}":{"delete":{"summary":"Remove payment method","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/payment-methods/{id}/set-default":{"post":{"summary":"Set payment method as default","tags":["Billing"],"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"id","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/invoices":{"get":{"summary":"Get invoice history","tags":["Billing"],"parameters":[{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":50,"default":20},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"amountCents":{"type":"number","nullable":true},"currency":{"type":"string"},"description":{"type":"string","nullable":true},"stripeInvoiceUrl":{"type":"string","nullable":true},"createdAt":{"type":"string"}},"required":["id","amountCents","currency","description","stripeInvoiceUrl","createdAt"],"additionalProperties":false}}}}}}}},"/teams/{teamId}/billing/provider":{"post":{"summary":"Switch this team between Stripe and Shopify billing","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["stripe","shopify"]}},"required":["provider"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["stripe","shopify","manual"]},"previousProvider":{"type":"string","enum":["stripe","shopify","manual"]},"changed":{"type":"boolean"}},"required":["provider","previousProvider","changed"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/teams/{teamId}/billing/portal":{"post":{"summary":"Create Stripe billing portal session","tags":["Billing"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"returnUrl":{"type":"string","format":"uri"}},"required":["returnUrl"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","format":"uuid"},"in":"path","name":"teamId","required":true}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"provider":{"type":"string"}},"required":["error","provider"],"additionalProperties":false}}}}}}},"/admin/translate-definitions":{"post":{"summary":"Enqueue translation backfill jobs for cookie definitions","tags":["Admin"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"type":"number"},"definitions":{"type":"number"}},"required":["jobs","definitions"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/admin/translate-definitions/status":{"get":{"summary":"Show how many cookie-definition translations are missing","tags":["Admin"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"in":"query","name":"limit","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"totalDefinitions":{"type":"number"},"fullyTranslated":{"type":"number"},"untranslatedDefinitions":{"type":"number"},"percentComplete":{"type":"number"},"expectedLocales":{"type":"array","items":{"type":"string"}},"perLocale":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string"},"translated":{"type":"number"},"missing":{"type":"number"}},"required":["locale","translated","missing"],"additionalProperties":false}},"runsRemaining":{"type":"number"},"runLimit":{"type":"number"}},"required":["totalDefinitions","fullyTranslated","untranslatedDefinitions","percentComplete","expectedLocales","perLocale","runsRemaining","runLimit"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/contact":{"post":{"summary":"Send a message from the public contact form","tags":["Contact"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","enum":["Sales & custom plan","Support","Migration","Partnership","Other"]},"name":{"type":"string","maxLength":200},"email":{"type":"string","maxLength":320,"pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"},"company":{"type":"string","maxLength":200},"site":{"type":"string","maxLength":500},"message":{"type":"string","minLength":1,"maxLength":5000},"turnstileToken":{"type":"string","maxLength":2048}},"required":["topic","email","message"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"502":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/tools/gcm-check":{"post":{"summary":"Start a Google Consent Mode check for one URL","tags":["Tools"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000}},"required":["url"],"additionalProperties":false}}},"required":true},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"checkId":{"type":"string"},"url":{"type":"string"},"cached":{"type":"boolean"}},"required":["checkId","url","cached"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/tools/gcm-check/{checkId}":{"get":{"summary":"Read the result of a Google Consent Mode check","tags":["Tools"],"parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"in":"path","name":"checkId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"checkId":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed"]},"progress":{"type":"number"},"result":{"type":"object","properties":{"finalUrl":{"type":"string"},"statusCode":{"type":"number","nullable":true},"googleTagFound":{"type":"boolean"},"tagIds":{"type":"array","items":{"type":"string"}},"consentCalls":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["default","update"]},"atMs":{"type":"number"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"array","items":{"type":"string"}}]}}},"required":["type","atMs","params"],"additionalProperties":false}},"resolvedSignals":{"type":"object","additionalProperties":{"type":"boolean"},"nullable":true},"ics":{"type":"object","properties":{"usedDefault":{"type":"boolean"},"usedUpdate":{"type":"boolean"},"usedImplicit":{"type":"boolean"},"wasSetLate":{"type":"boolean"},"waitPeriodTimedOut":{"type":"boolean"},"explicitDefaults":{"type":"array","items":{"type":"string"}},"implicitDefaults":{"type":"array","items":{"type":"string"}}},"required":["usedDefault","usedUpdate","usedImplicit","wasSetLate","waitPeriodTimedOut","explicitDefaults","implicitDefaults"],"additionalProperties":false,"nullable":true},"gcsObserved":{"type":"array","items":{"type":"string"}},"gcsAfterConsent":{"type":"array","items":{"type":"string"}},"consentVia":{"type":"string","nullable":true},"waitForUpdateMs":{"type":"number","nullable":true},"regions":{"type":"array","items":{"type":"string"},"nullable":true},"checks":{"type":"array","items":{"type":"object","properties":{"n":{"type":"number"},"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["pass","warn","fail","info"]},"detail":{"type":"string"},"evidence":{"type":"string","nullable":true}},"required":["n","id","title","status","detail","evidence"],"additionalProperties":false}},"score":{"type":"object","properties":{"passed":{"type":"number"},"total":{"type":"number"}},"required":["passed","total"],"additionalProperties":false}},"required":["finalUrl","statusCode","googleTagFound","tagIds","consentCalls","gcsObserved","score"],"additionalProperties":false,"nullable":true},"error":{"type":"string","nullable":true},"createdAt":{"type":"string"},"completedAt":{"type":"string","nullable":true}},"required":["checkId","url","status","progress","result","error","createdAt","completedAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/tools/cookie-check":{"post":{"summary":"Start a pre-consent cookie check for one URL","tags":["Tools"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000}},"required":["url"],"additionalProperties":false}}},"required":true},"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"checkId":{"type":"string"},"url":{"type":"string"},"cached":{"type":"boolean"}},"required":["checkId","url","cached"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/tools/cookie-check/{checkId}/claim":{"post":{"summary":"Claim the three months free offered on a failing check","tags":["Tools"],"parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"in":"path","name":"checkId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"claimed":{"type":"boolean","enum":[true]},"domain":{"type":"string"},"expiresAt":{"type":"string"}},"required":["claimed","domain","expiresAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/tools/cookie-check/{checkId}":{"get":{"summary":"Read the result of a cookie check","tags":["Tools"],"parameters":[{"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"in":"path","name":"checkId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"checkId":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","failed"]},"progress":{"type":"number"},"result":{"type":"object","properties":{"finalUrl":{"type":"string"},"statusCode":{"type":"number","nullable":true},"cookies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"domain":{"type":"string"},"category":{"type":"string","enum":["functional","personalization","analytics","marketing","security","unknown"]},"platform":{"type":"string","nullable":true},"purpose":{"type":"string","nullable":true},"party":{"type":"string","enum":["first","third"]},"duration":{"type":"string","nullable":true},"source":{"type":"string","enum":["database","heuristic","model","unknown"]},"preConsent":{"type":"boolean"}},"required":["name","domain","category","platform","purpose","party","duration","source"],"additionalProperties":false}},"nonEssentialCount":{"type":"number"},"preConsentCount":{"type":"number"},"nonEssentialBeforeConsent":{"type":"number"},"thirdPartyHosts":{"type":"array","items":{"type":"string"}},"cmpDetected":{"type":"string","nullable":true},"katlaDetected":{"type":"boolean"},"consentAccepted":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pass","warn","fail","info"]},"title":{"type":"string"},"detail":{"type":"string"}},"required":["id","status","title","detail"],"additionalProperties":false}},"score":{"type":"object","properties":{"pass":{"type":"number"},"warn":{"type":"number"},"fail":{"type":"number"}},"required":["pass","warn","fail"],"additionalProperties":false},"compliance":{"type":"object","properties":{"domain":{"type":"string"},"status":{"type":"string"},"statusLabel":{"type":"string"},"assessmentComplete":{"type":"boolean"},"needsVerification":{"type":"number"},"cookies":{"type":"number"},"preConsentCookies":{"type":"number"},"thirdParties":{"type":"number"},"jurisdictions":{"type":"number"},"jurisdictionsPassing":{"type":"number"},"jurisdictionsReview":{"type":"number"},"jurisdictionsFailing":{"type":"number"},"critical":{"type":"number"},"warnings":{"type":"number"}},"required":["domain","status","statusLabel","cookies","preConsentCookies","thirdParties","jurisdictions","jurisdictionsPassing","jurisdictionsReview","jurisdictionsFailing","critical","warnings"],"additionalProperties":false}},"required":["finalUrl","statusCode","cookies","nonEssentialCount","thirdPartyHosts","cmpDetected","katlaDetected","findings","score"],"additionalProperties":false,"nullable":true},"error":{"type":"string","nullable":true},"offer":{"type":"object","properties":{"claimed":{"type":"boolean"},"expiresAt":{"type":"string","nullable":true}},"required":["claimed","expiresAt"],"additionalProperties":false,"nullable":true},"createdAt":{"type":"string"},"completedAt":{"type":"string","nullable":true}},"required":["checkId","url","status","progress","result","error","createdAt","completedAt"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/reports":{"post":{"summary":"Publish a compliance report from the audit skill","tags":["Tools"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000},"domain":{"type":"string","maxLength":2000},"checkedAt":{"type":"string","maxLength":2000},"preparedFor":{"type":"string","maxLength":2000},"reportId":{"type":"string","maxLength":2000},"status":{"type":"string","maxLength":2000},"scope":{"type":"object","properties":{"markets":{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":40},"basis":{"type":"string","maxLength":8000}},"additionalProperties":true},"dpoContact":{"type":"object","properties":{"email":{"type":"string","maxLength":2000},"source":{"type":"string","maxLength":2000},"label":{"type":"string","maxLength":2000}},"additionalProperties":true},"assessment":{"type":"object","properties":{"complete":{"type":"boolean"},"pages":{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":200},"region":{"type":"string","maxLength":2000},"conditions":{"type":"string","maxLength":8000},"limitations":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":60}},"additionalProperties":true},"needsVerification":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":100},"improvements":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":100},"consentMechanism":{"type":"object","properties":{"bannerPresent":{"type":"boolean"},"checks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":2000},"value":{"type":"string","maxLength":8000},"status":{"type":"string","maxLength":2000}},"additionalProperties":true},"maxItems":40}},"additionalProperties":true},"cookies":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":500},"thirdParties":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":500},"jurisdictions":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":60},"findings":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":200},"passed":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":200},"notVerifiable":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":200}},"additionalProperties":true}}}},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uid":{"type":"string"},"url":{"type":"string"},"expiresAt":{"type":"string"},"editKey":{"type":"string"}},"required":["uid","url","expiresAt","editKey"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/reports/{uid}":{"get":{"summary":"Read the findings behind a published report","tags":["Tools"],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,32}$"},"in":"path","name":"uid","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uid":{"type":"string"},"domain":{"type":"string"},"url":{"type":"string"},"findings":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string"},"expiresAt":{"type":"string"},"cmpDetected":{"type":"string","nullable":true},"voucher":{"type":"object","properties":{"code":{"type":"string"},"expiresAt":{"type":"string"}},"required":["code","expiresAt"],"additionalProperties":false,"nullable":true}},"required":["uid","domain","url","findings","createdAt","expiresAt","cmpDetected","voucher"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"put":{"summary":"Revise a published report, using the key returned when it was created","tags":["Tools"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000},"domain":{"type":"string","maxLength":2000},"checkedAt":{"type":"string","maxLength":2000},"preparedFor":{"type":"string","maxLength":2000},"reportId":{"type":"string","maxLength":2000},"status":{"type":"string","maxLength":2000},"scope":{"type":"object","properties":{"markets":{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":40},"basis":{"type":"string","maxLength":8000}},"additionalProperties":true},"dpoContact":{"type":"object","properties":{"email":{"type":"string","maxLength":2000},"source":{"type":"string","maxLength":2000},"label":{"type":"string","maxLength":2000}},"additionalProperties":true},"assessment":{"type":"object","properties":{"complete":{"type":"boolean"},"pages":{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":200},"region":{"type":"string","maxLength":2000},"conditions":{"type":"string","maxLength":8000},"limitations":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":60}},"additionalProperties":true},"needsVerification":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":100},"improvements":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":100},"consentMechanism":{"type":"object","properties":{"bannerPresent":{"type":"boolean"},"checks":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":2000},"value":{"type":"string","maxLength":8000},"status":{"type":"string","maxLength":2000}},"additionalProperties":true},"maxItems":40}},"additionalProperties":true},"cookies":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":500},"thirdParties":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":500},"jurisdictions":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":60},"findings":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"maxItems":200},"passed":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":200},"notVerifiable":{"type":"array","items":{"type":"string","maxLength":8000},"maxItems":200}},"additionalProperties":true}}}},"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,32}$"},"in":"path","name":"uid","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uid":{"type":"string"},"url":{"type":"string"},"expiresAt":{"type":"string"}},"required":["uid","url","expiresAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"summary":"Retract a published report, using the key returned when it was created","tags":["Tools"],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{16,32}$"},"in":"path","name":"uid","required":true}],"responses":{"204":{"description":"Default Response","content":{"application/json":{"schema":{"enum":["null"],"nullable":true}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/admin/knowledge-base":{"get":{"summary":"Search the tracker and cookie knowledge bases","tags":["Admin"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"q","required":true},{"schema":{"type":"string","enum":["pixel","cookie"]},"in":"query","name":"kind","required":false},{"schema":{"type":"boolean","default":true},"in":"query","name":"includeIgnored","required":false},{"schema":{"type":"integer","exclusiveMinimum":true,"minimum":0,"maximum":100,"default":50},"in":"query","name":"limit","required":false}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["pixel","cookie"]},"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string","nullable":true},"category":{"type":"string"},"detail":{"type":"array","items":{"type":"string"}},"ignoredAt":{"type":"string","nullable":true},"ignoredReason":{"type":"string","nullable":true}},"required":["kind","id","name","key","category","detail","ignoredAt","ignoredReason"],"additionalProperties":false}}},"required":["entries"],"additionalProperties":false}}}}}}},"/admin/knowledge-base/ignore":{"post":{"summary":"Ignore or restore a knowledge-base entry","tags":["Admin"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["pixel","cookie"]},"id":{"type":"string","format":"uuid"},"ignored":{"type":"boolean"},"reason":{"type":"string","minLength":1,"maxLength":500}},"required":["kind","id","ignored"],"additionalProperties":false}}},"required":true},"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"entry":{"type":"object","properties":{"kind":{"type":"string","enum":["pixel","cookie"]},"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string","nullable":true},"category":{"type":"string"},"detail":{"type":"array","items":{"type":"string"}},"ignoredAt":{"type":"string","nullable":true},"ignoredReason":{"type":"string","nullable":true}},"required":["kind","id","name","key","category","detail","ignoredAt","ignoredReason"],"additionalProperties":false}},"required":["entry"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/enforcement":{"get":{"summary":"List published cookie enforcement actions","tags":["Enforcement"],"parameters":[{"schema":{"type":"string","maxLength":40},"in":"query","name":"authority","required":false},{"schema":{"type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","required":false},{"schema":{"type":"string","enum":["investigation","warning","reprimand","formal_notice","compliance_order","fine","closed_after_remediation","closed_no_action","other"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","enum":["cookies_before_consent","cookies_after_reject","cookies_after_withdrawal","no_reject_button","reject_harder_than_accept","misleading_design","invalid_consent","withdrawal_difficult","insufficient_information","preselected_consent","consent_not_specific","consent_not_informed","other"]},"in":"query","name":"violation","required":false},{"schema":{"type":"boolean"},"in":"query","name":"finesOnly","required":false},{"schema":{"type":"integer","minimum":1,"maximum":200},"in":"query","name":"limit","required":false},{"schema":{"type":"integer","minimum":0},"in":"query","name":"offset","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"authority":{"type":"string"},"authorityCode":{"type":"string"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"companyName":{"type":"string"},"domain":{"type":"string","nullable":true},"decisionDate":{"type":"string","nullable":true},"publishedDate":{"type":"string","nullable":true},"status":{"type":"string","enum":["investigation","warning","reprimand","formal_notice","compliance_order","fine","closed_after_remediation","closed_no_action","other"]},"violations":{"type":"array","items":{"type":"string","enum":["cookies_before_consent","cookies_after_reject","cookies_after_withdrawal","no_reject_button","reject_harder_than_accept","misleading_design","invalid_consent","withdrawal_difficult","insufficient_information","preselected_consent","consent_not_specific","consent_not_informed","other"]}},"fineAmountMinor":{"type":"number","nullable":true},"fineCurrency":{"type":"string","nullable":true},"fineCookieSpecific":{"type":"boolean","nullable":true},"fineAttributionNotes":{"type":"string","nullable":true},"title":{"type":"string"},"summary":{"type":"string"},"sourceUrl":{"type":"string"},"sourceTitle":{"type":"string"},"externalCaseId":{"type":"string","nullable":true},"updatedAt":{"type":"string"}},"required":["slug","authority","authorityCode","countryCode","countryName","companyName","domain","decisionDate","publishedDate","status","violations","fineAmountMinor","fineCurrency","fineCookieSpecific","fineAttributionNotes","title","summary","sourceUrl","sourceTitle","externalCaseId","updatedAt"],"additionalProperties":false}},"stats":{"type":"object","properties":{"total":{"type":"number"},"fines":{"type":"number"},"authorities":{"type":"number"},"countries":{"type":"number"},"totalFinesEur":{"type":"number","nullable":true}},"required":["total","fines","authorities","countries","totalFinesEur"],"additionalProperties":false},"authorities":{"type":"array","items":{"type":"object","properties":{"authorityCode":{"type":"string"},"authority":{"type":"string"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"count":{"type":"number"}},"required":["authorityCode","authority","countryCode","countryName","count"],"additionalProperties":false}}},"required":["records","stats","authorities"],"additionalProperties":false}}}}}}},"/enforcement/{authority}/{slug}":{"get":{"summary":"One published enforcement action and its sources","tags":["Enforcement"],"parameters":[{"schema":{"type":"string","maxLength":40},"in":"path","name":"authority","required":true},{"schema":{"type":"string","maxLength":120},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"record":{"type":"object","properties":{"slug":{"type":"string"},"authority":{"type":"string"},"authorityCode":{"type":"string"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"companyName":{"type":"string"},"domain":{"type":"string","nullable":true},"decisionDate":{"type":"string","nullable":true},"publishedDate":{"type":"string","nullable":true},"status":{"type":"string","enum":["investigation","warning","reprimand","formal_notice","compliance_order","fine","closed_after_remediation","closed_no_action","other"]},"violations":{"type":"array","items":{"type":"string","enum":["cookies_before_consent","cookies_after_reject","cookies_after_withdrawal","no_reject_button","reject_harder_than_accept","misleading_design","invalid_consent","withdrawal_difficult","insufficient_information","preselected_consent","consent_not_specific","consent_not_informed","other"]}},"fineAmountMinor":{"type":"number","nullable":true},"fineCurrency":{"type":"string","nullable":true},"fineCookieSpecific":{"type":"boolean","nullable":true},"fineAttributionNotes":{"type":"string","nullable":true},"title":{"type":"string"},"summary":{"type":"string"},"sourceUrl":{"type":"string"},"sourceTitle":{"type":"string"},"externalCaseId":{"type":"string","nullable":true},"updatedAt":{"type":"string"}},"required":["slug","authority","authorityCode","countryCode","countryName","companyName","domain","decisionDate","publishedDate","status","violations","fineAmountMinor","fineCurrency","fineCookieSpecific","fineAttributionNotes","title","summary","sourceUrl","sourceTitle","externalCaseId","updatedAt"],"additionalProperties":false},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"sourceType":{"type":"string"},"publishedDate":{"type":"string","nullable":true}},"required":["url","title","sourceType","publishedDate"],"additionalProperties":false}}},"required":["record","sources"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/enforcement/precedents":{"get":{"summary":"Published decisions that turned on these consent failures","tags":["Enforcement"],"parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"violations","required":true},{"schema":{"type":"integer","minimum":1,"maximum":20},"in":"query","name":"limit","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"authority":{"type":"string"},"authorityCode":{"type":"string"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"companyName":{"type":"string"},"domain":{"type":"string","nullable":true},"decisionDate":{"type":"string","nullable":true},"publishedDate":{"type":"string","nullable":true},"status":{"type":"string","enum":["investigation","warning","reprimand","formal_notice","compliance_order","fine","closed_after_remediation","closed_no_action","other"]},"violations":{"type":"array","items":{"type":"string","enum":["cookies_before_consent","cookies_after_reject","cookies_after_withdrawal","no_reject_button","reject_harder_than_accept","misleading_design","invalid_consent","withdrawal_difficult","insufficient_information","preselected_consent","consent_not_specific","consent_not_informed","other"]}},"fineAmountMinor":{"type":"number","nullable":true},"fineCurrency":{"type":"string","nullable":true},"fineCookieSpecific":{"type":"boolean","nullable":true},"fineAttributionNotes":{"type":"string","nullable":true},"title":{"type":"string"},"summary":{"type":"string"},"sourceUrl":{"type":"string"},"sourceTitle":{"type":"string"},"externalCaseId":{"type":"string","nullable":true},"updatedAt":{"type":"string"}},"required":["slug","authority","authorityCode","countryCode","countryName","companyName","domain","decisionDate","publishedDate","status","violations","fineAmountMinor","fineCurrency","fineCookieSpecific","fineAttributionNotes","title","summary","sourceUrl","sourceTitle","externalCaseId","updatedAt"],"additionalProperties":false}}},"required":["records"],"additionalProperties":false}}}}}}},"/health":{"get":{"responses":{"200":{"description":"Default Response"}}}}},"servers":[{"url":"https://api.katla.app","description":"Production server"}],"tags":[{"name":"Authentication","description":"Authentication endpoints"},{"name":"Teams","description":"Team management"},{"name":"Service Accounts","description":"Machine credentials for connecting Katla to another platform"},{"name":"Sites","description":"Site management and scanning"},{"name":"Cookies","description":"Cookie classification"},{"name":"Billing","description":"Billing and subscription management"},{"name":"Contact","description":"Public contact form"},{"name":"Tools","description":"Public developer tools"},{"name":"Shopify","description":"Embedded Shopify app integration"},{"name":"Webhooks","description":"External webhook handlers"}]}