{"openapi":"3.1.0","info":{"title":"Identification API","version":"1.0.0","description":"Programmatic access to your visitor data and pixel management. Authenticate with your API key (X-API-Key header)."},"servers":[{"url":"https://api.aws53.cloud","description":"Production"}],"paths":{"/v1/data/company":{"get":{"operationId":"lookupCompanyByIp","tags":["Visitors"],"x-docs-group":"Visitors","x-docs-order":205,"summary":"Look up a company by IP address","description":"Returns stored lookup information for one IPv4 or IPv6 address. Requires an active X-API-Key and an eligible organization. IPv6 spelling is normalized and IPv4-mapped IPv6 uses its IPv4 equivalent. No visit, pixel, tenant-ownership or person data is returned. Results are provider-reported stored mappings, not proof of IP ownership or visitor employment, and may be stale. Classification is company only when organization identity, corporate access and explicit non-ISP evidence are present; explicit ISP evidence takes priority, and other identified organizations are unclassified_organization. An ISP classification does not prove a residential location. isInternetProvider preserves true, false or null, and accessType preserves the source value. A successful stored row without organization identity returns its data with no_company_found or isp classification and consumes zero units. Missing or unsuccessful stored results return data: null without claiming a definitive no-company match. No new enrichment request is started. Every result with an organization name or identifier, including ISP or unclassified organizations and repeat requests for the same IP, consumes one unit of the shared organization-wide Company Credits allowance equal to the effective identification-plan limit. Dashboard company admissions also consume this allowance once per company per billing period; identification and intent usage remain separate. All organization API keys share it; it resets when the existing organization billing allowance resets. Once exhausted, all further lookups are refused before source access, even requests that might otherwise be free. Requests are limited to 60 per minute per client IP. Responses must not be cached or prefetched because organization-returning lookups consume allowance. Rate-limit headers describe request pacing, while meta describes the company allowance. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"One IPv4 or IPv6 address, without a URL, port, CIDR or IPv6 zone identifier.","example":"192.0.2.10"},"required":true,"description":"One IPv4 or IPv6 address, without a URL, port, CIDR or IPv6 zone identifier.","name":"ip","in":"query","example":"192.0.2.10"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Stored lookup result and the shared Company Credits allowance.","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}},"Cache-Control":{"description":"Always no-store: identified-organization results consume allowance.","schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":["object","null"],"properties":{"ip":{"type":"string","description":"Normalized IP address that was looked up."},"businessCategory":{"type":"string","description":"Provider audience classification; empty when unavailable."},"businessSegment":{"type":"string","description":"Provider audience segment; empty when unavailable."},"dataCompleteness":{"type":"string","description":"Provider detail classification, not a computed completeness score; empty when unavailable."},"isInternetProvider":{"type":["boolean","null"],"description":"Whether the provider identifies the result as an ISP; null when unknown."},"accessType":{"type":"string","description":"Provider network access classification; empty when unavailable."},"classification":{"type":"string","enum":["company","isp","unclassified_organization","no_company_found"],"description":"Conservative result classification. Company requires corporate access, explicit non-ISP status and company identity; other named organizations remain unclassified."},"name":{"type":"string","description":"Company name; can be empty if only a company identifier was supplied."},"website":{"type":"string","description":"Company website or domain; empty when unavailable."},"tradeName":{"type":"string","description":"Company marketing name, not necessarily a registered trade name; empty when unavailable."},"industry":{"type":"string","description":"Company industry; empty when unavailable."},"subIndustry":{"type":"string","description":"Company sub-industry; empty when unavailable."},"linkedinUrl":{"type":["string","null"],"description":"Company LinkedIn profile URL, or null when unavailable."},"employeeCount":{"type":["integer","null"],"minimum":0,"maximum":9007199254740991,"description":"Provider-reported employee count, or null when unavailable."},"annualSales":{"type":["integer","null"],"minimum":0,"maximum":9007199254740991,"description":"Provider-reported annual sales amount, or null when unavailable; currency is not supplied by the source."},"revenueRange":{"type":"string","description":"Provider revenue range; empty when unavailable."},"primaryNaics":{"type":"string","description":"Primary NAICS code, retained as text; empty when unavailable."},"primarySic":{"type":"string","description":"Primary SIC code, retained as text; empty when unavailable."},"city":{"type":"string","description":"Company city; empty when unavailable."},"state":{"type":"string","description":"Company state or region; empty when unavailable."},"postalCode":{"type":"string","description":"Company postal code; empty when unavailable."},"countryCode":{"type":"string","description":"Company country code; empty when unavailable."},"countryName":{"type":"string","description":"Company country name; empty when unavailable."}},"required":["ip","businessCategory","businessSegment","dataCompleteness","isInternetProvider","accessType","classification","name","website","tradeName","industry","subIndustry","linkedinUrl","employeeCount","annualSales","revenueRange","primaryNaics","primarySic","city","state","postalCode","countryCode","countryName"],"description":"Stored lookup details with company, ISP, unclassified-organization or no-company-found classification. Null means no successful stored result; it does not prove that the IP is not used by a company."},"meta":{"type":"object","properties":{"credits_consumed":{"type":"integer","minimum":0,"maximum":1,"description":"One unit when the source returns an organization name or identifier, including ISP and unclassified organizations; zero without organization identity or a successful stored result."},"limit":{"type":"integer","minimum":0,"description":"Organization company-lookup allowance for the current billing period."},"used":{"type":"integer","minimum":0,"description":"Company-lookup units used in this period, including this request."},"remaining":{"type":"integer","minimum":0,"description":"Company-lookup units remaining after this request."}},"required":["credits_consumed","limit","used","remaining"]}},"required":["data","meta"]},"examples":{"company":{"value":{"data":{"ip":"192.0.2.10","businessCategory":"Enterprise Business","businessSegment":"Software & Technology","dataCompleteness":"Detailed","isInternetProvider":false,"accessType":"corporate","classification":"company","name":"Example Software","website":"example.test","tradeName":"Example","industry":"Software","subIndustry":"","linkedinUrl":null,"employeeCount":100,"annualSales":null,"revenueRange":"","primaryNaics":"","primarySic":"","city":"","state":"","postalCode":"","countryCode":"US","countryName":"United States"},"meta":{"credits_consumed":1,"limit":5000,"used":1,"remaining":4999}}},"isp":{"value":{"data":{"ip":"192.0.2.10","businessCategory":"Enterprise Business","businessSegment":"Software & Technology","dataCompleteness":"Detailed","isInternetProvider":true,"accessType":"","classification":"isp","name":"Example Network","website":"network.example.test","tradeName":"Example","industry":"Telecommunications","subIndustry":"","linkedinUrl":null,"employeeCount":100,"annualSales":null,"revenueRange":"","primaryNaics":"","primarySic":"","city":"","state":"","postalCode":"","countryCode":"US","countryName":"United States"},"meta":{"credits_consumed":1,"limit":5000,"used":1,"remaining":4999}}},"unclassified":{"value":{"data":{"ip":"192.0.2.10","businessCategory":"Enterprise Business","businessSegment":"Software & Technology","dataCompleteness":"Detailed","isInternetProvider":null,"accessType":"corporate","classification":"unclassified_organization","name":"Example Software","website":"example.test","tradeName":"Example","industry":"Software","subIndustry":"","linkedinUrl":null,"employeeCount":100,"annualSales":null,"revenueRange":"","primaryNaics":"","primarySic":"","city":"","state":"","postalCode":"","countryCode":"US","countryName":"United States"},"meta":{"credits_consumed":1,"limit":5000,"used":1,"remaining":4999}}},"noCompany":{"value":{"data":{"ip":"192.0.2.10","businessCategory":"","businessSegment":"","dataCompleteness":"","isInternetProvider":null,"accessType":"","classification":"no_company_found","name":"","website":"","tradeName":"","industry":"","subIndustry":"","linkedinUrl":null,"employeeCount":null,"annualSales":null,"revenueRange":"","primaryNaics":"","primarySic":"","city":"","state":"","postalCode":"","countryCode":"US","countryName":"United States"},"meta":{"credits_consumed":0,"limit":5000,"used":0,"remaining":5000}}},"noStoredResult":{"value":{"data":null,"meta":{"credits_consumed":0,"limit":5000,"used":0,"remaining":5000}}}}}}},"400":{"description":"Invalid IP address.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string"},"request_id":{"type":"string"}},"required":["timestamp","request_id"]}},"required":["error"]},"example":{"error":{"code":"HTTP_ERROR","message":"Expected one IPv4 or IPv6 address"}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string"},"request_id":{"type":"string"}},"required":["timestamp","request_id"]}},"required":["error"]},"example":{"error":{"code":"HTTP_ERROR","message":"Missing X-API-Key header"}}}}},"403":{"description":"Revoked key or ineligible organization.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string"},"request_id":{"type":"string"}},"required":["timestamp","request_id"]}},"required":["error"]},"example":{"error":{"code":"HTTP_ERROR","message":"Organization is not eligible for company lookups"}}}}},"429":{"description":"Request rate limit or company allowance exhausted. Retry-After is supplied for request-rate limits; allowance exhaustion requires a billing reset or a limit increase.","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string"},"request_id":{"type":"string"}},"required":["timestamp","request_id"]}},"required":["error"]},"example":{"error":{"code":"HTTP_ERROR","message":"Company lookup allowance exhausted for the current billing period"}}}}},"503":{"description":"Company lookup or allowance storage unavailable; no company response is delivered.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string"},"request_id":{"type":"string"}},"required":["timestamp","request_id"]}},"required":["error"]},"example":{"error":{"code":"HTTP_ERROR","message":"Company lookup temporarily unavailable"}}}}}}}},"/v1/data":{"get":{"tags":["Visitors"],"x-docs-group":"Visitors","x-docs-order":200,"summary":"Query visitor data via API key","description":"Returns resolved identified-person data for the organization owning the `X-API-Key`. Without `email`, the operation returns 50 people per one-based page, ordered by canonical identity hash ascending; with `email`, it returns that person plus a session journey and summary. Identity aliases are represented as one person. `timeframe` supports `today`, `24h`, `3d`, `7d`, `14d`, `30d`, `mtd`, `90d`, `ytd`, and `all`; reads return a request-time `asOf` and historical-coverage metadata. Separate page requests resolve their own time boundary. `domain` and `pixelId` are alternative scope mechanisms and cannot be combined. Each visitor includes nullable `visitStatus` (new or seen_before) and `backAfter30Days`, based on the latest qualifying session and earlier recorded organization-wide history, including other pixels and known aliases. These are recorded-visit badges, not manual lead statuses or proof of no untracked visits. List mode accepts either or both history filters; omit them for all, false excludes unknowns, and filters combine with AND before pagination and totals. History filters cannot be combined with `email` (400), but the journey visitor still returns both badges. A later qualifying visit or identity correction can change the badges. Existing firstSeenAt and session-summary metrics keep their meanings. The read is rate-limited per API key; use the response rate-limit headers for pacing. Recent events and enrichment changes may appear after a short processing delay. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","format":"email","description":"Exact primary or known alias email. When present, the response is a single visitor journey rather than a list. Cannot be combined with visitStatus or backAfter30Days filters.","example":"alex@example.test"},"required":false,"description":"Exact primary or known alias email. When present, the response is a single visitor journey rather than a list. Cannot be combined with visitStatus or backAfter30Days filters.","name":"email","in":"query","example":"alex@example.test"},{"schema":{"type":"string","enum":["new","seen_before"],"description":"Status of the latest qualifying session in the selected period. new means it starts at this person's first recorded visit to the organization; seen_before means an earlier recorded visit exists, including outside the selected period or pixel. Known email aliases share history. This is recorded history, not proof of no untracked visits. Null means unavailable or inconsistent history, or the viewer lacks organization-wide pixel access. Existing firstSeen and returning-visitor metrics are unchanged. List mode only: omit for all; applied before pagination and totals.","example":"new"},"required":false,"description":"Status of the latest qualifying session in the selected period. new means it starts at this person's first recorded visit to the organization; seen_before means an earlier recorded visit exists, including outside the selected period or pixel. Known email aliases share history. This is recorded history, not proof of no untracked visits. Null means unavailable or inconsistent history, or the viewer lacks organization-wide pixel access. Existing firstSeen and returning-visitor metrics are unchanged. List mode only: omit for all; applied before pagination and totals.","name":"visitStatus","in":"query","example":"new"},{"schema":{"type":"string","enum":["true","false"],"description":"True when the latest qualifying session starts at least 30 full 24-hour days after the most recent recorded activity in an earlier non-bot session for this person in this organization. Earlier visits on other pixels or outside the selected period and rule filters still count. False means a known first visit or a shorter gap. Null means insufficient or inconsistent recorded history, or restricted pixel access. This is an additional badge, not a replacement for visitStatus; unknown history is never treated as inactivity. List mode only: use the literal query value true or false; omit for all. False excludes unknowns. Combined with visitStatus using AND, before pagination and totals.","example":"true"},"required":false,"description":"True when the latest qualifying session starts at least 30 full 24-hour days after the most recent recorded activity in an earlier non-bot session for this person in this organization. Earlier visits on other pixels or outside the selected period and rule filters still count. False means a known first visit or a shorter gap. Null means insufficient or inconsistent recorded history, or restricted pixel access. This is an additional badge, not a replacement for visitStatus; unknown history is never treated as inactivity. List mode only: use the literal query value true or false; omit for all. False excludes unknowns. Combined with visitStatus using AND, before pagination and totals.","name":"backAfter30Days","in":"query","example":"true"},{"schema":{"type":"integer","minimum":1,"default":1,"description":"One-based page number for visitor-list mode. Each page contains up to 50 rows.","example":1},"required":false,"description":"One-based page number for visitor-list mode. Each page contains up to 50 rows.","name":"page","in":"query","example":1},{"schema":{"type":"string","enum":["24h","7d","14d","30d","90d","all","today","3d","mtd","ytd"],"default":"30d","description":"Activity window: `today`, `24h`, `3d`, `7d`, `14d`, `30d`, `mtd`, `90d`, `ytd`, or `all`.","example":"30d"},"required":false,"description":"Activity window: `today`, `24h`, `3d`, `7d`, `14d`, `30d`, `mtd`, `90d`, `ytd`, or `all`.","name":"timeframe","in":"query","example":"30d"},{"schema":{"type":"string","description":"Exact visited website host (for example, example.test), not a URL or wildcard. Restricts people and their session activity within the API-key organization. Mutually exclusive with `pixelId`.","example":"example.test"},"required":false,"description":"Exact visited website host (for example, example.test), not a URL or wildcard. Restricts people and their session activity within the API-key organization. Mutually exclusive with `pixelId`.","name":"domain","in":"query","example":"example.test"},{"schema":{"type":"string","format":"uuid","description":"Restrict results to one pixel owned by the API-key organization. An inaccessible or deleted pixel returns 403.","example":"00000000-0000-4000-8000-000000000001"},"required":false,"description":"Restrict results to one pixel owned by the API-key organization. An inaccessible or deleted pixel returns 403.","name":"pixelId","in":"query","example":"00000000-0000-4000-8000-000000000001"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Visitor list or a single visitor journey","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DataApiVisitor"}},"meta":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"hasMore":{"type":"boolean"},"asOf":{"type":"string","format":"date-time","description":"Request-time activity boundary. Separate page requests resolve their own relative window; this is not a database snapshot."},"pixelId":{"type":["string","null"],"format":"uuid","description":"Pixel scope applied to this read, when one was requested"},"coverage":{"$ref":"#/components/schemas/DataApiCoverage"}},"required":["page","limit","total","totalPages","hasMore"]}},"required":["data","meta"]},{"type":"object","properties":{"visitor":{"$ref":"#/components/schemas/DataApiVisitor"},"summary":{"type":"object","properties":{"totalSessions":{"type":"number"},"totalPageviews":{"type":"number"},"firstSeen":{"type":"string","format":"date-time"},"lastSeen":{"type":"string","format":"date-time"},"daysActive":{"type":"integer"},"intentScore":{"type":"string","enum":["high","medium","low"]}},"required":["totalSessions","totalPageviews","firstSeen","lastSeen","daysActive","intentScore"]},"sessions":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":{}}},"meta":{"type":"object","properties":{"window":{"type":"string","enum":["24h","7d","14d","30d","90d","all","today","3d","mtd","ytd"],"default":"30d","description":"Resolved window for the journey read"},"asOf":{"type":"string","format":"date-time"},"pixelId":{"type":["string","null"],"format":"uuid"},"coverage":{"$ref":"#/components/schemas/DataApiCoverage"}},"description":"Resolved window, request-time activity boundary, pixel scope, and historical coverage."}},"required":["visitor","summary","sessions"]}]},"examples":{"populated":{"value":{"data":[{"email":"visitor@example.test","emailHash":"b4fc5fb69efd3d88836a56aa432758b35b3ee9a4e30848f5d8f5f66209cd2822","emailHashes":{"sha256":"b4fc5fb69efd3d88836a56aa432758b35b3ee9a4e30848f5d8f5f66209cd2822","sha1":"e5f6d0c61a56c87aa2e870e8ffd7ce552cd88366","md5":"b6321d878decf6402a73283b5f41c0e6"},"emails":["visitor@example.test"],"businessEmails":["visitor@example.test"],"personalEmails":[],"visitStatus":"seen_before","backAfter30Days":true,"phones":[],"phonesDnc":null,"firstName":null,"lastName":null,"middleName":null,"fullName":null,"emailDomain":"example.test","allEmails":["visitor@example.test"],"primaryPhone":null,"allPhones":null,"phonesDNC":null,"ageRange":null,"gender":null,"hasChildren":null,"isHomeowner":null,"isMarried":null,"personalAddress":null,"personalZip":null,"city":null,"state":null,"country":null,"countryCode":null,"personalTimezone":null,"companyName":null,"companyDomain":null,"companyLinkedinUrl":null,"companyAddress":null,"companyCity":null,"companyState":null,"companyCountry":null,"companyZipCode":null,"companyEmployeeCount":null,"companyTotalRevenue":null,"companySizeRange":null,"companyRevenueRange":null,"jobTitle":null,"headline":null,"seniority":null,"seniorityLevel2":null,"seniorityLevelRaw":null,"department":null,"department2":null,"departmentRaw":null,"industry":null,"linkedinUrl":null,"photoUrl":null,"linkedinUrn":null,"skillsSummary":null,"photoB2Url":null,"companyLogoB2Url":null,"company":null,"companyZip":null,"companySize":null,"companySizeCategory":null,"companyRevenue":null,"companyIndustry":null,"seniorityRaw":null,"sessions":1,"pageviews":1,"pricingPageViews":0,"demoPageViews":0,"checkoutPageViews":0,"enrichmentLevel":"email_only","enrichmentScore":0,"intentScore":"low","firstSeenAt":"2026-09-13T00:00:00Z","lastSeenAt":"2026-09-13T00:00:00Z","firstSeen":"2026-09-13T00:00:00Z","lastSeen":"2026-09-13T00:00:00Z","daysSinceVisit":0,"landingPage":"https://www.example.test/","visitedPages":["https://www.example.test/"],"referrer":null,"referrerDomain":null,"utmSource":null,"utmMedium":null,"utmCampaign":null,"utmTerm":null,"utmContent":null,"gclid":null,"fbclid":null,"googleGbraid":null,"googleWbraid":null,"googleGadSource":null,"googleCampaignId":null,"bingClickId":null,"linkedinClickId":null,"klaviyoTrackingId":null,"hubspotAccountId":null,"hubspotCampaignId":null,"hubspotNetwork":null,"msclkid":null,"liFatId":null,"gbraid":null,"wbraid":null,"channel":null,"pixels":["11111111-1111-4111-8111-111111111111"],"pixelId":"11111111-1111-4111-8111-111111111111","pixelDetails":[{"id":"11111111-1111-4111-8111-111111111111","name":"Example Pixel","domain":"www.example.test"}],"domains":["www.example.test"],"customAttribution":null}],"meta":{"page":1,"limit":50,"total":1,"totalPages":1,"hasMore":false,"asOf":"2026-09-13T00:00:00Z","pixelId":null,"coverage":{"partial":false}}}},"empty":{"value":{"data":[],"meta":{"page":1,"limit":50,"total":0,"totalPages":0,"hasMore":false,"asOf":"2026-09-13T00:00:00Z","pixelId":null,"coverage":{"partial":false}}}}},"example":{"data":[],"meta":{"page":1,"limit":50,"total":0,"totalPages":0,"hasMore":false}}}}},"400":{"description":"Invalid filters, domain combined with pixelId, or history filters combined with email","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"VALIDATION_ERROR","message":"Invalid request data"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHENTICATION_ERROR","message":"Authentication required"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"403":{"description":"API key revoked, organization inactive, or pixelId is not accessible","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHORIZATION_ERROR","message":"Insufficient permissions"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"404":{"description":"No visitor with activity in the requested scope for this email","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"HTTP_ERROR","message":"Resource not found"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"429":{"description":"Rate limit exceeded","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"RATE_LIMIT_EXCEEDED","message":"Too many requests, please try again later"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"HTTP_ERROR","message":"Service unavailable"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}}},"operationId":"queryVisitorDataViaApiKey"}},"/v1/data/visitors/{visitorId}/sessions":{"get":{"tags":["Visitors"],"x-docs-group":"Visitors","x-docs-order":210,"summary":"List privacy-bounded session summaries","description":"Returns deterministic, cursor-paginated session summaries without detailed events, page sequences, full URLs, query strings, or fragments. `visitorId` is the lowercase SHA-256 value returned as `emailHash` by the visitor list and qualification endpoints. The signed cursor is bound to the API-key organization, visitor, timeframe, optional pixel scope, and frozen `asOf`; do not construct, edit, or reuse it with different filters. Sessions are ordered by start time and stable session identifier, both descending. `limit` defaults to 50 and is capped at 100. An empty page returns an empty `data` array and null `nextCursor`. Recent events can revise a session summary and therefore change its `version` after a short processing delay. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Fa-f0-9]{64}$","description":"Visitor SHA-256 identifier from DataApiVisitor.emailHash","example":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"required":true,"description":"Visitor SHA-256 identifier from DataApiVisitor.emailHash","name":"visitorId","in":"path","example":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},{"schema":{"type":"string","enum":["24h","7d","14d","30d","90d","all"],"default":"30d","description":"Time window fixed when the first cursor page is requested.","example":"30d"},"required":false,"description":"Time window fixed when the first cursor page is requested.","name":"timeframe","in":"query","example":"30d"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Session rows per page. Defaults to 50; maximum 100.","example":50},"required":false,"description":"Session rows per page. Defaults to 50; maximum 100.","name":"limit","in":"query","example":50},{"schema":{"type":"string","minLength":1,"maxLength":1024,"description":"Opaque signed nextCursor from the previous response. Do not construct or modify it.","example":"eyJzIjoxNzU2NzE5MjAwLCJrIjoiYWFhYSIsImEiOjE3NTY3MjAwMDB9"},"required":false,"description":"Opaque signed nextCursor from the previous response. Do not construct or modify it.","name":"cursor","in":"query","example":"eyJzIjoxNzU2NzE5MjAwLCJrIjoiYWFhYSIsImEiOjE3NTY3MjAwMDB9"},{"schema":{"type":"string","format":"uuid","description":"Restrict sessions to one pixel owned by the API-key organization. An inaccessible or deleted pixel returns 403.","example":"00000000-0000-4000-8000-000000000001"},"required":false,"description":"Restrict sessions to one pixel owned by the API-key organization. An inaccessible or deleted pixel returns 403.","name":"pixelId","in":"query","example":"00000000-0000-4000-8000-000000000001"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Bounded session summaries","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataApiSessionSummaryPage"},"example":{"data":[],"meta":{"limit":50,"hasMore":false,"nextCursor":null,"timeframe":"30d","asOf":"2026-09-03T12:00:00.000Z","pixelId":null,"coverage":{"partial":false}}}}}},"400":{"description":"Invalid visitor identifier or cursor","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"VALIDATION_ERROR","message":"Invalid request data"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHENTICATION_ERROR","message":"Authentication required"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"403":{"description":"API key revoked, organization inactive, or pixelId is not accessible","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHORIZATION_ERROR","message":"Insufficient permissions"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"429":{"description":"Rate limit exceeded","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"RATE_LIMIT_EXCEEDED","message":"Too many requests, please try again later"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"HTTP_ERROR","message":"Service unavailable"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}}},"operationId":"listPrivacyBoundedSessionSummaries"}},"/v1/data/query":{"post":{"tags":["Visitors"],"x-docs-group":"Visitors","x-docs-order":220,"summary":"Query qualified visitor data via API key","description":"Returns identified people matching either one saved segment or one canonical `ruleAst` for the organization owning the `X-API-Key`; provide exactly one source. `window` overrides the rule window for this request, and `pixelId` restricts matching to one owned pixel. Identity aliases are represented as one person. Each person includes nullable `visitStatus` (new or seen_before) and `backAfter30Days`, measured at the latest qualifying session against earlier recorded visits across the organization, including other pixels and aliases. Optional history filters combine with the saved segment or rule using AND before pagination and totals; false excludes unknown history. They do not modify the saved segment or turn the badges into persistent lead statuses. New plus backAfter30Days true matches nobody. Results use one-based pagination, are ordered by most recently seen first with a stable identity tie-breaker, and include a request-time boundary and historical-coverage metadata. Corrections and subsequent visits can change badges on a later request; original firstSeenAt and session metrics retain their meanings. The qualification-specific rate limit is reported through response headers. This operation reads data and records API-key usage metadata but does not consume visitor-resolution credits. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataApiQualificationQuery"},"example":{"ruleAst":{"version":1,"window":"30d","rule":{"field":"company.name","op":"contains","value":"Example"}},"page":1,"limit":50,"window":"30d","visitStatus":"seen_before","backAfter30Days":true}}}},"responses":{"200":{"description":"Qualified visitor data","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DataApiVisitor"}},"meta":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"hasMore":{"type":"boolean"},"asOf":{"type":"string","format":"date-time","description":"Activity boundary resolved once before qualification and shared by this request's rows and totals; separate requests resolve their own boundary. Not a database snapshot."},"pixelId":{"type":["string","null"],"format":"uuid","description":"Pixel scope applied to this query, when one was requested"},"coverage":{"$ref":"#/components/schemas/DataApiCoverage"}},"required":["page","limit","total","totalPages","hasMore"]}},"required":["data","meta"]},"examples":{"populated":{"value":{"data":[{"email":"visitor@example.test","emailHash":"b4fc5fb69efd3d88836a56aa432758b35b3ee9a4e30848f5d8f5f66209cd2822","emailHashes":{"sha256":"b4fc5fb69efd3d88836a56aa432758b35b3ee9a4e30848f5d8f5f66209cd2822","sha1":"e5f6d0c61a56c87aa2e870e8ffd7ce552cd88366","md5":"b6321d878decf6402a73283b5f41c0e6"},"emails":["visitor@example.test"],"businessEmails":["visitor@example.test"],"personalEmails":[],"visitStatus":"seen_before","backAfter30Days":true,"phones":[],"phonesDnc":null,"firstName":null,"lastName":null,"middleName":null,"fullName":null,"emailDomain":"example.test","allEmails":["visitor@example.test"],"primaryPhone":null,"allPhones":null,"phonesDNC":null,"ageRange":null,"gender":null,"hasChildren":null,"isHomeowner":null,"isMarried":null,"personalAddress":null,"personalZip":null,"city":null,"state":null,"country":null,"countryCode":null,"personalTimezone":null,"companyName":null,"companyDomain":null,"companyLinkedinUrl":null,"companyAddress":null,"companyCity":null,"companyState":null,"companyCountry":null,"companyZipCode":null,"companyEmployeeCount":null,"companyTotalRevenue":null,"companySizeRange":null,"companyRevenueRange":null,"jobTitle":null,"headline":null,"seniority":null,"seniorityLevel2":null,"seniorityLevelRaw":null,"department":null,"department2":null,"departmentRaw":null,"industry":null,"linkedinUrl":null,"photoUrl":null,"linkedinUrn":null,"skillsSummary":null,"photoB2Url":null,"companyLogoB2Url":null,"company":null,"companyZip":null,"companySize":null,"companySizeCategory":null,"companyRevenue":null,"companyIndustry":null,"seniorityRaw":null,"sessions":1,"pageviews":1,"pricingPageViews":0,"demoPageViews":0,"checkoutPageViews":0,"enrichmentLevel":"email_only","enrichmentScore":0,"intentScore":"low","firstSeenAt":"2026-09-13T00:00:00Z","lastSeenAt":"2026-09-13T00:00:00Z","firstSeen":"2026-09-13T00:00:00Z","lastSeen":"2026-09-13T00:00:00Z","daysSinceVisit":0,"landingPage":"https://www.example.test/","visitedPages":["https://www.example.test/"],"referrer":null,"referrerDomain":null,"utmSource":null,"utmMedium":null,"utmCampaign":null,"utmTerm":null,"utmContent":null,"gclid":null,"fbclid":null,"googleGbraid":null,"googleWbraid":null,"googleGadSource":null,"googleCampaignId":null,"bingClickId":null,"linkedinClickId":null,"klaviyoTrackingId":null,"hubspotAccountId":null,"hubspotCampaignId":null,"hubspotNetwork":null,"msclkid":null,"liFatId":null,"gbraid":null,"wbraid":null,"channel":null,"pixels":["11111111-1111-4111-8111-111111111111"],"pixelId":"11111111-1111-4111-8111-111111111111","pixelDetails":[{"id":"11111111-1111-4111-8111-111111111111","name":"Example Pixel","domain":"www.example.test"}],"domains":["www.example.test"],"customAttribution":null}],"meta":{"page":1,"limit":50,"total":1,"totalPages":1,"hasMore":false,"asOf":"2026-09-13T00:00:00Z","pixelId":null,"coverage":{"partial":false}}}},"empty":{"value":{"data":[],"meta":{"page":1,"limit":50,"total":0,"totalPages":0,"hasMore":false,"asOf":"2026-09-13T00:00:00Z","pixelId":null,"coverage":{"partial":false}}}}},"example":{"data":[],"meta":{"page":1,"limit":50,"total":0,"totalPages":0,"hasMore":false}}}}},"400":{"description":"Invalid source selection, rule shape, rule semantics, or complexity","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"VALIDATION_ERROR","message":"Invalid request data"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHENTICATION_ERROR","message":"Authentication required"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"403":{"description":"API key revoked, organization inactive, or pixelId is not accessible","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"AUTHORIZATION_ERROR","message":"Insufficient permissions"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"404":{"description":"Saved segment not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"HTTP_ERROR","message":"Resource not found"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"429":{"description":"Qualification query rate limit exceeded","headers":{"RateLimit-Limit":{"description":"Maximum requests in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current application rate-limit window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current application rate-limit window resets","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"RATE_LIMIT_EXCEEDED","message":"Too many requests, please try again later"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"500":{"description":"Saved segment definition is invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"INTERNAL_SERVER_ERROR","message":"An unexpected error occurred"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}},"503":{"description":"Data temporarily unavailable, or person ownership/history changed during qualification; retry the read. The request-time boundary is not a database snapshot.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Customer-safe error message."},"details":{"description":"Optional structured validation or business-error details."}},"required":["code","message"]},"meta":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"request_id":{"type":"string","description":"Request identifier for support and log correlation."}},"required":["timestamp","request_id"]}},"required":["error","meta"]},"example":{"error":{"code":"HTTP_ERROR","message":"Service unavailable"},"meta":{"timestamp":"2026-09-03T12:00:00.000Z","request_id":"req_01J0ZTRW5K49C1A6X4S9TW0FZP"}}}}}},"operationId":"queryQualifiedVisitorDataViaApiKey","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]}},"/v1/data/pixels":{"post":{"tags":["Pixels"],"summary":"Create a pixel for a domain","description":"Creates a new tracking pixel. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","minLength":1,"maxLength":255,"example":"www.example.test"},"name":{"type":"string","minLength":1,"maxLength":255,"example":"Example Pixel"},"excludedPaths":{"type":["array","null"],"items":{"type":"string","minLength":2,"maxLength":500,"pattern":"^\\/"},"maxItems":50,"description":"Denylist: URL path prefixes where tracking is skipped. Mutually exclusive with includedPaths.","example":["/blog","/careers"]},"includedPaths":{"type":["array","null"],"items":{"type":"string","minLength":2,"maxLength":500,"pattern":"^\\/"},"maxItems":50,"description":"Allowlist: if set, tracking fires ONLY on matching path prefixes. Mutually exclusive with excludedPaths.","example":["/pricing","/demo"]}},"required":["domain"]},"example":{"domain":"www.example.test","name":"Example Pixel","excludedPaths":["/careers"]}}}},"responses":{"201":{"description":"Pixel created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelCreated"},"example":{"data":{"id":"11111111-1111-4111-8111-111111111111","domain":"www.example.test","name":"Example Pixel","status":"active","excludedPaths":null,"includedPaths":null,"code":"<script src=\"https://pixel.example.test/p/11111111-1111-4111-8111-111111111111.js\" async></script>","createdAt":"2026-01-01T00:00:00Z"}}}}},"400":{"description":"Validation error (e.g. both includedPaths and excludedPaths set)"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive org"},"409":{"description":"Pixel already exists for this domain"}},"operationId":"createAPixelForADomain","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]},"get":{"tags":["Pixels"],"summary":"List all pixels for the organization","description":"Returns all non-deleted pixels belonging to the X-API-Key organization, newest creation first. Equal creation timestamps have no guaranteed tie-breaker. The list is not paginated; no matches returns an empty data array. Revoked keys and expired or suspended organizations are rejected. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"responses":{"200":{"description":"List of pixels","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelList"},"examples":{"populated":{"value":{"data":[{"id":"11111111-1111-4111-8111-111111111111","domain":"www.example.test","name":"Example Pixel","status":"active","pausedReason":null,"excludedPaths":null,"includedPaths":null,"createdAt":"2026-01-01T00:00:00Z"}]}},"empty":{"value":{"data":[]}}}}}},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Revoked API key or organization access denied"}},"operationId":"listAllPixelsForTheOrganization","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]}},"/v1/data/pixels/{id}":{"patch":{"tags":["Pixels"],"summary":"Update a pixel (pause, activate, or set path filters)","description":"Updates a pixel. Accepts status, excludedPaths, includedPaths, or any combination. Set paths to null to clear. Mutually exclusive: cannot have both includedPaths and excludedPaths set. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Pixel identifier belonging to the organization","example":"11111111-1111-4111-8111-111111111111"},"required":true,"description":"Pixel identifier belonging to the organization","name":"id","in":"path","example":"11111111-1111-4111-8111-111111111111"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","paused"],"example":"paused"},"excludedPaths":{"type":["array","null"],"items":{"type":"string","minLength":2,"maxLength":500,"pattern":"^\\/"},"maxItems":50,"description":"Denylist: URL path prefixes where tracking is skipped. Mutually exclusive with includedPaths.","example":["/blog","/careers"]},"includedPaths":{"type":["array","null"],"items":{"type":"string","minLength":2,"maxLength":500,"pattern":"^\\/"},"maxItems":50,"description":"Allowlist: if set, tracking fires ONLY on matching path prefixes. Mutually exclusive with excludedPaths.","example":["/pricing","/demo"]}}},"example":{"status":"paused"}}}},"responses":{"200":{"description":"Pixel updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixelUpdated"},"example":{"data":{"id":"11111111-1111-4111-8111-111111111111","domain":"www.example.test","name":"Example Pixel","status":"paused","excludedPaths":null,"includedPaths":null,"updatedAt":"2026-01-01T00:00:00Z"}}}}},"400":{"description":"Validation error (e.g. both includedPaths and excludedPaths set)"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Cannot activate pixel for inactive org"},"404":{"description":"Pixel not found"}},"operationId":"updateAPixelPauseActivateOrSetPathFilters"}},"/v1/data/account":{"get":{"tags":["Account"],"summary":"Account health and credit status","description":"Returns organization status, credit balance, pixel summary, and intent audience slots. Use this to check if your account is healthy and has remaining credits. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"responses":{"200":{"description":"Account status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountStatus"},"example":{"data":{"healthy":true,"organization":{"name":"Example Organization","status":"active"},"credits":{"used":10,"limit":100,"remaining":90,"percentUsed":10,"resetsAt":"2026-02-01T00:00:00Z"},"pixels":{"total":1,"active":1,"paused":0},"intent":null}}}}},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Revoked API key or organization access denied"}},"operationId":"getAccountHealthAndCreditStatus","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]}},"/v1/data/suppression-rules":{"get":{"tags":["Visitor Suppression"],"summary":"List suppression rules","description":"Returns the organization's suppression rules, newest first. Suppressed visitors are still identified, but they consume no credits and trigger no webhooks or integrations. Paginated: `limit` defaults to 500 and caps at 5000. `counts` and `total` always describe the whole list, not the returned page. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["email","domain","company_domain","industry"],"description":"Return only rules of this type","example":"domain"},"required":false,"description":"Return only rules of this type","name":"type","in":"query","example":"domain"},{"schema":{"type":"integer","minimum":1,"maximum":5000,"default":500,"description":"Maximum results returned in this page","example":100},"required":false,"description":"Maximum results returned in this page","name":"limit","in":"query","example":100},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Zero-based number of matching rules to skip","example":0},"required":false,"description":"Zero-based number of matching rules to skip","name":"offset","in":"query","example":0},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Suppression rules","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionRuleList"},"examples":{"populated":{"value":{"data":{"rules":[{"id":"11111111-1111-4111-8111-111111111111","type":"domain","value":"company.test","createdAt":"2026-01-01T00:00:00Z"}],"counts":{"email":0,"domain":2,"company_domain":0,"industry":0},"total":2,"filteredTotal":2,"limit":1,"offset":0,"hasMore":true}}},"empty":{"value":{"data":{"rules":[],"counts":{"email":0,"domain":0,"company_domain":0,"industry":0},"total":0,"filteredTotal":0,"limit":100,"offset":0,"hasMore":false}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"}},"operationId":"listSuppressionRules"},"post":{"tags":["Visitor Suppression"],"summary":"Upload suppression rules (append)","description":"Adds up to 25,000 rules in one call, on top of what is already stored; send more by posting again. There is no cap on how many rules an organization may keep. Values are normalized before storage (lowercased; domains lose scheme, `www.`, path and port), so re-uploading the same list is a no-op. Rows that fail validation come back in `rejected` — every other row is still applied. Rules take effect from the next sync cycle onward; visitors already charged are not refunded. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["email","domain","company_domain","industry"]},"value":{"type":"string","minLength":1,"maxLength":500}},"required":["type","value"]},"minItems":1,"maxItems":25000}},"required":["rules"],"example":{"rules":[{"type":"domain","value":"company.test"},{"type":"email","value":"operator@partner.test"},{"type":"company_domain","value":"https://www.competitor.test/pricing"},{"type":"industry","value":"Higher Education"}]}}}}},"responses":{"200":{"description":"Rules applied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionWriteResult"},"example":{"data":{"added":1,"removed":0,"duplicates":0,"rejectedCount":0,"rejected":[],"total":1}}}}},"400":{"description":"Validation error"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"}},"operationId":"uploadSuppressionRulesAppend","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]},"put":{"tags":["Visitor Suppression"],"summary":"Replace the suppression list","description":"Destructive sync: every existing rule is deleted and replaced by the submitted set, in one transaction. This is the endpoint to point at a source-of-truth file — re-post the whole list on every run and the stored list matches it exactly. Rules removed here stop suppressing from the next sync cycle onward. Pass `types` to replace only some rule types and leave the rest untouched (e.g. sync your `email` list without disturbing industry rules); send an empty `rules` array with `types` to clear a category. Up to 25,000 rules per call — a list longer than that cannot be replaced atomically, so build it with POST instead. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["email","domain","company_domain","industry"]},"value":{"type":"string","minLength":1,"maxLength":500}},"required":["type","value"]},"maxItems":25000},"types":{"type":"array","items":{"type":"string","enum":["email","domain","company_domain","industry"]},"minItems":1,"maxItems":4,"description":"Restrict the replace to these rule types. Rules of other types are left alone, and submitting a rule whose type is not listed is an error."}},"required":["rules"],"example":{"rules":[{"type":"domain","value":"company.test"},{"type":"domain","value":"subsidiary.test"}],"types":["domain"]}}}}},"responses":{"200":{"description":"List replaced","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionWriteResult"},"example":{"data":{"added":1,"removed":2,"duplicates":0,"rejectedCount":0,"rejected":[],"total":1}}}}},"400":{"description":"Validation error"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"}},"operationId":"replaceSuppressionList","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]},"delete":{"tags":["Visitor Suppression"],"summary":"Delete suppression rules in bulk","description":"Deletes by rule id, by type+value, or both. Values are normalized the same way as on upload, so you can delete with the exact rows you uploaded without tracking ids. Unknown ids and values are ignored. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":25000},"rules":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["email","domain","company_domain","industry"]},"value":{"type":"string","minLength":1,"maxLength":500}},"required":["type","value"]},"maxItems":25000}},"example":{"rules":[{"type":"domain","value":"company.test"}]}}}}},"responses":{"200":{"description":"Rules deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionDeleteResult"},"example":{"data":{"deleted":1,"total":0}}}}},"400":{"description":"Validation error"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"}},"operationId":"deleteSuppressionRulesInBulk","parameters":[{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}]}},"/v1/data/suppression-rules/industries":{"get":{"tags":["Visitor Suppression"],"summary":"List industries present in your visitor data","description":"Industry rules match the enriched company industry exactly (case-insensitive), so suppressing a value that never appears in your data is a silent no-op. This endpoint returns the industry values actually seen on your identified visitors, most common first, with the visitor count behind each and whether it is already suppressed. Use the returned `value` verbatim when creating `industry` rules. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"Maximum industries to return","example":100},"required":false,"description":"Maximum industries to return","name":"limit","in":"query","example":100},{"schema":{"type":"string","enum":["all","only","exclude"],"default":"all","description":"Filter by current suppression state","example":"all"},"required":false,"description":"Filter by current suppression state","name":"suppressed","in":"query","example":"all"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Industries observed on this organization's visitors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionIndustryList"},"examples":{"populated":{"value":{"data":[{"value":"Education","visitors":12,"suppressed":false}],"meta":{"visitorsWithoutIndustry":3,"suppressedIndustryRules":0,"limit":100}}},"empty":{"value":{"data":[],"meta":{"visitorsWithoutIndustry":0,"suppressedIndustryRules":0,"limit":100}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"},"503":{"description":"Analytics store unavailable"}},"operationId":"listIndustriesPresentInYourVisitorData"}},"/v1/data/suppression-rules/{ruleId}":{"delete":{"tags":["Visitor Suppression"],"summary":"Delete a single suppression rule","description":"Deletes one rule by id. Authenticates via X-API-Key header. Dedicated admin API credentials also authorize platform-wide management, including white-label targets; customer bearer/API-key restrictions described above remain unchanged. Existing resource validation and business-state rules still apply.","security":[{"apiKeyAuth":[]},{"adminApiKeyAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Suppression rule identifier belonging to the organization","example":"11111111-1111-4111-8111-111111111111"},"required":true,"description":"Suppression rule identifier belonging to the organization","name":"ruleId","in":"path","example":"11111111-1111-4111-8111-111111111111"},{"name":"X-Whitelabel-Slug","in":"header","required":false,"description":"Optional tenant context for admin-key operations without an organization target, such as creating an organization. Defaults to the master tenant. Must match an explicit target organization when both are supplied. Does not limit the key’s platform authority.","schema":{"type":"string","minLength":1,"maxLength":100},"example":"agency-test"},{"name":"X-Organization-Id","in":"header","required":false,"description":"Target organization for admin-key requests on organization-context routes, including Data API, intent audiences and dashboard routes without an organization path parameter. Required on those routes. When supplied with an organization path parameter, both must identify the same organization; conflicting targets return 400. Does not grant access to customer credentials.","schema":{"type":"string","format":"uuid"},"example":"11111111-1111-4111-8111-111111111111"}],"responses":{"200":{"description":"Rule deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressionRuleDeleted"},"example":{"data":{"deleted":true}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Revoked key or inactive organization"},"404":{"description":"Rule not found"}},"operationId":"deleteDataApiSuppressionRule"}}},"tags":[{"name":"Visitors","description":"Visitor resources and privacy-bounded activity."},{"name":"Pixels","description":"Tracking pixel installation and configuration."},{"name":"Account","description":"Organization account health and API entitlements."},{"name":"Visitor Suppression","description":"Organization visitor suppression rules."}],"components":{"schemas":{"DataApiVisitor":{"type":"object","properties":{"visitStatus":{"type":["string","null"],"enum":["new","seen_before",null],"description":"Status of the latest qualifying session in the selected period. new means it starts at this person's first recorded visit to the organization; seen_before means an earlier recorded visit exists, including outside the selected period or pixel. Known email aliases share history. This is recorded history, not proof of no untracked visits. Null means unavailable or inconsistent history, or the viewer lacks organization-wide pixel access. Existing firstSeen and returning-visitor metrics are unchanged.","example":"seen_before"},"backAfter30Days":{"type":["boolean","null"],"description":"True when the latest qualifying session starts at least 30 full 24-hour days after the most recent recorded activity in an earlier non-bot session for this person in this organization. Earlier visits on other pixels or outside the selected period and rule filters still count. False means a known first visit or a shorter gap. Null means insufficient or inconsistent recorded history, or restricted pixel access. This is an additional badge, not a replacement for visitStatus; unknown history is never treated as inactivity.","example":true},"email":{"type":"string","format":"email"},"emailHash":{"type":"string","description":"SHA-256 hash of the normalized primary email"},"emailHashes":{"type":"object","properties":{"sha256":{"type":"string"},"sha1":{"type":"string"},"md5":{"type":"string"}},"required":["sha256","sha1","md5"],"description":"Hashes of the normalized primary email for matching platforms"},"emails":{"type":"array","items":{"type":"string"},"description":"All known email addresses (webhook-compatible)"},"businessEmails":{"type":"array","items":{"type":"string"}},"personalEmails":{"type":"array","items":{"type":"string"}},"phones":{"type":"array","items":{"type":"string"},"description":"Stored phones when verification is disabled; only fresh active, identity-matched phones when enabled. See phonePolicy and phoneValidations."},"phoneValidation":{"type":["object","null"],"properties":{"provider":{"type":"string","enum":["moltsets"]},"status":{"type":"string","enum":["validated"]},"phone":{"type":"string","example":"+15555550123","description":"Phone returned with carrier-validation evidence; match this number to a displayed phone before showing a badge."},"validatedAt":{"type":"string","format":"date","example":"2026-09-01","description":"Provider carrier-validation date; does not establish ownership or permission to call."},"checkedAt":{"type":"string","format":"date-time","example":"2026-09-23T10:00:00.000Z","description":"When the provider lookup completed; cached for at most 30 days."},"linkedinUrl":{"type":"string","format":"uri","example":"https://www.linkedin.com/in/example-person","description":"Profile used for the mobile lookup."}},"required":["provider","status","phone","validatedAt","checkedAt","linkedinUrl"],"description":"Optional carrier validation evidence for a specific phone. Stored phone numbers remain visible when evidence is missing or expired; no validation badge should be shown without evidence. DNC restrictions remain independent."},"phonePolicy":{"type":"string","enum":["stored","active_only"],"description":"When verification is enabled, only fresh active phones with identity evidence are shown; pending, unknown and expired numbers are hidden. When disabled, stored phones remain unchanged."},"phoneValidations":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["onelookup"]},"status":{"type":"string","enum":["active"]},"phone":{"type":"string"},"identityProvider":{"type":"string","enum":["onelookup","airscale"]},"identityMatch":{"type":"string","enum":["name_match","email_linkedin_match"]},"matchedName":{"type":"string"},"linkedinUrl":{"type":["string","null"]},"lineType":{"type":"string","enum":["mobile","landline","voip","unknown"],"description":"Provider line classification; only mobile entries populate mobile-only phone fields."},"validatedAt":{"type":"string","format":"date"},"checkedAt":{"type":"string","format":"date-time"},"dnc":{"type":"boolean"},"dno":{"type":"boolean"}},"required":["provider","status","phone","identityProvider","identityMatch","matchedName","linkedinUrl","lineType","validatedAt","checkedAt","dnc","dno"],"description":"Person-matching evidence plus an active line check. Name matching is probabilistic, not proof of ownership or consent to call. DNC/DNO restrictions remain independent."},"maxItems":4,"description":"Evidence for every displayed active number, checked at most 30 days ago. Use this array for per-number badges and dates."},"phonesDnc":{"type":["boolean","null"],"description":"Do-not-call flag (webhook-compatible)"},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"fullName":{"type":["string","null"]},"emailDomain":{"type":["string","null"]},"allEmails":{"type":["array","null"],"items":{"type":"string"},"deprecated":true},"primaryPhone":{"type":["string","null"]},"allPhones":{"type":["array","null"],"items":{"type":"string"},"deprecated":true},"phonesDNC":{"type":["array","null"],"items":{"type":"string"},"deprecated":true,"description":"Legacy field. Use boolean `phonesDnc` for webhook-compatible semantics."},"ageRange":{"type":["string","null"]},"gender":{"type":["string","null"]},"hasChildren":{"type":["boolean","null"]},"isHomeowner":{"type":["boolean","null"]},"isMarried":{"type":["boolean","null"]},"personalAddress":{"type":["string","null"]},"personalZip":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"personalTimezone":{"type":["string","null"]},"companyName":{"type":["string","null"],"description":"Company name (webhook-compatible)"},"companyDomain":{"type":["string","null"]},"companyLinkedinUrl":{"type":["string","null"]},"companyAddress":{"type":["string","null"]},"companyCity":{"type":["string","null"]},"companyState":{"type":["string","null"]},"companyCountry":{"type":["string","null"]},"companyZipCode":{"type":["string","null"]},"companyEmployeeCount":{"type":["number","null"]},"companyTotalRevenue":{"type":["number","null"]},"companySizeRange":{"type":["string","null"]},"companyRevenueRange":{"type":["string","null"]},"jobTitle":{"type":["string","null"]},"headline":{"type":["string","null"]},"seniority":{"type":["string","null"]},"seniorityLevel2":{"type":["string","null"]},"seniorityLevelRaw":{"type":["string","null"]},"department":{"type":["string","null"]},"department2":{"type":["string","null"]},"departmentRaw":{"type":["string","null"]},"industry":{"type":["string","null"]},"linkedinUrl":{"type":["string","null"]},"photoUrl":{"type":["string","null"]},"linkedinUrn":{"type":["string","null"]},"skillsSummary":{"type":["string","null"]},"photoB2Url":{"type":["string","null"]},"companyLogoB2Url":{"type":["string","null"]},"company":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `companyName`"},"companyZip":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `companyZipCode`"},"companySize":{"type":["number","null"],"description":"Legacy numeric employee count; use `companyEmployeeCount` for an unambiguous name"},"companySizeCategory":{"type":["string","null"],"description":"Employee-count category corresponding to the webhook company-size vocabulary"},"companyRevenue":{"type":["number","null"],"deprecated":true,"description":"Legacy alias for `companyTotalRevenue`"},"companyIndustry":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `industry`"},"seniorityRaw":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `seniorityLevelRaw`"},"sessions":{"type":"number"},"pageviews":{"type":"number"},"pricingPageViews":{"type":"number"},"demoPageViews":{"type":"number"},"checkoutPageViews":{"type":"number"},"enrichmentLevel":{"type":"string","enum":["full","partial","email_only"]},"enrichmentScore":{"type":"number"},"intentScore":{"type":"string","enum":["high","medium","low"]},"firstSeenAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"},"firstSeen":{"type":"string","format":"date-time","deprecated":true,"description":"Legacy alias for `firstSeenAt`"},"lastSeen":{"type":"string","format":"date-time","deprecated":true,"description":"Legacy alias for `lastSeenAt`"},"daysSinceVisit":{"type":"integer"},"landingPage":{"type":["string","null"]},"visitedPages":{"type":"array","items":{"type":"string"}},"referrer":{"type":["string","null"]},"referrerDomain":{"type":["string","null"]},"utmSource":{"type":["string","null"]},"utmMedium":{"type":["string","null"]},"utmCampaign":{"type":["string","null"]},"utmTerm":{"type":["string","null"]},"utmContent":{"type":["string","null"]},"gclid":{"type":["string","null"]},"fbclid":{"type":["string","null"]},"googleGbraid":{"type":["string","null"]},"googleWbraid":{"type":["string","null"]},"googleGadSource":{"type":["string","null"]},"googleCampaignId":{"type":["string","null"]},"bingClickId":{"type":["string","null"]},"linkedinClickId":{"type":["string","null"]},"klaviyoTrackingId":{"type":["string","null"]},"hubspotAccountId":{"type":["string","null"]},"hubspotCampaignId":{"type":["string","null"]},"hubspotNetwork":{"type":["string","null"]},"msclkid":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `bingClickId`"},"liFatId":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `linkedinClickId`"},"gbraid":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `googleGbraid`"},"wbraid":{"type":["string","null"],"deprecated":true,"description":"Legacy alias for `googleWbraid`"},"channel":{"type":["string","null"]},"pixels":{"type":"array","items":{"type":"string"}},"pixelId":{"type":["string","null"]},"pixelDetails":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"}},"required":["id","name","domain"]}},"domains":{"type":"array","items":{"type":"string"}},"customAttribution":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"Custom query parameters captured from the installed pixel URL","example":{"partnerCustomerId":"customer_123","campaign":"summer"}}},"required":["visitStatus","backAfter30Days","email","emailHash","emailHashes","emails","businessEmails","personalEmails","phones","phonesDnc","firstName","lastName","middleName","fullName","emailDomain","allEmails","primaryPhone","allPhones","phonesDNC","ageRange","gender","hasChildren","isHomeowner","isMarried","personalAddress","personalZip","city","state","country","countryCode","personalTimezone","companyName","companyDomain","companyLinkedinUrl","companyAddress","companyCity","companyState","companyCountry","companyZipCode","companyEmployeeCount","companyTotalRevenue","companySizeRange","companyRevenueRange","jobTitle","headline","seniority","seniorityLevel2","seniorityLevelRaw","department","department2","departmentRaw","industry","linkedinUrl","photoUrl","linkedinUrn","skillsSummary","photoB2Url","companyLogoB2Url","company","companyZip","companySize","companySizeCategory","companyRevenue","companyIndustry","seniorityRaw","sessions","pageviews","pricingPageViews","demoPageViews","checkoutPageViews","enrichmentLevel","enrichmentScore","intentScore","firstSeenAt","lastSeenAt","firstSeen","lastSeen","daysSinceVisit","landingPage","visitedPages","referrer","referrerDomain","utmSource","utmMedium","utmCampaign","utmTerm","utmContent","gclid","fbclid","googleGbraid","googleWbraid","googleGadSource","googleCampaignId","bingClickId","linkedinClickId","klaviyoTrackingId","hubspotAccountId","hubspotCampaignId","hubspotNetwork","msclkid","liFatId","gbraid","wbraid","channel","pixels","pixelId","pixelDetails","domains","customAttribution"],"additionalProperties":{}},"DataApiCoverage":{"type":"object","properties":{"partial":{"type":"boolean","description":"True when the V2 rebuild does not fully cover the requested window. Treat results as a partial population, never as complete history."},"reason":{"type":"string","enum":["ytd_incomplete","all_incomplete","custom"],"description":"Why the window is partially covered"}},"required":["partial"],"description":"V2 data coverage for the requested window. Present when the V2 data reader is enabled."},"DataApiSessionSummaryPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DataApiSessionSummary"}},"meta":{"type":"object","properties":{"limit":{"type":"integer"},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]},"timeframe":{"type":"string","enum":["24h","7d","14d","30d","90d","all"],"default":"30d"},"asOf":{"type":"string","format":"date-time","description":"Fixed traversal time carried by the signed cursor so relative timeframe boundaries do not move between pages"},"pixelId":{"type":["string","null"],"format":"uuid","description":"Pixel scope bound into the signed cursor on the V2 reader"},"coverage":{"$ref":"#/components/schemas/DataApiCoverage"}},"required":["limit","hasMore","nextCursor","asOf"]}},"required":["data","meta"]},"DataApiQualificationQuery":{"type":"object","properties":{"visitStatus":{"type":"string","enum":["new","seen_before"],"description":"Status of the latest qualifying session in the selected period. new means it starts at this person's first recorded visit to the organization; seen_before means an earlier recorded visit exists, including outside the selected period or pixel. Known email aliases share history. This is recorded history, not proof of no untracked visits. Null means unavailable or inconsistent history, or the viewer lacks organization-wide pixel access. Existing firstSeen and returning-visitor metrics are unchanged. Omit for all; combined with the rule or saved segment before pagination and totals.","example":"seen_before"},"backAfter30Days":{"type":"boolean","description":"True when the latest qualifying session starts at least 30 full 24-hour days after the most recent recorded activity in an earlier non-bot session for this person in this organization. Earlier visits on other pixels or outside the selected period and rule filters still count. False means a known first visit or a shorter gap. Null means insufficient or inconsistent recorded history, or restricted pixel access. This is an additional badge, not a replacement for visitStatus; unknown history is never treated as inactivity. Omit for all. False excludes unknowns. Combined with visitStatus and qualification using AND, before pagination and totals.","example":true},"segmentId":{"type":["string","null"],"format":"uuid","description":"Saved segment to query. Mutually exclusive with ruleAst."},"ruleAst":{"description":"Canonical RuleAST. Mutually exclusive with segmentId."},"page":{"type":"integer","minimum":1,"default":1,"description":"One-based result page.","example":1},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Rows per page. Defaults to 50; maximum 100.","example":50},"pixelId":{"type":["string","null"],"format":"uuid","description":"Restrict the query to one accessible pixel. 403 when the pixel does not belong to the API-key organization","example":"00000000-0000-4000-8000-000000000001"},"window":{"type":"string","enum":["24h","7d","14d","30d","90d","all","today","3d","mtd","ytd"],"description":"Overrides `ruleAst.window` for this request, using the shared window catalog","example":"30d"}}},"PixelCreated":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"domain":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"excludedPaths":{"type":["array","null"],"items":{"type":"string"}},"includedPaths":{"type":["array","null"],"items":{"type":"string"}},"code":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","domain","name","status","excludedPaths","includedPaths","code","createdAt"]}},"required":["data"]},"PixelList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"domain":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"pausedReason":{"type":["string","null"]},"excludedPaths":{"type":["array","null"],"items":{"type":"string"}},"includedPaths":{"type":["array","null"],"items":{"type":"string"}},"createdAt":{"type":"string"}},"required":["id","domain","name","status","pausedReason","excludedPaths","includedPaths","createdAt"]}}},"required":["data"]},"PixelUpdated":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"domain":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"excludedPaths":{"type":["array","null"],"items":{"type":"string"}},"includedPaths":{"type":["array","null"],"items":{"type":"string"}},"updatedAt":{"type":"string"}},"required":["id","domain","name","status","excludedPaths","includedPaths","updatedAt"]}},"required":["data"]},"AccountStatus":{"type":"object","properties":{"data":{"type":"object","properties":{"healthy":{"type":"boolean"},"organization":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"}},"required":["name","status"]},"credits":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":["number","null"]},"remaining":{"type":["number","null"]},"percentUsed":{"type":["number","null"]},"resetsAt":{"type":["string","null"]}},"required":["used","limit","remaining","percentUsed","resetsAt"]},"pixels":{"type":"object","properties":{"total":{"type":"number"},"active":{"type":"number"},"paused":{"type":"number"}},"required":["total","active","paused"]},"intent":{"type":["object","null"],"properties":{"audienceSlots":{"type":"number"},"audienceSlotsUsed":{"type":"number"},"audienceSlotsAvailable":{"type":"number"},"status":{"type":"string"}},"required":["audienceSlots","audienceSlotsUsed","audienceSlotsAvailable","status"]}},"required":["healthy","organization","credits","pixels","intent"]}},"required":["data"]},"SuppressionRuleList":{"type":"object","properties":{"data":{"type":"object","properties":{"rules":{"type":"array","items":{"$ref":"#/components/schemas/SuppressionRule"}},"counts":{"type":"object","properties":{"email":{"type":"number"},"domain":{"type":"number"},"company_domain":{"type":"number"},"industry":{"type":"number"}},"required":["email","domain","company_domain","industry"],"description":"Stored rules per type, across the whole list"},"total":{"type":"number","description":"Total rules stored, ignoring the type filter"},"filteredTotal":{"type":"number","description":"Rules matching the type filter"},"limit":{"type":"number"},"offset":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["rules","counts","total","filteredTotal","limit","offset","hasMore"]}},"required":["data"]},"SuppressionWriteResult":{"type":"object","properties":{"data":{"type":"object","properties":{"added":{"type":"number","description":"Rules newly stored"},"removed":{"type":"number","description":"Rules deleted (replace mode only)"},"duplicates":{"type":"number","description":"Rows skipped: already stored, or repeated within the request"},"rejectedCount":{"type":"number","description":"Rows that failed validation"},"rejected":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","description":"Position of the row in the submitted array"},"type":{"type":"string"},"value":{"type":"string"},"reason":{"type":"string"}},"required":["index","type","value","reason"]},"description":"Detail for the first 100 rejected rows — everything else in the batch was still applied"},"total":{"type":"number","description":"Rules stored for the organization after this call"}},"required":["added","removed","duplicates","rejectedCount","rejected","total"]}},"required":["data"]},"SuppressionDeleteResult":{"type":"object","properties":{"data":{"type":"object","properties":{"deleted":{"type":"number"},"total":{"type":"number"}},"required":["deleted","total"]}},"required":["data"]},"SuppressionIndustryList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Use verbatim as the value of an `industry` rule"},"visitors":{"type":"number","description":"Distinct identified visitors carrying this industry"},"suppressed":{"type":"boolean","description":"An industry rule for this value already exists"}},"required":["value","visitors","suppressed"]}},"meta":{"type":"object","properties":{"visitorsWithoutIndustry":{"type":"number","description":"Identified visitors with no company industry — unreachable by industry rules"},"suppressedIndustryRules":{"type":"number"},"limit":{"type":"number"}},"required":["visitorsWithoutIndustry","suppressedIndustryRules","limit"]}},"required":["data","meta"]},"SuppressionRuleDeleted":{"type":"object","properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]}},"required":["data"]},"DataApiSessionSummary":{"type":"object","properties":{"sessionId":{"type":"string","description":"Stable opaque identifier scoped to the organization, visitor, and canonical session bucket","example":"ses_1vR8zPqY2dV5hJ3mK7nB9cF4sT6wX0aL8eG2uN5iQ1o"},"version":{"type":"string","description":"Content fingerprint. Changes when any field in this bounded session summary changes","example":"sv_8sH2mN6qR1vY5cJ9kP3tW7xF0aD4eG8uL2bC6iQ1oZ5"},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"},"durationSeconds":{"type":"integer","minimum":0,"description":"Seconds between the first and latest event currently materialized for this session"},"pageViews":{"type":"integer","minimum":0},"entryPage":{"type":["string","null"],"description":"Path-only entry page. Origin, query string, and fragment are never included","example":"/pricing"},"exitPage":{"type":["string","null"],"description":"Path-only latest page. Origin, query string, and fragment are never included","example":"/thank-you"},"updatedAt":{"type":"string","format":"date-time","description":"Time the canonical session summary was last materialized. Use version for content change detection"}},"required":["sessionId","version","startTime","endTime","durationSeconds","pageViews","entryPage","exitPage","updatedAt"]},"SuppressionRule":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["email","domain","company_domain","industry"]},"value":{"type":"string"},"createdAt":{"type":["string","null"]}},"required":["id","type","value","createdAt"]}},"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Organization API key (sk_...). Get yours from Settings > API Keys in the dashboard."},"adminApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Admin-API-Key","description":"Dedicated full-access management credential, issued to an active master-superadmin actor. Never a customer organization API key. Use one credential per request. Admin-header requests are limited to 600 per 60 seconds per source IP per process, in addition to existing route limits; 429 responses emit Retry-After and RateLimit-Limit/Remaining/Reset. Organization-scoped operations require X-Organization-Id where no target organization is in the path."}}},"security":[{"apiKeyAuth":[]}]}