{"openapi":"3.1.0","info":{"title":"Quorum Aquarius Data API","description":"\nStore-visit measurement, location data and reporting for agencies and their\nadvertisers. The full guide, with field tables and examples, is at\n[/documentation](/documentation).\n\n**Auth.** Send `Authorization: Bearer <token>` on every request except\n`GET /v1/health`, `GET /v1/library/categories` and `POST /v1/library/audience-intel`.\nA missing, unknown or expired token gets **401**. A token may carry an expiry\ndate and may be read-only; a read-only token gets **403** on `POST /v1/intake/*`.\n\n**Access and scope (partner tokens).** A token issued to anyone outside Quorum\nis a partner token:\n\n* It reads only its own agency's advertisers. On the advertiser roll-up\n  routes (`/v1/advertisers/{id}/config`, `/summary`, `/timeseries`,\n  `/campaigns`, `/lineitems`, `/lift`, `/tab-availability`,\n  `/store-visits/brands`) an advertiser that is not your agency's is a **403**;\n  ownership is checked against both Quorum advertiser registries. Routes that\n  filter by your agency answer **404** or an empty list instead.\n* Routes that return device- or household-level rows are refused with **403**\n  and a pointer to the Quorum MCP (`https://mcp.quorum.live/mcp`):\n  `/v1/resolve`, `/v1/household/{id}/geo|footprint|visits|publishers`,\n  `/v1/segments/{md5}/visits`, `/v1/segments/{md5}/visitor-geography`,\n  `/v1/locations/{md5}/visitor-geography`,\n  `/v1/advertisers/{id}/segments/{md5}/households`, `/v1/performance/households`.\n\n**Status codes.** 202 = recognised but not ready yet, retry later;\n404 = not recognised for your agency; 410 = disconnected by your agency\n(reconnect to restore, nothing is deleted); 422 = invalid input, or an\nadvertiser that is permanently not reportable; 503 = Quorum could not verify\nthe request right now, retry.\n","version":"2.1.0"},"paths":{"/v1/health":{"get":{"tags":["Service"],"summary":"Health check (alias of /health)","description":"Service and Snowflake status. No token needed, and not billed.\n\nReturns `{\"status\": \"ok\", \"snowflake\": \"connected\"}`, or\n`{\"status\": \"degraded\", \"snowflake\": \"<error>\"}` (still HTTP 200).","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["Service"],"summary":"Health check","description":"Service and Snowflake status. No token needed, and not billed.\n\nReturns `{\"status\": \"ok\", \"snowflake\": \"connected\"}`, or\n`{\"status\": \"degraded\", \"snowflake\": \"<error>\"}` (still HTTP 200).","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/resolve":{"post":{"tags":["Internal tokens only"],"summary":"Resolve an IPv4, MAID or lat/long to a household","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nResolve an IPv4, MAID, or lat/long to a household ID and return all MAIDs.","operationId":"resolve_identity_v1_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityResponse"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"400":{"description":"Malformed latlong value."},"404":{"description":"No household found for the identifier."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/household/{household_id}/geo":{"get":{"tags":["Internal tokens only"],"summary":"Household geography","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nCensus block, ZIP, DMA, and MAID count for a household.","operationId":"household_geo_v1_household__household_id__geo_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"household_id","in":"path","required":true,"schema":{"type":"string","title":"Household Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HouseholdGeo"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"404":{"description":"Household not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/household/{household_id}/visits":{"get":{"tags":["Internal tokens only"],"summary":"Segment visits for a household","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nSegment visits for a household, filtered for fraud, enriched with location type and 30-day visitor counts.","operationId":"household_visits_v1_household__household_id__visits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"household_id","in":"path","required":true,"schema":{"type":"string","title":"Household Id"}},{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"First UTC day of the window, inclusive (default: 30 days before date_to)","title":"Date From"},"description":"First UTC day of the window, inclusive (default: 30 days before date_to)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End UTC day of the window, EXCLUSIVE: window is [date_from, date_to) (default: today's UTC date)","title":"Date To"},"description":"End UTC day of the window, EXCLUSIVE: window is [date_from, date_to) (default: today's UTC date)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SegmentVisit"},"title":"Response Household Visits V1 Household  Household Id  Visits Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/household/{household_id}/footprint":{"get":{"tags":["Internal tokens only"],"summary":"Every location a household visited","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nAll distinct locations this household has visited, enriched from the location library.\nCross-advertiser — not filtered by advertiser_id. Deduplicates on SEGMENT_MD5.","operationId":"household_footprint_v1_household__household_id__footprint_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"household_id","in":"path","required":true,"schema":{"type":"string","title":"Household Id"}},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 365 days ago)","title":"Date From"},"description":"Start date (default: 365 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FootprintLocation"},"title":"Response Household Footprint V1 Household  Household Id  Footprint Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/household/{household_id}/publishers":{"get":{"tags":["Internal tokens only"],"summary":"Publisher exposure for a household","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nCTV/OTT publisher exposure for a household, scoped to the agency's impression pixel.","operationId":"household_publishers_v1_household__household_id__publishers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"household_id","in":"path","required":true,"schema":{"type":"string","title":"Household Id"}},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublisherExposure"},"title":"Response Household Publishers V1 Household  Household Id  Publishers Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/segments/catalog":{"get":{"tags":["Segments"],"summary":"Locations configured for an advertiser in your agency","description":"Locations configured for one of your agency's advertisers, with library\nmetadata (name, brand, category, DMA). `advertiser_id` is a Quorum advertiser\nid; another agency's advertiser returns an empty list.","operationId":"segment_catalog_v1_segments_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogEntry"},"title":"Response Segment Catalog V1 Segments Catalog Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/segments/{segment_md5}/visits":{"get":{"tags":["Internal tokens only"],"summary":"Per-device visits for a segment","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nPer-device visits for a specific segment (deduplicated to one row per MAID/day).","operationId":"segment_device_visits_v1_segments__segment_md5__visits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","title":"Segment Md5"}},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"First UTC day of the window, inclusive (default: 30 days before date_to)","title":"Date From"},"description":"First UTC day of the window, inclusive (default: 30 days before date_to)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End UTC day of the window, EXCLUSIVE: window is [date_from, date_to) (default: today's UTC date)","title":"Date To"},"description":"End UTC day of the window, EXCLUSIVE: window is [date_from, date_to) (default: today's UTC date)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceVisit"},"title":"Response Segment Device Visits V1 Segments  Segment Md5  Visits Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/segments/stats":{"get":{"tags":["Segments"],"summary":"30-day visitor counts per segment","description":"Rolling 30-day household counts per segment for a Quorum advertiser\n(window ends 5 days ago to allow for data lag): `segment_visitors_30d`\n(distinct households), `active_days`, `total_device_visits`.","operationId":"segment_stats_v1_segments_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SegmentStats"},"title":"Response Segment Stats V1 Segments Stats Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/segments/{segment_md5}/visitor-geography":{"get":{"tags":["Internal tokens only"],"summary":"Home ZIP/DMA of a segment's visitors","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nHome ZIP/DMA distribution of households that visited this segment.\n\nJoins TRACKED_SEGMENT_HOUSEHOLD_DAILY → H3_GEO_LOOKUP → REF_GEOGRAPHY.\nReturns one row per ZIP, sorted by visitor count descending.","operationId":"segment_visitor_geography_v1_segments__segment_md5__visitor_geography_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","title":"Segment Md5"}},{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VisitorGeoRow"},"title":"Response Segment Visitor Geography V1 Segments  Segment Md5  Visitor Geography Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/zips/{zip_code}":{"get":{"tags":["Reference data"],"summary":"ZIP code reference data","description":"Reference data for a single ZIP code — city, state, DMA, population.","operationId":"zip_lookup_v1_zips__zip_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"zip_code","in":"path","required":true,"schema":{"type":"string","title":"Zip Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipInfo"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"ZIP code not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/census-blocks/{census_block_id}":{"get":{"tags":["Reference data"],"summary":"Census block reference data","description":"Reference data for a 15-digit FIPS census block — ZIP, DMA, FIPS components.","operationId":"census_block_lookup_v1_census_blocks__census_block_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"census_block_id","in":"path","required":true,"schema":{"type":"string","title":"Census Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusBlockInfo"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"Census block not found."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/locations/{segment_md5}":{"get":{"tags":["Reference data"],"summary":"Library metadata for one segment_md5","description":"Authoritative metadata for a segment MD5 — brand, category, DMA, 30-day visits.\n\nSource: BASE_TABLES.REF_LIBRARY_MD5_METADATA (static reference, ~737K locations).","operationId":"location_metadata_v1_locations__segment_md5__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","title":"Segment Md5"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationMetadata"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"segment_md5 not in the location library."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/locations/{segment_md5}/visitor-geography":{"get":{"tags":["Internal tokens only"],"summary":"Library visitor home geography for one segment_md5","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nPre-aggregated visitor home geography for a segment MD5.\n\nReturns census-block and ZIP level visitor counts with population-indexed\naffinity scores (index 100 = average, 200 = 2x over-represented).\n\nSource: BASE_TABLES.REF_LIBRARY_VISITOR_GEOGRAPHY (~87M rows, pre-built).\nSorted by CBLOCK_VISITOR_INDEX descending — highest-affinity areas first.","operationId":"location_visitor_geography_v1_locations__segment_md5__visitor_geography_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","title":"Segment Md5"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationGeoRow"},"title":"Response Location Visitor Geography V1 Locations  Segment Md5  Visitor Geography Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers":{"get":{"tags":["Advertisers"],"summary":"List your agency's advertisers","description":"All advertisers configured for your token's agency, with names.\n\nThe returned `advertiser_id` is a Quorum advertiser id: pass it to the\n/v1/performance/*, /v1/segments/* and /v1/advertisers/{advertiser_id}/*\nroll-up routes. (/locations, /locations/{segment_md5}/visits and /report\nalso accept your own DSP advertiser id.)","operationId":"list_advertisers_v1_advertisers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdvertiserItem"},"type":"array","title":"Response List Advertisers V1 Advertisers Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."}},"security":[{"HTTPBearer":[]}]}},"/v1/performance/publishers":{"get":{"tags":["Performance tables"],"summary":"Daily performance by publisher","description":"Campaign performance by publisher/supply source. Returns impressions, reach, household reach,\nvisitors, visit rate, multiplier, and web metrics per publisher per day.","operationId":"perf_by_publisher_v1_performance_publishers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 30 days ago)","title":"Date From"},"description":"Start date (default: 30 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single insertion order","title":"Io Id"},"description":"Filter to a single insertion order"},{"name":"li_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single line item","title":"Li Id"},"description":"Filter to a single line item"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerfByPublisher"},"title":"Response Perf By Publisher V1 Performance Publishers Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/performance/geo":{"get":{"tags":["Performance tables"],"summary":"Daily performance by DMA and ZIP","description":"Campaign performance by geography (DMA + ZIP). Returns impressions, reach, household reach,\nvisitors, visit rate, and multiplier per geo per day.","operationId":"perf_by_geo_v1_performance_geo_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 30 days ago)","title":"Date From"},"description":"Start date (default: 30 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single insertion order","title":"Io Id"},"description":"Filter to a single insertion order"},{"name":"li_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single line item","title":"Li Id"},"description":"Filter to a single line item"},{"name":"dma","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a DMA code or name","title":"Dma"},"description":"Filter to a DMA code or name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerfByGeo"},"title":"Response Perf By Geo V1 Performance Geo Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/performance/traffic":{"get":{"tags":["Performance tables"],"summary":"Daily performance by web traffic source","description":"Web pixel performance by traffic source URL. Returns impressions, reach, visitors,\nweb visitors, and page views per URL per day.","operationId":"perf_by_traffic_v1_performance_traffic_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 30 days ago)","title":"Date From"},"description":"Start date (default: 30 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single insertion order","title":"Io Id"},"description":"Filter to a single insertion order"},{"name":"li_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single line item","title":"Li Id"},"description":"Filter to a single line item"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerfByTraffic"},"title":"Response Perf By Traffic V1 Performance Traffic Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/performance/creative":{"get":{"tags":["Performance tables"],"summary":"Daily performance by creative","description":"Campaign performance by creative unit. Returns impressions, reach, visitors, and web metrics\nper creative per day.","operationId":"perf_by_creative_v1_performance_creative_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 30 days ago)","title":"Date From"},"description":"Start date (default: 30 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single insertion order","title":"Io Id"},"description":"Filter to a single insertion order"},{"name":"li_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single line item","title":"Li Id"},"description":"Filter to a single line item"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerfByCreative"},"title":"Response Perf By Creative V1 Performance Creative Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/performance/households":{"get":{"tags":["Internal tokens only"],"summary":"Household-level attribution rows","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nHousehold-level attribution. Each row is a household that received an impression and\nsubsequently visited a tracked location. Primary input for reach/frequency analysis.","operationId":"perf_by_household_v1_performance_households_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser ID","title":"Advertiser Id"},"description":"Quorum advertiser ID"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 30 days ago)","title":"Date From"},"description":"Start date (default: 30 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single insertion order","title":"Io Id"},"description":"Filter to a single insertion order"},{"name":"li_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single line item","title":"Li Id"},"description":"Filter to a single line item"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"default":10000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerfByHousehold"},"title":"Response Perf By Household V1 Performance Households Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/config":{"get":{"tags":["Advertisers"],"summary":"Advertiser capability flags","description":"Advertiser capability flags.\n\nReturns `has_store`, `has_web`, `attribution_window`, and `report_type_ids` derived\nfrom ADVERTISER_CONFIG. Use this before any visit-based endpoint to know which\nattribution types are active for this advertiser.\n\nReport type IDs: 1=Location Visits, 2=Web Visits, 4=OOH→Store, 5=OOH→Web, 6=Web→Store","operationId":"advertiser_config_v1_advertisers__advertiser_id__config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvertiserConfig"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/tab-availability":{"get":{"tags":["Advertisers"],"summary":"Which report tabs have data","description":"Which report tabs have data for this advertiser in this date range.\n\nRuns lightweight COUNT(*) probes against each PERF_BY_* table and combines\nwith config flags (has_store, has_web). Use as a gating call before rendering\na report UI to avoid empty tab states.","operationId":"tab_availability_v1_advertisers__advertiser_id__tab_availability_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabAvailability"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/summary":{"get":{"tags":["Advertisers"],"summary":"Headline metrics","description":"Headline metrics for an advertiser over a date range.\n\nImpressions and reach from PERF_BY_PUBLISHER. Store and web visits from\nHH_STORE_VISIT_ATTRIBUTION / HH_WEB_VISIT_ATTRIBUTION (last-touch, 28-day window).\nAll visit counts are multiplier-scaled to estimated total reach.","operationId":"advertiser_summary_v1_advertisers__advertiser_id__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvertiserSummary"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/timeseries":{"get":{"tags":["Advertisers"],"summary":"Daily impressions and visits","description":"Daily impressions and visit counts over a date range.\n\nImpressions aggregated from PERF_BY_PUBLISHER. Store visits from\nHH_STORE_VISIT_ATTRIBUTION, web visits from HH_WEB_VISIT_ATTRIBUTION.\nAll visits multiplier-scaled to estimated total reach.","operationId":"advertiser_timeseries_v1_advertisers__advertiser_id__timeseries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TimeseriesDay"},"title":"Response Advertiser Timeseries V1 Advertisers  Advertiser Id  Timeseries Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/campaigns":{"get":{"tags":["Advertisers"],"summary":"Performance by campaign (IO)","description":"Performance grouped by insertion order (campaign).\n\nAggregates PERF_BY_PUBLISHER to IO level. Store and web visits joined from\nHH attribution tables. Coverage multiplier applied to scale panel reach to\nestimated total visits.","operationId":"advertiser_campaigns_v1_advertisers__advertiser_id__campaigns_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CampaignPerf"},"title":"Response Advertiser Campaigns V1 Advertisers  Advertiser Id  Campaigns Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/lineitems":{"get":{"tags":["Advertisers"],"summary":"Performance by line item","description":"Performance grouped by line item.\n\nAggregates PERF_BY_PUBLISHER to LI level. Store and web visits joined from\nHH attribution tables. Coverage multiplier applied per line item where\nstatistically significant, falling back to advertiser grain.","operationId":"advertiser_lineitems_v1_advertisers__advertiser_id__lineitems_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}},{"name":"io_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single campaign IO","title":"Io Id"},"description":"Filter to a single campaign IO"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LineItemPerf"},"title":"Response Advertiser Lineitems V1 Advertisers  Advertiser Id  Lineitems Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/lift":{"get":{"tags":["Advertisers"],"summary":"Exposed vs. control lift","description":"Exposed vs. control visit rate lift analysis.\n\nIdentifies households exposed to this advertiser's ads (via HOUSEHOLD_ID_CORE),\nthen computes what fraction of those households made a store or web visit within\nthe attribution window. Compares against the non-exposed store-visit population\nto produce lift percentage.\n\nRequires has_store or has_web config. Returns zeros if not configured.","operationId":"advertiser_lift_v1_advertisers__advertiser_id__lift_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiftAnalysis"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/store-visits/brands":{"get":{"tags":["Advertisers"],"summary":"Store visits by brand","description":"Store visit breakdown by brand and location category.\n\nReads HH_STORE_VISIT_ATTRIBUTION directly (last-touch). Each row is a unique\nbrand + category combination with visit count, unique households, and average\ndays from ad exposure to store visit.\n\nReturns empty brands list if advertiser is not configured for store attribution.","operationId":"store_visit_brands_v1_advertisers__advertiser_id__store_visits_brands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreBrandSummary"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner tokens: the advertiser is not in your agency (checked against both Quorum advertiser registries), or the token is restricted to other advertisers."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/segments":{"get":{"tags":["Segments"],"summary":"POI segments for an advertiser, with household visit counts","description":"All POI segments for an advertiser, with household visit stats.\n\nReturns one row per SEGMENT_MD5 configured for the advertiser in\nREF_CONFIG_MD5, with metadata from the POI library (V_LIBRARY_POI) and visit\ncounts from TRACKED_SEGMENT_HOUSEHOLD_DAILY. A configured segment missing\nfrom the library is still returned, with NULL name/brand/category.\nSegments with zero visits in the date window are included (household_count=0).\n\nUse /segments/{segment_md5}/households to pull the full household list for\nany segment (e.g. for audience extraction or TTD upload).","operationId":"advertiser_segments_v1_advertisers__advertiser_id__segments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Visit window start (default: 90 days ago)","title":"Date From"},"description":"Visit window start (default: 90 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Visit window end (default: today)","title":"Date To"},"description":"Visit window end (default: today)"},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by brand name (case-insensitive)","title":"Brand"},"description":"Filter by brand name (case-insensitive)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category (case-insensitive)","title":"Category"},"description":"Filter by category (case-insensitive)"},{"name":"min_households","in":"query","required":false,"schema":{"type":"integer","description":"Only return segments with at least this many unique households","default":0,"title":"Min Households"},"description":"Only return segments with at least this many unique households"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SegmentPOI"},"title":"Response Advertiser Segments V1 Advertisers  Advertiser Id  Segments Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/segments/{segment_md5}/households":{"get":{"tags":["Internal tokens only"],"summary":"Households that visited a segment","description":"Internal Quorum tokens only: a partner token gets 403 with a pointer to the\nQuorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates.\n\nAll unique households that visited a specific POI segment.\n\nAggregates TRACKED_SEGMENT_HOUSEHOLD_DAILY by HOUSEHOLD_ID for the\nrequested date range. Each row is a deduplicated household with visit\nfrequency, total device count, resolution method breakdown, and\nfirst/last visit dates.\n\nPrimary use: audience extraction for TTD or LiveRamp uploads.\nPass the returned household_id list to your audience delivery workflow.\n\nNote: large segments (national QSR brands etc.) can return 500k+ rows —\nuse date_from/date_to to scope the audience recency window.","operationId":"segment_households_v1_advertisers__advertiser_id__segments__segment_md5__households_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments.","title":"Segment Md5"},"description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments."},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Start date (default: 90 days ago)","title":"Date From"},"description":"Start date (default: 90 days ago)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"End date (default: today)","title":"Date To"},"description":"End date (default: today)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":1,"default":100000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SegmentHousehold"},"title":"Response Segment Households V1 Advertisers  Advertiser Id  Segments  Segment Md5  Households Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"Partner (non-Quorum) tokens are refused on this route because it returns device- or household-level rows. Use the Quorum MCP (https://mcp.quorum.live/mcp) for k-anonymous aggregates. Internal Quorum tokens are unaffected."},"404":{"description":"Segment not configured for this advertiser."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/reports":{"get":{"tags":["Published reports"],"summary":"List the published report versions for an advertiser","description":"Every published report version for this advertiser, newest first.\n\nEach entry is one published edition of a report page. `mature` is false\nwhile visits can still attribute (up to the attribution window after the\nlast impression); those figures only rise as it closes. Fetch the numbers\nwith GET /v1/advertisers/{advertiser_id}/report.","operationId":"advertiser_reports_v1_advertisers__advertiser_id__reports_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Your own DSP advertiser id, or a Quorum advertiser id your agency owns","title":"Advertiser Id"},"description":"Your own DSP advertiser id, or a Quorum advertiser id your agency owns"},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Report period, YYYYMM","title":"Period"},"description":"Report period, YYYYMM"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"202":{"description":"Advertiser recognised but its crosswalk is not complete yet (PENDING). Back off and retry."},"404":{"description":"Advertiser id not recognized for this agency (neither your DSP id nor a Quorum id your agency owns)."},"410":{"description":"Advertiser disconnected by your agency. Do not retry. POST /v1/intake/advertisers/{id}/reconnect restores it; nothing was deleted."},"422":{"description":"Advertiser is IGNORED/DEACTIVATED (permanent, do not retry), or a parameter is invalid."}}}},"/v1/advertisers/{advertiser_id}/report":{"get":{"tags":["Published reports"],"summary":"The numbers on a published report (quorum.retail_report.v1)","description":"The numbers on your published Quorum report, as data.\n\nReturns the same figures the report page shows — headline, daily, weekly,\ncampaigns, publishers, creatives, stores, zips, time-to-visit — from the\nsame build, so they reconcile exactly. Definitions are in the payload's\n`definitions` block; the key ones:\n\n  - visit: one household visiting any location on one calendar day,\n    deduplicated, attributed within `attribution_days` of an ad exposure\n  - visit_rate: visits / impressions, at every grain\n  - *_det: measured (deterministic) households; *_est: *_det x\n    `coverage_multiplier`, grossed to the full served audience\n  - row-level tables (weekly, campaigns, publishers, creatives, stores,\n    zips) carry the measured `visits_det`; the page displays those cells\n    grossed, so page value = round(visits_det x coverage_multiplier).\n    Each row's `visit_rate` is the page's own (grossed) rate.\n\nCells below the k>=3 reporting floor are null with `suppressed: true`\n(or a `withheld_reason`) — the page withholds them too. Dates are the\nreport's local dates. Latest version by default; pin `version` to\nreproduce an earlier edition exactly.","operationId":"advertiser_report_v1_advertisers__advertiser_id__report_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Your own DSP advertiser id, or a Quorum advertiser id your agency owns","title":"Advertiser Id"},"description":"Your own DSP advertiser id, or a Quorum advertiser id your agency owns"},{"name":"report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pick one report when the advertiser has several (see /reports)","title":"Report Id"},"description":"Pick one report when the advertiser has several (see /reports)"},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Report period, YYYYMM","title":"Period"},"description":"Report period, YYYYMM"},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"A specific published version (default: latest)","title":"Version"},"description":"A specific published version (default: latest)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Report payload not in a servable format, or ownership could not be verified. Retry later."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"202":{"description":"Advertiser recognised but its crosswalk is not complete yet (PENDING). Back off and retry."},"404":{"description":"Advertiser id not recognized for this agency, or no published report for it (with these filters)."},"410":{"description":"Advertiser disconnected by your agency. Do not retry. POST /v1/intake/advertisers/{id}/reconnect restores it; nothing was deleted."},"422":{"description":"Advertiser is IGNORED/DEACTIVATED (permanent, do not retry), or a parameter is invalid."}}}},"/v1/advertisers/{advertiser_id}/locations":{"get":{"tags":["Locations and visits"],"summary":"Tracked locations for your advertiser","description":"All tracked locations (POIs and Attractions) for an advertiser.\n\nadvertiser_id is YOUR OWN advertiser id — the DSP/MNTN advertiser id you\nalready use on your side. The endpoint resolves it to the corresponding\nQuorum advertiser via crosswalk, scoped to the agency of your bearer token,\nthen runs the query on the resolved Quorum advertiser. A partner with no\ncrosswalk may instead pass a Quorum advertiser id its agency owns (QOL-574);\nthe DSP reading wins when an id is both. (Internal Quorum callers may pass\nany Quorum advertiser id; resolution is a no-op passthrough for them.)\n\nIf your advertiser id maps to more than one Quorum reporting account\n(for example one account per market or campaign), the response covers\nall of them, deterministically: /locations returns the union of their\nlocations, and /visits serves any location configured on any of them.\n\nPolling / status semantics:\n  - 200 — the advertiser is crosswalked (MAPPED); data is returned. An empty\n    array is a legitimate 200 (mapped, but no locations configured yet) — it\n    is NOT a retry trigger.\n  - 202 — the advertiser is recognized but its crosswalk is not complete yet\n    (PENDING). Back off and retry; it will flip to 200 once crosswalked.\n  - 4xx — permanent, do not retry: 404 if the advertiser id is not recognized\n    for this agency, 422 if it is IGNORED/DEACTIVATED, 410 if the agency\n    has disconnected it (QOL-544; POST /v1/intake/advertisers/{id}/reconnect\n    restores it, nothing is deleted).\n\nSource of truth is REF_CONFIG_MD5 — every SEGMENT_MD5 configured for this\nadvertiser, regardless of whether visits have been observed. Metadata joined\nfrom REF_LIBRARY_MD5_METADATA (brand, category, dma, region, 30d visits) and\nREF_LOCATION_DEDUPLICATED (lat/lon, address, city, state). 60-day household\nand MAID counts come from TRACKED_SEGMENT_HOUSEHOLD_DAILY.\n\nUse location_type=POI to scope to physical retail/venue locations.\nUse location_type=ATTRACTION for geo-fence/zone type segments.\nOmit location_type to return all configured segments.\n\nSegments with zero visits in the 60-day window are included (household_count_60d=0)\nunless min_households > 0 is specified.\n\nclient_location_name / location_id (QOL-149): when a segment is bound to a\nstore your agency submitted via POST /v1/intake/locations, these echo your\nown label for it and the location_id the intake response gave you. A label\ncan be bound to several segment_md5s (a store Quorum tracks as more than one\npolygon); each such segment carries the same label. Null otherwise.","operationId":"advertiser_locations_v1_advertisers__advertiser_id__locations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Your own DSP advertiser id (e.g. MNTN's ${aid}), resolved inside your agency via the crosswalk; or a Quorum advertiser id your agency owns (QOL-574). The DSP reading wins when an id is both.","title":"Advertiser Id"},"description":"Your own DSP advertiser id (e.g. MNTN's ${aid}), resolved inside your agency via the crosswalk; or a Quorum advertiser id your agency owns (QOL-574). The DSP reading wins when an id is both."},{"name":"location_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by location type: POI, ATTRACTION, or omit for both","title":"Location Type"},"description":"Filter by location type: POI, ATTRACTION, or omit for both"},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive brand filter","title":"Brand"},"description":"Case-insensitive brand filter"},{"name":"min_households","in":"query","required":false,"schema":{"type":"integer","description":"Minimum 60-day unique household count","default":0,"title":"Min Households"},"description":"Minimum 60-day unique household count"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationSegment"},"title":"Response Advertiser Locations V1 Advertisers  Advertiser Id  Locations Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"202":{"description":"Advertiser recognised but its crosswalk is not complete yet (PENDING). Back off and retry."},"404":{"description":"Advertiser id not recognised for your agency: neither a DSP id you have sent nor a Quorum id your agency owns. POST it to /v1/intake/advertisers first."},"410":{"description":"Advertiser disconnected by your agency. Do not retry. POST /v1/intake/advertisers/{id}/reconnect restores it; nothing was deleted."},"422":{"description":"Advertiser is IGNORED/DEACTIVATED (permanent, do not retry), or a parameter is invalid."}}}},"/v1/advertisers/{advertiser_id}/locations/{segment_md5}/visits":{"get":{"tags":["Locations and visits"],"summary":"Raw visit records for one location","description":"Raw visit records for a single location segment.\n\nadvertiser_id is YOUR OWN advertiser id — the DSP/MNTN advertiser id you\nalready use on your side. The endpoint resolves it to the corresponding\nQuorum advertiser via crosswalk, scoped to the agency of your bearer token,\nthen runs the query on the resolved Quorum advertiser. A partner with no\ncrosswalk may instead pass a Quorum advertiser id its agency owns (QOL-574);\nthe DSP reading wins when an id is both. (Internal Quorum callers may pass\nany Quorum advertiser id; resolution is a no-op passthrough for them.)\n\nIf your advertiser id maps to more than one Quorum reporting account\n(for example one account per market or campaign), the response covers\nall of them, deterministically: /locations returns the union of their\nlocations, and /visits serves any location configured on any of them.\n\nPolling / status semantics:\n  - 200 — the advertiser is crosswalked (MAPPED); visit records are returned.\n    An empty array is a legitimate 200, not a retry trigger.\n  - 202 — the advertiser is recognized but its crosswalk is not complete yet\n    (PENDING). Back off and retry; it will flip to 200 once crosswalked. The\n    202 is raised before the segment lookup, so it takes precedence over the\n    per-segment 404 below.\n  - 4xx — permanent, do not retry: 404 if the advertiser id is not recognized\n    for this agency, 422 if it is IGNORED/DEACTIVATED, 410 if the agency\n    has disconnected it (QOL-544; POST /v1/intake/advertisers/{id}/reconnect\n    restores it, nothing is deleted).\n\nEvery device observation at this SEGMENT_MD5 within the date range, joined\nto Quorum's identity graph for household resolution and IPv4 enrichment.\n\nFields per row:\n  - maid: mobile advertising ID observed at the geofence\n  - household_id: resolved household identifier. For external callers this\n    is an HMAC-hashed opaque string (32 hex chars) — stable across calls\n    for deduplication and matching, but not reversible to a geographic\n    coordinate. Internal Quorum callers receive the raw numeric ID.\n  - visit_date / visit_timestamp: when the device was observed, in UTC\n    (visit_timestamp carries no offset; read it as UTC). visit_date is the\n    UTC calendar day of visit_timestamp.\n  - capture_ip: IP seen at capture time (device-level, not household)\n  - hh_primary_ip: best-quality household IPv4 from the identity graph,\n    selected by highest observation_count among IPs seen within the last\n    30 days. Null if no qualifying IP found.\n  - ip_last_seen: date hh_primary_ip was most recently observed\n  - ip_observation_count: how many times this IP was seen for this device\n    (confidence proxy — higher = more reliable)\n  - capture_census_block: census block of the capture location\n  - hh_census_block: home census block from the identity graph\n    (lowest geographic granularity provided for external callers)\n\nDate window (QOL-142): date_from / date_to are UTC calendar days matched\nagainst visit_date. Default end_exclusive=false keeps the original\ninclusive window [date_from, date_to]. end_exclusive=true gives the\nhalf-open window [date_from, date_to): for a sliding-window puller, set\neach pull's date_from to the previous pull's date_to and no day is\nreturned twice.\n\nPagination: limit + offset. Sorted visit_date desc, maid asc.\nReturns 404 if segment_md5 is not in this advertiser's config.","operationId":"location_visits_v1_advertisers__advertiser_id__locations__segment_md5__visits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Your own DSP advertiser id (e.g. MNTN's ${aid}), resolved inside your agency via the crosswalk; or a Quorum advertiser id your agency owns (QOL-574). The DSP reading wins when an id is both.","title":"Advertiser Id"},"description":"Your own DSP advertiser id (e.g. MNTN's ${aid}), resolved inside your agency via the crosswalk; or a Quorum advertiser id your agency owns (QOL-574). The DSP reading wins when an id is both."},{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","description":"SEGMENT_MD5 of the location whose visits to return","title":"Segment Md5"},"description":"SEGMENT_MD5 of the location whose visits to return"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date","description":"First UTC day of the visit window, always inclusive (YYYY-MM-DD). Default: 60 days before date_to.","title":"Date From"},"description":"First UTC day of the visit window, always inclusive (YYYY-MM-DD). Default: 60 days before date_to."},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Last UTC day of the visit window (YYYY-MM-DD). INCLUSIVE by default; EXCLUSIVE when end_exclusive=true. Default: today's UTC date.","title":"Date To"},"description":"Last UTC day of the visit window (YYYY-MM-DD). INCLUSIVE by default; EXCLUSIVE when end_exclusive=true. Default: today's UTC date."},{"name":"end_exclusive","in":"query","required":false,"schema":{"type":"boolean","description":"Opt-in half-open window. false (default, unchanged behaviour): [date_from, date_to] -- both days included. true: [date_from, date_to) -- date_to itself is excluded, so successive pulls where the next date_from equals the previous date_to never overlap and never double-count the boundary day.","default":false,"title":"End Exclusive"},"description":"Opt-in half-open window. false (default, unchanged behaviour): [date_from, date_to] -- both days included. true: [date_from, date_to) -- date_to itself is excluded, so successive pulls where the next date_from equals the previous date_to never overlap and never double-count the boundary day."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":1,"default":100000,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Row offset for pagination","default":0,"title":"Offset"},"description":"Row offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VisitRecord"},"title":"Response Location Visits V1 Advertisers  Advertiser Id  Locations  Segment Md5  Visits Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"202":{"description":"Advertiser recognised but its crosswalk is not complete yet (PENDING). Back off and retry."},"404":{"description":"Advertiser id not recognized for this agency, or segment_md5 is not configured for it."},"410":{"description":"Advertiser disconnected by your agency. Do not retry. POST /v1/intake/advertisers/{id}/reconnect restores it; nothing was deleted."},"422":{"description":"Advertiser is IGNORED/DEACTIVATED (permanent, do not retry), or a parameter is invalid."}}}},"/v1/advertisers/{advertiser_id}/locations/{segment_md5}/visitor-geography":{"get":{"tags":["Locations and visits"],"summary":"Visitor home geography for one location","description":"Pre-calculated visitor home geography for a location segment.\n\nadvertiser_id here is the QUORUM advertiser id (GET /v1/advertisers), not\nyour DSP id, and the segment must be configured for it in your agency.\n\nReads REF_LIBRARY_VISITOR_GEOGRAPHY — a pre-indexed table built by the\nQuorum pipeline over a 90-day rolling window. Each row is a home census\nblock of visitors observed at this segment, with:\n\n  - device_count: devices whose home census block matches, observed at\n    this location during the window\n  - cblock_visitor_index: ratio of observed visit rate to baseline\n    population rate for this census block. Index > 1.0 means this\n    census block over-indexes as a visitor origin vs the general population.\n  - zip_visitor_index: same index aggregated to ZIP code level\n  - cblock_population / cblock_households: 2023 census denominators\n\nResults sorted by cblock_visitor_index desc — highest over-indexing home\ngeographies first. Use this for trade area analysis, geo targeting, or\naudience modeling without needing to process raw visit logs.\n\nwindow_start / window_end indicate the pipeline's actual computation window.\n\nReturns 404 if segment_md5 is not configured for this advertiser.","operationId":"location_visitor_geography_v1_advertisers__advertiser_id__locations__segment_md5__visitor_geography_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments.","title":"Segment Md5"},"description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisitorGeography"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"404":{"description":"segment_md5 is not configured for this Quorum advertiser in your agency."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/advertisers/{advertiser_id}/locations/{segment_md5}/nearby-competitors":{"get":{"tags":["Locations and visits"],"summary":"Nearby locations in a category, by distance","description":"Nearby competitor locations matching a category, ranked by distance.\n\nadvertiser_id here is the QUORUM advertiser id (GET /v1/advertisers), not\nyour DSP id, and the anchor segment must be configured for it in your agency.\n\nFinds all locations in REF_LOCATION_DEDUPLICATED whose category matches\ncategory_pattern within radius_miles of the anchor segment's coordinates,\nexcluding the advertiser's own configured locations.\n\ncategory_pattern supports wildcards (* or %):\n  - 'restaurant'   → any category containing 'restaurant'\n  - 'restaur*'     → categories starting with 'restaur'\n  - '*QSR*'        → explicit contains-match\n\nDefault radius by category if radius_miles is omitted:\n  restaurants / dining / cafe  →  3–5 mi\n  grocery / pharmacy           →  3 mi\n  gym / fitness / retail       →  5 mi\n  home improvement / hardware  → 10 mi\n  hotel / lodging              → 15 mi\n  auto / dealer / vehicle      → 25 mi\n  (all others)                 →  5 mi\n\nReturns 404 if the anchor segment is not in this advertiser's config or\nhas no coordinates in the location reference table.","operationId":"nearby_competitors_v1_advertisers__advertiser_id__locations__segment_md5__nearby_competitors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"path","required":true,"schema":{"type":"integer","description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id).","title":"Advertiser Id"},"description":"Quorum advertiser id, as listed by GET /v1/advertisers (not your DSP advertiser id)."},{"name":"segment_md5","in":"path","required":true,"schema":{"type":"string","description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments.","title":"Segment Md5"},"description":"Location id from GET /v1/advertisers/{advertiser_id}/locations or /segments."},{"name":"category_pattern","in":"query","required":true,"schema":{"type":"string","description":"Category to search. Supports * or % wildcards. Examples: 'restaurant', 'restaur*', '*auto dealer*'. A bare word matches any category containing that string.","title":"Category Pattern"},"description":"Category to search. Supports * or % wildcards. Examples: 'restaurant', 'restaur*', '*auto dealer*'. A bare word matches any category containing that string."},{"name":"radius_miles","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.1},{"type":"null"}],"description":"Search radius in miles. If omitted, a sensible default is chosen based on category (e.g. 5 mi for restaurants, 25 mi for auto dealers).","title":"Radius Miles"},"description":"Search radius in miles. If omitted, a sensible default is chosen based on category (e.g. 5 mi for restaurants, 25 mi for auto dealers)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NearbyCompetitor"},"title":"Response Nearby Competitors V1 Advertisers  Advertiser Id  Locations  Segment Md5  Nearby Competitors Get"}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"403":{"description":"The token is restricted to a list of advertisers and this advertiser_id is not on it."},"404":{"description":"Anchor segment_md5 is not configured for this Quorum advertiser in your agency, or has no coordinates."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports":{"get":{"tags":["Audience intelligence reports"],"summary":"List published brand audience-intelligence reports","description":"List all published audience intelligence reports.","operationId":"list_reports_json_v1_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/{slug}":{"get":{"tags":["Audience intelligence reports"],"summary":"One brand audience-intelligence report as JSON","description":"Full structured report payload as JSON.","operationId":"get_report_json_v1_reports__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"No published report with this slug."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/library/search":{"get":{"tags":["Location library"],"summary":"Search the location library","description":"Search the location reference library (737K tracked US locations).\nReturns aggregate foot traffic data — no client-specific information.","operationId":"location_search_v1_library_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category filter (e.g. 'restaurant', 'grocery')","title":"Category"},"description":"Category filter (e.g. 'restaurant', 'grocery')"},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand filter (e.g. 'McDonalds')","title":"Brand"},"description":"Brand filter (e.g. 'McDonalds')"},{"name":"dma","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"DMA filter (e.g. 'burlington', 'los angeles')","title":"Dma"},"description":"DMA filter (e.g. 'burlington', 'los angeles')"},{"name":"zip_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ZIP code filter","title":"Zip Code"},"description":"ZIP code filter"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: visits_30d or name","default":"visits_30d","title":"Sort By"},"description":"Sort field: visits_30d or name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"422":{"description":"No filter given (category, brand, dma or zip_code is required), or a bad parameter."}}}},"/v1/library/categories":{"get":{"tags":["Location library"],"summary":"Top library categories (public, no token)","description":"Top location categories by count and aggregate 30-day visits. Public: aggregate, no PII.","operationId":"location_categories_v1_library_categories_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/library/stats":{"get":{"tags":["Location library"],"summary":"Library-wide totals","description":"Aggregate stats for the entire location library.","operationId":"location_stats_v1_library_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."}},"security":[{"HTTPBearer":[]}]}},"/v1/library/cross-shop":{"get":{"tags":["Location library"],"summary":"Where a brand's visitors also shop (sampled)","description":"Cross-shopping analysis using sampled COMP_VISITORS_TEMP.\nDevice-overlap counts under 3 are never returned (QOL-581).","operationId":"cross_shop_v1_library_cross_shop_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand","in":"query","required":true,"schema":{"type":"string","title":"Brand"}},{"name":"dma","in":"query","required":false,"schema":{"type":"string","title":"Dma"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}},{"name":"sample_size","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Sample Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"Brand or DMA not found."},"429":{"description":"More than 10 requests a minute from your IP."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/library/audience-intel":{"post":{"tags":["Location library"],"summary":"Audience intelligence bundle for a brand (public, no token)","description":"Full audience intelligence bundle using pre-aggregated tables. Public: aggregate, no PII.","operationId":"audience_intel_v1_library_audience_intel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"brand is required."},"404":{"description":"Brand not found."},"429":{"description":"More than 3 requests a minute from your IP."}}}},"/v1/library/brands":{"get":{"tags":["Location library"],"summary":"Search library brands","description":"Search available brands for autocomplete / brand picker.","operationId":"list_brands_v1_library_brands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/library/audience-report":{"post":{"tags":["Location library"],"summary":"Written audience report for a brand","operationId":"audience_report_v1_library_audience_report_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"422":{"description":"brand is required."}},"security":[{"HTTPBearer":[]}]}},"/v1/library/cross-shop-dma":{"get":{"tags":["Location library"],"summary":"Cross-shopping for one brand in one DMA","description":"On-demand cross-shopping for a specific brand + DMA.\n\nFirst checks pre-computed AGG_BRAND_CROSSSHOP_BY_DMA (instant).\nFalls back to live query against COMP_VISITORS_TEMP (3-8s).\nCaches result for 6 hours.","operationId":"cross_shop_dma_v1_library_cross_shop_dma_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand","in":"query","required":true,"schema":{"type":"string","description":"Brand name","title":"Brand"},"description":"Brand name"},{"name":"dma","in":"query","required":true,"schema":{"type":"string","description":"DMA name","title":"Dma"},"description":"DMA name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"404":{"description":"Brand or DMA not found."},"429":{"description":"More than 10 requests a minute from your IP."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/library/activate":{"post":{"tags":["Location library"],"summary":"Ask Quorum to activate a library audience","description":"Compile audience activation request and email to sales team via Resend.","operationId":"activate_audience_v1_library_activate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing Authorization header, unknown token, or expired token (`API token expired`)."},"503":{"description":"Quorum cannot verify tokens or advertiser ownership right now. Server-side and temporary; retry shortly."},"422":{"description":"brand and email are required."}},"security":[{"HTTPBearer":[]}]}},"/v1/library/personas":{"post":{"tags":["Location library"],"summary":"Persona mix of a brand's visiting households","operationId":"api_personas_v1_library_personas_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"brand required."},"404":{"description":"Brand not found."}},"security":[{"HTTPBearer":[]}]}},"/v1/intake/advertisers":{"post":{"tags":["Agency intake"],"summary":"Send your advertisers","description":"Add or update your advertisers, keyed on your own `client_advertiser_id`\n(the id your pixel macro fires, e.g. MNTN's ${aid}). Upsert: a known id is\nupdated, a new one is added and opens a PENDING mapping that Quorum\ncompletes; nothing is ever deleted. Poll GET /v1/intake/advertisers for\n`mapping_status` = MAPPED.\n\n`status`: ACTIVE (connected) or RETIRED (disconnected; the read routes\nanswer 410). Omit it to leave the stored status unchanged; a new\nadvertiser starts ACTIVE.\n\nNeeds a write-enabled token, and `qurum_ag_id` (or `agency_id`) must equal\nyour token's agency.","operationId":"post_advertisers_v1_intake_advertisers_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvertisersBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeResponse"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"403":{"description":"Read-only token (POST /v1/intake/* needs a write-enabled token), or the body's qurum_ag_id / agency_id does not match the token's agency."},"400":{"description":"The same client_advertiser_id appears twice in one request."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Agency intake"],"summary":"Read back your advertisers and their Quorum mapping","description":"Return the caller-agency's advertisers with their Quorum-advertiser\nmapping. `quorum_advertiser_id` is null while `mapping_status` is\n'PENDING'; poll until it flips to 'MAPPED'. Scoped to the token's agency.","operationId":"get_advertisers_v1_intake_advertisers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_advertiser_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional filter to a single client_advertiser_id. Omit to list all advertisers for your agency.","title":"Client Advertiser Id"},"description":"Optional filter to a single client_advertiser_id. Omit to list all advertisers for your agency."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdvertiserMappingRow"},"title":"Response Get Advertisers V1 Intake Advertisers Get"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/intake/locations":{"post":{"tags":["Agency intake"],"summary":"Send your store list (add-only)","description":"Add stores for your advertisers. Add-only: send the full list or just\nthe new stores. Stores already on file are kept, new ones are added, and\na store left out of a request is never deleted.\n\nYour `location_name` is stored exactly as sent and is the label Quorum\nhands back everywhere (GET /v1/intake/locations, and\n`client_location_name` on GET /v1/advertisers/{advertiser_id}/locations).\nA row is identified by (client_advertiser_id, location_name, address,\ncity, state, zip_code): re-posting the same row returns the same\n`location_id` with `created: false`.\n\nThe response echoes one entry per record, in request order, with\n`location_id`, `created` and `status`. Status values here are the stored\nones: `submitted` (received), `pending_draw` (queued for Quorum to draw\nthe footprint), `active` (footprint drawn, visits measured). A store\nmoves from submitted to pending_draw once its advertiser is mapped and\nthe store has a street address plus a ZIP or city and state.\nGET /v1/intake/locations reports pending_draw as `pending`.\n\nNeeds a write-enabled token, and `qurum_ag_id` (or `agency_id`) must equal\nyour token's agency.","operationId":"post_locations_v1_intake_locations_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationsBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeResponse"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"403":{"description":"Read-only token (POST /v1/intake/* needs a write-enabled token), or the body's qurum_ag_id / agency_id does not match the token's agency."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Agency intake"],"summary":"List your submitted stores with their status","description":"Read back the stores your agency has posted to POST /v1/intake/locations,\none row per submitted store, keyed by your label (`location_name`), with\nthe same `location_id` the POST returned and a `status`:\n\n* `submitted`: received. Waiting for the advertiser to be mapped on\n  Quorum's side (see GET /v1/intake/advertisers) or for a usable address.\n* `pending`: in Quorum's queue to have the store's footprint drawn.\n  No segment_md5 and no visits yet.\n* `active`: footprint drawn and bound to your label. `segment_md5s`\n  lists the md5(s); visits for them are on\n  GET /v1/advertisers/{advertiser_id}/locations/{segment_md5}/visits.\n  A new footprint back-fills about 85 days of visits on its first\n  nightly run, and the most recent 1-3 days are still filling in.\n\nScoped to the token's agency. Ordered by `location_id`; page with\n`after_location_id`. `status_counts` gives the totals per status for\nthe same filters (ignoring `status` and paging). No geometry is returned.","operationId":"get_locations_v1_intake_locations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_advertiser_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Only this advertiser (your own advertiser id, the client_advertiser_id you posted). Omit for all.","title":"Client Advertiser Id"},"description":"Only this advertiser (your own advertiser id, the client_advertiser_id you posted). Omit for all."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["submitted","pending","active"],"type":"string"},{"type":"null"}],"description":"Only stores in this status: submitted, pending or active.","title":"Status"},"description":"Only stores in this status: submitted, pending or active."},{"name":"location_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":1024},{"type":"null"}],"description":"Only this store label. Exact, case-sensitive match on the label as you submitted it.","title":"Location Name"},"description":"Only this store label. Exact, case-sensitive match on the label as you submitted it."},{"name":"after_location_id","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging cursor. Pass the previous page's next_after_location_id. Omit for the first page.","default":0,"title":"After Location Id"},"description":"Paging cursor. Pass the previous page's next_after_location_id. Omit for the first page."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Page size (1-5000).","default":1000,"title":"Limit"},"description":"Page size (1-5000)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntakeLocationsPage"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"422":{"description":"Bad query parameter (e.g. status not one of submitted, pending, active)."}}}},"/v1/intake/advertisers/{client_advertiser_id}/connection":{"get":{"tags":["Agency intake"],"summary":"Is this advertiser connected?","description":"Is this advertiser connected? 404 if the id is unknown to your agency.","operationId":"get_connection_v1_intake_advertisers__client_advertiser_id__connection_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_advertiser_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Advertiser Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionState"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"404":{"description":"client_advertiser_id is not known for your agency."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/intake/advertisers/{client_advertiser_id}/disconnect":{"post":{"tags":["Agency intake"],"summary":"Disconnect an advertiser (reads return 410; nothing deleted)","description":"Disconnect: from now on GET /v1/advertisers/{id}/locations and\n/locations/{md5}/visits answer 410 for this advertiser. Takes effect on\nthe next request. Nothing is deleted, capture is not paused, and the\nQuorum advertiser, intake locations and segment bindings are kept.\nIdempotent.","operationId":"disconnect_advertiser_v1_intake_advertisers__client_advertiser_id__disconnect_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_advertiser_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Advertiser Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ConnectionChangeRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionState"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"403":{"description":"Read-only token: disconnect / reconnect need a write-enabled token."},"404":{"description":"client_advertiser_id is not known for your agency."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/intake/advertisers/{client_advertiser_id}/reconnect":{"post":{"tags":["Agency intake"],"summary":"Reconnect a disconnected advertiser","description":"Reconnect: the same advertiser is served again, with its full\nhistory, including visits captured while it was disconnected. Idempotent.","operationId":"reconnect_advertiser_v1_intake_advertisers__client_advertiser_id__reconnect_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_advertiser_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Advertiser Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ConnectionChangeRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionState"}}}},"401":{"description":"Missing, invalid or expired bearer token."},"403":{"description":"Read-only token: disconnect / reconnect need a write-enabled token."},"404":{"description":"client_advertiser_id is not known for your agency."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/partner-feed/daily":{"get":{"tags":["Partner daily feed"],"summary":"Daily exposure and visit counts for your agency","description":"One row per day x advertiser (or campaign) x metric set, for your\ntoken's agency only.\n\nEvery row carries both bases: `det_count` (measured households, not\nscaled) and `est_count` (det_count x multiplier). `est_count` is null\nwhen the multiplier is not statistically significant. Rows whose\ndet_count is between 1 and the privacy floor (50 by default) have\ndet_count and est_count set to null and `suppressed: true`; a 0 always\nmeans a verified zero.","operationId":"partner_feed_daily_v1_partner_feed_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"First day, inclusive (YYYY-MM-DD).","title":"Date From"},"description":"First day, inclusive (YYYY-MM-DD)."},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Last day, inclusive (YYYY-MM-DD). At most 31 days after date_from.","title":"Date To"},"description":"Last day, inclusive (YYYY-MM-DD). At most 31 days after date_from."},{"name":"grain","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Grain","description":"advertiser (one row per advertiser per day per metric) or campaign (per insertion order).","default":"advertiser"},"description":"advertiser (one row per advertiser per day per metric) or campaign (per insertion order)."},{"name":"advertiser_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Quorum advertiser id. Omit for every advertiser in your agency.","title":"Advertiser Id"},"description":"Quorum advertiser id. Omit for every advertiser in your agency."},{"name":"metric_set","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated subset of EXPOSURE,VISITS_STORE,VISITS_WEB","title":"Metric Set"},"description":"Comma-separated subset of EXPOSURE,VISITS_STORE,VISITS_WEB"},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(json|csv)$"},{"type":"null"}],"description":"json (default) or csv. Without it, Accept: text/csv also selects CSV.","title":"Format"},"description":"json (default) or csv. Without it, Accept: text/csv also selects CSV."}],"responses":{"200":{"description":"JSON rows, or CSV with format=csv / Accept: text/csv.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PartnerFeedRow"},"title":"Response 200 Partner Feed Daily V1 Partner Feed Daily Get"}},"text/csv":{}}},"400":{"description":"date_to before date_from, window wider than 31 days, or a bad metric_set value."},"401":{"description":"Missing, invalid or expired bearer token."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/partner-feed/reconcile":{"get":{"tags":["Partner daily feed"],"summary":"Feed totals for one advertiser, beside its hosted report","description":"Window totals from the feed (impressions, deterministic and estimated\nhousehold reach) for one advertiser, with the advertiser's live hosted\nreport (if any) and whether the two should match. Scoped to your\ntoken's agency.","operationId":"partner_feed_reconcile_v1_partner_feed_reconcile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser_id","in":"query","required":true,"schema":{"type":"integer","description":"Quorum advertiser id.","title":"Advertiser Id"},"description":"Quorum advertiser id."},{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"First day, inclusive (YYYY-MM-DD).","title":"Date From"},"description":"First day, inclusive (YYYY-MM-DD)."},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Last day, inclusive. At most 31 days after date_from.","title":"Date To"},"description":"Last day, inclusive. At most 31 days after date_from."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconcileResponse"}}}},"400":{"description":"date_to before date_from, or window wider than 31 days."},"401":{"description":"Missing, invalid or expired bearer token."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdvertiserConfig":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"has_store":{"type":"boolean","title":"Has Store"},"has_web":{"type":"boolean","title":"Has Web"},"report_type_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type Ids"},"attribution_window":{"type":"integer","title":"Attribution Window"},"config_status":{"type":"string","title":"Config Status"}},"type":"object","required":["advertiser_id","has_store","has_web","attribution_window","config_status"],"title":"AdvertiserConfig"},"AdvertiserItem":{"properties":{"agency_id":{"type":"integer","title":"Agency Id"},"agency_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"advertiser_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Advertiser Name"}},"type":"object","required":["agency_id","advertiser_id"],"title":"AdvertiserItem"},"AdvertiserMappingRow":{"properties":{"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id"},"client_advertiser_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Advertiser Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"quorum_advertiser_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quorum Advertiser Id"},"mapping_status":{"type":"string","title":"Mapping Status"},"mapped_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mapped At"},"location_count":{"type":"integer","title":"Location Count","default":0},"status_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Updated At"}},"type":"object","required":["client_advertiser_id","mapping_status"],"title":"AdvertiserMappingRow","description":"Read-back of an advertiser + its Quorum-advertiser mapping. The agency\npolls this to pick up QUORUM_ADVERTISER_ID once we've assigned it —\nit is null while MAPPING_STATUS is 'PENDING'."},"AdvertiserRecord":{"properties":{"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id","description":"The advertiser ID the agency fires in their pixel macro (e.g. MNTN's ${aid})."},"client_advertiser_name":{"type":"string","maxLength":512,"minLength":1,"title":"Client Advertiser Name"},"website":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Website","description":"Advertiser website / domain (from the connect page)."},"status":{"anyOf":[{"type":"string","pattern":"^(ACTIVE|RETIRED)$"},{"type":"null"}],"title":"Status","description":"ACTIVE = connected, RETIRED = disconnected (reads return 410). Omit to leave the current status unchanged; a new advertiser defaults to ACTIVE. Same effect as POST /v1/intake/advertisers/{id}/disconnect | /reconnect."}},"type":"object","required":["client_advertiser_id","client_advertiser_name"],"title":"AdvertiserRecord"},"AdvertiserSummary":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"impressions":{"type":"integer","title":"Impressions"},"device_reach":{"type":"integer","title":"Device Reach"},"household_reach":{"type":"integer","title":"Household Reach"},"store_panel_reach":{"type":"integer","title":"Store Panel Reach"},"store_visits":{"type":"integer","title":"Store Visits"},"store_visit_rate":{"type":"number","title":"Store Visit Rate"},"web_panel_reach":{"type":"integer","title":"Web Panel Reach"},"web_visits":{"type":"integer","title":"Web Visits"},"web_visit_rate":{"type":"number","title":"Web Visit Rate"},"multiplier":{"type":"number","title":"Multiplier"},"multiplier_grain":{"type":"string","title":"Multiplier Grain"},"multiplier_significant":{"type":"boolean","title":"Multiplier Significant"},"hh_resolution_rate":{"type":"number","title":"Hh Resolution Rate"},"platform_count":{"type":"integer","title":"Platform Count"},"campaign_count":{"type":"integer","title":"Campaign Count"},"lineitem_count":{"type":"integer","title":"Lineitem Count"},"has_store":{"type":"boolean","title":"Has Store"},"has_web":{"type":"boolean","title":"Has Web"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"data_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Start"},"data_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data End"}},"type":"object","required":["advertiser_id","impressions","device_reach","household_reach","store_panel_reach","store_visits","store_visit_rate","web_panel_reach","web_visits","web_visit_rate","multiplier","multiplier_grain","multiplier_significant","hh_resolution_rate","platform_count","campaign_count","lineitem_count","has_store","has_web","start_date","end_date"],"title":"AdvertiserSummary"},"AdvertisersBatch":{"properties":{"qurum_ag_id":{"type":"integer","title":"Qurum Ag Id","description":"Quorum agency ID; must match the API token's agency scope. Also accepted as `agency_id`."},"records":{"items":{"$ref":"#/components/schemas/AdvertiserRecord"},"type":"array","maxItems":10000,"minItems":1,"title":"Records"}},"type":"object","required":["qurum_ag_id","records"],"title":"AdvertisersBatch"},"CampaignPerf":{"properties":{"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"impressions":{"type":"integer","title":"Impressions"},"device_reach":{"type":"integer","title":"Device Reach"},"household_reach":{"type":"integer","title":"Household Reach"},"store_panel_reach":{"type":"integer","title":"Store Panel Reach"},"store_visits":{"type":"integer","title":"Store Visits"},"store_visit_rate":{"type":"number","title":"Store Visit Rate"},"web_panel_reach":{"type":"integer","title":"Web Panel Reach"},"web_visits":{"type":"integer","title":"Web Visits"},"web_visit_rate":{"type":"number","title":"Web Visit Rate"},"multiplier":{"type":"number","title":"Multiplier"},"first_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Date"},"last_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Date"}},"type":"object","required":["impressions","device_reach","household_reach","store_panel_reach","store_visits","store_visit_rate","web_panel_reach","web_visits","web_visit_rate","multiplier"],"title":"CampaignPerf"},"CatalogEntry":{"properties":{"agency_id":{"type":"integer","title":"Agency Id"},"quorum_advertiser_id":{"type":"integer","title":"Quorum Advertiser Id"},"location_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Type"},"segment_md5":{"type":"string","title":"Segment Md5"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"}},"type":"object","required":["agency_id","quorum_advertiser_id","segment_md5"],"title":"CatalogEntry"},"CensusBlockInfo":{"properties":{"census_block_id":{"type":"string","title":"Census Block Id"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"state_fips":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Fips"},"county_fips":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County Fips"},"tract_fips":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tract Fips"},"dma_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Code"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"zip_population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zip Population"}},"type":"object","required":["census_block_id"],"title":"CensusBlockInfo","description":"Reference data for a 15-digit FIPS census block."},"CensusBlockStat":{"properties":{"census_block_id":{"type":"string","title":"Census Block Id"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"device_count":{"type":"integer","title":"Device Count"},"cblock_population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cblock Population"},"cblock_households":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cblock Households"},"cblock_visitor_index":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cblock Visitor Index"},"zip_visitor_index":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Zip Visitor Index"}},"type":"object","required":["census_block_id","device_count"],"title":"CensusBlockStat"},"ConfigStatus":{"type":"string","enum":["ACTIVE","IMPRESSIONS_ONLY","NOT_CONFIGURED"],"title":"ConfigStatus"},"ConnectionChangeRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Reason","description":"Free text kept in Quorum's audit log. Optional."}},"type":"object","title":"ConnectionChangeRequest","description":"Optional body for /disconnect and /reconnect."},"ConnectionState":{"properties":{"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id"},"agency_id":{"type":"integer","title":"Agency Id"},"status":{"type":"string","title":"Status"},"connected":{"type":"boolean","title":"Connected"},"status_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Updated At"},"changed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Changed"}},"type":"object","required":["client_advertiser_id","agency_id","status","connected"],"title":"ConnectionState","description":"Connection state of one client advertiser for the caller's agency.\n\nconnected=false (status RETIRED): GET /v1/advertisers/{id}/locations and\n/locations/{md5}/visits answer HTTP 410. Nothing is deleted and capture\nis not paused; reconnecting restores the same advertiser with its full\nhistory, including the disconnected period."},"DeviceVisit":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"segment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segment Name"},"maid":{"type":"string","title":"Maid"},"household_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Household Id"},"primary_ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Ipv4"},"visit_date":{"type":"string","title":"Visit Date"}},"type":"object","required":["segment_md5","maid","visit_date"],"title":"DeviceVisit"},"FootprintLocation":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"dma":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"visits_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visits 30D"},"last_seen":{"type":"string","title":"Last Seen"},"visit_days":{"type":"integer","title":"Visit Days"}},"type":"object","required":["segment_md5","last_seen","visit_days"],"title":"FootprintLocation"},"Grain":{"type":"string","enum":["advertiser","campaign"],"title":"Grain"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HostedReportInfo":{"properties":{"report_id":{"type":"string","title":"Report Id"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"refreshed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refreshed At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["report_id"],"title":"HostedReportInfo"},"HouseholdGeo":{"properties":{"household_id":{"type":"string","title":"Household Id"},"census_block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Census Block Id"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"dma_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Code"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"maid_count":{"type":"integer","title":"Maid Count","default":0}},"type":"object","required":["household_id"],"title":"HouseholdGeo"},"IdentityRequest":{"properties":{"input_type":{"$ref":"#/components/schemas/InputType"},"value":{"type":"string","title":"Value","description":"IPv4 address, MAID UUID, or 'lat,lng' pair"},"max_distance_m":{"type":"number","maximum":100.0,"minimum":1.0,"title":"Max Distance M","description":"Max distance from H3 centroid in meters (latlong only, default 30, max 100)","default":30.0}},"type":"object","required":["input_type","value"],"title":"IdentityRequest","description":"Front door request — resolve an identifier to a household."},"IdentityResponse":{"properties":{"household_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Household Id"},"centroid_distance_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Centroid Distance M"},"maid_count":{"type":"integer","title":"Maid Count"},"maids":{"items":{"$ref":"#/components/schemas/MaidRecord"},"type":"array","title":"Maids"}},"type":"object","required":["maid_count","maids"],"title":"IdentityResponse"},"InputType":{"type":"string","enum":["ipv4","maid","latlong"],"title":"InputType"},"IntakeLocationEcho":{"properties":{"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id"},"location_name":{"type":"string","title":"Location Name"},"location_id":{"type":"integer","title":"Location Id"},"status":{"type":"string","title":"Status"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["client_advertiser_id","location_name","location_id","status","created"],"title":"IntakeLocationEcho","description":"QOL-149: one entry per submitted location record, in request order."},"IntakeLocationStatusCounts":{"properties":{"submitted":{"type":"integer","title":"Submitted","default":0},"pending":{"type":"integer","title":"Pending","default":0},"active":{"type":"integer","title":"Active","default":0}},"type":"object","title":"IntakeLocationStatusCounts","description":"Totals per status for the same filters, ignoring `status` and paging."},"IntakeLocationStatusRow":{"properties":{"location_id":{"type":"integer","title":"Location Id","description":"Quorum's id for this submitted row. The same value the POST /v1/intake/locations response echoed. Stable (intake is append-only); informational, the label is the key."},"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id"},"location_name":{"type":"string","title":"Location Name","description":"Your store label, exactly as you submitted it. This is the correlation key."},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"store_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Url"},"status":{"type":"string","enum":["submitted","pending","active"],"title":"Status","description":"submitted = received, waiting for the advertiser to be mapped or for a usable address; pending = queued for Quorum to draw the store's footprint; active = footprint drawn, segment_md5s assigned, visits are being measured."},"segment_md5s":{"items":{"type":"string"},"type":"array","title":"Segment Md5S","description":"The segment_md5(s) bound to this label. Empty unless status is active. A label can carry more than one md5. Use them with GET /v1/advertisers/{advertiser_id}/locations and .../locations/{segment_md5}/visits."},"submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted At","description":"First time this row was received (UTC)."},"last_submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Submitted At","description":"Most recent POST that carried this row (UTC)."},"status_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Updated At","description":"When status last changed (UTC); null while submitted."}},"type":"object","required":["location_id","client_advertiser_id","location_name","status"],"title":"IntakeLocationStatusRow","description":"One store the agency submitted, keyed by its own label."},"IntakeLocationsPage":{"properties":{"agency_id":{"type":"integer","title":"Agency Id"},"status_counts":{"$ref":"#/components/schemas/IntakeLocationStatusCounts"},"returned":{"type":"integer","title":"Returned"},"next_after_location_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next After Location Id","description":"Pass as after_location_id to get the next page. Null when this is the last page."},"locations":{"items":{"$ref":"#/components/schemas/IntakeLocationStatusRow"},"type":"array","title":"Locations"}},"type":"object","required":["agency_id","status_counts","returned","locations"],"title":"IntakeLocationsPage"},"IntakeResponse":{"properties":{"accepted":{"type":"integer","title":"Accepted"},"new_client_advertiser_ids":{"type":"integer","title":"New Client Advertiser Ids"},"inserted":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Inserted"},"already_present":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Already Present"},"locations":{"anyOf":[{"items":{"$ref":"#/components/schemas/IntakeLocationEcho"},"type":"array"},{"type":"null"}],"title":"Locations"}},"type":"object","required":["accepted","new_client_advertiser_ids"],"title":"IntakeResponse"},"LiftAnalysis":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"exposed_hh":{"type":"integer","title":"Exposed Hh"},"exposed_store_visitors":{"type":"integer","title":"Exposed Store Visitors"},"exposed_store_visit_rate":{"type":"number","title":"Exposed Store Visit Rate"},"exposed_web_visitors":{"type":"integer","title":"Exposed Web Visitors"},"exposed_web_visit_rate":{"type":"number","title":"Exposed Web Visit Rate"},"control_store_visitors":{"type":"integer","title":"Control Store Visitors"},"control_store_visit_rate":{"type":"number","title":"Control Store Visit Rate"},"lift_pct":{"type":"number","title":"Lift Pct"},"confidence":{"type":"number","title":"Confidence"},"has_store":{"type":"boolean","title":"Has Store"},"has_web":{"type":"boolean","title":"Has Web"}},"type":"object","required":["advertiser_id","exposed_hh","exposed_store_visitors","exposed_store_visit_rate","exposed_web_visitors","exposed_web_visit_rate","control_store_visitors","control_store_visit_rate","lift_pct","confidence","has_store","has_web"],"title":"LiftAnalysis"},"LineItemPerf":{"properties":{"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"impressions":{"type":"integer","title":"Impressions"},"device_reach":{"type":"integer","title":"Device Reach"},"household_reach":{"type":"integer","title":"Household Reach"},"store_panel_reach":{"type":"integer","title":"Store Panel Reach"},"store_visits":{"type":"integer","title":"Store Visits"},"store_visit_rate":{"type":"number","title":"Store Visit Rate"},"web_panel_reach":{"type":"integer","title":"Web Panel Reach"},"web_visits":{"type":"integer","title":"Web Visits"},"web_visit_rate":{"type":"number","title":"Web Visit Rate"},"multiplier":{"type":"number","title":"Multiplier"},"first_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Date"},"last_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Date"}},"type":"object","required":["impressions","device_reach","household_reach","store_panel_reach","store_visits","store_visit_rate","web_panel_reach","web_visits","web_visit_rate","multiplier"],"title":"LineItemPerf"},"LocationGeoRow":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"home_census_block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Census Block Id"},"home_zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Zip Code"},"cblock_device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cblock Device Count"},"zip_device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zip Device Count"},"total_devices_at_md5":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Devices At Md5"},"cblock_population_2023":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cblock Population 2023"},"cblock_households_2023":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cblock Households 2023"},"zip_population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zip Population"},"cblock_visitor_index":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cblock Visitor Index"},"zip_visitor_index":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Zip Visitor Index"},"window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window End"}},"type":"object","required":["segment_md5"],"title":"LocationGeoRow","description":"One census-block/ZIP row from REF_LIBRARY_VISITOR_GEOGRAPHY."},"LocationMetadata":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"segment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segment Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"visits_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visits 30D"},"source_agency_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Agency Id"},"source_advertiser_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Advertiser Id"}},"type":"object","required":["segment_md5"],"title":"LocationMetadata","description":"Authoritative metadata for a segment MD5 from REF_LIBRARY_MD5_METADATA."},"LocationRecord":{"properties":{"client_advertiser_id":{"type":"integer","title":"Client Advertiser Id"},"location_name":{"type":"string","maxLength":1024,"minLength":1,"title":"Location Name"},"address":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Zip Code"},"store_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Store Url"}},"type":"object","required":["client_advertiser_id","location_name"],"title":"LocationRecord"},"LocationSegment":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"location_type":{"type":"string","title":"Location Type"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"visits_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visits 30D"},"household_count_60d":{"type":"integer","title":"Household Count 60D","default":0},"device_days_60d":{"type":"integer","title":"Device Days 60D","default":0},"maid_count_60d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maid Count 60D"},"client_location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Location Name"},"location_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Location Id"}},"type":"object","required":["segment_md5","location_type"],"title":"LocationSegment"},"LocationsBatch":{"properties":{"qurum_ag_id":{"type":"integer","title":"Qurum Ag Id","description":"Quorum agency ID; must match the API token's agency scope. Also accepted as `agency_id`."},"records":{"items":{"$ref":"#/components/schemas/LocationRecord"},"type":"array","maxItems":10000,"minItems":1,"title":"Records"}},"type":"object","required":["qurum_ag_id","records"],"title":"LocationsBatch"},"MaidRecord":{"properties":{"maid":{"type":"string","title":"Maid"},"primary_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Ip"},"census_block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Census Block Id"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["maid"],"title":"MaidRecord"},"MetricSet":{"type":"string","enum":["EXPOSURE","VISITS_STORE","VISITS_WEB"],"title":"MetricSet"},"NearbyCompetitor":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"distance_miles":{"type":"number","title":"Distance Miles"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"visits_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visits 30D"},"household_count_60d":{"type":"integer","title":"Household Count 60D","default":0}},"type":"object","required":["segment_md5","distance_miles"],"title":"NearbyCompetitor"},"PartnerFeedRow":{"properties":{"activity_date":{"type":"string","title":"Activity Date"},"agency_id":{"type":"integer","title":"Agency Id"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"advertiser_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Advertiser Name"},"campaign_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaign Id"},"campaign_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Name"},"metric_set":{"$ref":"#/components/schemas/MetricSet"},"impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impressions"},"hh_resolved_impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hh Resolved Impressions"},"det_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Det Count"},"est_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Est Count"},"suppressed":{"type":"boolean","title":"Suppressed"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"multiplier_grain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Multiplier Grain"},"multiplier_significant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multiplier Significant"},"config_status":{"anyOf":[{"$ref":"#/components/schemas/ConfigStatus"},{"type":"null"}]},"unique_households_last_touch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Households Last Touch"},"source_table":{"type":"string","title":"Source Table"},"generated_at":{"type":"string","title":"Generated At"}},"type":"object","required":["activity_date","agency_id","advertiser_id","metric_set","suppressed","source_table","generated_at"],"title":"PartnerFeedRow"},"PerfByCreative":{"properties":{"log_date":{"type":"string","title":"Log Date"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"impressions":{"type":"integer","title":"Impressions","default":0},"device_reach":{"type":"integer","title":"Device Reach","default":0},"household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Household Reach"},"visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visitors"},"visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visit Rate"},"panel_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Panel Reach"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"web_visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Visitors"},"total_page_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Page Views"},"web_visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Web Visit Rate"},"creative_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Creative Id"},"creative_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Name"},"creative_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Size"}},"type":"object","required":["log_date","advertiser_id"],"title":"PerfByCreative"},"PerfByGeo":{"properties":{"log_date":{"type":"string","title":"Log Date"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"impressions":{"type":"integer","title":"Impressions","default":0},"device_reach":{"type":"integer","title":"Device Reach","default":0},"household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Household Reach"},"visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visitors"},"visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visit Rate"},"panel_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Panel Reach"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"web_visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Visitors"},"total_page_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Page Views"},"web_visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Web Visit Rate"},"dma":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"census_block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Census Block Id"}},"type":"object","required":["log_date","advertiser_id"],"title":"PerfByGeo"},"PerfByHousehold":{"properties":{"log_date":{"type":"string","title":"Log Date"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"impressions":{"type":"integer","title":"Impressions","default":0},"device_reach":{"type":"integer","title":"Device Reach","default":0},"household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Household Reach"},"visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visitors"},"visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visit Rate"},"panel_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Panel Reach"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"web_visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Visitors"},"total_page_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Page Views"},"web_visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Web Visit Rate"},"household_id":{"type":"string","title":"Household Id"},"census_block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Census Block Id"}},"type":"object","required":["log_date","advertiser_id","household_id"],"title":"PerfByHousehold"},"PerfByPublisher":{"properties":{"log_date":{"type":"string","title":"Log Date"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"impressions":{"type":"integer","title":"Impressions","default":0},"device_reach":{"type":"integer","title":"Device Reach","default":0},"household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Household Reach"},"visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visitors"},"visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visit Rate"},"panel_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Panel Reach"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"web_visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Visitors"},"total_page_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Page Views"},"web_visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Web Visit Rate"},"publisher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher"},"supply_vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supply Vendor"},"publisher_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher Code"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"publisher_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Publisher Id"},"supply_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Supply Type Id"}},"type":"object","required":["log_date","advertiser_id"],"title":"PerfByPublisher"},"PerfByTraffic":{"properties":{"log_date":{"type":"string","title":"Log Date"},"io_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Id"},"io_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Io Name"},"li_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Id"},"li_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Li Name"},"advertiser_id":{"type":"integer","title":"Advertiser Id"},"platform_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Name"},"impressions":{"type":"integer","title":"Impressions","default":0},"device_reach":{"type":"integer","title":"Device Reach","default":0},"household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Household Reach"},"visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visitors"},"visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Visit Rate"},"panel_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Panel Reach"},"multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Multiplier"},"web_visitors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Visitors"},"total_page_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Page Views"},"web_visit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Web Visit Rate"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"url_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Type"}},"type":"object","required":["log_date","advertiser_id"],"title":"PerfByTraffic"},"PublisherExposure":{"properties":{"publisher":{"type":"string","title":"Publisher"},"log_date":{"type":"string","title":"Log Date"},"impressions":{"type":"integer","title":"Impressions"},"device_reach":{"type":"integer","title":"Device Reach"}},"type":"object","required":["publisher","log_date","impressions","device_reach"],"title":"PublisherExposure"},"ReconcileResponse":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"window":{"type":"object","title":"Window"},"feed_total":{"$ref":"#/components/schemas/ReconcileTotals"},"hosted_report":{"anyOf":[{"$ref":"#/components/schemas/HostedReportInfo"},{"type":"null"}]},"match":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Match"},"match_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Reason"}},"type":"object","required":["advertiser_id","window","feed_total"],"title":"ReconcileResponse"},"ReconcileTotals":{"properties":{"impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impressions"},"det_household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Det Household Reach"},"est_household_reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Est Household Reach"}},"type":"object","title":"ReconcileTotals"},"SegmentHousehold":{"properties":{"household_id":{"type":"string","title":"Household Id"},"visit_count":{"type":"integer","title":"Visit Count"},"total_devices":{"type":"integer","title":"Total Devices"},"maid_resolved":{"type":"integer","title":"Maid Resolved"},"ip_resolved":{"type":"integer","title":"Ip Resolved"},"first_visit":{"type":"string","format":"date","title":"First Visit"},"last_visit":{"type":"string","format":"date","title":"Last Visit"}},"type":"object","required":["household_id","visit_count","total_devices","maid_resolved","ip_resolved","first_visit","last_visit"],"title":"SegmentHousehold"},"SegmentPOI":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"household_count":{"type":"integer","title":"Household Count","default":0},"device_count":{"type":"integer","title":"Device Count","default":0},"first_visit":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"First Visit"},"last_visit":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Visit"}},"type":"object","required":["segment_md5"],"title":"SegmentPOI"},"SegmentStats":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"segment_visitors_30d":{"type":"integer","title":"Segment Visitors 30D"},"active_days":{"type":"integer","title":"Active Days"},"total_device_visits":{"type":"integer","title":"Total Device Visits"}},"type":"object","required":["segment_md5","segment_visitors_30d","active_days","total_device_visits"],"title":"SegmentStats"},"SegmentVisit":{"properties":{"quorum_advertiser_id":{"type":"integer","title":"Quorum Advertiser Id"},"location_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Type"},"segment_md5":{"type":"string","title":"Segment Md5"},"visit_date":{"type":"string","title":"Visit Date"},"device_count":{"type":"integer","title":"Device Count"},"segment_visitors_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Segment Visitors 30D"}},"type":"object","required":["quorum_advertiser_id","segment_md5","visit_date","device_count"],"title":"SegmentVisit"},"StoreBrand":{"properties":{"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"visits":{"type":"integer","title":"Visits"},"unique_households":{"type":"integer","title":"Unique Households"},"avg_days_to_visit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Days To Visit"}},"type":"object","required":["visits","unique_households"],"title":"StoreBrand"},"StoreBrandSummary":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"total_visits":{"type":"integer","title":"Total Visits"},"unique_households":{"type":"integer","title":"Unique Households"},"brands":{"items":{"$ref":"#/components/schemas/StoreBrand"},"type":"array","title":"Brands"}},"type":"object","required":["advertiser_id","total_visits","unique_households","brands"],"title":"StoreBrandSummary"},"TabAvailability":{"properties":{"advertiser_id":{"type":"integer","title":"Advertiser Id"},"impressions":{"type":"boolean","title":"Impressions"},"store_visits":{"type":"boolean","title":"Store Visits"},"web_visits":{"type":"boolean","title":"Web Visits"},"publisher":{"type":"boolean","title":"Publisher"},"geo":{"type":"boolean","title":"Geo"},"creative":{"type":"boolean","title":"Creative"},"traffic":{"type":"boolean","title":"Traffic"},"household":{"type":"boolean","title":"Household"},"lift":{"type":"boolean","title":"Lift"},"config_status":{"type":"string","title":"Config Status"}},"type":"object","required":["advertiser_id","impressions","store_visits","web_visits","publisher","geo","creative","traffic","household","lift","config_status"],"title":"TabAvailability"},"TimeseriesDay":{"properties":{"log_date":{"type":"string","title":"Log Date"},"impressions":{"type":"integer","title":"Impressions"},"device_reach":{"type":"integer","title":"Device Reach"},"household_reach":{"type":"integer","title":"Household Reach"},"store_visits":{"type":"integer","title":"Store Visits"},"store_visit_rate":{"type":"number","title":"Store Visit Rate"},"web_visits":{"type":"integer","title":"Web Visits"},"web_visit_rate":{"type":"number","title":"Web Visit Rate"}},"type":"object","required":["log_date","impressions","device_reach","household_reach","store_visits","store_visit_rate","web_visits","web_visit_rate"],"title":"TimeseriesDay"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VisitRecord":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"segment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segment Name"},"maid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maid"},"household_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Household Id"},"visit_date":{"type":"string","format":"date","title":"Visit Date"},"visit_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Visit Timestamp"},"capture_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capture Ip"},"hh_primary_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hh Primary Ip"},"ip_last_seen":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Ip Last Seen"},"ip_observation_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ip Observation Count"},"capture_census_block":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capture Census Block"},"hh_census_block":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hh Census Block"},"capture_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capture Lat"},"capture_lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capture Lon"}},"type":"object","required":["segment_md5","visit_date"],"title":"VisitRecord"},"VisitorGeoRow":{"properties":{"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"dma_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Code"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"zip_population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zip Population"},"visitor_hh_count":{"type":"integer","title":"Visitor Hh Count"},"total_device_visits":{"type":"integer","title":"Total Device Visits"}},"type":"object","required":["visitor_hh_count","total_device_visits"],"title":"VisitorGeoRow","description":"One ZIP-level row from segment visitor-geography breakdown."},"VisitorGeography":{"properties":{"segment_md5":{"type":"string","title":"Segment Md5"},"window_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window End"},"total_devices_at_location":{"type":"integer","title":"Total Devices At Location","default":0},"census_blocks":{"items":{"$ref":"#/components/schemas/CensusBlockStat"},"type":"array","title":"Census Blocks","default":[]}},"type":"object","required":["segment_md5"],"title":"VisitorGeography"},"ZipInfo":{"properties":{"zip_code":{"type":"string","title":"Zip Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"state_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Name"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"dma_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Code"},"dma_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dma Name"},"population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population"},"population_density":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Population Density"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","required":["zip_code"],"title":"ZipInfo","description":"Reference data for a single ZIP code."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"Service","description":"Health check. No token needed."},{"name":"Advertisers","description":"Your agency's advertisers and their analytic roll-ups. Takes a Quorum advertiser id (from GET /v1/advertisers). Partner tokens may only read advertisers that belong to their own agency; anything else is a 403."},{"name":"Published reports","description":"The numbers on your published Quorum report, as data (schema `quorum.retail_report.v1`). Accepts your own DSP advertiser id or a Quorum advertiser id your agency owns."},{"name":"Locations and visits","description":"Tracked locations and raw visit records for one advertiser. /locations and /locations/{segment_md5}/visits take your own DSP advertiser id or a Quorum advertiser id your agency owns, and answer 202 / 404 / 410 / 422 while it is not servable. /visitor-geography and /nearby-competitors take the Quorum id only."},{"name":"Agency intake","description":"Send Quorum your advertisers and store lists, read back their status, and disconnect or reconnect an advertiser. POSTs need a write-enabled token (a read-only token gets 403)."},{"name":"Partner daily feed","description":"Daily exposure and visit counts for your agency, JSON or CSV, with deterministic and estimated counts in separate columns."},{"name":"Performance tables","description":"Daily performance rows by publisher, geography, traffic source and creative, filtered to your agency."},{"name":"Segments","description":"Location segments configured for an advertiser."},{"name":"Reference data","description":"Static reference lookups: ZIP codes, census blocks, location metadata."},{"name":"Location library","description":"Quorum's location reference library (aggregate brand / category / DMA data). /v1/library/categories and POST /v1/library/audience-intel are public; the rest need a token. Open-ended questions go to the Quorum MCP (https://mcp.quorum.live/mcp); the free-text `ask` route was removed."},{"name":"Audience intelligence reports","description":"Published brand audience-intelligence reports (cross-shopping, DMA mix)."},{"name":"Internal tokens only","description":"Device- and household-level routes. Internal Quorum tokens only: a partner token gets 403 with a pointer to the Quorum MCP (https://mcp.quorum.live/mcp), which serves k-anonymous aggregates."}]}