{"openapi":"3.1.0","info":{"title":"Oviond Backend API","version":"1.0.0","description":"Authentication, account management, billing, and media services for Oviond.","x-logo":{"url":"https://app.oviond.com/img/oviond-full-logo.svg","altText":"Oviond"}},"servers":[{"url":"https://api.oviond.com","description":"Production"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Oviond API key (prefix `oviond_`) sent as a Bearer token — the credential for REST/programmatic and headless integrations. Manage keys in Settings → API Keys. API keys do NOT authenticate the MCP endpoint (/mcp), which uses OAuth 2.1 + PKCE."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Supabase-issued JWT used by the Oviond web app session. External API consumers should authenticate with an Oviond API key (ApiKeyAuth) instead."}},"schemas":{"TeamMember":{"type":"object","properties":{"id":{"type":"string","example":"abc123"},"account_id":{"type":"string","example":"ov:26AbCdEfGhIjKlMnOp"},"fullname":{"type":"string","example":"Jane Smith"},"email":{"type":"string","format":"email","example":"jane@example.com"},"email_verified":{"type":"boolean","example":true},"invite_pending":{"type":"boolean","example":false},"role":{"type":"string","enum":["admin","clients","readonly"],"example":"admin"},"avatar_url":{"type":["string","null"],"example":"/img/profilePicture.jpg"},"clients":{"type":["array","null"],"items":{"type":"string"},"example":[]},"language":{"type":["string","null"],"enum":["af-ZA","bg","da","nl","el","en","es","fr","de","it","pl","pt","ro","tr"],"example":"en"},"theme":{"type":["string","null"],"enum":["light","dark","system"],"example":"dark"},"created_at":{"type":["string","null"],"example":"2024-01-01T00:00:00.000Z"}},"required":["id","account_id","fullname","email","email_verified","role"]},"MeResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/TeamMember"}},"required":["success","data"]},"SuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]},"UpdateProfileRequest":{"type":"object","properties":{"fullname":{"type":"string","minLength":1,"example":"Jane Smith"},"language":{"type":"string","enum":["af-ZA","bg","da","nl","el","en","es","fr","de","it","pl","pt","ro","tr"],"example":"en"},"theme":{"type":"string","enum":["light","dark","system"],"example":"dark"}}},"UpdateAvatarRequest":{"type":"object","properties":{"avatar_url":{"type":"string","description":"Profile picture URL or path — upload via Media and use its URL, or set any image URL.","example":"https://cdn.example.com/avatar.jpg"}},"required":["avatar_url"]},"ChangeEmailRequest":{"type":"object","properties":{"email_address":{"type":"string","format":"email","example":"new@example.com"}},"required":["email_address"]},"ListUsersResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"InviteUserResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},"required":["success","data"]},"InviteUserRequest":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"colleague@example.com"},"fullname":{"type":"string","minLength":1,"example":"John Doe"},"role":{"type":"string","enum":["admin","clients","readonly"],"example":"admin"},"clients":{"type":"array","items":{"type":"string"},"example":[]},"avatar_url":{"type":"string","description":"Optional starting avatar URL or path (e.g. a Media URL); defaults to a placeholder the user can replace."}},"required":["email","fullname","role"]},"EditUserRequest":{"type":"object","properties":{"fullname":{"type":"string","example":"John Doe"},"role":{"type":"string","enum":["admin","clients","readonly"],"example":"admin"},"clients":{"type":"array","items":{"type":"string"},"example":[]}}},"AccountResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]},"AccountUsageResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"CURRENT_PLAN":{"type":"object","properties":{"PLAN":{"type":"string"},"PLAN_ID":{"type":"string"},"PRICE":{"type":"number"},"PROJECTS":{"anyOf":[{"type":"number"},{"type":"string"}],"example":15},"USERS":{"anyOf":[{"type":"number"},{"type":"string"}],"example":"UNLIMITED"},"WHITE_LABEL":{"type":"boolean"},"CUSTOM_DOMAIN":{"type":"boolean"},"PDF":{"type":"boolean"},"AUTOMATIONS":{"type":"boolean"},"AGENCY_TOOLS":{"type":"boolean"},"EMAIL_SUPPORT":{"type":"boolean"},"LIVE_SUPPORT":{"type":"boolean"},"ACCOUNT_MANAGER":{"type":"boolean"}},"required":["PROJECTS","USERS"]},"USAGE":{"type":"object","properties":{"PROJECTS":{"type":"number","example":3},"USERS":{"type":"number","example":2}},"required":["PROJECTS","USERS"]}},"required":["CURRENT_PLAN","USAGE"]}},"required":["success","data"]},"DeleteAccountResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"}},"required":["success","message"]},"DeleteAccountRequest":{"type":"object","properties":{"confirm_email":{"type":"string","minLength":1,"description":"The signed-in account owner's email address, as a confirmation gate for this irreversible deletion. Matched case-insensitively against the authenticated user's email. This is NOT a password.","example":"jane@example.com"}},"required":["confirm_email"]},"CompanyResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]},"IanaTimezone":{"type":"string","example":"America/New_York"},"CurrencyInput":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z]{3}$","example":"USD"},"symbol":{"type":"string","example":"$"},"iso":{"type":["string","null"],"pattern":"^[A-Z]{2}$","example":"US"}},"required":["code","symbol"]},{"type":"string"},{"type":"null"}],"description":"ISO 4217 currency code (e.g. \"USD\") or a full { code, symbol, iso } object."},"UpdateCompanyRequest":{"type":"object","properties":{"company_name":{"type":"string","example":"Acme Corp"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"website":{"type":"string","format":"uri","example":"https://acme.com"},"address":{"type":"string"},"state":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"country":{"anyOf":[{"type":"string","enum":["Afghanistan","Albania","Algeria","Andorra","Angola","Antigua","Argentina","Armenia","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bhutan","Bolivia","Bosnia","Botswana","Brazil","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Central African Republic","Chad","Chile","China","Colombia","Comoros","Congo","Costa Rica","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","England","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Fiji","Finland","France","Gabon","Gambia","Georgia","Germany","Ghana","Greece","Greenland","Grenada","Guatemala","Guinea","Guyana","Haiti","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica","Japan","Jordan","Kazakhstan","Kenya","Kiribati","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Mauritania","Mauritius","Mexico","Moldova","Monaco","Mongolia","Montenegro","Morocco","Mozambique","Namibia","Nepal","Netherlands","New Zealand","Nicaragua","Niger","Nigeria","North Korea","Norway","Oman","Pakistan","Palestine","Panama","Paraguay","Peru","Philippines","Poland","Portugal","Qatar","Romania","Russia","Rwanda","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Somalia","South Africa","South Korea","Spain","Sri Lanka","Sudan","Suriname","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Togo","Tonga","Trinidad","Tunisia","Turkey","Turkmenistan","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Yemen","Zambia","Zimbabwe"]},{"type":"string","enum":[""]}]},"phone":{"type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyInput"}},"required":["company_name","timezone","website"]},"DomainStatus":{"type":"string","enum":["pending","verifying","active","failed"]},"DnsProvider":{"type":["string","null"],"enum":["cloudflare","godaddy","namecheap","route53","google","squarespace","unknown"]},"CustomDomain":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"status":{"$ref":"#/components/schemas/DomainStatus"},"provider":{"$ref":"#/components/schemas/DnsProvider"},"is_default":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string"},{"type":"null"}]},"domain_records":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"}},"required":["type","name","value"]}},"vercel_verification":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"domain":{"type":"string"},"value":{"type":"string"}},"required":["type","domain","value"]}},"dns_records":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"}},"required":["type","name","value"]}}},"required":["id","domain","status"]},"CustomDomainsMeta":{"type":"object","properties":{"limit":{"type":["number","null"]},"used":{"type":"number"}},"required":["limit","used"]},"DomainsListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomDomain"}},"meta":{"$ref":"#/components/schemas/CustomDomainsMeta"}},"required":["success","data","meta"]},"DomainResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/CustomDomain"}},"required":["success","data"]},"AddDomainRequest":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"}},"required":["domain"]},"CustomDomainsSuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]},"UpdateBrandingRequest":{"type":"object","properties":{"logo_url":{"type":"string"},"favicon_url":{"type":"string"}}},"Currency":{"type":["object","null"],"properties":{"code":{"type":"string","pattern":"^[A-Z]{3}$","example":"USD"},"symbol":{"type":"string","example":"$"},"iso":{"type":["string","null"],"pattern":"^[A-Z]{2}$","example":"US"}},"required":["code","symbol"]},"NumberFormat":{"type":["string","null"],"description":"BCP 47 locale driving number formatting, e.g. \"en-US\" → 1,234.56, \"de-DE\" → 1.234,56. Null/absent defaults to \"en-US\".","example":"en-US"},"Client":{"type":"object","properties":{"id":{"type":"string","example":"cliAbc123"},"account_id":{"type":"string","example":"ov:26AbCdEfGhIjKlMnOp"},"name":{"type":"string","example":"Acme Website"},"website":{"type":"string"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"currency":{"$ref":"#/components/schemas/Currency"},"number_format":{"$ref":"#/components/schemas/NumberFormat"},"screenshot":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"favicon_url":{"type":["string","null"]},"folders":{"type":"array","items":{"type":"string"}},"reports_sort":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"is_deleted":{"type":"boolean"},"deleted_at":{"type":["string","null"]}},"required":["id","account_id","name"]},"ListClientsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Client"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"ClientCountResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}},"required":["success","data"]},"BulkDeleteClientsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"example":["cliAbc123","cliDef456"]}},"required":["ids"]},"UpdateClientRequest":{"type":"object","properties":{"name":{"type":"string","example":"Acme Corp Updated"},"first_name":{"type":["string","null"]},"website":{"type":"string"},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"number_format":{"$ref":"#/components/schemas/NumberFormat"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"manager":{"type":"string"},"domain_id":{"type":"string"},"theme_id":{"type":"string"},"logo_url":{"type":["string","null"]},"favicon_url":{"type":["string","null"]},"screenshot":{"type":["string","null"]},"branding_source":{"type":["string","null"],"enum":["client","agency"]},"folders":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"BulkUpdateClientsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1},"patch":{"$ref":"#/components/schemas/UpdateClientRequest"}},"required":["ids","patch"]},"ClientResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Client"}},"required":["success","data"]},"CreateClientResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"},"_id":{"type":"string"}},"required":["id","_id"]}},"required":["success","data"]},"CreateClientRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Acme Corp"},"first_name":{"type":"string","example":"Sarah"},"website":{"type":"string","example":"https://acme.com"},"currency":{"allOf":[{"$ref":"#/components/schemas/CurrencyInput"},{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z]{3}$","example":"USD"},"symbol":{"type":"string","example":"$"},"iso":{"type":["string","null"],"pattern":"^[A-Z]{2}$","example":"US"}},"required":["code","symbol"]},{"type":"string"}]}]},"number_format":{"allOf":[{"$ref":"#/components/schemas/NumberFormat"},{"type":"string"}]},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"manager":{"type":"string"},"domain_id":{"type":"string"},"theme_id":{"type":"string"},"folders":{"type":"array","items":{"type":"string"}}},"required":["name","website","currency","timezone"]},"RefreshScreenshotResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"screenshot":{"type":["string","null"]}},"required":["screenshot"]}},"required":["success","data"]},"RefreshFaviconResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"favicon_url":{"type":["string","null"]}},"required":["favicon_url"]}},"required":["success","data"]},"MoveClientToFolderRequest":{"type":"object","properties":{"folders":{"type":"array","items":{"type":"string"},"example":["folderXyz"]}},"required":["folders"]},"SetReportsSortRequest":{"type":"object","properties":{"reports_sort":{"type":["string","null"],"pattern":"^(name|created_at|last_modified|type):(asc|desc)$"}},"required":["reports_sort"]},"Folder":{"type":"object","properties":{"_id":{"type":"string","example":"folderXyz"},"folderName":{"type":"string","example":"Top Clients"},"account_id":{"type":"string","example":"ov:26AbCdEfGhIjKlMnOp"}},"required":["_id","folderName","account_id"]},"ListFoldersResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}},"required":["success","data"]},"CreateFolderResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateFolderRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Top Clients"}},"required":["name"]},"UpdateFolderRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"VIP Clients"}},"required":["name"]},"Report":{"type":"object","properties":{"id":{"type":"string","example":"proj123"},"name":{"type":"string","example":"Q1 Report"},"account_id":{"type":"string","example":"ov:26AbCdEfGhIjKlMnOp"},"client_id":{"type":"string"},"type":{"type":"string","enum":["REPORT","DASHBOARD"],"example":"REPORT"},"status":{"type":"string"},"nano_id":{"type":"string"},"created_at":{},"is_deleted":{"type":"boolean"},"deleted_at":{"type":["string","null"]}},"required":["id","name","account_id"]},"ListReportsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Report"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"BulkDeleteReportsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"example":["proj123","proj456"]}},"required":["ids"]},"ReportResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Report"}},"required":["success","data"]},"CreateReportResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"DateRange":{"type":"object","properties":{"text":{"type":"string","enum":["Today","Yesterday","Last 7 Days","Last 30 Days","Last 60 Days","Custom Days","This Month","Last Month","Custom Months","Last 2 Months","Last 3 Months","Last 12 Months","This Year","Last Year","Custom"],"example":"Last 30 Days"},"compare":{"type":"string","enum":["None","Period","Month","Year","Custom"],"example":"None"},"include_today":{"type":"boolean","example":false},"current_start":{"type":"string","example":"2026-03-01"},"current_end":{"type":"string","example":"2026-03-31"},"previous_start":{"type":"string","example":"2026-02-01"},"previous_end":{"type":"string","example":"2026-02-28"},"custom_days":{"type":"number","example":60},"custom_months":{"type":"number","example":3}}},"CreateReportRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Q1 Report"},"client_id":{"type":"string","example":"cliAbc123"},"type":{"type":"string","enum":["REPORT","DASHBOARD"],"example":"REPORT"},"template":{"type":"string","enum":["BLANK","TEMPLATE","AGENCY"],"example":"BLANK"},"template_id":{"type":"string","description":"Clone pages and widgets from this template into the new report"},"pages":{"type":"array","items":{"type":"object","additionalProperties":{}}},"theme_id":{"type":"string"},"date_range":{"$ref":"#/components/schemas/DateRange"},"logo_url":{"type":"string"},"auto_refresh_enabled":{"type":"boolean"},"show_cover_page":{"type":"boolean"},"show_cover_page_logo":{"type":"boolean"},"show_cover_page_client_logo":{"type":"boolean"},"show_cover_page_agency_logo":{"type":"boolean"},"show_cover_page_name":{"type":"boolean"},"show_cover_page_date":{"type":"boolean"},"show_cover_page_bg_image":{"type":"boolean"},"show_header":{"type":"boolean"},"show_header_logo":{"type":"boolean"},"show_header_name":{"type":"boolean"},"show_header_date":{"type":"boolean"},"show_page_numbers":{"type":"boolean"},"show_table_of_contents":{"type":"boolean"},"show_date":{"type":"boolean"},"show_thank_you":{"type":"boolean"},"show_thank_you_bg_image":{"type":"boolean"},"show_thank_you_logo":{"type":"boolean"},"show_thank_you_client_logo":{"type":"boolean"},"show_thank_you_agency_logo":{"type":"boolean"},"show_thank_you_heading":{"type":"boolean"},"show_thank_you_message":{"type":"boolean"},"orientation":{"type":"string","enum":["portrait","landscape"]},"paper_size":{"type":"string","enum":["a4","letter"]},"layout":{"type":"string","enum":["grid","canvas"]},"cover_page_title":{"type":["string","null"]},"cover_page_subtitle":{"type":["string","null"]},"cover_page_pattern_id":{"type":["string","null"],"enum":["diagonal-corner-bands","side-rail","bottom-horizon-band","diagonal-velocity","flowing-waves","orbit-frame","geo-forms","prism-tiles","folded-corners","mosaic-frame"]},"cover_page_manual_bg_image_url":{"type":["string","null"]},"thank_you_page_title":{"type":["string","null"]},"thank_you_page_subtitle":{"type":["string","null"]},"description":{"type":"string"},"status":{"type":"string"},"auto_refresh_interval_hours":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[24]}],"description":"Auto-refresh cadence: 1 = hourly, 24 = daily","example":24},"password_enabled":{"type":"boolean"},"password":{"type":"string"},"pdf_enabled":{"type":"boolean"}},"required":["name","type","template"]},"UpdateReportRequest":{"type":"object","properties":{"name":{"type":["string","null"]},"theme_id":{"type":["string","null"]},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"logo_url":{"type":["string","null"]},"auto_refresh_enabled":{"type":["boolean","null"]},"show_cover_page":{"type":["boolean","null"]},"show_cover_page_logo":{"type":["boolean","null"]},"show_cover_page_client_logo":{"type":["boolean","null"]},"show_cover_page_agency_logo":{"type":["boolean","null"]},"show_cover_page_name":{"type":["boolean","null"]},"show_cover_page_date":{"type":["boolean","null"]},"show_cover_page_bg_image":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_header_logo":{"type":["boolean","null"]},"show_header_name":{"type":["boolean","null"]},"show_header_date":{"type":["boolean","null"]},"show_page_numbers":{"type":["boolean","null"]},"show_table_of_contents":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_thank_you":{"type":["boolean","null"]},"show_thank_you_bg_image":{"type":["boolean","null"]},"show_thank_you_logo":{"type":["boolean","null"]},"show_thank_you_client_logo":{"type":["boolean","null"]},"show_thank_you_agency_logo":{"type":["boolean","null"]},"show_thank_you_heading":{"type":["boolean","null"]},"show_thank_you_message":{"type":["boolean","null"]},"orientation":{"type":["string","null"],"enum":["portrait","landscape"]},"pages":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"is_active":{"type":["boolean","null"]},"editing":{"type":["boolean","null"]},"description":{"type":["string","null"]},"status":{"type":["string","null"]},"auto_refresh_interval_hours":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[24]},{"type":"null"}],"description":"Auto-refresh cadence: 1 = hourly, 24 = daily","example":24},"password_enabled":{"type":["boolean","null"]},"password":{"type":["string","null"]},"pdf_enabled":{"type":["boolean","null"]},"paper_size":{"type":["string","null"],"enum":["a4","letter"]},"branding_source":{"type":["string","null"],"enum":["inherit","client","agency"]},"show_dashboard_navigation":{"type":["boolean","null"]},"cover_page_title":{"type":["string","null"]},"cover_page_subtitle":{"type":["string","null"]},"cover_page_pattern_id":{"type":["string","null"],"enum":["diagonal-corner-bands","side-rail","bottom-horizon-band","diagonal-velocity","flowing-waves","orbit-frame","geo-forms","prism-tiles","folded-corners","mosaic-frame"]},"cover_page_manual_bg_image_url":{"type":["string","null"]},"thank_you_page_title":{"type":["string","null"]},"thank_you_page_subtitle":{"type":["string","null"]}}},"DuplicateReportRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Q1 Report (Copy)"}},"required":["name"]},"ReportChange":{"type":"object","properties":{"id":{"type":"string"},"seq":{"type":"number"},"entity_type":{"type":"string"},"entity_id":{"type":"string"},"page_id":{"type":["string","null"]},"op":{"type":"string"},"user_id":{"type":["string","null"]},"label":{"type":["string","null"]},"created_at":{"type":"string"},"users":{"type":["object","null"],"properties":{"fullname":{"type":["string","null"]},"email":{"type":["string","null"]},"avatar_url":{"type":["string","null"]}},"required":["fullname","email","avatar_url"]}},"required":["id","seq","entity_type","entity_id","page_id","op","user_id","label","created_at"]},"ListChangesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ReportChange"}}},"required":["success","data"]},"Page":{"type":"object","properties":{"page_id":{"type":"string","example":"pg_abc123"},"source_id":{"type":"string"},"source_type":{"type":"string","enum":["project","template"]},"name":{"type":"string","example":"Overview"},"position":{"type":"integer"},"visible":{"type":"boolean"},"legacy":{"type":"boolean"}},"required":["page_id","source_id","source_type","name","position","visible","legacy"]},"ListPagesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Page"}}},"required":["success","data"]},"CreatePageResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"page_id":{"type":"string"}},"required":["page_id"]}},"required":["success","data"]},"CreatePageRequest":{"type":"object","properties":{"source_id":{"type":"string"},"source_type":{"type":"string","enum":["project","template"]},"name":{"type":"string","minLength":1},"position":{"type":"integer"},"visible":{"type":"boolean"},"legacy":{"type":"boolean"}},"required":["source_id","source_type","name"]},"UpdatePageRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"position":{"type":"integer"},"visible":{"type":"boolean"},"legacy":{"type":"boolean"}}},"SearchResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"clients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"reports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"client_id":{"type":"string"},"type":{"type":"string","enum":["REPORT","DASHBOARD"]}},"required":["id","name"]}},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fullname":{"type":["string","null"]},"email":{"type":"string"}},"required":["id","email"]}},"automations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"api_keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"email_addresses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"from_name":{"type":["string","null"]},"from_email":{"type":"string"}},"required":["id","from_email"]}},"email_templates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"email_domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}},"required":["clients","reports","users","automations","api_keys","email_addresses","email_templates","email_domains","domains"]}},"required":["success","data"]},"AskOviondConversation":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"is_shared":{"type":"boolean"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","title","is_shared","created_at","updated_at"]},"AskOviondConversationList":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AskOviondConversation"}}},"required":["success","data"]},"AskOviondMessage":{"type":"object","properties":{"id":{"type":"string"},"conversation_id":{"type":"string"},"role":{"type":"string","enum":["user","assistant"]},"parts":{"type":"array","items":{"type":"object","additionalProperties":{}}},"created_at":{"type":"string"}},"required":["id","conversation_id","role","parts","created_at"]},"AskOviondConversationDetail":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"allOf":[{"$ref":"#/components/schemas/AskOviondConversation"},{"type":"object","properties":{"is_owner":{"type":"boolean"},"owner_name":{"type":["string","null"]},"owner_avatar_url":{"type":["string","null"]},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AskOviondMessage"}}},"required":["is_owner","owner_name","owner_avatar_url","messages"]}]}},"required":["success","data"]},"AskOviondConversationResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/AskOviondConversation"}},"required":["success","data"]},"UpdateAskOviondConversation":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"is_shared":{"type":"boolean"}},"additionalProperties":false},"AskOviondConversationDeleted":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"AskOviondCredits":{"type":["object","null"],"properties":{"monthly_allowance":{"type":"integer"},"monthly_used":{"type":"integer"},"monthly_remaining":{"type":"integer"},"purchased":{"type":"integer"},"remaining":{"type":"integer"},"resets_at":{"type":"string"}},"required":["monthly_allowance","monthly_used","monthly_remaining","purchased","remaining","resets_at"]},"AskOviondCreditPack":{"type":"object","properties":{"id":{"type":"string"},"credits":{"type":"integer"},"price_cents":{"type":"integer"}},"required":["id","credits","price_cents"]},"AskOviondStatusResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"available":{"type":"boolean"},"credits":{"$ref":"#/components/schemas/AskOviondCredits"},"packs":{"type":"array","items":{"$ref":"#/components/schemas/AskOviondCreditPack"}}},"required":["available","credits","packs"]}},"required":["success","data"]},"AskOviondRequest":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[A-Za-z0-9]+$"},"trigger":{"type":"string","enum":["submit-message","regenerate-message"]},"message":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":4000}},"required":["text"],"additionalProperties":false},"approvals":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80},"approved":{"type":"boolean"}},"required":["id","approved"],"additionalProperties":false},"minItems":1,"maxItems":20},"page_path":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9/_-]*$"}},"required":["id","trigger"],"additionalProperties":false},"AskOviondCreditsCheckoutResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},"required":["success","data"]},"AskOviondCreditsCheckout":{"type":"object","properties":{"pack_id":{"type":"string","minLength":1,"maxLength":40},"return_path":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9/_-]*$"}},"required":["pack_id","return_path"],"additionalProperties":false},"MetricSelection":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"data_view":{"type":"string"}},"required":["value"]},"DimensionSelection":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"data_view":{"type":"string"}},"required":["value"]},"WidgetFilter":{"type":"object","properties":{"id":{"anyOf":[{"type":"number"},{"type":"string"}]},"field":{"type":"string","example":"sessionMedium"},"operator":{"type":"string","description":"Canonical: equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than, greater_than_or_equal, less_than_or_equal (vendor tokens also accepted).","example":"contains"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{}}],"example":"cpc"},"logicalOperator":{"type":"string","enum":["and","or"]}}},"Widget":{"type":"object","properties":{"source_type":{"type":["string","null"],"enum":["project","template"]},"source_id":{"type":["string","null"]},"page_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"type":{"type":["string","null"],"enum":["DATA","TEXT","IMAGE","HTML","VIDEO","EMBED","TITLE","BUTTON","GOAL"]},"chart":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_type":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_group":{"type":["string","null"],"enum":["line","area","bar","pie","funnel","table","score","map","column","donut","column_bar_charts","line_area_charts","pie_donut_charts","scorecard"]},"state":{"type":["string","null"],"enum":["loading","LOADING","active","ACTIVE","error","ERROR","NO_DATA","demo","DEMO"]},"title":{"type":["string","null"]},"text":{"type":["string","null"]},"name":{"type":["string","null"]},"auto_generated_name":{"type":["string","null"]},"heading":{"type":["string","null"],"enum":["h1","h2","h3","h4","h5"]},"align":{"type":["string","null"],"enum":["left","center","right","justify"]},"link":{"type":["string","null"]},"link_url":{"type":["string","null"]},"image_fit":{"type":["string","null"],"enum":["object-contain","object-cover","object-fill","object-none"]},"embed_type":{"type":["string","null"],"enum":["URL","IFRAME","HTML"]},"embed_url":{"type":["string","null"]},"embed_iframe":{"type":["string","null"]},"embed_html":{"type":["string","null"]},"size":{"type":["string","null"]},"description":{"type":["string","null"]},"content":{"type":["string","null"]},"src":{"type":["string","null"]},"url":{"type":["string","null"]},"icon":{"type":["string","null"]},"target":{"type":["string","null"]},"image_link_url":{"type":["string","null"]},"x":{"type":["number","null"]},"y":{"type":["number","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"is_secondary":{"type":["boolean","null"]},"icon_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"options_3d":{"type":["boolean","null"]},"kpi":{"type":["boolean","null"]},"blended":{"type":["boolean","null"]},"row_limit":{"type":["string","null"],"enum":["5","10","25","50","100","500","all"]},"comparison_display":{"type":["string","null"],"enum":["previous","change","both"]},"sort_order":{"type":["string","null"]},"sort_by":{"type":["string","null"]},"column_widths":{"type":["object","null"],"additionalProperties":{"type":"number"}},"b_height":{"type":["string","null"]},"legend_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"invert_y_axis":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_name":{"type":["boolean","null"]},"show_icon":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_grid_lines":{"type":["boolean","null"]},"show_legends":{"type":["boolean","null"]},"show_x_axis":{"type":["boolean","null"]},"show_y_axis":{"type":["boolean","null"]},"show_trendline":{"type":["boolean","null"]},"show_totals":{"type":["boolean","null"]},"show_search":{"type":["boolean","null"]},"show_table_filters":{"type":["boolean","null"]},"show_logarithmic":{"type":["boolean","null"]},"show_multiple_axes":{"type":["boolean","null"]},"show_custom_date_range":{"type":["boolean","null"]},"show_description":{"type":["boolean","null"]},"show_container":{"type":["boolean","null"]},"show_label_list":{"type":["boolean","null"]},"show_chart":{"type":["boolean","null"]},"expand_rows":{"type":["boolean","null"]},"datasource_id":{"type":["string","null"],"enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"datasource_type":{"type":["string","null"],"enum":["DATASOURCE","CALCULATION","CUSTOM_DATA","CUSTOM_IMPORT","GOALS"]},"data_view":{"type":["string","null"]},"metrics":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":["array","null"],"items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":["object","null"],"additionalProperties":{}},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"current_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"current_summary":{"type":["object","null"],"additionalProperties":{}},"previous_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"previous_summary":{"type":["object","null"],"additionalProperties":{}},"series_fetched_at":{"type":["string","null"]},"error_status":{"type":["integer","null"]},"created_at":{},"id":{"type":"string","example":"widget123"},"account_id":{"type":"string","example":"ov:26AbCd"}},"required":["id","account_id"]},"ListWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Widget"}}},"required":["success","data"]},"CreateWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"inserted_count":{"type":"number"},"upserted_count":{"type":"number"}},"required":["inserted_count","upserted_count"]}},"required":["success","data"]},"CreateWidgetItem":{"type":"object","properties":{"source_type":{"type":["string","null"],"enum":["project","template"]},"source_id":{"type":["string","null"]},"page_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"type":{"type":["string","null"],"enum":["DATA","TEXT","IMAGE","HTML","VIDEO","EMBED","TITLE","BUTTON","GOAL"]},"chart":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_type":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_group":{"type":["string","null"],"enum":["line","area","bar","pie","funnel","table","score","map","column","donut","column_bar_charts","line_area_charts","pie_donut_charts","scorecard"]},"state":{"type":["string","null"],"enum":["loading","LOADING","active","ACTIVE","error","ERROR","NO_DATA","demo","DEMO"]},"title":{"type":["string","null"]},"text":{"type":["string","null"]},"name":{"type":["string","null"]},"auto_generated_name":{"type":["string","null"]},"heading":{"type":["string","null"],"enum":["h1","h2","h3","h4","h5"]},"align":{"type":["string","null"],"enum":["left","center","right","justify"]},"link":{"type":["string","null"]},"link_url":{"type":["string","null"]},"image_fit":{"type":["string","null"],"enum":["object-contain","object-cover","object-fill","object-none"]},"embed_type":{"type":["string","null"],"enum":["URL","IFRAME","HTML"]},"embed_url":{"type":["string","null"]},"embed_iframe":{"type":["string","null"]},"embed_html":{"type":["string","null"]},"size":{"type":["string","null"]},"description":{"type":["string","null"]},"content":{"type":["string","null"]},"src":{"type":["string","null"]},"url":{"type":["string","null"]},"icon":{"type":["string","null"]},"target":{"type":["string","null"]},"image_link_url":{"type":["string","null"]},"x":{"type":["number","null"]},"y":{"type":["number","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"is_secondary":{"type":["boolean","null"]},"icon_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"options_3d":{"type":["boolean","null"]},"kpi":{"type":["boolean","null"]},"blended":{"type":["boolean","null"]},"row_limit":{"type":["string","null"],"enum":["5","10","25","50","100","500","all"]},"comparison_display":{"type":["string","null"],"enum":["previous","change","both"]},"sort_order":{"type":["string","null"]},"sort_by":{"type":["string","null"]},"column_widths":{"type":["object","null"],"additionalProperties":{"type":"number"}},"b_height":{"type":["string","null"]},"legend_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"invert_y_axis":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_name":{"type":["boolean","null"]},"show_icon":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_grid_lines":{"type":["boolean","null"]},"show_legends":{"type":["boolean","null"]},"show_x_axis":{"type":["boolean","null"]},"show_y_axis":{"type":["boolean","null"]},"show_trendline":{"type":["boolean","null"]},"show_totals":{"type":["boolean","null"]},"show_search":{"type":["boolean","null"]},"show_table_filters":{"type":["boolean","null"]},"show_logarithmic":{"type":["boolean","null"]},"show_multiple_axes":{"type":["boolean","null"]},"show_custom_date_range":{"type":["boolean","null"]},"show_description":{"type":["boolean","null"]},"show_container":{"type":["boolean","null"]},"show_label_list":{"type":["boolean","null"]},"show_chart":{"type":["boolean","null"]},"expand_rows":{"type":["boolean","null"]},"datasource_id":{"type":["string","null"],"enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"datasource_type":{"type":["string","null"],"enum":["DATASOURCE","CALCULATION","CUSTOM_DATA","CUSTOM_IMPORT","GOALS"]},"data_view":{"type":["string","null"]},"metrics":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":["array","null"],"items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":["object","null"],"additionalProperties":{}},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"current_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"current_summary":{"type":["object","null"],"additionalProperties":{}},"previous_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"previous_summary":{"type":["object","null"],"additionalProperties":{}},"series_fetched_at":{"type":["string","null"]},"error_status":{"type":"null"},"created_at":{},"id":{"type":"string"},"account_id":{"type":["string","null"]}},"required":["id"],"additionalProperties":false},"CreateWidgetsRequest":{"type":"object","properties":{"widgets":{"type":"array","items":{"$ref":"#/components/schemas/CreateWidgetItem"},"minItems":1},"source_type":{"type":"string","enum":["project","template"],"example":"project"},"source_id":{"type":"string","example":"proj123"},"client_id":{"type":"string"},"page_id":{"type":"string"},"account_id":{"type":"string"}},"required":["widgets","source_type","source_id","client_id","page_id"]},"WidgetResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Widget"}},"required":["success","data"]},"UpdateWidgetRequest":{"type":"object","properties":{"source_type":{"type":["string","null"],"enum":["project","template"]},"source_id":{"type":["string","null"]},"page_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"type":{"type":["string","null"],"enum":["DATA","TEXT","IMAGE","HTML","VIDEO","EMBED","TITLE","BUTTON","GOAL"]},"chart":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_type":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_group":{"type":["string","null"],"enum":["line","area","bar","pie","funnel","table","score","map","column","donut","column_bar_charts","line_area_charts","pie_donut_charts","scorecard"]},"state":{"type":["string","null"],"enum":["loading","LOADING","active","ACTIVE","error","ERROR","NO_DATA","demo","DEMO"]},"title":{"type":["string","null"]},"text":{"type":["string","null"]},"name":{"type":["string","null"]},"auto_generated_name":{"type":["string","null"]},"heading":{"type":["string","null"],"enum":["h1","h2","h3","h4","h5"]},"align":{"type":["string","null"],"enum":["left","center","right","justify"]},"link":{"type":["string","null"]},"link_url":{"type":["string","null"]},"image_fit":{"type":["string","null"],"enum":["object-contain","object-cover","object-fill","object-none"]},"embed_type":{"type":["string","null"],"enum":["URL","IFRAME","HTML"]},"embed_url":{"type":["string","null"]},"embed_iframe":{"type":["string","null"]},"embed_html":{"type":["string","null"]},"size":{"type":["string","null"]},"description":{"type":["string","null"]},"content":{"type":["string","null"]},"src":{"type":["string","null"]},"url":{"type":["string","null"]},"icon":{"type":["string","null"]},"target":{"type":["string","null"]},"image_link_url":{"type":["string","null"]},"x":{"type":["number","null"]},"y":{"type":["number","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"is_secondary":{"type":["boolean","null"]},"icon_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"options_3d":{"type":["boolean","null"]},"kpi":{"type":["boolean","null"]},"blended":{"type":["boolean","null"]},"row_limit":{"type":["string","null"],"enum":["5","10","25","50","100","500","all"]},"comparison_display":{"type":["string","null"],"enum":["previous","change","both"]},"sort_order":{"type":["string","null"]},"sort_by":{"type":["string","null"]},"column_widths":{"type":["object","null"],"additionalProperties":{"type":"number"}},"b_height":{"type":["string","null"]},"legend_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"invert_y_axis":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_name":{"type":["boolean","null"]},"show_icon":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_grid_lines":{"type":["boolean","null"]},"show_legends":{"type":["boolean","null"]},"show_x_axis":{"type":["boolean","null"]},"show_y_axis":{"type":["boolean","null"]},"show_trendline":{"type":["boolean","null"]},"show_totals":{"type":["boolean","null"]},"show_search":{"type":["boolean","null"]},"show_table_filters":{"type":["boolean","null"]},"show_logarithmic":{"type":["boolean","null"]},"show_multiple_axes":{"type":["boolean","null"]},"show_custom_date_range":{"type":["boolean","null"]},"show_description":{"type":["boolean","null"]},"show_container":{"type":["boolean","null"]},"show_label_list":{"type":["boolean","null"]},"show_chart":{"type":["boolean","null"]},"expand_rows":{"type":["boolean","null"]},"datasource_id":{"type":["string","null"],"enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"datasource_type":{"type":["string","null"],"enum":["DATASOURCE","CALCULATION","CUSTOM_DATA","CUSTOM_IMPORT","GOALS"]},"data_view":{"type":["string","null"]},"metrics":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":["array","null"],"items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":["object","null"],"additionalProperties":{}},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"current_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"current_summary":{"type":["object","null"],"additionalProperties":{}},"previous_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"previous_summary":{"type":["object","null"],"additionalProperties":{}},"series_fetched_at":{"type":["string","null"]},"error_status":{"type":"null"},"created_at":{}},"additionalProperties":false},"BulkUpdateWidgetsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1},"patch":{"type":"object","properties":{"source_type":{"type":["string","null"],"enum":["project","template"]},"source_id":{"type":["string","null"]},"page_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"type":{"type":["string","null"],"enum":["DATA","TEXT","IMAGE","HTML","VIDEO","EMBED","TITLE","BUTTON","GOAL"]},"chart":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_type":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_group":{"type":["string","null"],"enum":["line","area","bar","pie","funnel","table","score","map","column","donut","column_bar_charts","line_area_charts","pie_donut_charts","scorecard"]},"state":{"type":["string","null"],"enum":["loading","LOADING","active","ACTIVE","error","ERROR","NO_DATA","demo","DEMO"]},"title":{"type":["string","null"]},"text":{"type":["string","null"]},"name":{"type":["string","null"]},"auto_generated_name":{"type":["string","null"]},"heading":{"type":["string","null"],"enum":["h1","h2","h3","h4","h5"]},"align":{"type":["string","null"],"enum":["left","center","right","justify"]},"link":{"type":["string","null"]},"link_url":{"type":["string","null"]},"image_fit":{"type":["string","null"],"enum":["object-contain","object-cover","object-fill","object-none"]},"embed_type":{"type":["string","null"],"enum":["URL","IFRAME","HTML"]},"embed_url":{"type":["string","null"]},"embed_iframe":{"type":["string","null"]},"embed_html":{"type":["string","null"]},"size":{"type":["string","null"]},"description":{"type":["string","null"]},"content":{"type":["string","null"]},"src":{"type":["string","null"]},"url":{"type":["string","null"]},"icon":{"type":["string","null"]},"target":{"type":["string","null"]},"image_link_url":{"type":["string","null"]},"x":{"type":["number","null"]},"y":{"type":["number","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"is_secondary":{"type":["boolean","null"]},"icon_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"options_3d":{"type":["boolean","null"]},"kpi":{"type":["boolean","null"]},"blended":{"type":["boolean","null"]},"row_limit":{"type":["string","null"],"enum":["5","10","25","50","100","500","all"]},"comparison_display":{"type":["string","null"],"enum":["previous","change","both"]},"sort_order":{"type":["string","null"]},"sort_by":{"type":["string","null"]},"column_widths":{"type":["object","null"],"additionalProperties":{"type":"number"}},"b_height":{"type":["string","null"]},"legend_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"invert_y_axis":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_name":{"type":["boolean","null"]},"show_icon":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_grid_lines":{"type":["boolean","null"]},"show_legends":{"type":["boolean","null"]},"show_x_axis":{"type":["boolean","null"]},"show_y_axis":{"type":["boolean","null"]},"show_trendline":{"type":["boolean","null"]},"show_totals":{"type":["boolean","null"]},"show_search":{"type":["boolean","null"]},"show_table_filters":{"type":["boolean","null"]},"show_logarithmic":{"type":["boolean","null"]},"show_multiple_axes":{"type":["boolean","null"]},"show_custom_date_range":{"type":["boolean","null"]},"show_description":{"type":["boolean","null"]},"show_container":{"type":["boolean","null"]},"show_label_list":{"type":["boolean","null"]},"show_chart":{"type":["boolean","null"]},"expand_rows":{"type":["boolean","null"]},"datasource_id":{"type":["string","null"],"enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"datasource_type":{"type":["string","null"],"enum":["DATASOURCE","CALCULATION","CUSTOM_DATA","CUSTOM_IMPORT","GOALS"]},"data_view":{"type":["string","null"]},"metrics":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":["array","null"],"items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":["object","null"],"additionalProperties":{}},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"current_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"current_summary":{"type":["object","null"],"additionalProperties":{}},"previous_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"previous_summary":{"type":["object","null"],"additionalProperties":{}},"series_fetched_at":{"type":["string","null"]},"error_status":{"type":"null"},"created_at":{}},"additionalProperties":false}},"required":["ids","patch"]},"BulkEachWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"updated_count":{"type":"number"}},"required":["updated_count"]}},"required":["success","data"]},"BulkEachWidgetsRequest":{"type":"object","properties":{"updates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"patch":{"type":"object","properties":{"source_type":{"type":["string","null"],"enum":["project","template"]},"source_id":{"type":["string","null"]},"page_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"type":{"type":["string","null"],"enum":["DATA","TEXT","IMAGE","HTML","VIDEO","EMBED","TITLE","BUTTON","GOAL"]},"chart":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_type":{"type":["string","null"],"enum":["table","score","area","line","bar","column","pie","donut","funnel","map","areaspline","spline","stacked_area","percentage_area","stacked_column","stacked_bar","100_stacked_column","3d_bar","3d_column","3d_pie","3d_donut","funnel3d","custom"]},"chart_group":{"type":["string","null"],"enum":["line","area","bar","pie","funnel","table","score","map","column","donut","column_bar_charts","line_area_charts","pie_donut_charts","scorecard"]},"state":{"type":["string","null"],"enum":["loading","LOADING","active","ACTIVE","error","ERROR","NO_DATA","demo","DEMO"]},"title":{"type":["string","null"]},"text":{"type":["string","null"]},"name":{"type":["string","null"]},"auto_generated_name":{"type":["string","null"]},"heading":{"type":["string","null"],"enum":["h1","h2","h3","h4","h5"]},"align":{"type":["string","null"],"enum":["left","center","right","justify"]},"link":{"type":["string","null"]},"link_url":{"type":["string","null"]},"image_fit":{"type":["string","null"],"enum":["object-contain","object-cover","object-fill","object-none"]},"embed_type":{"type":["string","null"],"enum":["URL","IFRAME","HTML"]},"embed_url":{"type":["string","null"]},"embed_iframe":{"type":["string","null"]},"embed_html":{"type":["string","null"]},"size":{"type":["string","null"]},"description":{"type":["string","null"]},"content":{"type":["string","null"]},"src":{"type":["string","null"]},"url":{"type":["string","null"]},"icon":{"type":["string","null"]},"target":{"type":["string","null"]},"image_link_url":{"type":["string","null"]},"x":{"type":["number","null"]},"y":{"type":["number","null"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"is_secondary":{"type":["boolean","null"]},"icon_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"options_3d":{"type":["boolean","null"]},"kpi":{"type":["boolean","null"]},"blended":{"type":["boolean","null"]},"row_limit":{"type":["string","null"],"enum":["5","10","25","50","100","500","all"]},"comparison_display":{"type":["string","null"],"enum":["previous","change","both"]},"sort_order":{"type":["string","null"]},"sort_by":{"type":["string","null"]},"column_widths":{"type":["object","null"],"additionalProperties":{"type":"number"}},"b_height":{"type":["string","null"]},"legend_position":{"type":["string","null"],"enum":["top","right","bottom","left","none"]},"invert_y_axis":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_name":{"type":["boolean","null"]},"show_icon":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_grid_lines":{"type":["boolean","null"]},"show_legends":{"type":["boolean","null"]},"show_x_axis":{"type":["boolean","null"]},"show_y_axis":{"type":["boolean","null"]},"show_trendline":{"type":["boolean","null"]},"show_totals":{"type":["boolean","null"]},"show_search":{"type":["boolean","null"]},"show_table_filters":{"type":["boolean","null"]},"show_logarithmic":{"type":["boolean","null"]},"show_multiple_axes":{"type":["boolean","null"]},"show_custom_date_range":{"type":["boolean","null"]},"show_description":{"type":["boolean","null"]},"show_container":{"type":["boolean","null"]},"show_label_list":{"type":["boolean","null"]},"show_chart":{"type":["boolean","null"]},"expand_rows":{"type":["boolean","null"]},"datasource_id":{"type":["string","null"],"enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"datasource_type":{"type":["string","null"],"enum":["DATASOURCE","CALCULATION","CUSTOM_DATA","CUSTOM_IMPORT","GOALS"]},"data_view":{"type":["string","null"]},"metrics":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":["array","null"],"items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":["object","null"],"additionalProperties":{}},"currency":{"$ref":"#/components/schemas/CurrencyInput"},"date_range":{"allOf":[{"$ref":"#/components/schemas/DateRange"},{"type":["object","null"]}]},"current_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"current_summary":{"type":["object","null"],"additionalProperties":{}},"previous_data":{"type":["array","null"],"items":{"type":"object","additionalProperties":{}}},"previous_summary":{"type":["object","null"],"additionalProperties":{}},"series_fetched_at":{"type":["string","null"]},"error_status":{"type":"null"},"created_at":{}},"additionalProperties":false}},"required":["id","patch"]},"minItems":1}},"required":["updates"]},"DuplicateWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"duplicated_count":{"type":"number"},"widget_ids":{"type":"array","items":{"type":"string"}}},"required":["duplicated_count","widget_ids"]}},"required":["success","data"]},"DuplicateWidgetsRequest":{"type":"object","properties":{"pairs":{"type":"array","items":{"type":"object","properties":{"source_id":{"type":"string"},"new_id":{"type":"string"},"y_offset":{"type":"number"}},"required":["source_id","new_id"]},"minItems":1}},"required":["pairs"]},"BulkDeleteWidgetsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"example":["widget1","widget2"]}},"required":["ids"]},"RefreshWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"accepted":{"type":"boolean"}},"required":["accepted"]}},"required":["success","data"]},"RefreshWidgetsRequest":{"type":"object","properties":{"widget_ids":{"type":"array","items":{"type":"string"}},"source_id":{"type":"string"},"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]},"client_id":{"type":"string"},"date_range":{"type":"object","properties":{"current_start":{"type":"string"},"current_end":{"type":"string"},"previous_start":{"type":["string","null"]},"previous_end":{"type":["string","null"]}},"required":["current_start","current_end"]},"timezone":{"$ref":"#/components/schemas/IanaTimezone"}},"required":["client_id","date_range"]},"DataProxyResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{},"meta":{}},"required":["success"]},"DateRangeQuery":{"type":"object","properties":{"current_start":{"type":"string","example":"2026-03-01"},"current_end":{"type":"string","example":"2026-03-31"},"previous_start":{"type":"string","example":"2026-02-01"},"previous_end":{"type":"string","example":"2026-02-28"}},"required":["current_start","current_end"]},"DataFilter":{"type":"object","properties":{"field":{"type":"string"},"operator":{"type":"string"},"value":{}}},"DataQueryRequest":{"type":"object","properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"],"example":"ga4"},"client_id":{"type":"string","example":"cliAbc123"},"date_range":{"$ref":"#/components/schemas/DateRangeQuery"},"metrics":{"type":"array","items":{"type":"string"},"example":["sessions","pageviews"]},"dimensions":{"type":"array","items":{"type":"string"},"example":["DATE"]},"data_view":{"type":"string","example":"OVERVIEW"},"filters":{"type":"array","items":{"$ref":"#/components/schemas/DataFilter"}},"timezone":{"allOf":[{"$ref":"#/components/schemas/IanaTimezone"},{"default":"UTC"}]},"advanced":{"type":"object","additionalProperties":{}},"extra":{"type":"object","additionalProperties":{}}},"required":["datasource_id","client_id","date_range","metrics","dimensions","data_view"]},"MetricQuery":{"type":["object","null"],"properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"data_view":{"type":"string"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":"array","items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":"object","additionalProperties":{}}}},"FormulaToken":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["METRIC","NUMBER","OPERATOR"]},"query":{"$ref":"#/components/schemas/MetricQuery"},"number":{"type":["number","null"]},"operator":{"type":["string","null"],"enum":["+","-","*","/","×","÷","(",")"]}},"required":["id","type"]},"Formula":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/FormulaToken"}},{"type":"string"}],"description":"Array of formula tokens in evaluation order. CTR = clicks ÷ impressions × 100 is five tokens: METRIC(clicks), OPERATOR(÷), METRIC(impressions), OPERATOR(×), NUMBER(100). Operators accept both the Unicode × ÷ the UI writes and the ASCII * / on migrated rows."},"CalculatedMetric":{"type":"object","properties":{"id":{"type":"string","example":"metric123"},"name":{"type":"string","example":"CTR"},"formula":{"$ref":"#/components/schemas/Formula"},"symbol":{"type":"string","enum":["numbers","decimal","%","currency"],"example":"%"},"accountid":{"type":"string"},"created_at":{},"updated_at":{}},"required":["id","name","formula","accountid"]},"ListCalculatedMetricsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/CalculatedMetric"}}},"required":["success","data"]},"CreateCalculatedMetricResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateCalculatedMetricRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"CTR"},"formula":{"$ref":"#/components/schemas/Formula"},"symbol":{"type":"string","enum":["numbers","decimal","%","currency"],"example":"%"}},"required":["name","formula","symbol"]},"UpdateCalculatedMetricRequest":{"type":"object","properties":{"name":{"type":"string"},"formula":{"$ref":"#/components/schemas/Formula"},"symbol":{"type":"string","enum":["numbers","decimal","%","currency"]}},"required":["name","formula","symbol"]},"DuplicateCalculatedMetricRequest":{"type":"object","properties":{"new_name":{"type":"string","example":"CTR (Copy)"}},"required":["new_name"]},"GoalQuery":{"type":"object","properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox","demo"]},"data_view":{"type":"string"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/MetricSelection"}},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/DimensionSelection"}},"filters":{"type":"array","items":{"$ref":"#/components/schemas/WidgetFilter"}},"advanced":{"type":"object","additionalProperties":{}},"date_range":{"type":["object","null"],"properties":{"current_start":{"type":["string","null"]},"current_end":{"type":["string","null"]},"previous_start":{"type":["string","null"]},"previous_end":{"type":["string","null"]}}},"show_custom_date_range":{"type":["boolean","null"]}}},"Goal":{"type":"object","properties":{"id":{"type":"string","example":"goal_abc123"},"account_id":{"type":"string"},"client_id":{"type":["string","null"]},"name":{"type":"string","example":"Q4 Revenue Target"},"description":{"type":["string","null"]},"target_value":{"type":"number","example":250000},"operator":{"type":"string","enum":[">=","=","<="],"example":">="},"goal_type":{"type":"string","enum":["static","change"],"example":"static"},"symbol":{"type":["string","null"],"example":"$"},"query":{"$ref":"#/components/schemas/GoalQuery"},"created_at":{},"updated_at":{}},"required":["id","account_id","name","target_value","operator","goal_type"]},"ListGoalsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Goal"}}},"required":["success","data"]},"CreateGoalResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateGoalRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Q4 Revenue Target"},"description":{"type":"string"},"target_value":{"type":"number","example":250000},"operator":{"type":"string","enum":[">=","=","<="],"default":">="},"goal_type":{"type":"string","enum":["static","change"],"default":"static"},"symbol":{"type":"string","enum":["numbers","decimal","%","currency"]},"client_id":{"type":"string"},"query":{"$ref":"#/components/schemas/GoalQuery"}},"required":["name","target_value"]},"UpdateGoalRequest":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":["string","null"]},"target_value":{"type":"number"},"operator":{"type":"string","enum":[">=","=","<="]},"goal_type":{"type":"string","enum":["static","change"]},"symbol":{"type":["string","null"],"enum":["numbers","decimal","%","currency"]},"client_id":{"type":["string","null"]},"query":{"$ref":"#/components/schemas/GoalQuery"}}},"DuplicateGoalRequest":{"type":"object","properties":{"new_name":{"type":"string","example":"Q4 Revenue Target (Copy)"}}},"CustomDataColumn":{"type":"object","additionalProperties":{}},"CustomDataSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"file_name":{"type":["string","null"]},"columns":{"type":"array","items":{"$ref":"#/components/schemas/CustomDataColumn"}},"row_count":{"type":"number"},"file_size":{"type":["number","null"]},"created_at":{},"updated_at":{}},"required":["id","name"]},"ListCustomDataResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomDataSummary"}}},"required":["success","data"]},"CustomData":{"type":"object","properties":{"id":{"type":"string","example":"cd123"},"name":{"type":"string","example":"Monthly Revenue"},"file_name":{"type":["string","null"]},"accountid":{"type":"string"},"raw_data":{"type":"array","items":{"type":"object","additionalProperties":{}}},"columns":{"type":"array","items":{"$ref":"#/components/schemas/CustomDataColumn"}},"row_count":{"type":"number"},"file_size":{"type":["number","null"]},"created_at":{},"updated_at":{}},"required":["id","name","accountid"]},"CustomDataResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/CustomData"}},"required":["success","data"]},"CreateCustomDataResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateCustomDataRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Monthly Revenue"},"file_name":{"type":"string"},"raw_data":{"type":"array","items":{"type":"object","additionalProperties":{}},"maxItems":10000},"columns":{"type":"array","items":{"$ref":"#/components/schemas/CustomDataColumn"}},"file_size":{"type":"number"}},"required":["name","file_name","raw_data","columns","file_size"]},"UpdateCustomDataRequest":{"type":"object","properties":{"name":{"type":"string"},"file_name":{"type":"string"},"raw_data":{"type":"array","items":{"type":"object","additionalProperties":{}},"maxItems":10000},"columns":{"type":"array","items":{"$ref":"#/components/schemas/CustomDataColumn"}},"file_size":{"type":"number"}}},"DuplicateCustomDataResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"DuplicateCustomDataRequest":{"type":"object","properties":{"new_name":{"type":"string","minLength":1,"example":"Monthly Revenue (Copy)"}},"required":["new_name"]},"BillingAccountResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]},"Plan":{"type":"object","properties":{"price":{"type":"object","additionalProperties":{}},"product":{"type":"object","additionalProperties":{}},"tiers":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["price","product","tiers"]},"ListPlansResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}}},"required":["success","data"]},"InvoicesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]},"Auth":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"datasource_id":{"type":"string"},"name":{"type":["string","null"]},"created_at":{"type":["string","null"]}},"required":["id","account_id","datasource_id"]},"ListAuthsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Auth"}}},"required":["success","data"]},"RenameAuthRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"My Google Account"}},"required":["name"]},"TestAuthResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"connected":{"type":"boolean"},"message":{"type":"string"}},"required":["connected"]}},"required":["success","data"]},"TestAuthRequest":{"type":"object","properties":{"auth_id":{"type":"string","minLength":1,"example":"auth_abc123"},"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"],"example":"ga4"}},"required":["auth_id","datasource_id"]},"DataAccountsRequest":{"type":"object","properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"],"example":"ga4"},"client_id":{"type":"string","example":"cliAbc123"},"account_name":{"type":"string"},"params":{"type":"object","additionalProperties":{}}},"required":["datasource_id","client_id"]},"EmailProvider":{"type":"string","enum":["oviond","resend","smtp"]},"EmailProviderResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"provider":{"$ref":"#/components/schemas/EmailProvider"}},"required":["provider"]}},"required":["success","data"]},"SetEmailProviderRequest":{"type":"object","properties":{"provider":{"$ref":"#/components/schemas/EmailProvider"}},"required":["provider"]},"EmailDomain":{"type":["object","null"],"properties":{"id":{"type":"string"},"account_id":{"type":"string"},"resend_id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["not_started","pending","verified","failed"]},"records":{"type":"array","items":{"type":"object","additionalProperties":{}}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","account_id","resend_id","name","status","records","created_at","updated_at"]},"EmailDomainResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EmailDomain"}},"required":["success","data"]},"AddEmailDomainRequest":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"example":"mail.acme.com"}},"required":["domain"]},"EmailSmtpConfig":{"type":["object","null"],"properties":{"id":{"type":"string"},"account_id":{"type":"string"},"host":{"type":"string"},"port":{"type":"integer"},"username":{"type":"string"},"secure":{"type":"boolean"},"from_email":{"type":"string"},"from_name":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","account_id","host","port","username","secure","from_email","from_name","created_at","updated_at"]},"EmailSmtpResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EmailSmtpConfig"}},"required":["success","data"]},"UpsertEmailSmtpRequest":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"secure":{"type":"boolean","default":true},"from_email":{"type":"string","format":"email"},"from_name":{"type":["string","null"]}},"required":["host","port","username","password","from_email"]},"TestEmailSmtpRequest":{"type":"object","properties":{"host":{"type":"string","minLength":1},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","minLength":1},"password":{"type":"string","minLength":1},"secure":{"type":"boolean","default":true},"from_email":{"type":"string","format":"email"},"from_name":{"type":["string","null"]}},"required":["host","port","username","password","from_email"]},"EmailSenderSource":{"type":"string","enum":["oviond","resend","smtp"]},"EmailSender":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"source":{"$ref":"#/components/schemas/EmailSenderSource"},"nickname":{"type":["string","null"]},"from_name":{"type":"string"},"from_email":{"type":"string"},"reply_to":{"type":["string","null"]},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"is_default":{"type":"boolean"},"is_published":{"type":"boolean"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","source","from_name","from_email"]},"EmailSendersResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"provider":{"$ref":"#/components/schemas/EmailProvider"},"senders":{"type":"array","items":{"$ref":"#/components/schemas/EmailSender"}}},"required":["provider","senders"]}},"required":["success","data"]},"CreateEmailSenderRequest":{"type":"object","properties":{"source":{"type":"string","enum":["resend","smtp"]},"nickname":{"type":["string","null"]},"from_name":{"type":"string","minLength":1},"from_email":{"type":"string","format":"email"},"reply_to":{"type":["string","null"],"format":"email"},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["source","from_name","from_email"]},"UpdateEmailSenderRequest":{"type":"object","properties":{"source":{"type":"string","enum":["resend","smtp"]},"nickname":{"type":["string","null"]},"from_name":{"type":"string","minLength":1},"from_email":{"type":"string","format":"email"},"reply_to":{"type":["string","null"],"format":"email"},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]}}},"EmailTemplate":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"subject":{"type":"string"},"message":{"type":"string"},"button_text":{"type":["string","null"]},"button_top":{"type":"boolean"},"is_default":{"type":"boolean"},"is_published":{"type":"boolean"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","account_id","name","subject","message","button_top","is_default","is_published","created_at","updated_at"]},"EmailTemplateListResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailTemplate"}}},"required":["success","data"]},"EmailTemplateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EmailTemplate"}},"required":["success","data"]},"CreateEmailTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"button_text":{"type":["string","null"]},"button_top":{"type":"boolean","default":false}},"required":["name","subject","message"]},"UpdateEmailTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"button_text":{"type":["string","null"]},"button_top":{"type":"boolean","default":false}}},"MediaItem":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"key":{"type":"string"},"mime_type":{"type":"string"},"size":{"type":"number"},"folders":{"type":"array","items":{"type":"string"}},"is_deleted":{"type":"boolean"},"deleted_at":{"type":["string","null"]},"created_at":{}},"required":["id","account_id"]},"ListMediaResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/MediaItem"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"GroupMediaRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1,"example":["media1","media2"]},"folder_id":{"type":"string","example":"folderAbc"}},"required":["ids","folder_id"]},"UpdateMediaRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"updated-logo.png"}},"required":["name"]},"MediaFolder":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"created_at":{}},"required":["id","account_id","name"]},"ListMediaFoldersResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/MediaFolder"}}},"required":["success","data"]},"CreateMediaFolderResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateMediaFolderRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Client Logos"}},"required":["name"]},"RenameMediaFolderRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Brand Assets"}},"required":["name"]},"AssetTagsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"string"}}},"required":["success","data"]},"Asset":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"datasources":{"type":"array","items":{"type":"string"}},"is_recommended":{"type":"boolean"},"layout":{"type":"string","enum":["grid","canvas"]},"orientation":{"type":["string","null"],"enum":["portrait","landscape"]},"paper_size":{"type":["string","null"],"enum":["a4","letter"]},"created_at":{},"widgets":{"type":"array","items":{"$ref":"#/components/schemas/Widget"}}},"required":["id","account_id","name","is_recommended","layout"]},"ListAssetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"CreateAssetResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateAssetRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"GA4 Traffic Widget"},"description":{"type":"string"},"type":{"type":"string","example":"chart"},"tags":{"type":"array","items":{"type":"string"}},"datasources":{"type":"array","items":{"type":"string"}},"is_recommended":{"type":"boolean"},"layout":{"type":"string","enum":["grid","canvas"]},"orientation":{"type":"string","enum":["portrait","landscape"]},"paper_size":{"type":"string","enum":["a4","letter"]},"widgets":{"type":"array","items":{"$ref":"#/components/schemas/CreateWidgetItem"}}},"required":["name","type"]},"DuplicateAssetResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"DuplicateAssetRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"GA4 Traffic Widget (copy)"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["name"]},"AddAssetToPageResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"inserted_count":{"type":"number"},"widget_ids":{"type":"array","items":{"type":"string"}}},"required":["inserted_count","widget_ids"]}},"required":["success","data"]},"AddAssetToPageRequest":{"type":"object","properties":{"source_id":{"type":"string","minLength":1,"description":"Report id to add the asset widgets to"},"page_id":{"type":"string","minLength":1,"description":"Page id to place the widgets on"},"client_id":{"type":["string","null"],"description":"Client id the report belongs to — drives the connectivity → demo decision. Falls back to the report's client when omitted."}},"required":["source_id","page_id"]},"ListAssetWidgetsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Widget"}}},"required":["success","data"]},"GetAssetResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Asset"}},"required":["success","data"]},"UpdateAssetRequest":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"datasources":{"type":"array","items":{"type":"string"}},"is_recommended":{"type":"boolean"}}},"GeneratePdfResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"job_id":{"type":"string","example":"pdf_job_abc123"},"message":{"type":"string","example":"PDF generation queued"}},"required":["job_id","message"]}},"required":["success","data"]},"GeneratePdfRequest":{"type":"object","properties":{"report_id":{"type":"string","minLength":1,"example":"proj_abc123"},"client_id":{"type":"string","minLength":1,"example":"client_xyz"},"format":{"type":"string","enum":["A4","Letter"],"example":"A4"},"orientation":{"type":"string","enum":["portrait","landscape"],"example":"portrait"}},"required":["report_id","client_id","format","orientation"]},"PdfStatusResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"job_id":{"type":"string"},"status":{"type":"string","enum":["pending","processing","complete","failed"]},"url":{"type":"string","example":"https://s3.amazonaws.com/bucket/pdf/report.pdf"},"error":{"type":"string"}},"required":["job_id","status"]}},"required":["success","data"]},"Export":{"type":"object","properties":{"id":{"type":"string"},"report_id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":["string","null"]},"status":{"type":["string","null"],"enum":["processing","completed","failed"]},"queued":{"type":["boolean","null"]},"opened":{"type":["boolean","null"]},"pdf_url":{"type":["string","null"]},"key":{"type":["string","null"]},"created_at":{}},"required":["id","report_id","account_id"]},"ListExportsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Export"}}},"required":["success","data"]},"Template":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["REPORT","DASHBOARD"]},"ranking":{"type":"number"},"datasources":{"type":"array","items":{"type":"string"}},"thumbnail":{"type":"string"},"date_range":{"$ref":"#/components/schemas/DateRange"},"theme_id":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"orientation":{"type":"string","enum":["portrait","landscape"]},"paper_size":{"type":["string","null"],"enum":["a4","letter"]},"branding_source":{"type":["string","null"],"enum":["inherit","client","agency"]},"show_dashboard_navigation":{"type":["boolean","null"]},"show_cover_page":{"type":["boolean","null"]},"show_cover_page_logo":{"type":["boolean","null"]},"show_cover_page_client_logo":{"type":["boolean","null"]},"show_cover_page_agency_logo":{"type":["boolean","null"]},"show_cover_page_name":{"type":["boolean","null"]},"show_cover_page_date":{"type":["boolean","null"]},"show_cover_page_bg_image":{"type":["boolean","null"]},"show_header":{"type":["boolean","null"]},"show_header_logo":{"type":["boolean","null"]},"show_header_name":{"type":["boolean","null"]},"show_header_date":{"type":["boolean","null"]},"show_page_numbers":{"type":["boolean","null"]},"show_table_of_contents":{"type":["boolean","null"]},"show_date":{"type":["boolean","null"]},"show_thank_you":{"type":["boolean","null"]},"show_thank_you_bg_image":{"type":["boolean","null"]},"show_thank_you_logo":{"type":["boolean","null"]},"show_thank_you_client_logo":{"type":["boolean","null"]},"show_thank_you_agency_logo":{"type":["boolean","null"]},"show_thank_you_heading":{"type":["boolean","null"]},"show_thank_you_message":{"type":["boolean","null"]},"created_at":{},"source":{"type":"string","enum":["standard","mine"]}},"required":["id","account_id","name"]},"ListTemplatesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Template"}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]},"TemplateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Template"}},"required":["success","data"]},"CreateTemplateResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Monthly SEO Report"},"report_id":{"type":"string","description":"Copy pages/widgets from this report"},"type":{"type":"string","enum":["REPORT","DASHBOARD"],"description":"Defaults to the source report's type when omitted"},"description":{"type":"string"},"thumbnail":{"type":"string"},"ranking":{"type":"number"}},"required":["name","report_id"]},"UpdateTemplateRequest":{"type":"object","properties":{"name":{"type":"string"},"thumbnail":{"type":"string"},"type":{"type":"string","enum":["REPORT","DASHBOARD"]},"description":{"type":"string"},"ranking":{"type":"number"}}},"BulkDeleteTemplatesRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["ids"]},"GeneratedPageElementLayout":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"}},"required":["x","y","width","height"]},"CoverPageConfig":{"type":["object","null"],"properties":{"pattern_id":{"type":["string","null"]},"bg_image_url":{"type":["string","null"]},"show_cover_design":{"type":"boolean"},"show_client_logo":{"type":"boolean"},"show_agency_logo":{"type":"boolean"},"show_title":{"type":"boolean"},"show_subtitle":{"type":"boolean"},"title":{"type":"string"},"subtitle":{"type":"string"},"layout":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/GeneratedPageElementLayout"}},"widgets":{"type":"array","items":{},"default":[]}}},"ThankYouPageConfig":{"type":["object","null"],"properties":{"pattern_id":{"type":["string","null"]},"bg_image_url":{"type":["string","null"]},"show_logo":{"type":"boolean"},"show_client_logo":{"type":"boolean"},"show_agency_logo":{"type":"boolean"},"show_title":{"type":"boolean"},"show_message":{"type":"boolean"},"title":{"type":"string"},"subtitle":{"type":"string"},"layout":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/GeneratedPageElementLayout"}},"widgets":{"type":"array","items":{},"default":[]}}},"Theme":{"type":"object","properties":{"id":{"type":"string"},"account_id":{"type":"string"},"name":{"type":"string"},"is_default":{"type":"boolean"},"created_at":{},"tokens":{"type":"object","additionalProperties":{"type":["string","null"]}},"cover_page":{"$ref":"#/components/schemas/CoverPageConfig"},"thank_you_page":{"$ref":"#/components/schemas/ThankYouPageConfig"}},"required":["id","account_id","name","tokens"]},"ListThemesResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Theme"}}},"required":["success","data"]},"ThemeResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Theme"}},"required":["success","data"]},"CreateThemeResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["success","data"]},"CreateThemeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Dark Corporate"},"tokens":{"type":"object","additionalProperties":{"type":["string","null"]}},"cover_page":{"allOf":[{"$ref":"#/components/schemas/CoverPageConfig"},{"type":"object"}]},"thank_you_page":{"allOf":[{"$ref":"#/components/schemas/ThankYouPageConfig"},{"type":"object"}]},"is_default":{"type":"boolean"}},"required":["name","tokens"]},"UpdateThemeRequest":{"type":"object","properties":{"name":{"type":"string"},"tokens":{"type":"object","additionalProperties":{"type":["string","null"]}},"cover_page":{"allOf":[{"$ref":"#/components/schemas/CoverPageConfig"},{"type":"object"}]},"thank_you_page":{"allOf":[{"$ref":"#/components/schemas/ThankYouPageConfig"},{"type":"object"}]},"is_default":{"type":"boolean"}}},"ApplyThemeResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"updated_report_ids":{"type":"array","items":{"type":"string"}}},"required":["updated_report_ids"]}},"required":["success","data"]},"ApplyThemeRequest":{"type":"object","properties":{"scope":{"type":"string","enum":["current_report","client_reports","all_reports"]},"report_id":{"type":"string"},"client_id":{"type":"string","default":""}},"required":["scope","report_id"]},"Automation":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"parent_id":{"type":"string"},"template_id":{"type":"string"},"sender_id":{"type":"string"},"frequency":{"type":"string","enum":["daily","weekly","monthly"]},"day":{"type":["string","null"]},"hours":{"type":"string"},"minutes":{"type":"string"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"recipients":{"type":"array","items":{"type":"string"}},"paused":{"type":"boolean"},"time_format":{"type":["string","null"],"enum":["AM","PM"]},"date_text":{"type":["string","null"],"enum":["Today","Yesterday","Last 7 Days","Last 30 Days","Last 60 Days","Last Month","This Month","Last 2 Months","Last 3 Months","Last 12 Months","This Year","Last Year"]},"last_run_status":{"type":["string","null"],"enum":["SUCCESS","FAILED","SKIPPED","SCHEDULED"]},"last_run_at":{"type":["string","null"]},"next_run_at":{"type":["string","null"]},"is_deleted":{"type":"boolean"},"deleted_at":{"type":["string","null"]},"created_at":{}},"required":["id","parent_id","template_id","sender_id","timezone","recipients"]},"ListAutomationsResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Automation"}}},"required":["success","data"]},"AutomationHistoryResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["success","data"]},"CreateAutomationResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"automation_id":{"type":"string"},"template_id":{"type":"string"}},"required":["automation_id","template_id"]}},"required":["success","data"]},"CreateAutomationRequest":{"type":"object","properties":{"parent_id":{"type":"string","minLength":1,"description":"Report ID this automation belongs to"},"name":{"type":"string"},"frequency":{"type":"string","enum":["daily","weekly","monthly"],"example":"weekly"},"day":{"type":"string","example":"monday"},"hours":{"type":"string","example":"9"},"minutes":{"type":"string","example":"00"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"time_format":{"type":"string","enum":["AM","PM"]},"recipients":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"template_id":{"type":"string","minLength":1,"description":"Saved email template id, or the literal \"custom\" to save a new template from the custom payload"},"sender_id":{"type":"string","minLength":1,"description":"Saved email sender id"},"custom":{"type":"object","properties":{"name":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"button_text":{"type":["string","null"]},"button_top":{"type":"boolean"}},"required":["name","subject","message"],"description":"Required when template_id === \"custom\" — saved as a new named email template (name + subject + message)"},"date_text":{"type":"string","enum":["Today","Yesterday","Last 7 Days","Last 30 Days","Last 60 Days","Last Month","This Month","Last 2 Months","Last 3 Months","Last 12 Months","This Year","Last Year"],"example":"Last 30 Days"}},"required":["parent_id","name","frequency","hours","minutes","timezone","recipients","template_id","sender_id","date_text"]},"UpdateAutomationRequest":{"type":"object","properties":{"name":{"type":"string"},"frequency":{"type":"string","enum":["daily","weekly","monthly"]},"hours":{"type":"string"},"minutes":{"type":"string"},"timezone":{"$ref":"#/components/schemas/IanaTimezone"},"time_format":{"type":"string","enum":["AM","PM"]},"recipients":{"type":"array","items":{"type":"string","format":"email"}},"template_id":{"type":"string"},"sender_id":{"type":"string"},"custom":{"type":"object","properties":{"name":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"button_text":{"type":["string","null"]},"button_top":{"type":"boolean"}},"required":["name","subject","message"]},"date_text":{"type":"string","enum":["Today","Yesterday","Last 7 Days","Last 30 Days","Last 60 Days","Last Month","This Month","Last 2 Months","Last 3 Months","Last 12 Months","This Year","Last Year"]},"day":{"type":"string"}}},"TestAutomationResponse":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]},"TestAutomationRequest":{"type":"object","properties":{"recipients":{"type":"array","items":{"type":"string","format":"email"},"example":["test@example.com"]}}},"ArchiveBulkBody":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1},"type":{"type":"string","enum":["clients","projects","media","automations","templates","goals","calculated_metrics","custom_data","saved_metrics","assets","themes","exports","notifications"]}},"required":["ids","type"]},"BulkDeleteNotificationsRequest":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["ids"]}},"parameters":{}},"paths":{"/v1/health":{"get":{"tags":["Health"],"summary":"Health Check","security":[],"responses":{"200":{"description":"Service is healthy or degraded","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"]},"timestamp":{"type":"string"},"uptime":{"type":"number"},"version":{"type":"string"},"checks":{"type":"object","properties":{"supabase":{"type":"boolean"}},"required":["supabase"]}},"required":["status","timestamp","uptime","version","checks"]}}}}},"operationId":"health_check"}},"/v1/users/me":{"get":{"tags":["Users"],"summary":"Get User","description":"Get the currently authenticated user profile.","responses":{"200":{"description":"Current user profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"},"example":{"success":true,"data":{"id":"usrAbc123","account_id":"ov:26AbCdEfGhIjKlMnOp","fullname":"Jane Doe","email":"jane@acme.com","email_verified":true,"role":"admin"}}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_user"}},"/v1/users/me/profile":{"put":{"tags":["Users"],"summary":"Update Profile","description":"Update the current user profile name, language, and theme.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}}},"responses":{"200":{"description":"Profile updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"update_profile"}},"/v1/users/me/avatar":{"put":{"tags":["Users"],"summary":"Update Avatar","description":"Update the current user profile picture.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAvatarRequest"}}}},"responses":{"200":{"description":"Avatar updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"update_avatar"}},"/v1/users/me/email":{"put":{"tags":["Users"],"summary":"Change Email","description":"Change the current user email address.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeEmailRequest"}}}},"responses":{"200":{"description":"Email address updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"409":{"description":"Email already in use","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"change_email"}},"/v1/users":{"get":{"tags":["Users"],"summary":"List Users","description":"List all team members for the authenticated account.","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Paginated list of team members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListUsersResponse"}}}}},"operationId":"list_users"}},"/v1/users/invite":{"post":{"tags":["Users"],"summary":"Invite User","description":"Invite a new user to the account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"201":{"description":"User invited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserResponse"}}}},"409":{"description":"User already exists","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"invite_user"}},"/v1/users/{id}/resend-invite":{"post":{"tags":["Users"],"summary":"Resend Invite","description":"Send a new invite email to a member who has not accepted yet. The previous link stops working.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Invite resent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserResponse"}}}},"400":{"description":"User has already accepted their invite","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"resend_invite"}},"/v1/users/{id}":{"put":{"tags":["Users"],"summary":"Update User","description":"Edit a team member (role, assigned clients, name).","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditUserRequest"}}}},"responses":{"200":{"description":"User updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"403":{"description":"Cannot edit a user from a different account","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_user"},"delete":{"tags":["Users"],"summary":"Delete User","description":"Remove a team member from the account.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"User removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"403":{"description":"Cannot remove owner or user from a different account","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_user"}},"/v1/users/accept-invite":{"post":{"tags":["Users"],"summary":"Accept Invite","description":"Called by the frontend after a freshly-invited user completes Supabase Auth callback. Notifies the inviter.","responses":{"200":{"description":"Invite finalised","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"accept_invite"}},"/v1/account":{"get":{"tags":["Account"],"summary":"Get Account","description":"Get the accounts row for the current account","responses":{"200":{"description":"Account document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"},"example":{"success":true,"data":{"id":"ov:26AbCdEfGhIjKlMnOp","company_name":"Acme Agency","website":"acme.com","country":"US","timezone":"America/New_York","currency":{"iso":"US","code":"USD","symbol":"$"},"subscription_status":"active","onboarding":true}}}}},"404":{"description":"Account not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_account"},"delete":{"tags":["Account"],"summary":"Delete Account","description":"Irreversible. Cancels the active Stripe subscription, deletes all data across every table for this account, removes all team members from the users table, purges all S3 media files, and deletes all Supabase Auth users. Requires the account owner's email address in the `confirm_email` field as a confirmation gate (case-insensitive match against the authenticated user's email).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}}},"responses":{"200":{"description":"Account deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountResponse"}}}},"401":{"description":"Unauthorized, API-key auth, or confirmation email does not match","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Account or user not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_account"}},"/v1/account/usage":{"get":{"tags":["Account"],"summary":"Get Account Usage","description":"Get account usage statistics vs plan limits","responses":{"200":{"description":"Usage data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageResponse"}}}}},"operationId":"get_account_usage"}},"/v1/company":{"get":{"tags":["Company"],"summary":"Get Company","description":"Get company settings for the current account","responses":{"200":{"description":"Company settings document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"404":{"description":"Company settings not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_company"},"put":{"tags":["Company"],"summary":"Update Company","description":"Update company settings","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompanyRequest"}}}},"responses":{"200":{"description":"Company settings updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"update_company"}},"/v1/custom-domains":{"get":{"tags":["Custom Domains"],"summary":"List Domains","description":"List custom domains for the current account.","responses":{"200":{"description":"Domain list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainsListResponse"}}}}},"operationId":"list_domains"},"post":{"tags":["Custom Domains"],"summary":"Add Domain","description":"Add a custom domain. Detects the DNS provider and registers the domain on Vercel.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddDomainRequest"}}}},"responses":{"200":{"description":"Domain added","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResponse"}}}},"409":{"description":"Domain already exists","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"add_domain"}},"/v1/custom-domains/{domain_id}":{"delete":{"tags":["Custom Domains"],"summary":"Delete Domain","description":"Remove a custom domain.","parameters":[{"schema":{"type":"string"},"required":true,"name":"domain_id","in":"path"}],"responses":{"200":{"description":"Domain removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainsSuccessResponse"}}}},"404":{"description":"Domain not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_domain"}},"/v1/custom-domains/{domain_id}/status":{"get":{"tags":["Custom Domains"],"summary":"Check Domain Status","description":"Check domain verification status via Vercel.","parameters":[{"schema":{"type":"string"},"required":true,"name":"domain_id","in":"path"}],"responses":{"200":{"description":"Domain status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResponse"}}}},"404":{"description":"Domain not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"check_domain_status"}},"/v1/custom-domains/{domain_id}/default":{"post":{"tags":["Custom Domains"],"summary":"Set Default Domain","description":"Mark a custom domain as the account default for shared URLs (when a client has no domain override), or clear the default. Only an active domain can be set.","parameters":[{"schema":{"type":"string"},"required":true,"name":"domain_id","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"is_default":{"type":"boolean","default":true}}}}}},"responses":{"200":{"description":"Default updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainsSuccessResponse"}}}},"400":{"description":"Domain not active","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Domain not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"set_default_domain"}},"/v1/branding":{"get":{"tags":["Branding"],"summary":"Get Branding","description":"Get branding settings","responses":{"200":{"description":"Branding data","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]}}}}},"operationId":"get_branding"},"put":{"tags":["Branding"],"summary":"Update Branding","description":"Update branding settings","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBrandingRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]}}}}},"operationId":"update_branding"}},"/v1/branding/favicon/refresh":{"post":{"tags":["Branding"],"summary":"Refresh Favicon","description":"Re-derive the account favicon from its stored website, cache-bust it, save it and return the new URL. Requires a website on the account.","responses":{"200":{"description":"Favicon refreshed","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"favicon_url":{"type":"string"}},"required":["favicon_url"]}},"required":["success","data"]}}}},"400":{"description":"Account has no website configured","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"refresh_favicon"}},"/v1/clients":{"get":{"tags":["Clients"],"summary":"List Clients","description":"List clients for the current account","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","example":"acme"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","example":"folderXyz"},"required":false,"name":"folder_id","in":"query"},{"schema":{"type":"string","enum":["name","created_at","updated_at","website"],"default":"updated_at","example":"updated_at"},"required":false,"name":"sort_by","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","example":"desc"},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"Paginated client list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListClientsResponse"}}}}},"operationId":"list_clients"},"post":{"tags":["Clients"],"summary":"Create Client","description":"Create a new client","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClientRequest"},"example":{"name":"Acme Demo","website":"acme.com","timezone":"UTC","currency":{"iso":"US","code":"USD","symbol":"$"}}}}},"responses":{"201":{"description":"Client created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClientResponse"}}}}},"operationId":"create_client"}},"/v1/clients/count":{"get":{"tags":["Clients"],"summary":"Count Clients","description":"Count total clients for the current account","responses":{"200":{"description":"Client count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCountResponse"}}}}},"operationId":"count_clients"}},"/v1/clients/all":{"get":{"tags":["Clients"],"summary":"List All Clients","description":"List all clients with optional field selection","parameters":[{"schema":{"type":"string","example":"id,name,datasources"},"required":false,"name":"fields","in":"query"}],"responses":{"200":{"description":"All clients","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["success","data"]}}}}},"operationId":"list_all_clients"}},"/v1/clients/bulk":{"delete":{"tags":["Clients"],"summary":"Archive Multiple Clients","description":"Archive multiple clients by ID, each with its reports and their widgets. Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteClientsRequest"}}}},"responses":{"200":{"description":"Clients archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"archive_multiple_clients"},"patch":{"tags":["Clients"],"summary":"Bulk Update Clients","description":"Apply the same partial patch to many clients in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateClientsRequest"}}}},"responses":{"200":{"description":"Clients updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"bulk_update_clients"}},"/v1/clients/{id}":{"get":{"tags":["Clients"],"summary":"Get Client","description":"Get a single client by ID","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Client document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"},"example":{"success":true,"data":{"id":"cliAbc123","account_id":"ov:26AbCdEfGhIjKlMnOp","name":"Acme Demo","website":"acme.com","timezone":"UTC","currency":{"iso":"US","code":"USD","symbol":"$"},"folders":[]}}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_client"},"put":{"tags":["Clients"],"summary":"Update Client","description":"Update a client","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateClientRequest"}}}},"responses":{"200":{"description":"Client updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_client"},"delete":{"tags":["Clients"],"summary":"Archive Client","description":"Archive a client and all its associated reports and widgets. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Client archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_client"}},"/v1/clients/{id}/screenshot/refresh":{"post":{"tags":["Clients"],"summary":"Refresh Screenshot","description":"Re-fetches the screenshot synchronously using the client's stored website and returns the new URL. Use this for user-triggered refresh on the dashboard card.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Screenshot refreshed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshScreenshotResponse"}}}},"400":{"description":"Client has no website configured","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"refresh_screenshot"}},"/v1/clients/{id}/favicon/refresh":{"post":{"tags":["Clients"],"summary":"Refresh Favicon","description":"Re-derives the square favicon from the client's stored website (Google favicon service), cache-busts it so the browser re-pulls the latest image, saves it, and returns the new URL. Use this for user-triggered refresh on the client branding panel.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Favicon refreshed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshFaviconResponse"}}}},"400":{"description":"Client has no website configured","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"post_refresh_favicon"}},"/v1/clients/{id}/folder":{"put":{"tags":["Clients"],"summary":"Move Client Folder","description":"Move a client to one or more folders","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveClientToFolderRequest"}}}},"responses":{"200":{"description":"Client folder updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"move_client_folder"}},"/v1/clients/{id}/reports-sort":{"put":{"tags":["Clients"],"summary":"Set Reports Sort","description":"Save the default sort for this client's Reports list.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetReportsSortRequest"}}}},"responses":{"200":{"description":"Reports sort saved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"set_reports_sort"}},"/v1/clients/{id}/datasources":{"get":{"tags":["Clients"],"summary":"List Client Datasources","description":"List datasources connected to a client","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Client datasources list","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{}}},"required":["success","data"]}}}},"404":{"description":"Client not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"list_client_datasources"}},"/v1/folders/clients":{"get":{"tags":["Folders"],"summary":"List Folders","description":"List all client folders for the current account","responses":{"200":{"description":"Client folder list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListFoldersResponse"}}}}},"operationId":"list_folders"},"post":{"tags":["Folders"],"summary":"Create Folder","description":"Create a new client folder","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFolderRequest"}}}},"responses":{"201":{"description":"Folder created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFolderResponse"}}}}},"operationId":"create_folder"}},"/v1/folders/clients/{id}":{"put":{"tags":["Folders"],"summary":"Update Folder","description":"Rename a client folder","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFolderRequest"}}}},"responses":{"200":{"description":"Folder renamed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_folder"},"delete":{"tags":["Folders"],"summary":"Delete Folder","description":"Delete a client folder and unassign all clients from it","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Folder deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_folder"}},"/v1/reports":{"get":{"tags":["Reports"],"summary":"List Reports","description":"List reports for the current account (optionally filtered by client).","parameters":[{"schema":{"type":"string","example":"cliAbc123"},"required":false,"name":"client_id","in":"query"},{"schema":{"type":"string","example":"AGENCY"},"required":false,"name":"template","in":"query"},{"schema":{"type":"string","example":"Q4 report"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["name","created_at","last_modified","type"],"default":"created_at","example":"created_at"},"required":false,"name":"sort_by","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","example":"desc"},"required":false,"name":"order","in":"query"},{"schema":{"type":"string","enum":["REPORT","DASHBOARD"],"example":"REPORT"},"required":false,"name":"type","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"example":50},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Paginated report list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListReportsResponse"}}}}},"operationId":"list_reports"},"post":{"tags":["Reports"],"summary":"Create Report","description":"Create a new report.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportRequest"},"example":{"name":"Q1 Report","type":"REPORT","template":"BLANK","client_id":"cliAbc123"}}}},"responses":{"201":{"description":"Report created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportResponse"}}}}},"operationId":"create_report"}},"/v1/reports/all":{"get":{"tags":["Reports"],"summary":"List All Reports","description":"List all reports (id + name only) for dropdown selectors.","parameters":[{"schema":{"type":"string"},"required":false,"name":"client_id","in":"query"}],"responses":{"200":{"description":"All reports","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["success","data"]}}}}},"operationId":"list_all_reports"}},"/v1/reports/bulk":{"delete":{"tags":["Reports"],"summary":"Archive Multiple Reports","description":"Archive multiple reports by ID, each with its widgets. Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteReportsRequest"}}}},"responses":{"200":{"description":"Reports archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"403":{"description":"One or more reports do not belong to this account","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_multiple_reports"}},"/v1/reports/{id}":{"get":{"tags":["Reports"],"summary":"Get Report","description":"Get a single report by ID.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Report document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResponse"},"example":{"success":true,"data":{"id":"projAbc123","account_id":"ov:26AbCdEfGhIjKlMnOp","name":"Q1 Report","type":"REPORT","client_id":"cliAbc123","nano_id":"aBcDeFgHiJkL","status":"active"}}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_report"},"put":{"tags":["Reports"],"summary":"Update Report","description":"Update a report.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReportRequest"}}}},"responses":{"200":{"description":"Report updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_report"},"delete":{"tags":["Reports"],"summary":"Archive Report","description":"Archive a report and all its widgets. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Report archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_report"}},"/v1/reports/{id}/duplicate":{"post":{"tags":["Reports"],"summary":"Duplicate Report","description":"Duplicate a report — deep copy of pages, widgets, and settings.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateReportRequest"}}}},"responses":{"201":{"description":"Duplicate report created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportResponse"}}}},"404":{"description":"Source report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_report"}},"/v1/reports/{id}/refresh":{"post":{"tags":["Reports"],"summary":"Refresh Report Widgets","description":"Re-fetch DATA widgets on the report with their current config and the report date range. Optional `datasource_id` body scopes the refresh to widgets fed by that one source (direct + dependent goals / calc-metrics). Fire-and-forget — results broadcast via Realtime.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]}},"additionalProperties":false},"example":{"datasource_id":"gadw"}}}},"responses":{"202":{"description":"Refresh queued","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"accepted":{"type":"boolean","enum":[true]},"pipeline_sync":{"type":"string","enum":["none","started"]}},"required":["accepted","pipeline_sync"]}},"required":["success","data"]}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"refresh_report_widgets"}},"/v1/reports/{report_id}/changes":{"get":{"tags":["Report Changes"],"summary":"List Report Changes","description":"Append-only change log for a report, newest-first. The audit trail and the source for preview/scrubber.","parameters":[{"schema":{"type":"string"},"required":true,"name":"report_id","in":"path"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":2000},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Change log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListChangesResponse"}}}}},"operationId":"list_report_changes"}},"/v1/pages":{"get":{"tags":["Pages"],"summary":"List Pages","description":"List pages for a report or template.","parameters":[{"schema":{"type":"string","example":"proj123"},"required":true,"name":"source_id","in":"query"},{"schema":{"type":"string","enum":["project","template"],"example":"project"},"required":false,"name":"source_type","in":"query"}],"responses":{"200":{"description":"Pages list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPagesResponse"}}}},"404":{"description":"Source not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"list_pages"},"post":{"tags":["Pages"],"summary":"Create Page","description":"Create a page on a report or template.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePageRequest"}}}},"responses":{"201":{"description":"Page created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePageResponse"}}}},"404":{"description":"Source not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"create_page"}},"/v1/pages/{page_id}":{"put":{"tags":["Pages"],"summary":"Update Page","description":"Update a page.","parameters":[{"schema":{"type":"string"},"required":true,"name":"page_id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePageRequest"}}}},"responses":{"200":{"description":"Page updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Page not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_page"},"delete":{"tags":["Pages"],"summary":"Delete Page","description":"Delete a page.","parameters":[{"schema":{"type":"string"},"required":true,"name":"page_id","in":"path"}],"responses":{"200":{"description":"Page deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Page not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_page"}},"/v1/search":{"get":{"tags":["Search"],"summary":"Search","description":"Search clients, reports, users, automations, API keys, email addresses, email templates, email domains and custom domains (powers the command palette).","parameters":[{"schema":{"type":"string","minLength":1,"example":"acme"},"required":true,"name":"q","in":"query"}],"responses":{"200":{"description":"Search results across clients and reports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"Query too short","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"search"}},"/v1/ask-oviond/conversations":{"get":{"tags":["Ask Oviond"],"summary":"List Ask Oviond conversations","description":"The signed-in user's own conversations, most recently active first.","responses":{"200":{"description":"Conversations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondConversationList"}}}}},"operationId":"list_ask_oviond_conversations"}},"/v1/ask-oviond/conversations/{id}":{"get":{"tags":["Ask Oviond"],"summary":"Get an Ask Oviond conversation","description":"A conversation and all its messages. Readable by its owner, or by anyone in the account once shared.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":40},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Conversation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondConversationDetail"}}}}},"operationId":"get_an_ask_oviond_conversation"},"patch":{"tags":["Ask Oviond"],"summary":"Rename or share an Ask Oviond conversation","description":"Set the title and/or whether the conversation is shared with the rest of the account. Owner only.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":40},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAskOviondConversation"}}}},"responses":{"200":{"description":"Updated conversation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondConversationResponse"}}}}},"operationId":"rename_or_share_an_ask_oviond_conversation"},"delete":{"tags":["Ask Oviond"],"summary":"Delete an Ask Oviond conversation","description":"Permanently deletes the conversation and its messages. Owner only.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":40},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondConversationDeleted"}}}}},"operationId":"delete_an_ask_oviond_conversation"}},"/v1/ask-oviond/status":{"get":{"tags":["Ask Oviond"],"summary":"Ask Oviond availability","description":"Whether the in-app assistant is available to the current account, its credits left this month and bought, and the credit packs it can buy.","responses":{"200":{"description":"Availability","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondStatusResponse"}}}}},"operationId":"ask_oviond_availability"}},"/v1/ask-oviond":{"post":{"tags":["Ask Oviond"],"summary":"Ask Oviond","description":"One chat turn in the user's own conversation: a new question (a new conversation when `id` doesn't exist yet), answers to approval cards, or a retry. Streams an AI SDK UI message stream (server-sent events); the question and the reply are stored.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondRequest"}}}},"responses":{"200":{"description":"The reply, streamed","content":{"text/event-stream":{"schema":{"type":"string"}}}}},"operationId":"ask_oviond"}},"/v1/ask-oviond/credits/checkout":{"post":{"tags":["Ask Oviond"],"summary":"Buy Ask Oviond credits","description":"Starts a one-time Stripe Checkout for a credit pack. Bought credits never expire and are used after the month's free credits. Needs billing permission.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondCreditsCheckout"}}}},"responses":{"200":{"description":"The Stripe Checkout link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskOviondCreditsCheckoutResponse"}}}}},"operationId":"buy_ask_oviond_credits"}},"/v1/widgets":{"get":{"tags":["Widgets"],"summary":"List Widgets","description":"List widgets for a source.","parameters":[{"schema":{"type":"string","enum":["project","template"],"example":"project"},"required":false,"name":"source_type","in":"query"},{"schema":{"type":"string","example":"proj123"},"required":true,"name":"source_id","in":"query"},{"schema":{"type":"string","example":"page123"},"required":false,"name":"page_id","in":"query"}],"responses":{"200":{"description":"Widget list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListWidgetsResponse"}}}}},"operationId":"list_widgets"},"post":{"tags":["Widgets"],"summary":"Create Widgets","description":"Batch create widgets via upsert.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWidgetsRequest"}}}},"responses":{"201":{"description":"Widgets created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWidgetsResponse"}}}}},"operationId":"create_widgets"}},"/v1/widgets/{id}":{"get":{"tags":["Widgets"],"summary":"Get Widget","description":"Get a single widget by ID.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Widget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_widget"},"put":{"tags":["Widgets"],"summary":"Update Widget","description":"Update a single widget (partial update).","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWidgetRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_widget"},"delete":{"tags":["Widgets"],"summary":"Delete Widget","description":"Delete a single widget by ID.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Widget deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_widget"}},"/v1/widgets/bulk":{"patch":{"tags":["Widgets"],"summary":"Bulk Update Widgets","description":"Apply per-widget partial updates in a single call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateWidgetsRequest"}}}},"responses":{"200":{"description":"Widgets updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"bulk_update_widgets"},"delete":{"tags":["Widgets"],"summary":"Bulk Delete Widgets","description":"Delete multiple widgets by ID.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteWidgetsRequest"}}}},"responses":{"200":{"description":"Widgets deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"bulk_delete_widgets"}},"/v1/widgets/bulk-each":{"patch":{"tags":["Widgets"],"summary":"Bulk Update Widgets (per-widget patches)","description":"Apply a different patch to each of N widgets in one request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEachWidgetsRequest"}}}},"responses":{"200":{"description":"Widgets updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEachWidgetsResponse"}}}}},"operationId":"bulk_update_widgets_per_widget_patches"}},"/v1/widgets/duplicate":{"post":{"tags":["Widgets"],"summary":"Duplicate Widgets","description":"Copy widget rows by id, including persisted series data, into new rows with caller-provided new ids.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateWidgetsRequest"}}}},"responses":{"201":{"description":"Widgets duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateWidgetsResponse"}}}},"404":{"description":"One or more sources not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_widgets"}},"/v1/widgets/refresh":{"post":{"tags":["Widgets"],"summary":"Refresh Widgets","description":"Authoritative per-widget refresh: connected → real series, not connected → demo, static/non-datasource → skipped.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshWidgetsRequest"},"example":{"source_id":"projAbc123","client_id":"cliAbc123","date_range":{"current_start":"2026-06-01","current_end":"2026-06-30"}}}}},"responses":{"200":{"description":"Per-widget result patches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshWidgetsResponse"}}}}},"operationId":"refresh_widgets"}},"/v1/data/query":{"post":{"tags":["Data"],"summary":"Query Data","description":"Proxy a datasource data query to data.oviond.com","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataQueryRequest"},"example":{"datasource_id":"gadw","client_id":"cliAbc123","date_range":{"current_start":"2026-06-01","current_end":"2026-06-30","previous_start":"2026-05-01","previous_end":"2026-05-31"},"metrics":["impressions","clicks","ctr"],"dimensions":["DATE"],"data_view":"ACCOUNT"}}}},"responses":{"200":{"description":"Query result from upstream API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataProxyResponse"},"example":{"success":true,"data":{"current":[{"DATE":"2026-06-01","impressions":312,"clicks":11,"ctr":3.52}],"currentSummary":{"impressions":9097,"clicks":331,"ctr":3.64},"previous":[],"previousSummary":{},"state":"ACTIVE"},"meta":{"request_id":"req_a1b2c3"}}}}},"502":{"description":"Upstream API error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"query_data"}},"/v1/calculated-metrics":{"get":{"tags":["Calculated Metrics"],"summary":"List Calculated Metrics","description":"List all calculated metrics for the current account","responses":{"200":{"description":"Calculated metrics list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCalculatedMetricsResponse"}}}}},"operationId":"list_calculated_metrics"},"post":{"tags":["Calculated Metrics"],"summary":"Create Calculated Metric","description":"Create a new calculated metric","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCalculatedMetricRequest"}}}},"responses":{"201":{"description":"Metric created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCalculatedMetricResponse"}}}}},"operationId":"create_calculated_metric"}},"/v1/calculated-metrics/{id}":{"put":{"tags":["Calculated Metrics"],"summary":"Update Calculated Metric","description":"Update a calculated metric","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCalculatedMetricRequest"}}}},"responses":{"200":{"description":"Metric updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Metric not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_calculated_metric"},"delete":{"tags":["Calculated Metrics"],"summary":"Archive Calculated Metric","description":"Archive a calculated metric. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Metric archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Metric not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_calculated_metric"}},"/v1/calculated-metrics/{id}/duplicate":{"post":{"tags":["Calculated Metrics"],"summary":"Duplicate Calculated Metric","description":"Duplicate a calculated metric","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateCalculatedMetricRequest"}}}},"responses":{"201":{"description":"Duplicate metric created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCalculatedMetricResponse"}}}},"404":{"description":"Source metric not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_calculated_metric"}},"/v1/goals":{"get":{"tags":["Goals"],"summary":"List Goals","description":"List all goals for the current account, optionally filtered by client_id","parameters":[{"schema":{"type":"string"},"required":false,"name":"client_id","in":"query"}],"responses":{"200":{"description":"Goals list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListGoalsResponse"}}}}},"operationId":"list_goals"},"post":{"tags":["Goals"],"summary":"Create Goal","description":"Create a new goal","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGoalRequest"}}}},"responses":{"201":{"description":"Goal created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGoalResponse"}}}}},"operationId":"create_goal"}},"/v1/goals/{id}":{"put":{"tags":["Goals"],"summary":"Update Goal","description":"Update a goal","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGoalRequest"}}}},"responses":{"200":{"description":"Goal updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Goal not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_goal"},"delete":{"tags":["Goals"],"summary":"Archive Goal","description":"Archive a goal. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Goal archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Goal not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_goal"}},"/v1/goals/{id}/duplicate":{"post":{"tags":["Goals"],"summary":"Duplicate Goal","description":"Duplicate a goal","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateGoalRequest"}}}},"responses":{"201":{"description":"Duplicate goal created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGoalResponse"}}}},"404":{"description":"Source goal not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_goal"}},"/v1/custom-data":{"get":{"tags":["Custom Data"],"summary":"List Custom Data","description":"List custom datasets for the current account (no raw_data)","responses":{"200":{"description":"Custom data list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCustomDataResponse"}}}}},"operationId":"list_custom_data"},"post":{"tags":["Custom Data"],"summary":"Create Custom Data","description":"Create a new custom dataset (max 10,000 rows)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomDataRequest"}}}},"responses":{"201":{"description":"Dataset created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomDataResponse"}}}},"400":{"description":"Validation error (e.g. row limit exceeded)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"create_custom_data"}},"/v1/custom-data/{id}":{"get":{"tags":["Custom Data"],"summary":"Get Custom Data","description":"Get a single custom dataset by ID (includes raw_data)","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Full custom data document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDataResponse"}}}},"404":{"description":"Custom dataset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_custom_data"},"put":{"tags":["Custom Data"],"summary":"Update Custom Data","description":"Update a custom dataset","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomDataRequest"}}}},"responses":{"200":{"description":"Dataset updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Custom dataset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_custom_data"},"delete":{"tags":["Custom Data"],"summary":"Archive Custom Data","description":"Archive a custom dataset. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Dataset archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Custom dataset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_custom_data"}},"/v1/custom-data/{id}/duplicate":{"post":{"tags":["Custom Data"],"summary":"Duplicate Custom Data","description":"Duplicate a custom dataset","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateCustomDataRequest"}}}},"responses":{"201":{"description":"Duplicate dataset created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateCustomDataResponse"}}}},"404":{"description":"Source dataset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_custom_data"}},"/v1/billing":{"get":{"tags":["Billing"],"summary":"Get Billing","description":"Get the billing row for the current account","responses":{"200":{"description":"Billing document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingAccountResponse"}}}}},"operationId":"get_billing"}},"/v1/billing/plans":{"get":{"tags":["Billing"],"summary":"List Plans","description":"List available subscription plans from Stripe","responses":{"200":{"description":"Plan list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPlansResponse"}}}}},"operationId":"list_plans"}},"/v1/billing/invoices":{"get":{"tags":["Billing"],"summary":"List Invoices","description":"List Stripe invoices for a customer","responses":{"200":{"description":"Invoice list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicesResponse"}}}}},"operationId":"list_invoices"}},"/v1/datasources/auths/{id}/sync":{"get":{"tags":["Datasources"],"summary":"Sync status of a synced connection","description":"For synced datasources (Klaviyo, Amazon Ads): health, last and next sync, history progress, problems, and the last 50 runs.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Sync status","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]}}}}},"operationId":"sync_status_of_a_synced_connection"}},"/v1/datasources/auths/{id}/sync/settings":{"put":{"tags":["Datasources"],"summary":"Pause or resume a synced connection","description":"Admins only. Pausing stops every sync of the connection, for all the clients it serves.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"paused":{"type":"boolean"}},"required":["paused"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated settings","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{}}},"required":["success","data"]}}}}},"operationId":"pause_or_resume_a_synced_connection"}},"/v1/datasources/auths/{id}/sync/run":{"post":{"tags":["Datasources"],"summary":"Sync a synced connection now","description":"Admins only. Refreshes the recent days of every part right away.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"What happened","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"status":{"type":"string","enum":["started","paused","waiting","failed"]},"retry_after":{"type":"string"}},"required":["status"]}},"required":["success","data"]}}}}},"operationId":"sync_a_synced_connection_now"}},"/v1/datasources/auths/{id}/sync/resync":{"post":{"tags":["Datasources"],"summary":"Re-pull the whole stored history of a synced connection","description":"Admins only. Walks the full history forward, overwriting stored days; widgets keep showing the current data meanwhile.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"What happened","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"status":{"type":"string","enum":["started","paused","waiting","failed"]},"retry_after":{"type":"string"}},"required":["status"]}},"required":["success","data"]}}}}},"operationId":"re_pull_the_whole_stored_history_of_a_synced_connection"}},"/v1/datasources/auths":{"get":{"tags":["Datasources"],"summary":"List Connected Datasources","description":"List all OAuth data sources stored for the current account","responses":{"200":{"description":"Auth list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAuthsResponse"}}}}},"operationId":"list_connected_datasources"}},"/v1/datasources/auths/{id}/name":{"put":{"tags":["Datasources"],"summary":"Rename Connection","description":"Rename a data source auth entry","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameAuthRequest"}}}},"responses":{"200":{"description":"Auth renamed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Auth not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"rename_connection"}},"/v1/datasources/auths/{id}":{"delete":{"tags":["Datasources"],"summary":"Delete Connection","description":"Delete a data source auth entry","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Auth deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Auth not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_connection"}},"/v1/datasources/{client_id}/unlink":{"post":{"tags":["Datasources"],"summary":"Unlink Datasource","description":"Unlink a datasource from a client","parameters":[{"schema":{"type":"string"},"required":true,"name":"client_id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datasource_id":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]}},"required":["datasource_id"]}}}},"responses":{"200":{"description":"Datasource unlinked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"unlink_datasource"}},"/v1/datasources/test":{"post":{"tags":["Datasources"],"summary":"Test Stored Connection","description":"Test whether a stored auth connection is valid","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAuthRequest"}}}},"responses":{"200":{"description":"Connection test result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAuthResponse"}}}},"404":{"description":"Auth not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"test_stored_connection"}},"/v1/datasources/profiles":{"get":{"tags":["Datasources"],"summary":"List All Profiles","description":"List all auth profiles for every data source","responses":{"200":{"description":"Profiles grouped by datasource ID","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":{}}}}},"required":["success","data"]}}}}},"operationId":"list_all_profiles"}},"/v1/datasources/{datasource_id}/profiles":{"get":{"tags":["Datasources"],"summary":"List Datasource Profiles","description":"List auth profiles for a specific data source","parameters":[{"schema":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]},"required":true,"name":"datasource_id","in":"path"}],"responses":{"200":{"description":"Profile list","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["success","data"]}}}}},"operationId":"list_datasource_profiles"}},"/v1/datasources/{datasource_id}/profiles/{profile_name}/rename":{"put":{"tags":["Datasources"],"summary":"Rename Profile","description":"Rename an auth connection","parameters":[{"schema":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]},"required":true,"name":"datasource_id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"profile_name","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"new_name":{"type":"string"}},"required":["new_name"]}}}},"responses":{"200":{"description":"Profile renamed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Profile not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"rename_profile"}},"/v1/datasources/{datasource_id}/profiles/{profile_name}":{"delete":{"tags":["Datasources"],"summary":"Delete Profile","description":"Delete an auth connection","parameters":[{"schema":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"]},"required":true,"name":"datasource_id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"profile_name","in":"path"}],"responses":{"200":{"description":"Profile deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"delete_profile"}},"/v1/datasources":{"get":{"tags":["Datasources"],"summary":"List Supported Datasources","description":"List every datasource Oviond supports, each with its `id` (the `datasource_id` you pass to the data endpoints), name, category, and available data views. Start here to find the `datasource_id`, then call `/{datasource_id}/describe` for its fields.","responses":{"200":{"description":"All supported datasources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataProxyResponse"}}}}},"operationId":"list_supported_datasources"}},"/v1/datasources/{datasource_id}/describe":{"get":{"tags":["Datasources"],"summary":"Describe Datasource","description":"Describe one datasource the way the report builder sees it: its data views (with the `advanced` keys each view requires), its default view and defaults, and its metric and dimension catalogs carrying the flags that decide what can be combined (`single` — must be the only dimension; `requires_metric` — only offered once that metric is picked; `deprecated`; `custom`). A metric or dimension is only valid inside its own `data_view`. Pass `data_view` to scope the response to one view.","parameters":[{"schema":{"type":"string","enum":["advanced-web-ranking","ac","adroll","ahrefs","basecamp","brightlocal","call-rail","drip","keywords","sendin-blue","sendgrid","moosend","mailer-lite","pingdom","uptime-robot","piwik-pro","wordpress","pabbly-connect","ment","twilio","switchy","vimeo","pinterest","pinterest-ads","gtres","paypal","gps","gs","CUSTOM_IMPORT","CUSTOM_DATA","CALCULATION","GOALS","str","wistia","ca-mon","convertkit","woocommerce","xero","matomo","go-high-level","wcs","bing-webmaster-tools","pipedrive","salesforce","tiktok","tiktok-ads","twr","twr-ads","spf","ytbe","google-local-services-ads","klaviyo","gsh","ga4","lkdin-ads","lkdin-pg","mlchmp","inst-ads","inst","fb-ads","fb-pg","gmb","serpstat","hubspot","gadw","sem-rush","se-ranking","microsoft-ads","plausible","snapchat-ads","microsoft-clarity","serp-watch","vbout","moz","chatgpt-ads","omnisend","airtable","nozzle","surnex","jira","clickup","make","freshdesk","chart-mogul","amplitude","harvest","zoho-crm","clockify","adtraction","shopify","copper","help-scout-docs","close-crm","simplesat","help-scout-mailbox"],"example":"gadw"},"required":true,"name":"datasource_id","in":"path"},{"schema":{"type":"string","example":"ACCOUNT"},"required":false,"name":"data_view","in":"query"}],"responses":{"200":{"description":"Data views, required advanced keys, and the field catalogs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataProxyResponse"}}}},"404":{"description":"Unknown datasource","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"describe_datasource"}},"/v1/datasources/accounts":{"post":{"tags":["Datasources"],"summary":"List Datasource Accounts","description":"Proxy a datasource accounts listing to data.oviond.com","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataAccountsRequest"},"example":{"datasource_id":"ga4","client_id":"cliAbc123"}}}},"responses":{"200":{"description":"Accounts from upstream API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataProxyResponse"}}}},"502":{"description":"Upstream API error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"list_datasource_accounts"}},"/v1/email/provider":{"get":{"tags":["Email"],"summary":"Get Email Provider","description":"Return the active email transport for the account.","responses":{"200":{"description":"Active email provider","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailProviderResponse"}}}}},"operationId":"get_email_provider"},"put":{"tags":["Email"],"summary":"Set Email Provider","description":"Switch the active email transport. Requires the chosen transport to already be configured.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetEmailProviderRequest"}}}},"responses":{"200":{"description":"Provider updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailProviderResponse"}}}}},"operationId":"set_email_provider"}},"/v1/email/domain":{"get":{"tags":["Email"],"summary":"List Email Domains","description":"Return the account's email sending domain (with current verification status), or null.","responses":{"200":{"description":"Email domain row","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDomainResponse"}}}}},"operationId":"list_email_domains"},"post":{"tags":["Email"],"summary":"Add Email Domain","description":"Register a sending domain with Resend.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddEmailDomainRequest"}}}},"responses":{"200":{"description":"Domain registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDomainResponse"}}}}},"operationId":"add_email_domain"}},"/v1/email/domain/{id}":{"delete":{"tags":["Email"],"summary":"Delete Email Domain","description":"Remove the domain from Resend and the account.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Domain removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"delete_email_domain"}},"/v1/email/domain/{id}/verify":{"post":{"tags":["Email"],"summary":"Verify Email Domain","description":"Checks the domain. Fetches the current verification status: if the domain is already verified, the stored record is updated to verified and returned immediately. If not, verification is started and the current (unverified) record is returned — the status then updates on the next check or automatically in the background.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the domain row. Already verified → updated to verified; otherwise verification was started and the row is returned as-is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDomainResponse"}}}}},"operationId":"verify_email_domain"}},"/v1/email/smtp":{"get":{"tags":["Email"],"summary":"Get SMTP Config","description":"Return the account SMTP config (password redacted), or null.","responses":{"200":{"description":"SMTP config row","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSmtpResponse"}}}}},"operationId":"get_smtp_config"},"put":{"tags":["Email"],"summary":"Upsert SMTP Config","description":"Save or update the SMTP server settings for the account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertEmailSmtpRequest"}}}},"responses":{"200":{"description":"SMTP config saved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSmtpResponse"}}}}},"operationId":"upsert_smtp_config"},"delete":{"tags":["Email"],"summary":"Delete SMTP Config","description":"Remove the account SMTP server config.","responses":{"200":{"description":"SMTP removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"delete_smtp_config"}},"/v1/email/smtp/test":{"post":{"tags":["Email"],"summary":"Test SMTP Connection","description":"Connect to the SMTP server and verify credentials without sending mail.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEmailSmtpRequest"}}}},"responses":{"200":{"description":"SMTP connection successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"test_smtp_connection"}},"/v1/email/senders":{"get":{"tags":["Email"],"summary":"List Active Senders","description":"Senders matching the active provider, with Oviond default first.","responses":{"200":{"description":"Sender list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSendersResponse"}}}}},"operationId":"list_active_senders"},"post":{"tags":["Email"],"summary":"Create Sender","description":"Add a sender tied to either the verified domain or the SMTP config.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailSenderRequest"}}}},"responses":{"200":{"description":"Sender created","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EmailSender"}},"required":["success","data"]}}}}},"operationId":"create_sender"}},"/v1/email/senders/all":{"get":{"tags":["Email"],"summary":"List All Senders","description":"Every configured sender row regardless of the active provider.","responses":{"200":{"description":"All senders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSendersResponse"}}}}},"operationId":"list_all_senders"}},"/v1/email/senders/{id}":{"put":{"tags":["Email"],"summary":"Update Sender","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailSenderRequest"}}}},"responses":{"200":{"description":"Sender updated","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EmailSender"}},"required":["success","data"]}}}}},"operationId":"update_sender"},"delete":{"tags":["Email"],"summary":"Delete Sender","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Sender deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"delete_sender"}},"/v1/email/senders/{id}/default":{"post":{"tags":["Email"],"summary":"Set Default Email Sender","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Default set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"set_default_email_sender"}},"/v1/email/templates":{"get":{"tags":["Email"],"summary":"List Email Templates","responses":{"200":{"description":"Templates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplateListResponse"}}}}},"operationId":"list_email_templates"},"post":{"tags":["Email"],"summary":"Create Email Template","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailTemplateRequest"}}}},"responses":{"200":{"description":"Template created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplateResponse"}}}}},"operationId":"create_email_template"}},"/v1/email/templates/{id}":{"get":{"tags":["Email"],"summary":"Get Email Template","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplateResponse"}}}}},"operationId":"get_email_template"},"put":{"tags":["Email"],"summary":"Update Email Template","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailTemplateRequest"}}}},"responses":{"200":{"description":"Template updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplateResponse"}}}}},"operationId":"update_email_template"},"delete":{"tags":["Email"],"summary":"Delete Email Template","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Template deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"delete_email_template"}},"/v1/email/templates/{id}/default":{"post":{"tags":["Email"],"summary":"Set Default Email Template","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Default set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"set_default_email_template"}},"/v1/media":{"get":{"tags":["Media"],"summary":"List Media","description":"List media assets for the current account (paginated)","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","example":"logo"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","example":"folderAbc"},"required":false,"name":"folder_id","in":"query"}],"responses":{"200":{"description":"Media list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMediaResponse"}}}}},"operationId":"list_media"}},"/v1/media/group":{"put":{"tags":["Media"],"summary":"Move Media To Folder","description":"Move multiple media items to a folder","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMediaRequest"}}}},"responses":{"200":{"description":"Media grouped","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"move_media_to_folder"}},"/v1/media/{id}":{"put":{"tags":["Media"],"summary":"Rename Media File","description":"Update media metadata (e.g. rename).","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMediaRequest"}}}},"responses":{"200":{"description":"Media updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Media not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"rename_media_file"},"delete":{"tags":["Media"],"summary":"Archive Media File","description":"Archive a media item. The underlying file is retained in S3 for potential restore. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Media archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Media not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_media_file"}},"/v1/media/bulk":{"delete":{"tags":["Media"],"summary":"Archive Multiple Media Files","description":"Archive multiple media items. The underlying files are retained in S3 for potential restore. Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["ids"]}}}},"responses":{"200":{"description":"Media archived","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]}}}}},"operationId":"archive_multiple_media_files"}},"/v1/media/folders":{"get":{"tags":["Media"],"summary":"List Media Folders","description":"List media folders for the current account.","responses":{"200":{"description":"Folder list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMediaFoldersResponse"}}}}},"operationId":"list_media_folders"},"post":{"tags":["Media"],"summary":"Create Media Folder","description":"Create a new media folder.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMediaFolderRequest"}}}},"responses":{"201":{"description":"Folder created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMediaFolderResponse"}}}}},"operationId":"create_media_folder"}},"/v1/media/folders/{id}":{"put":{"tags":["Media"],"summary":"Rename Media Folder","description":"Rename a media folder.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameMediaFolderRequest"}}}},"responses":{"200":{"description":"Folder renamed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"rename_media_folder"},"delete":{"tags":["Media"],"summary":"Delete Media Folder","description":"Delete a media folder. Media items in the folder are not deleted.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Folder deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"delete_media_folder"}},"/v1/assets/tags":{"get":{"tags":["Assets"],"summary":"List Asset Tags","description":"List all unique tags across assets for the current account","responses":{"200":{"description":"Tag list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetTagsResponse"}}}}},"operationId":"list_asset_tags"}},"/v1/assets/tags/{tag}":{"delete":{"tags":["Assets"],"summary":"Delete Asset Tag","description":"Remove a tag from every asset in the current account (does not touch the shared standard library)","parameters":[{"schema":{"type":"string"},"required":true,"name":"tag","in":"path"}],"responses":{"200":{"description":"Tag removed","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","properties":{"removed":{"type":"number"}},"required":["removed"]}},"required":["success","data"]}}}}},"operationId":"delete_asset_tag"}},"/v1/assets":{"get":{"tags":["Assets"],"summary":"List Assets","description":"List assets for the current account","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","example":"chart"},"required":false,"name":"type","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tag","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Filter by datasource IDs (comma-separated or array; each a known datasource id)"},"required":false,"name":"datasources","in":"query"},{"schema":{"type":"string","enum":["all","standard","mine"],"default":"all"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","enum":["recommended","created_at","name"],"default":"created_at"},"required":false,"name":"sort_by","in":"query"},{"schema":{"type":["number","null"],"default":-1},"required":false,"name":"sort_order","in":"query"}],"responses":{"200":{"description":"Asset list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAssetsResponse"}}}}},"operationId":"list_assets"},"post":{"tags":["Assets"],"summary":"Create Asset","description":"Create a new asset","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetRequest"}}}},"responses":{"201":{"description":"Asset created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetResponse"}}}}},"operationId":"create_asset"}},"/v1/assets/{id}/duplicate":{"post":{"tags":["Assets"],"summary":"Duplicate Asset","description":"Duplicate an asset with a new name","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateAssetRequest"}}}},"responses":{"201":{"description":"Asset duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateAssetResponse"}}}},"404":{"description":"Source asset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"duplicate_asset"}},"/v1/assets/{id}/add-to-page":{"post":{"tags":["Assets"],"summary":"Add Asset To Page","description":"Instantiate an asset's widgets onto a report page (connectivity-aware: unconnected sources land as demo).","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAssetToPageRequest"}}}},"responses":{"201":{"description":"Widgets instantiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAssetToPageResponse"}}}},"404":{"description":"Asset or report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"add_asset_to_page"}},"/v1/assets/{id}/widgets":{"get":{"tags":["Assets"],"summary":"List Asset Widgets","description":"List the widgets that belong to an asset","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Asset widgets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAssetWidgetsResponse"}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"list_asset_widgets"}},"/v1/assets/{id}":{"get":{"tags":["Assets"],"summary":"Get Asset","description":"Get a single asset by ID","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Asset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAssetResponse"}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_asset"},"put":{"tags":["Assets"],"summary":"Update Asset","description":"Update an asset","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAssetRequest"}}}},"responses":{"200":{"description":"Asset updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_asset"},"delete":{"tags":["Assets"],"summary":"Archive Asset","description":"Archive an asset. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Asset archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_asset"}},"/v1/pdf/generate":{"post":{"tags":["PDF"],"summary":"Generate PDF","description":"Enqueue a PDF generation job for a report.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePdfRequest"},"example":{"report_id":"projAbc123","client_id":"cliAbc123","format":"A4","orientation":"portrait"}}}},"responses":{"202":{"description":"PDF generation queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePdfResponse"}}}},"400":{"description":"The report is a dashboard, which has no pages to paginate","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"S3 not configured","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"generate_pdf"}},"/v1/pdf/status/{job_id}":{"get":{"tags":["PDF"],"summary":"Get PDF Status","description":"Poll the status of a PDF generation job.","parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"job_id","in":"path"}],"responses":{"200":{"description":"Job status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfStatusResponse"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_pdf_status"}},"/v1/exports":{"get":{"tags":["Exports"],"summary":"List Exports","description":"List PDF generation history for a report.","parameters":[{"schema":{"type":"string","minLength":1,"description":"Report to list exports for"},"required":true,"name":"report_id","in":"query"}],"responses":{"200":{"description":"Export list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListExportsResponse"}}}}},"operationId":"list_exports"}},"/v1/exports/{id}":{"delete":{"tags":["Exports"],"summary":"Archive Export","description":"Archive a PDF export record. The S3 object is KEPT so a restore still has its PDF — it is purged only when the export is permanently deleted from the archive. Recoverable from the archive.","parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Export archived","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]}}}},"404":{"description":"Export not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_export"}},"/v1/templates":{"get":{"tags":["Templates"],"summary":"List Templates","description":"List templates for the current account.","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["ranking","created_at","name"],"default":"ranking","example":"ranking"},"required":false,"name":"sort_by","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":["integer","null"],"minimum":-1,"maximum":1},{"type":"null"}],"default":"desc","example":"desc"},"required":false,"name":"sort_order","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Filter by datasource IDs (comma-separated or array; each a known datasource id)"},"required":false,"name":"datasources","in":"query"},{"schema":{"type":"string","enum":["all","standard","mine"],"default":"all","description":"all = both libraries merged, standard = Oviond templates, mine = this account's saved templates"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","enum":["REPORT","DASHBOARD"],"description":"Filter by report type"},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Template list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTemplatesResponse"}}}}},"operationId":"list_templates"},"post":{"tags":["Templates"],"summary":"Create Template","description":"Create a new template, optionally copying pages and widgets from a report.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTemplateRequest"}}}},"responses":{"201":{"description":"Template created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTemplateResponse"}}}},"404":{"description":"Source report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"create_template"}},"/v1/templates/{id}":{"get":{"tags":["Templates"],"summary":"Get Template","description":"Get a single template by ID.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Template document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateResponse"}}}},"404":{"description":"Template not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_template"},"put":{"tags":["Templates"],"summary":"Update Template","description":"Update a template.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTemplateRequest"}}}},"responses":{"200":{"description":"Template updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Template not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_template"},"delete":{"tags":["Templates"],"summary":"Archive Template","description":"Archive a template. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Template archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Template not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_template"}},"/v1/templates/bulk":{"delete":{"tags":["Templates"],"summary":"Archive Multiple Templates","description":"Archive multiple templates in a single request. Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteTemplatesRequest"}}}},"responses":{"200":{"description":"Templates archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"archive_multiple_templates"}},"/v1/themes":{"get":{"tags":["Themes"],"summary":"List Themes","description":"List themes for the current account.","responses":{"200":{"description":"Theme list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListThemesResponse"}}}}},"operationId":"list_themes"},"post":{"tags":["Themes"],"summary":"Create Theme","description":"Create a new theme.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateThemeRequest"}}}},"responses":{"201":{"description":"Theme created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateThemeResponse"}}}}},"operationId":"create_theme"}},"/v1/themes/{id}":{"get":{"tags":["Themes"],"summary":"Get Theme","description":"Get a single theme by ID.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Theme document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"get_theme"},"put":{"tags":["Themes"],"summary":"Update Theme","description":"Update a theme.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateThemeRequest"}}}},"responses":{"200":{"description":"Theme updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_theme"},"delete":{"tags":["Themes"],"summary":"Archive Theme","description":"Archive a theme. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Theme archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_theme"}},"/v1/themes/{id}/apply":{"post":{"tags":["Themes"],"summary":"Apply Theme","description":"Set this theme as the active theme on a scope of reports (current report, all of a client, or every report in the account).","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyThemeRequest"}}}},"responses":{"200":{"description":"Theme applied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyThemeResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"apply_theme"}},"/v1/automations":{"get":{"tags":["Automations"],"summary":"List Automations","description":"List automations across all reports for the current account","parameters":[{"schema":{"type":"string","description":"Filter by report ID"},"required":false,"name":"report_id","in":"query"},{"schema":{"type":"string","description":"Filter by client ID"},"required":false,"name":"client_id","in":"query"}],"responses":{"200":{"description":"Automation list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAutomationsResponse"}}}}},"operationId":"list_automations"},"post":{"tags":["Automations"],"summary":"Create Automation","description":"Create a new automation for a report","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAutomationRequest"},"example":{"parent_id":"projAbc123","name":"Monthly Report","frequency":"monthly","day":"1","hours":"9","minutes":"00","timezone":"America/New_York","recipients":["client@example.com"],"template_id":"tmplAbc123","sender_id":"sndrAbc123","date_text":"Last 30 Days"}}}},"responses":{"201":{"description":"Automation created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAutomationResponse"}}}},"404":{"description":"Parent report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"create_automation"}},"/v1/automations/history":{"get":{"tags":["Automations"],"summary":"List Account Automation History","description":"Get execution history across every automation on the account.","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Execution history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationHistoryResponse"}}}}},"operationId":"list_account_automation_history"}},"/v1/automations/{report_id}/history":{"get":{"tags":["Automations"],"summary":"Get Automation History","description":"Get execution history across every automation for a report","parameters":[{"schema":{"type":"string"},"required":true,"name":"report_id","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":5},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Execution history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationHistoryResponse"}}}}},"operationId":"get_automation_history"}},"/v1/automations/{id}":{"put":{"tags":["Automations"],"summary":"Update Automation","description":"Update automation schedule and notification settings","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAutomationRequest"}}}},"responses":{"200":{"description":"Automation updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Automation or report not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"update_automation"},"delete":{"tags":["Automations"],"summary":"Archive Automation","description":"Archive an automation and remove it from the cron scheduler. Recoverable from the archive.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Automation archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Automation not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"archive_automation"}},"/v1/automations/bulk":{"delete":{"tags":["Automations"],"summary":"Archive Multiple Automations","description":"Archive multiple automations and remove them from the cron scheduler. Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["ids"]}}}},"responses":{"200":{"description":"Automations archived","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"]}}}}},"operationId":"archive_multiple_automations"}},"/v1/automations/{id}/pause":{"put":{"tags":["Automations"],"summary":"Pause Automation","description":"Pause an automation (removes the cron job but retains the config)","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Automation paused","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Automation not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"pause_automation"}},"/v1/automations/{id}/unpause":{"put":{"tags":["Automations"],"summary":"Unpause Automation","description":"Resume a paused automation (re-registers the cron job)","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Automation resumed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"404":{"description":"Automation not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"operationId":"unpause_automation"}},"/v1/automations/{id}/test":{"post":{"tags":["Automations"],"summary":"Test Automation","description":"Trigger a test execution of an automation","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAutomationRequest"}}}},"responses":{"200":{"description":"Test triggered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestAutomationResponse"}}}}},"operationId":"test_automation"}},"/v1/archive":{"get":{"tags":["Archive"],"summary":"List Archive","description":"List archived items (paginated)","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"types","in":"query"},{"schema":{"type":"string","enum":["name","deleted_at"],"default":"deleted_at"},"required":false,"name":"sort_by","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"Paginated archived items","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deleted_at":{"type":["string","null"]},"type":{"type":"string","enum":["clients","projects","media","automations","templates","goals","calculated_metrics","custom_data","saved_metrics","assets","themes","exports","notifications"]}},"required":["id","name","deleted_at","type"]}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]}}}}},"operationId":"list_archive"}},"/v1/archive/counts":{"get":{"tags":["Archive"],"summary":"Get Archive Counts","description":"Archived item counts per type","responses":{"200":{"description":"Archived counts per type","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object","additionalProperties":{"type":"number"}}},"required":["success","data"]}}}}},"operationId":"get_archive_counts"}},"/v1/archive/restore":{"put":{"tags":["Archive"],"summary":"Restore Items","description":"Restore soft-deleted items","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveBulkBody"}}}},"responses":{"200":{"description":"Items restored","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"}},"required":["success","message"]}}}}},"operationId":"restore_items"}},"/v1/archive/permanent":{"delete":{"tags":["Archive"],"summary":"Delete Permanently","description":"Permanently delete archived items","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveBulkBody"}}}},"responses":{"200":{"description":"Items permanently deleted","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"message":{"type":"string"}},"required":["success","message"]}}}}},"operationId":"delete_permanently"}},"/v1/activity":{"get":{"tags":["Activity"],"summary":"List Activity","description":"List activity logs for the current account","parameters":[{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"example":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","enum":["client","project","page","template","theme","asset","goal","calculated_metric","saved_metric","custom_data","datasource","automation","pdf","export","media","folder","user","api_key","custom_domain","branding","company","email_provider","email_sender","email_template","email_domain","email_smtp"],"example":"client"},"required":false,"name":"resource_type","in":"query"},{"schema":{"type":"string","enum":["app","api","mcp","system"],"example":"app"},"required":false,"name":"source","in":"query"},{"schema":{"type":"string","example":"acme"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Paginated activity log","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object","additionalProperties":{}}},"meta":{"type":"object","properties":{"page":{"type":"number"},"limit":{"type":"number"},"total":{"type":"number"}},"required":["page","limit","total"]}},"required":["success","data","meta"]}}}}},"operationId":"list_activity"}},"/v1/notifications/bulk":{"delete":{"tags":["Notifications"],"summary":"Archive Multiple Notifications","description":"Archive many notifications in one call (each must belong to the current user). Recoverable from the archive.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteNotificationsRequest"}}}},"responses":{"200":{"description":"Notifications archived","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}},"operationId":"archive_multiple_notifications"}}},"webhooks":{}}