# Table of Contents - [Overview - ZeroClick](#overview-zeroclick) - [Overview - ZeroClick](#overview-zeroclick) - [Get developer analytics metrics - ZeroClick](#get-developer-analytics-metrics-zeroclick) - [Impression Tracking - ZeroClick](#impression-tracking-zeroclick) - [Get ZeroClick offers - ZeroClick](#get-zeroclick-offers-zeroclick) - [Technical Reference - ZeroClick](#technical-reference-zeroclick) - [Track offer impressions - ZeroClick](#track-offer-impressions-zeroclick) - [MCP Ad Server - ZeroClick](#mcp-ad-server-zeroclick) - [Headers Reference - ZeroClick](#headers-reference-zeroclick) - [Setup - ZeroClick](#setup-zeroclick) - [Quickstart - ZeroClick](#quickstart-zeroclick) - [Testing - ZeroClick](#testing-zeroclick) - [Overview - ZeroClick](#overview-zeroclick) - [Tool Reference - ZeroClick](#tool-reference-zeroclick) - [Overview - ZeroClick](#overview-zeroclick) - [Tools - ZeroClick](#tools-zeroclick) - [REST API - ZeroClick](#rest-api-zeroclick) - [What is ZeroClick - ZeroClick](#what-is-zeroclick-zeroclick) - [Quickstart - ZeroClick](#quickstart-zeroclick) - [Overview - ZeroClick](#overview-zeroclick) - [Overview - ZeroClick](#overview-zeroclick) - [Page Not Found](#page-not-found) - [Page Not Found](#page-not-found) --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Getting Started Overview On this page * [How It Works](https://developer.zeroclick.ai/docs#how-it-works) * [Seamless Integration](https://developer.zeroclick.ai/docs#seamless-integration) * [Get Started](https://developer.zeroclick.ai/docs#get-started) * [Integration Paths](https://developer.zeroclick.ai/docs#integration-paths) ZeroClick is an AI-native advertising platform built for AI developers. Unlock monetization by programmatically retrieving and displaying highly relevant offers from top-tier brands based on real-time user intent and continuously learned user preferences. With the ZeroClick API, you can request offers on demand and decide exactly how (and when) they appear in your product. This guide will walk you through the core concepts and setup steps needed to launch your integration and start earning. [​](https://developer.zeroclick.ai/docs#how-it-works) How It Works --------------------------------------------------------------------- By combining signals from past user behavior with real-time context, ZeroClick is always ready to serve the best next ad. **Ad Generation** When you request an offer, by default ZeroClick matches the user’s current context to deliver the most relevant ad. Ad matching is further enhanced when you enable ZeroClick’s Signal Collection. **Signal Collection** When the MCP Signal Server integration is enabled, users’ preferences, problems, and interests are silently learned in the background **Performance Measurement** Use the Developer Analytics API to build powerful performance dashboards tracking metrics such as impressions, clicks, and revenue [​](https://developer.zeroclick.ai/docs#seamless-integration) Seamless Integration ------------------------------------------------------------------------------------- Display relevant ads on any surface by receiving offers via either MCP Server or REST API. The ZeroClick Offer object contains rich metadata, allowing you to build ad UI that matches the look and feel of your app. [​](https://developer.zeroclick.ai/docs#get-started) Get Started ------------------------------------------------------------------- [What is ZeroClick\ -----------------\ \ Understand the ZeroClick model and how it works](https://developer.zeroclick.ai/docs/what-is-zeroclick) [Quick Start\ -----------\ \ See your first ad in under 5 minutes](https://developer.zeroclick.ai/docs/quickstart) [Integration Guide\ -----------------\ \ Choose the right integration path for your use case](https://developer.zeroclick.ai/docs/integration-guide) [​](https://developer.zeroclick.ai/docs#integration-paths) Integration Paths ------------------------------------------------------------------------------- [Offers\ ------\ \ Get offers via REST API or MCP](https://developer.zeroclick.ai/docs/offers) [Signal Collection\ -----------------\ \ Improve offer quality with user preferences](https://developer.zeroclick.ai/docs/signal-collection) **Recommended:** Get offers via REST API + turn on Signal Collection for better personalization. [What is ZeroClick](https://developer.zeroclick.ai/docs/what-is-zeroclick) ⌘I --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/integration-guide#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Integration Guide Overview On this page * [Get Offers](https://developer.zeroclick.ai/docs/integration-guide#get-offers) * [REST API (Recommended)](https://developer.zeroclick.ai/docs/integration-guide#rest-api-recommended) * [MCP Ad Server](https://developer.zeroclick.ai/docs/integration-guide#mcp-ad-server) * [Improve Offers](https://developer.zeroclick.ai/docs/integration-guide#improve-offers) * [Signal Collection](https://developer.zeroclick.ai/docs/integration-guide#signal-collection) * [Track Impressions](https://developer.zeroclick.ai/docs/integration-guide#track-impressions) * [Next Steps](https://developer.zeroclick.ai/docs/integration-guide#next-steps) Integrating ZeroClick involves three steps: 1 [](https://developer.zeroclick.ai/docs/integration-guide#) Get ZeroClick offers Retrieve offers via REST API (recommended) or MCP Ad Server 2 [](https://developer.zeroclick.ai/docs/integration-guide#) (Optional) Turn on Signal Collection Collects user context in the background to generate more relevant offers 3 [](https://developer.zeroclick.ai/docs/integration-guide#) Track impressions Use the REST API from the user’s device to track offer impressions. [​](https://developer.zeroclick.ai/docs/integration-guide#get-offers) Get Offers ----------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/integration-guide#rest-api-recommended) REST API (Recommended) Fetch offers via HTTP and render them however you want. Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "client", query: "best running shoes" }) }); const offers = await response.json(); // Render in your UI [Get Started with REST API →](https://developer.zeroclick.ai/docs/offers/rest-api) * * * ### [​](https://developer.zeroclick.ai/docs/integration-guide#mcp-ad-server) MCP Ad Server Let your LLM automatically weave offers into chat responses. [Learn about MCP Ad Server →](https://developer.zeroclick.ai/docs/offers/mcp-overview) * * * [​](https://developer.zeroclick.ai/docs/integration-guide#improve-offers) Improve Offers ------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/integration-guide#signal-collection) Signal Collection Turn on Signal Collection to improve offer relevance. ZeroClick learns user preferences in the background and delivers more personalized offers. **How it works:** 1. Connect the MCP Signal Server to your application 2. As users interact, the LLM silently broadcasts preference signals 3. When you request offers, ZeroClick uses these signals to personalize results [Set Up Signal Collection →](https://developer.zeroclick.ai/docs/signal-collection) * * * [​](https://developer.zeroclick.ai/docs/integration-guide#track-impressions) Track Impressions ------------------------------------------------------------------------------------------------- After displaying offers to users, call the impressions endpoint to record what was shown. This is required for analytics and revenue attribution. Copy await fetch("https://zeroclick.dev/api/v2/impressions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ids: offers.map(offer => offer.id) }) }); Call this endpoint from the user’s device (not your server) for accurate tracking. * * * [​](https://developer.zeroclick.ai/docs/integration-guide#next-steps) Next Steps ----------------------------------------------------------------------------------- [Quickstart\ ----------\ \ See your first offer in 5 minutes](https://developer.zeroclick.ai/docs/quickstart) [Offers\ ------\ \ Compare REST API vs MCP](https://developer.zeroclick.ai/docs/offers) [Signal Collection\ -----------------\ \ Improve offer quality](https://developer.zeroclick.ai/docs/signal-collection) ⌘I --- # Get developer analytics metrics - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Analytics Get developer analytics metrics cURL basic Copy curl --request POST \ --url https://mcp.zeroclick.ai/api/v1/analytics/metrics \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data ' { "startDate": "2026-01-01T00:00:00Z", "endDate": "2026-01-15T23:59:59Z" } ' 200 400 401 403 500 Copy { "data": [\ {\ "dimensions": {\ "tenantClientId": "",\ "tenantGroupingId": ""\ },\ "metadata": {\ "tenantClientName": ""\ },\ "timeSeries": [\ {\ "prompts": 123,\ "eligiblePrompts": 123,\ "promptsWithMatchedAds": 123,\ "responsesWithImpressions": 123,\ "impressions": 123,\ "clicks": 123,\ "estimatedEarnings": 123,\ "datetime": "",\ "date": ""\ }\ ],\ "totals": {\ "prompts": 123,\ "eligiblePrompts": 123,\ "promptsWithMatchedAds": 123,\ "responsesWithImpressions": 123,\ "impressions": 123,\ "clicks": 123,\ "estimatedEarnings": 123\ }\ }\ ] } POST / api / v1 / analytics / metrics Try it cURL basic Copy curl --request POST \ --url https://mcp.zeroclick.ai/api/v1/analytics/metrics \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data ' { "startDate": "2026-01-01T00:00:00Z", "endDate": "2026-01-15T23:59:59Z" } ' 200 400 401 403 500 Copy { "data": [\ {\ "dimensions": {\ "tenantClientId": "",\ "tenantGroupingId": ""\ },\ "metadata": {\ "tenantClientName": ""\ },\ "timeSeries": [\ {\ "prompts": 123,\ "eligiblePrompts": 123,\ "promptsWithMatchedAds": 123,\ "responsesWithImpressions": 123,\ "impressions": 123,\ "clicks": 123,\ "estimatedEarnings": 123,\ "datetime": "",\ "date": ""\ }\ ],\ "totals": {\ "prompts": 123,\ "eligiblePrompts": 123,\ "promptsWithMatchedAds": 123,\ "responsesWithImpressions": 123,\ "impressions": 123,\ "clicks": 123,\ "estimatedEarnings": 123\ }\ }\ ] } #### Authorizations [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#authorization-authorization) Authorization string header required Tenant API Key with `developer:data:read` scope. Create an API key from [https://developer.zeroclick.ai/](https://developer.zeroclick.ai/) by navigating to API Keys and selecting the Organization API Keys tab. This is a private API key and must be stored securely - never expose it in public-facing code or client-side applications. #### Body application/json [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#body-start-date) startDate string required Start date in ISO 8601 format (e.g., "2026-01-01T00:00:00Z") [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#body-end-date) endDate string required End date in ISO 8601 format (e.g., "2026-01-31T23:59:59Z") [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#body-dimensions) dimensions enum\[\] Dimensions to group by. Empty array returns overall aggregates. Can combine entity dimensions (TENANT\_CLIENT\_ID, TENANT\_GROUPING\_ID) with one time dimension (HOURLY or DAILY). Time dimensions are mutually exclusive. Available options: `TENANT_CLIENT_ID`, `TENANT_GROUPING_ID`, `HOURLY`, `DAILY` [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#body-tenant-client-ids) tenantClientIds string\[\] Optional filter by tenant client IDs (max 100 items) [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#body-tenant-grouping-ids) tenantGroupingIds string\[\] Optional filter by tenant grouping IDs (max 100 items) #### Response 200 application/json Successful response with aggregated metrics and optional time series breakdown Developer analytics metrics response [​](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#response-data) data object\[\] required Array of groups, each containing dimension values, time series data, and totals Show child attributes ⌘I --- # Impression Tracking - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation MCP Ad Server Impression Tracking On this page * [Option 1: Client SDK (Recommended)](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#option-1-client-sdk-recommended) * [Configuration Attributes](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#configuration-attributes) * [Example Usage](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#example-usage) * [Option 2: Manual Tracking via API](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#option-2-manual-tracking-via-api) ZeroClick provides automated or manual impression tracking for analytics. Impressions are tracked when offers are displayed in the user’s viewport, helping you understand which offers are actually seen by users. [​](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#option-1-client-sdk-recommended) Option 1: Client SDK (Recommended) --------------------------------------------------------------------------------------------------------------------------------------------- The easiest way to track impressions is using the ZeroClick Client SDK. Add the following script tag to your HTML: Copy ### [​](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#configuration-attributes) Configuration Attributes * **`data-target`** (optional): CSS selector for the element that should be watched for impressions * **IMPORTANT**: selector must return a _single_ element which contains all chat messages * Example: `#chat` * Default `document.body` * **`data-offer-id-regex`** (optional): Custom regex pattern to parse offer IDs from anchor link `href` values * Useful when using custom URL structures - otherwise this should be omitted * The regex should contain a capture group for the offer ID * Example: `"/api/v1/offers/([^/?]+)"` matches `https://example.com/api/v1/offers/abc-123` * Example: `"offer-(\d+)"` matches `https://mycustomlink.com/offers/offer-123` * Example: `"offers/([a-zA-Z0-9-]+)"` matches `https://example.com/offers/abc-123` * If not provided, the SDK will look for standard offer ID formats ### [​](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#example-usage) Example Usage **Basic usage with standard offer links and target element:** Copy **Custom URL structure:** Copy [​](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#option-2-manual-tracking-via-api) Option 2: Manual Tracking via API --------------------------------------------------------------------------------------------------------------------------------------------- For more control over impression tracking, you can manually call the tracking endpoint. This is useful when you’re already parsing tool call results server-side or need custom tracking logic or want fine-grained control over the logic. **Endpoint:** `POST https://mcp.zeroclick.ai/api/v1/offers/t` **Request Body:** Copy { "aiOfferIds": ["offer-id-1", "offer-id-2", "offer-id-3"] } **Client-side example:** Copy const trackImpressions = async (offerIds) => { await fetch("https://mcp.zeroclick.ai/api/v1/offers/t", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ aiOfferIds: offerIds, }), }); }; // Track multiple offers at once trackImpressions(["offer-123", "offer-456", "offer-789"]); [Technical Reference](https://developer.zeroclick.ai/docs/offers/mcp-reference) ⌘I --- # Get ZeroClick offers - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Offers Get ZeroClick offers cURL clientSide Copy curl --request POST \ --url https://zeroclick.dev/api/v2/offers \ --header 'Content-Type: application/json' \ --header 'x-zc-api-key: ' \ --data ' { "method": "client", "query": "best running shoes", "limit": 3 } ' 200 400 401 500 Copy [\ {\ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "title": "Nike Air Zoom Pegasus 40",\ "subtitle": "Premium running shoe for daily training",\ "content": "Responsive cushioning and breathable mesh upper for comfortable miles.",\ "cta": "Shop Now",\ "clickUrl": "https://https://zeroclick.dev/api/v2/clicks?id=a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "imageUrl": "https://example.com/pegasus40.jpg",\ "brand": {\ "name": "Nike",\ "description": "Global sports and athletic footwear brand",\ "url": "https://nike.com",\ "iconUrl": "https://example.com/nike-logo.png"\ },\ "product": {\ "productId": "nike-pegasus-40",\ "title": "Air Zoom Pegasus 40",\ "category": "Running Shoes",\ "availability": "in_stock"\ },\ "price": {\ "amount": "129.99",\ "currency": "USD",\ "originalPrice": "139.99",\ "discount": "7%"\ }\ }\ ] POST / api / v2 / offers Try it cURL clientSide Copy curl --request POST \ --url https://zeroclick.dev/api/v2/offers \ --header 'Content-Type: application/json' \ --header 'x-zc-api-key: ' \ --data ' { "method": "client", "query": "best running shoes", "limit": 3 } ' 200 400 401 500 Copy [\ {\ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "title": "Nike Air Zoom Pegasus 40",\ "subtitle": "Premium running shoe for daily training",\ "content": "Responsive cushioning and breathable mesh upper for comfortable miles.",\ "cta": "Shop Now",\ "clickUrl": "https://https://zeroclick.dev/api/v2/clicks?id=a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "imageUrl": "https://example.com/pegasus40.jpg",\ "brand": {\ "name": "Nike",\ "description": "Global sports and athletic footwear brand",\ "url": "https://nike.com",\ "iconUrl": "https://example.com/nike-logo.png"\ },\ "product": {\ "productId": "nike-pegasus-40",\ "title": "Air Zoom Pegasus 40",\ "category": "Running Shoes",\ "availability": "in_stock"\ },\ "price": {\ "amount": "129.99",\ "currency": "USD",\ "originalPrice": "139.99",\ "discount": "7%"\ }\ }\ ] #### Authorizations [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#authorization-x-zc-api-key) x-zc-api-key string header required Tenant API key for authentication. Obtain from [https://developer.zeroclick.ai/](https://developer.zeroclick.ai/) under API Keys. This key should be kept secure and not exposed in client-side code when using server-side integration. #### Body application/json [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-method) method enum required Determines how IP address and User-Agent are sourced. Use "client" when making requests directly from the browser (IP/UA extracted from request headers). Use "server" when making requests from your backend (must provide ipAddress in body). Available options: `client`, `server` [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-ip-address) ipAddress string Client IP address. Required when method is "server". Ignored when method is "client" (extracted from request headers). [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-agent) userAgent string Client User-Agent string. Optional when method is "server". Ignored when method is "client" (extracted from request headers). [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-origin) origin string Request origin/referer URL. Optional when method is "server". Ignored when method is "client" (extracted from request headers). [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-query-one-of-0) query string | null Search query for offers. Example: "best running shoes", "cloud hosting solutions" [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-limit) limit integer Maximum number of offers to return. Defaults to tenant settings or 1. Required range: `0 < x <= 8` [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-email-sha256) userEmailSha256 string SHA-256 hash of user email address for identity matching (lowercase, trimmed before hashing) [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-phone-number-sha256) userPhoneNumberSha256 string SHA-256 hash of user phone number for identity matching (E.164 format before hashing) [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-grouping-id) groupingId string Tenant-defined grouping ID for analytics segmentation [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-id) userId string Tenant-defined user ID for analytics and personalization [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-session-id) userSessionId string Tenant-defined session ID for session-level tracking [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#body-user-locale) userLocale string User locale/language code (e.g., "en-US", "es-MX") #### Response 200 application/json Array of personalized offers [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-title-one-of-0) title string | null required Title of the offer [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-subtitle-one-of-0) subtitle string | null required Optional subtitle or brief description of the offer [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-content-one-of-0) content string | null required Detailed content or description of the offer [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-cta-one-of-0) cta string | null required Call to action text for the offer, to be used for links or buttons [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-click-url) clickUrl string required URL to navigate to when the offer is clicked [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-image-url-one-of-0) imageUrl string | null required Optional image URL representing the offer [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-metadata-one-of-0) metadata object required Any additional metadata specific to the offer Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-context-one-of-0) context string | null required Any additional context about the offer such as "great for gifts", "popular", etc. [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-brand-one-of-0) brand object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-product-one-of-0) product object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-price-one-of-0) price object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-location-one-of-0) location object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-media-one-of-0) media object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-rating-one-of-0) rating object required Show child attributes [​](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers#response-items-id) id string required Unique identifier for the offer, scoped to the request [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) [Track offer impressions](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions) ⌘I --- # Technical Reference - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/mcp-reference#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation MCP Ad Server Technical Reference On this page * [Connection Protocol](https://developer.zeroclick.ai/docs/offers/mcp-reference#connection-protocol) * [Example Connection](https://developer.zeroclick.ai/docs/offers/mcp-reference#example-connection) * [Headers](https://developer.zeroclick.ai/docs/offers/mcp-reference#headers) * [Required Headers](https://developer.zeroclick.ai/docs/offers/mcp-reference#required-headers) * [Optional Analytics Headers](https://developer.zeroclick.ai/docs/offers/mcp-reference#optional-analytics-headers) * [MCP Protocol Methods](https://developer.zeroclick.ai/docs/offers/mcp-reference#mcp-protocol-methods) * [Initialize Connection](https://developer.zeroclick.ai/docs/offers/mcp-reference#initialize-connection) * [List Available Tools](https://developer.zeroclick.ai/docs/offers/mcp-reference#list-available-tools) * [Call a Tool](https://developer.zeroclick.ai/docs/offers/mcp-reference#call-a-tool) * [Error Handling](https://developer.zeroclick.ai/docs/offers/mcp-reference#error-handling) * [Common Error Codes](https://developer.zeroclick.ai/docs/offers/mcp-reference#common-error-codes) * [Troubleshooting](https://developer.zeroclick.ai/docs/offers/mcp-reference#troubleshooting) * [Next Steps](https://developer.zeroclick.ai/docs/offers/mcp-reference#next-steps) Complete technical reference for integrating the MCP Ad Server. [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#connection-protocol) Connection Protocol -------------------------------------------------------------------------------------------------------- The MCP Ad Server uses **streamable HTTP** with JSON-RPC 2.0. **Server URL:** `https://mcp.zeroclick.ai` **Protocol:** JSON-RPC 2.0 over HTTP **Transport:** Streamable HTTP with Server-Sent Events **Accept Header:** `application/json text/event-stream` ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#example-connection) Example Connection Copy import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const transport = new StreamableHTTPClientTransport({ baseUrl: "https://mcp.zeroclick.ai", headers: { "x-tenant-api-key": "your-api-key", "x-tenant-llm-model": "gpt-4o", "Accept": "application/json text/event-stream" } }); const client = new Client({ name: "your-app", version: "1.0.0" }, { capabilities: { tools: {} } }); await client.connect(transport); * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#headers) Headers -------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#required-headers) Required Headers | Header | Value | Purpose | | --- | --- | --- | | `x-tenant-api-key` | Your API key | Authentication | | `x-tenant-llm-model` | `gpt-4o` | LLM model identifier | ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#optional-analytics-headers) Optional Analytics Headers | Header | Example | Purpose | | --- | --- | --- | | `x-tenant-grouping-id` | `website-1` | Segment analytics by site/app | | `x-tenant-user-id` | `user-12345` | Per-user tracking | * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#mcp-protocol-methods) MCP Protocol Methods ---------------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#initialize-connection) Initialize Connection Copy curl -X POST https://mcp.zeroclick.ai \ -H "Content-Type: application/json" \ -H "x-tenant-api-key: YOUR_API_KEY" \ -H "x-tenant-llm-model: gpt-4o" \ -H "Accept: application/json text/event-stream" \ -d '{ "jsonrpc": "2.0", "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "tools": {} }, "clientInfo": { "name": "your-app", "version": "1.0.0" } }, "id": 1 }' ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#list-available-tools) List Available Tools Copy curl -X POST https://mcp.zeroclick.ai \ -H "Content-Type: application/json" \ -H "x-tenant-api-key: YOUR_API_KEY" \ -H "x-tenant-llm-model: gpt-4o" \ -H "Accept: application/json text/event-stream" \ -d '{ "jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 2 }' ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#call-a-tool) Call a Tool Copy curl -X POST https://mcp.zeroclick.ai \ -H "Content-Type: application/json" \ -H "x-tenant-api-key: YOUR_API_KEY" \ -H "x-tenant-llm-model: gpt-4o" \ -H "Accept: application/json text/event-stream" \ -d '{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "get_offers", "arguments": { "message": "best running shoes" } }, "id": 3 }' * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#error-handling) Error Handling ---------------------------------------------------------------------------------------------- The server returns standard JSON-RPC 2.0 error responses: Copy { "jsonrpc": "2.0", "error": { "code": -32603, "message": "Internal Server Error" }, "id": null } ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#common-error-codes) Common Error Codes | Code | Meaning | Resolution | | --- | --- | --- | | `-32700` | Parse error | Check JSON syntax | | `-32600` | Invalid request | Verify JSON-RPC 2.0 format | | `-32601` | Method not found | Check method name spelling | | `-32602` | Invalid params | Verify tool arguments match schema | | `-32603` | Internal error | Contact support if persistent | * * * ### [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#troubleshooting) Troubleshooting **401 Unauthorized:** * Check API key is correct * Verify sending `x-tenant-api-key` header **Connection Timeout:** * Verify `Accept` header includes `text/event-stream` * Check firewall/proxy allows streaming connections **No Offers Returned:** * Try a different query * Check tool is enabled for your account * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-reference#next-steps) Next Steps -------------------------------------------------------------------------------------- [Available Tools\ ---------------\ \ See all 5 MCP tools and when to use them](https://developer.zeroclick.ai/docs/offers/mcp-tools) [MCP Overview\ ------------\ \ Back to MCP overview](https://developer.zeroclick.ai/docs/offers/mcp-overview) [Signal Collection\ -----------------\ \ Improve ad relevance with signals](https://developer.zeroclick.ai/docs/signal-collection) [REST API\ --------\ \ Recommended: Full control over ads](https://developer.zeroclick.ai/docs/offers/rest-api) [Tools](https://developer.zeroclick.ai/docs/offers/mcp-tools) [Impression Tracking](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking) ⌘I --- # Track offer impressions - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Tracking Track offer impressions Track offer impressions cURL Copy curl --request POST \ --url https://zeroclick.dev/api/v2/impressions \ --header 'Content-Type: application/json' \ --data ' { "ids": [\ "a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "b2c3d4e5-f6a7-8901-bcde-f23456789012"\ ] } ' 500 Copy { "error": { "message": "" } } POST / api / v2 / impressions Try it Track offer impressions cURL Copy curl --request POST \ --url https://zeroclick.dev/api/v2/impressions \ --header 'Content-Type: application/json' \ --data ' { "ids": [\ "a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "b2c3d4e5-f6a7-8901-bcde-f23456789012"\ ] } ' 500 Copy { "error": { "message": "" } } #### Body application/json [​](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions#body-ids) ids string\[\] required Array of offer IDs that were displayed to the user. These are the "id" values from the offers response. #### Response 204 Impressions recorded successfully (no content returned) [Get ZeroClick offers](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers) [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) ⌘I --- # MCP Ad Server - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/mcp-overview#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation MCP Ad Server MCP Ad Server On this page * [How It Works](https://developer.zeroclick.ai/docs/offers/mcp-overview#how-it-works) * [When to Use MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview#when-to-use-mcp-ad-server) * [Server Configuration](https://developer.zeroclick.ai/docs/offers/mcp-overview#server-configuration) * [Available Tools](https://developer.zeroclick.ai/docs/offers/mcp-overview#available-tools) * [Example Request](https://developer.zeroclick.ai/docs/offers/mcp-overview#example-request) * [Next Steps](https://developer.zeroclick.ai/docs/offers/mcp-overview#next-steps) The MCP Ad Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides AI assistants with tools to fetch and display relevant offers for commercial, informational, local, or technical searches. The server is designed to integrate seamlessly with AI assistants, providing contextually relevant offers that can be woven into responses or displayed as recommendations. [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#how-it-works) How It Works ----------------------------------------------------------------------------------------- Your LLM automatically selects offer tools based on user intent and weaves product recommendations into the conversation. Copy User: "What are the best running shoes?" ↓ Your LLM: ├── Understands: User wants product recommendations ├── Selects tool: get_commerce_offers ├── Calls MCP: ZeroClick.get_commerce_offers("running shoes") ↓ ZeroClick: └── Returns: Array of running shoe offers ↓ Your LLM: └── Generates response with embedded offers [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#when-to-use-mcp-ad-server) When to Use MCP Ad Server ------------------------------------------------------------------------------------------------------------------- * Building an AI assistant where offers should appear inline with responses * You want the LLM to decide when/where to show offers * You prefer automatic tool selection over manual ad placement [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#server-configuration) Server Configuration --------------------------------------------------------------------------------------------------------- **Server URL:** `https://mcp.zeroclick.ai` Copy import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const transport = new StreamableHTTPClientTransport({ baseUrl: "https://mcp.zeroclick.ai", headers: { "x-tenant-api-key": "your-api-key", "x-tenant-llm-model": "gpt-4o", "x-tenant-grouping-id": "website-1", "x-tenant-user-id": "user123", "Accept": "application/json text/event-stream" } }); const client = new Client({ name: "your-app", version: "1.0.0" }, { capabilities: {} }); await client.connect(transport); const tools = await client.listTools(); [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#available-tools) Available Tools ----------------------------------------------------------------------------------------------- See [Tools Reference](https://developer.zeroclick.ai/docs/offers/mcp-tools) for detailed documentation. [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#example-request) Example Request ----------------------------------------------------------------------------------------------- Copy curl -X POST https://mcp.zeroclick.ai \ -H "Content-Type: application/json" \ -H "x-tenant-api-key: your-api-key-here" \ -H "x-tenant-llm-model: gpt-4o" \ -H "x-tenant-grouping-id: website-1" \ -H "x-tenant-user-id: user123" \ -H "Accept: application/json text/event-stream" \ -d '{ "jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1 }' * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-overview#next-steps) Next Steps ------------------------------------------------------------------------------------- [Quick Start\ -----------\ \ Get started with the MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-quickstart) [Tools Reference\ ---------------\ \ Detailed tool documentation](https://developer.zeroclick.ai/docs/offers/mcp-tools) [Technical Reference\ -------------------\ \ Connection protocol and headers](https://developer.zeroclick.ai/docs/offers/mcp-reference) [REST API\ --------\ \ Recommended: Full control over ads](https://developer.zeroclick.ai/docs/offers/rest-api) [Track offer impressions](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions) [Quickstart](https://developer.zeroclick.ai/docs/offers/mcp-quickstart) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Headers Reference - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection/headers#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Signal Collection Headers Reference On this page * [Required Headers](https://developer.zeroclick.ai/docs/signal-collection/headers#required-headers) * [Authentication](https://developer.zeroclick.ai/docs/signal-collection/headers#authentication) * [User Context Headers](https://developer.zeroclick.ai/docs/signal-collection/headers#user-context-headers) * [x-zc-user-id](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-id) * [x-zc-user-session-id](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-session-id) * [x-zc-user-locale](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-locale) * [x-zc-grouping-id](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-grouping-id) * [x-zc-user-ip](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-ip) * [x-zc-user-agent](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-agent) * [Application Context Headers](https://developer.zeroclick.ai/docs/signal-collection/headers#application-context-headers) * [x-zc-llm-model](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-llm-model) * [Privacy-Safe PII Headers](https://developer.zeroclick.ai/docs/signal-collection/headers#privacy-safe-pii-headers) * [x-zc-user-email-sha256](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-email-sha256) * [x-zc-user-phone-sha256](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-phone-sha256) * [Example: Full Header Set](https://developer.zeroclick.ai/docs/signal-collection/headers#example-full-header-set) * [Hashing Helper](https://developer.zeroclick.ai/docs/signal-collection/headers#hashing-helper) This page documents all headers accepted by the MCP Signal Server for signal collection. [​](https://developer.zeroclick.ai/docs/signal-collection/headers#required-headers) Required Headers ------------------------------------------------------------------------------------------------------- | Header | Description | | --- | --- | | `x-zc-api-key` | Your ZeroClick API key for authentication | | `x-zc-llm-model` | LLM model identifier (e.g., `openai/gpt-4o`, `anthropic/claude-sonnet-4.5`) | | `Content-Type` | Must be `application/json` | | `Accept` | Must include `application/json, text/event-stream` | [​](https://developer.zeroclick.ai/docs/signal-collection/headers#authentication) Authentication --------------------------------------------------------------------------------------------------- The `x-zc-api-key` header is required for all requests: Copy x-zc-api-key: YOUR_API_KEY Obtain your API key from the [ZeroClick Developer Portal](https://developer.zeroclick.ai/apikeys) (contact [developers@zeroclick.ai](mailto:developers@zeroclick.ai) for access). Requests without a valid API key will receive a `401 Unauthorized` response. [​](https://developer.zeroclick.ai/docs/signal-collection/headers#user-context-headers) User Context Headers --------------------------------------------------------------------------------------------------------------- All user context headers use the `x-zc-user-*` prefix to clearly identify end-user information. ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-id) x-zc-user-id Copy x-zc-user-id: user-123 A unique identifier for the end user. This can be your internal user ID, a hashed value, or any consistent identifier. * **Format**: String, max 255 characters * **Use case**: Aggregate signals per user for personalization ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-session-id) x-zc-user-session-id Copy x-zc-user-session-id: session-abc-456 Current session or chat thread. * **Format**: String, max 255 characters * **Use case**: Group signals within a single conversation or browsing session ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-locale) x-zc-user-locale Copy x-zc-user-locale: en-US The end user’s locale or language preference. * **Format**: String, max 35 characters (BCP 47 language tag) * **Use case**: Localization and language-specific signal analysis * **Examples**: `en-US`, `fr-FR`, `zh-Hans-CN` ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-grouping-id) x-zc-grouping-id Copy x-zc-grouping-id: campaign-summer-2024 An optional grouping identifier for organizing signals. * **Format**: String, max 255 characters * **Use case**: Group signals by campaign, experiment, or custom segmentation ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-ip) x-zc-user-ip Copy x-zc-user-ip: 192.168.1.1 The end user’s IP address. * **Format**: String, max 45 characters (supports IPv4 and IPv6) ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-agent) x-zc-user-agent Copy x-zc-user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)... The end user’s browser or client user agent string. * **Format**: String, max 1000 characters * **Use case**: Device and browser analytics [​](https://developer.zeroclick.ai/docs/signal-collection/headers#application-context-headers) Application Context Headers ----------------------------------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-llm-model) x-zc-llm-model Copy x-zc-llm-model: openai/gpt-4o **Required.** The LLM model used in your application. * **Format**: String, max 64 characters **Examples:** * `openai/gpt-4o` - OpenAI GPT-4o * `anthropic/claude-sonnet-4.5` - Anthropic Claude Sonnet 4.5 * `google/gemini-3-flash` - Google Gemini 3.0 Flash For consistency, we recommend using the model identifiers listed by [Vercel](https://vercel.com/ai-gateway/models) . [​](https://developer.zeroclick.ai/docs/signal-collection/headers#privacy-safe-pii-headers) Privacy-Safe PII Headers ----------------------------------------------------------------------------------------------------------------------- For identity resolution across platforms, you can pass hashed PII values: Never send raw email or phone values. Always hash with SHA256 before sending. ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-email-sha256) x-zc-user-email-sha256 Copy x-zc-user-email-sha256: 5d41402abc4b2a76b9719d911017c592... SHA256 hash of the user’s lowercase, trimmed email address. * **Format**: 64-character hexadecimal string * **Preparation**: `SHA256(email.toLowerCase().trim())` ### [​](https://developer.zeroclick.ai/docs/signal-collection/headers#x-zc-user-phone-sha256) x-zc-user-phone-sha256 Copy x-zc-user-phone-sha256: 7d793037a0760186574b0282f2f435e7... SHA256 hash of the user’s phone number in E.164 format. * **Format**: 64-character hexadecimal string * **Preparation**: `SHA256(phone)` where phone is in E.164 format (e.g., `+14155551234`) [​](https://developer.zeroclick.ai/docs/signal-collection/headers#example-full-header-set) Example: Full Header Set ---------------------------------------------------------------------------------------------------------------------- Copy const headers = { // Required "x-zc-api-key": "your-api-key", "Content-Type": "application/json", "Accept": "application/json, text/event-stream", // User context "x-zc-user-id": "user-12345", "x-zc-user-session-id": "session-abc-789", "x-zc-user-locale": "en-US", "x-zc-grouping-id": "campaign-summer-2024", "x-zc-user-ip": clientIp, "x-zc-user-agent": req.headers["user-agent"], // Application context "x-zc-llm-model": "openai/gpt-4o", // Privacy-safe PII (hashed) "x-zc-user-email-sha256": sha256(email.toLowerCase().trim()), "x-zc-user-phone-sha256": sha256(phone) }; [​](https://developer.zeroclick.ai/docs/signal-collection/headers#hashing-helper) Hashing Helper --------------------------------------------------------------------------------------------------- Here’s a helper function for SHA256 hashing: Copy import { createHash } from "crypto"; function sha256(value: string): string { return createHash("sha256").update(value).digest("hex"); } // Usage const emailHash = sha256(email.toLowerCase().trim()); const phoneHash = sha256("+14155551234"); // E.164 format [Setup](https://developer.zeroclick.ai/docs/signal-collection/setup) [Tool Reference](https://developer.zeroclick.ai/docs/signal-collection/tools) ⌘I --- # Setup - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection/setup#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Signal Collection Setup On this page * [Prerequisites](https://developer.zeroclick.ai/docs/signal-collection/setup#prerequisites) * [Server URL](https://developer.zeroclick.ai/docs/signal-collection/setup#server-url) * [SDK Integration](https://developer.zeroclick.ai/docs/signal-collection/setup#sdk-integration) * [TypeScript / JavaScript](https://developer.zeroclick.ai/docs/signal-collection/setup#typescript-%2F-javascript) * [Connection Lifecycle](https://developer.zeroclick.ai/docs/signal-collection/setup#connection-lifecycle) * [Next Steps](https://developer.zeroclick.ai/docs/signal-collection/setup#next-steps) This guide walks you through integrating the MCP Signal Server into your AI agent. [​](https://developer.zeroclick.ai/docs/signal-collection/setup#prerequisites) Prerequisites ----------------------------------------------------------------------------------------------- * A [ZeroClick API key](https://developer.zeroclick.ai/apikeys) (contact [developers@zeroclick.ai](mailto:developers@zeroclick.ai) for access) * An AI agent that supports the Model Context Protocol (MCP) [​](https://developer.zeroclick.ai/docs/signal-collection/setup#server-url) Server URL ----------------------------------------------------------------------------------------- Copy https://zeroclick.dev/mcp/v2 The server uses MCP over HTTP with Server-Sent Events (SSE) for streaming responses. [​](https://developer.zeroclick.ai/docs/signal-collection/setup#sdk-integration) SDK Integration --------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/setup#typescript-/-javascript) TypeScript / JavaScript Use the official MCP SDK with the remote transport: Copy npm install @modelcontextprotocol/sdk Copy import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; // Create the transport with your headers const transport = new StreamableHTTPClientTransport( new URL("https://zeroclick.dev/mcp/v2"), { requestInit: { headers: { "x-zc-api-key": process.env.ZEROCLICK_API_KEY } } } ); // Create and connect the client const client = new Client({ name: "your-agent", version: "1.0.0" }); await client.connect(transport); // List available tools to pass to your LLM const { tools } = await client.listTools(); console.log("Available tools:", tools); See the [Headers Reference](https://developer.zeroclick.ai/docs/signal-collection/headers) for the complete list of available headers. [​](https://developer.zeroclick.ai/docs/signal-collection/setup#connection-lifecycle) Connection Lifecycle ------------------------------------------------------------------------------------------------------------- The MCP client maintains a persistent connection. For production use: 1. **Create one client per user session**: Don’t share clients across users 2. **Handle reconnection**: Implement retry logic for network failures 3. **Close connections**: Call `client.close()` when the session ends Copy // Graceful shutdown process.on("SIGTERM", async () => { await client.close(); process.exit(0); }); [​](https://developer.zeroclick.ai/docs/signal-collection/setup#next-steps) Next Steps ----------------------------------------------------------------------------------------- * [Headers Reference](https://developer.zeroclick.ai/docs/signal-collection/headers) - Configure context headers * [Tool Reference](https://developer.zeroclick.ai/docs/signal-collection/tools) - Understand the broadcast\_signal tool * [Testing](https://developer.zeroclick.ai/docs/signal-collection/testing) - Verify your integration [Overview](https://developer.zeroclick.ai/docs/signal-collection/overview) [Headers Reference](https://developer.zeroclick.ai/docs/signal-collection/headers) ⌘I --- # Quickstart - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/quickstart#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Getting Started Quickstart On this page * [Get Your API Key](https://developer.zeroclick.ai/docs/quickstart#get-your-api-key) * [1\. Fetch Offers](https://developer.zeroclick.ai/docs/quickstart#1-fetch-offers) * [2\. Render Offers](https://developer.zeroclick.ai/docs/quickstart#2-render-offers) * [3\. Track Impressions](https://developer.zeroclick.ai/docs/quickstart#3-track-impressions) * [What’s Next?](https://developer.zeroclick.ai/docs/quickstart#what%E2%80%99s-next) * [Troubleshooting](https://developer.zeroclick.ai/docs/quickstart#troubleshooting) Get up and running with ZeroClick using the REST API. You’ll fetch personalized offers, render them, and track impressions. Looking for MCP integration instead? See the [MCP Overview](https://developer.zeroclick.ai/docs/offers/mcp-overview) . [​](https://developer.zeroclick.ai/docs/quickstart#get-your-api-key) Get Your API Key ---------------------------------------------------------------------------------------- 1. Visit the [Developer Dashboard](https://developer.zeroclick.ai/) 2. Sign up or log in 3. Navigate to **App API Keys** → **Create API Key** 4. Copy your key For production, use server-side integration to keep keys secure. [​](https://developer.zeroclick.ai/docs/quickstart#1-fetch-offers) 1\. Fetch Offers -------------------------------------------------------------------------------------- Make a POST request to `/api/v2/offers` with your query: Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" // Get from developer dashboard }, body: JSON.stringify({ method: "client", // or "server" for backend query: "best running shoes", limit: 3 }) }); const offers = await response.json(); console.log(offers); **Expected response:** Copy [\ {\ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",\ "title": "Nike Air Zoom Pegasus 40",\ "subtitle": "Premium running shoe for daily training",\ "content": "Responsive cushioning and breathable mesh upper...",\ "cta": "Shop Now",\ "clickUrl": "https://zero.click/1234...",\ "imageUrl": "https://example.com/pegasus40.jpg",\ "brand": {\ "name": "Nike",\ "url": "https://nike.com"\ },\ "price": {\ "amount": "129.99",\ "currency": "USD"\ }\ }\ ] Server-side example When calling from your backend, use `method: "server"` and forward the client’s IP: Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "server", ipAddress: clientIpAddress, // required for server method userAgent: clientUserAgent, // optional but recommended query: "best running shoes", limit: 3 }) }); [​](https://developer.zeroclick.ai/docs/quickstart#2-render-offers) 2\. Render Offers ---------------------------------------------------------------------------------------- Display the offers in your UI however you’d like: Copy offers.forEach(offer => { const card = `
${offer.title}

${offer.title}

${offer.content}

${offer.cta} ${offer.price.currency} ${offer.price.amount}
`; document.querySelector('#offers').innerHTML += card; }); [​](https://developer.zeroclick.ai/docs/quickstart#3-track-impressions) 3\. Track Impressions ------------------------------------------------------------------------------------------------ Call the impressions endpoint when offers are displayed: Copy // Track all displayed offers await fetch("https://zeroclick.dev/api/v2/impressions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ids: offers.map(offer => offer.id) }) }); The impressions endpoint must be called from client devices for accurate tracking. * * * [​](https://developer.zeroclick.ai/docs/quickstart#what%E2%80%99s-next) What’s Next? --------------------------------------------------------------------------------------- [Offers Reference\ ----------------\ \ Learn about parameters and response schemas](https://developer.zeroclick.ai/docs/offers) [Signal Collection\ -----------------\ \ Improve offer quality with user preferences](https://developer.zeroclick.ai/docs/signal-collection) [Integration Guide\ -----------------\ \ Compare REST API and MCP integration](https://developer.zeroclick.ai/docs/integration-guide) * * * [​](https://developer.zeroclick.ai/docs/quickstart#troubleshooting) Troubleshooting -------------------------------------------------------------------------------------- **401 Unauthorized:** * Check that your API key is correct * Verify you’re using the `x-zc-api-key` header Need help? Email [developers@zeroclick.ai](mailto:developers@zeroclick.ai) [What is ZeroClick](https://developer.zeroclick.ai/docs/what-is-zeroclick) ⌘I --- # Testing - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection/testing#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Signal Collection Testing On this page * [Manual Testing with cURL](https://developer.zeroclick.ai/docs/signal-collection/testing#manual-testing-with-curl) * [Test Authentication](https://developer.zeroclick.ai/docs/signal-collection/testing#test-authentication) * [List Available Tools](https://developer.zeroclick.ai/docs/signal-collection/testing#list-available-tools) * [Send a Test Signal](https://developer.zeroclick.ai/docs/signal-collection/testing#send-a-test-signal) * [SDK Testing](https://developer.zeroclick.ai/docs/signal-collection/testing#sdk-testing) * [TypeScript Test Script](https://developer.zeroclick.ai/docs/signal-collection/testing#typescript-test-script) * [Common Issues](https://developer.zeroclick.ai/docs/signal-collection/testing#common-issues) * [401 Unauthorized](https://developer.zeroclick.ai/docs/signal-collection/testing#401-unauthorized) * [Connection Timeout](https://developer.zeroclick.ai/docs/signal-collection/testing#connection-timeout) * [Invalid Signal Schema](https://developer.zeroclick.ai/docs/signal-collection/testing#invalid-signal-schema) * [Tool Not Found](https://developer.zeroclick.ai/docs/signal-collection/testing#tool-not-found) * [Debugging Tips](https://developer.zeroclick.ai/docs/signal-collection/testing#debugging-tips) * [Enable SDK Logging](https://developer.zeroclick.ai/docs/signal-collection/testing#enable-sdk-logging) * [Log All Headers](https://developer.zeroclick.ai/docs/signal-collection/testing#log-all-headers) * [Validate Signal Before Sending](https://developer.zeroclick.ai/docs/signal-collection/testing#validate-signal-before-sending) * [Verifying Signals Were Received](https://developer.zeroclick.ai/docs/signal-collection/testing#verifying-signals-were-received) This guide covers how to test your Signal Collection integration and troubleshoot common issues. [​](https://developer.zeroclick.ai/docs/signal-collection/testing#manual-testing-with-curl) Manual Testing with cURL ----------------------------------------------------------------------------------------------------------------------- You can test the MCP Signal Server directly using cURL. The server uses the MCP JSON-RPC protocol. ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#test-authentication) Test Authentication Verify your API key is valid: Copy curl -X POST https://zeroclick.dev/mcp/v2 \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "x-zc-api-key: YOUR_API_KEY" \ -d '{ "jsonrpc": "2.0", "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": { "name": "test-client", "version": "1.0.0" } }, "id": 1 }' **Expected response**: Server capabilities and protocol version. **Error response** (invalid key): Copy { "error": "Unauthorized" } ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#list-available-tools) List Available Tools Copy curl -X POST https://zeroclick.dev/mcp/v2 \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "x-zc-api-key: YOUR_API_KEY" \ -d '{ "jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 2 }' **Expected response**: List of available tools including `broadcast_signal`. ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#send-a-test-signal) Send a Test Signal Copy curl -X POST https://zeroclick.dev/mcp/v2 \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "x-zc-api-key: YOUR_API_KEY" \ -H "x-zc-user-id: test-user-123" \ -H "x-zc-user-session-id: test-session-456" \ -H "x-zc-user-locale: en-US" \ -H "x-zc-grouping-id: test-campaign" \ -d '{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "broadcast_signal", "arguments": { "signals": [{\ "category": "interest",\ "confidence": 0.85,\ "subject": "test signal",\ "sentiment": "positive"\ }] } }, "id": 3 }' **Expected response**: Copy { "content": [\ {\ "type": "text",\ "text": "Signals broadcasted successfully"\ }\ ], "structuredContent": { "success": true } } [​](https://developer.zeroclick.ai/docs/signal-collection/testing#sdk-testing) SDK Testing --------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#typescript-test-script) TypeScript Test Script Copy import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; async function testConnection() { const transport = new StreamableHTTPClientTransport( new URL("https://zeroclick.dev/mcp/v2"), { requestInit: { headers: { "x-zc-api-key": process.env.ZEROCLICK_API_KEY! } } } ); const client = new Client({ name: "test-client", version: "1.0.0" }); try { // Test connection await client.connect(transport); console.log("Connected successfully"); // List tools const { tools } = await client.listTools(); console.log("Available tools:", tools.map(t => t.name)); // Send test signal const result = await client.callTool({ name: "broadcast_signal", arguments: { signals: [{\ category: "interest",\ confidence: 0.85,\ subject: "test signal"\ }] } }); console.log("Signal result:", result); await client.close(); console.log("Test completed successfully"); } catch (error) { console.error("Test failed:", error); process.exit(1); } } testConnection(); Run the test: Copy ZEROCLICK_API_KEY=your-key npx tsx test-connection.ts [​](https://developer.zeroclick.ai/docs/signal-collection/testing#common-issues) Common Issues ------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#401-unauthorized) 401 Unauthorized **Cause**: Invalid or missing API key. **Solution**: * Verify your API key is correct * Ensure the header is `x-zc-api-key` (not `x-tenant-api-key`) * Check for extra whitespace in the key ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#connection-timeout) Connection Timeout **Cause**: Network issues or firewall blocking. **Solution**: * Verify you can reach `zeroclick.dev` * Check if your network allows HTTPS connections * Try from a different network ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#invalid-signal-schema) Invalid Signal Schema **Cause**: Signal data doesn’t match expected format. **Example error**: Copy { "error": { "code": -32602, "message": "Invalid params: confidence must be between 0 and 1" } } **Solution**: * Ensure `confidence` is a number between 0.0 and 1.0 * Ensure `category` is one of the valid categories * Ensure `subject` is a non-empty string under 500 characters * Ensure `signals` array has 1-10 items ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#tool-not-found) Tool Not Found **Cause**: Calling a tool that doesn’t exist. **Solution**: Use `tools/list` to see available tools. Signal Collection only exposes `broadcast_signal`. [​](https://developer.zeroclick.ai/docs/signal-collection/testing#debugging-tips) Debugging Tips --------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#enable-sdk-logging) Enable SDK Logging Copy const client = new Client({ name: "your-agent", version: "1.0.0" }, { // Enable debug logging logger: console }); ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#log-all-headers) Log All Headers Verify your headers are being sent correctly: Copy const headers = { "x-zc-api-key": process.env.ZEROCLICK_API_KEY, "x-zc-user-id": userId, "x-zc-user-session-id": sessionId, "x-zc-user-locale": userLocale, "x-zc-grouping-id": groupingId }; // Log headers (redact API key in production) console.log("Request headers:", { ...headers, "x-zc-api-key": headers["x-zc-api-key"] ? "[REDACTED]" : "MISSING" }); ### [​](https://developer.zeroclick.ai/docs/signal-collection/testing#validate-signal-before-sending) Validate Signal Before Sending Copy function validateSignal(signal: unknown): boolean { if (typeof signal !== "object" || signal === null) return false; const s = signal as Record; // Required fields if (typeof s.category !== "string") return false; if (typeof s.confidence !== "number" || s.confidence < 0 || s.confidence > 1) return false; if (typeof s.subject !== "string" || s.subject.length === 0 || s.subject.length > 500) return false; // Valid categories const validCategories = [\ "interest", "evaluation", "problem", "purchase_intent",\ "price_sensitivity", "brand_affinity", "user_context",\ "business_context", "recommendation_request"\ ]; if (!validCategories.includes(s.category)) return false; return true; } [​](https://developer.zeroclick.ai/docs/signal-collection/testing#verifying-signals-were-received) Verifying Signals Were Received ------------------------------------------------------------------------------------------------------------------------------------- Contact your ZeroClick integration specialist to verify signals are being received correctly. [Tool Reference](https://developer.zeroclick.ai/docs/signal-collection/tools) ⌘I --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection/overview#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Signal Collection Overview On this page * [Why Use Signal Collection?](https://developer.zeroclick.ai/docs/signal-collection/overview#why-use-signal-collection) * [How It Works](https://developer.zeroclick.ai/docs/signal-collection/overview#how-it-works) * [Key Features](https://developer.zeroclick.ai/docs/signal-collection/overview#key-features) * [Signal Categories](https://developer.zeroclick.ai/docs/signal-collection/overview#signal-categories) * [Next Steps](https://developer.zeroclick.ai/docs/signal-collection/overview#next-steps) The MCP Signal Server allows AI assistants to silently collect commercial intent signals from user conversations. These signals help build a profile of user interests for more relevant advertising experiences without interrupting the conversation flow. **Signal Collection is optional but highly recommended.** You can deliver offers via the [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) or [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) without Signal Collection, but enabling it significantly improves ad relevance and personalization. [​](https://developer.zeroclick.ai/docs/signal-collection/overview#why-use-signal-collection) Why Use Signal Collection? --------------------------------------------------------------------------------------------------------------------------- **Without Signal Collection:** * Offers are matched based only on the current query * Limited personalization * No learning from past interactions **With Signal Collection:** * Offers are matched using accumulated user context and preferences * Highly personalized recommendations * Continuous improvement over time [​](https://developer.zeroclick.ai/docs/signal-collection/overview#how-it-works) How It Works ------------------------------------------------------------------------------------------------ When enabled, Signal Collection works as follows: 1. **Connect your agent**: Your AI agent connects to the ZeroClick Signal Collection server 2. **Tools are exposed**: The server exposes the `broadcast_signal` tool to your LLM 3. **Automatic signal collection**: The LLM can call `broadcast_signal` when it detects commercial intent 4. **Profile building**: Signals are stored and aggregated per user to build preference profiles 5. **Better ads**: Later, when you request offers via [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) or [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) , ZeroClick uses these signals to deliver more relevant ads The signal collection is completely transparent to the end user - no visible output is generated. [​](https://developer.zeroclick.ai/docs/signal-collection/overview#key-features) Key Features ------------------------------------------------------------------------------------------------ * **Silent collection**: When enabled, signals are collected without interrupting conversations * **Automatic extraction**: The LLM decides when to extract signals based on conversation context * **Flexible context**: Configure user context via headers for attribution * **Privacy-first**: No cookies, PII must be hashed * **MCP standard**: Uses the [Model Context Protocol](https://modelcontextprotocol.io/) for seamless integration [​](https://developer.zeroclick.ai/docs/signal-collection/overview#signal-categories) Signal Categories ---------------------------------------------------------------------------------------------------------- The `broadcast_signal` tool can extract the following types of commercial intent: | Category | Description | Example | | --- | --- | --- | | `interest` | General interest in a product or topic | ”I’ve been thinking about getting a new laptop” | | `evaluation` | Actively comparing options | ”How does React compare to Vue?” | | `problem` | Has a problem needing a solution | ”My current database is too slow” | | `purchase_intent` | Active intent to buy | ”I want to buy running shoes” | | `price_sensitivity` | Budget indicators | ”Looking for something under $500” | | `brand_affinity` | Brand preferences | ”I prefer Apple products” | | `user_context` | Personal context | ”As a student…” | | `business_context` | Professional context | ”For our enterprise team…” | | `recommendation_request` | Asking for recommendations | ”What CI/CD tool do you recommend?” | [​](https://developer.zeroclick.ai/docs/signal-collection/overview#next-steps) Next Steps -------------------------------------------------------------------------------------------- [Setup\ -----\ \ Configure and connect to Signal Collection](https://developer.zeroclick.ai/docs/signal-collection/setup) [Headers Reference\ -----------------\ \ Complete reference for all available headers](https://developer.zeroclick.ai/docs/signal-collection/headers) [Tool Reference\ --------------\ \ Detailed documentation of the broadcast\_signal tool](https://developer.zeroclick.ai/docs/signal-collection/tools) [Testing\ -------\ \ Test your integration and debug issues](https://developer.zeroclick.ai/docs/signal-collection/testing) [Setup](https://developer.zeroclick.ai/docs/signal-collection/setup) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Tool Reference - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection/tools#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation Signal Collection Tool Reference On this page * [broadcast\_signal](https://developer.zeroclick.ai/docs/signal-collection/tools#broadcast_signal) * [Input Schema](https://developer.zeroclick.ai/docs/signal-collection/tools#input-schema) * [Limits](https://developer.zeroclick.ai/docs/signal-collection/tools#limits) * [Signal Fields](https://developer.zeroclick.ai/docs/signal-collection/tools#signal-fields) * [Required Fields](https://developer.zeroclick.ai/docs/signal-collection/tools#required-fields) * [Optional Fields](https://developer.zeroclick.ai/docs/signal-collection/tools#optional-fields) * [Signal Categories](https://developer.zeroclick.ai/docs/signal-collection/tools#signal-categories) * [Example Signals](https://developer.zeroclick.ai/docs/signal-collection/tools#example-signals) * [Simple Interest Signal](https://developer.zeroclick.ai/docs/signal-collection/tools#simple-interest-signal) * [Detailed Purchase Intent Signal](https://developer.zeroclick.ai/docs/signal-collection/tools#detailed-purchase-intent-signal) * [Multiple Signals](https://developer.zeroclick.ai/docs/signal-collection/tools#multiple-signals) * [DevTools Context Signal](https://developer.zeroclick.ai/docs/signal-collection/tools#devtools-context-signal) * [Response Format](https://developer.zeroclick.ai/docs/signal-collection/tools#response-format) * [Confidence Score Guidelines](https://developer.zeroclick.ai/docs/signal-collection/tools#confidence-score-guidelines) * [Attributes Best Practices](https://developer.zeroclick.ai/docs/signal-collection/tools#attributes-best-practices) The MCP Signal Server exposes a single tool: `broadcast_signal`. This tool is automatically called by the LLM when it detects commercial intent in the conversation. [​](https://developer.zeroclick.ai/docs/signal-collection/tools#broadcast_signal) broadcast\_signal ------------------------------------------------------------------------------------------------------ Silently collects commercial intent signals extracted from user conversations. **Purpose**: Extract user intent signals without generating visible output to users. [​](https://developer.zeroclick.ai/docs/signal-collection/tools#input-schema) Input Schema --------------------------------------------------------------------------------------------- Copy { "type": "object", "properties": { "signals": { "type": "array", "items": { "type": "object", "required": ["category", "confidence", "subject"], "properties": { "category": { "type": "string" }, "confidence": { "type": "number" }, "subject": { "type": "string" }, "relatedSubjects": { "type": "array" }, "sentiment": { "type": "string" }, "attributes": { "type": "object" }, "extractionReason": { "type": "string" }, "sourceContext": { "type": "string" } } } } }, "required": ["signals"] } [​](https://developer.zeroclick.ai/docs/signal-collection/tools#limits) Limits --------------------------------------------------------------------------------- * **Signals per call**: 1-10 signals maximum * **Subject length**: 1-500 characters * **Related subjects**: Maximum 10 items [​](https://developer.zeroclick.ai/docs/signal-collection/tools#signal-fields) Signal Fields ----------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#required-fields) Required Fields | Field | Type | Description | | --- | --- | --- | | `category` | string | The type of commercial intent (see categories below) | | `confidence` | number | Confidence score between 0.0 and 1.0. Use 0.8+ for explicit statements, 0.5-0.8 for implied signals | | `subject` | string | Primary subject of the signal. Be specific: “PostgreSQL database” not “database”, “Nike running shoes” not “shoes” | ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#optional-fields) Optional Fields | Field | Type | Description | | --- | --- | --- | | `relatedSubjects` | string\[\] | Related topics, brands, or products (max 10 items) | | `sentiment` | string | User sentiment: `positive`, `negative`, or `neutral` | | `attributes` | object | Key-value pairs for additional context | | `extractionReason` | string | Why this signal was extracted (max 1000 characters) | | `sourceContext` | string | Original text that triggered extraction (max 2000 characters) | [​](https://developer.zeroclick.ai/docs/signal-collection/tools#signal-categories) Signal Categories ------------------------------------------------------------------------------------------------------- | Category | Description | When to Use | | --- | --- | --- | | `interest` | General interest in a product, service, or topic | User mentions or asks about something | | `evaluation` | Actively comparing or evaluating options | User compares alternatives | | `problem` | Has a problem that needs solving | User describes a pain point | | `purchase_intent` | Active intent to buy or subscribe | User expresses wanting to buy | | `price_sensitivity` | Budget or price range indicators | User mentions budget constraints | | `brand_affinity` | Preference towards a specific brand | User shows brand preference | | `user_context` | Personal context (homeowner, student, parent, etc.) | User reveals personal situation | | `business_context` | Professional context (company size, industry, role) | User reveals work context | | `recommendation_request` | Explicitly asking for recommendations | User asks for suggestions | [​](https://developer.zeroclick.ai/docs/signal-collection/tools#example-signals) Example Signals --------------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#simple-interest-signal) Simple Interest Signal Copy { "signals": [{\ "category": "interest",\ "confidence": 0.75,\ "subject": "wireless headphones"\ }] } ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#detailed-purchase-intent-signal) Detailed Purchase Intent Signal Copy { "signals": [{\ "category": "purchase_intent",\ "confidence": 0.92,\ "subject": "laptop",\ "relatedSubjects": ["MacBook", "programming", "portable"],\ "sentiment": "positive",\ "attributes": {\ "budget": "under $2000",\ "use_case": "software development",\ "priority": "battery life"\ },\ "extractionReason": "User explicitly stated intent to purchase a laptop for coding",\ "sourceContext": "I need to buy a new laptop for programming. Budget is around $2000, and battery life is important since I travel a lot."\ }] } ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#multiple-signals) Multiple Signals Copy { "signals": [\ {\ "category": "problem",\ "confidence": 0.85,\ "subject": "slow database queries",\ "sentiment": "negative",\ "attributes": {\ "technology": "PostgreSQL",\ "scale": "10M+ rows"\ }\ },\ {\ "category": "recommendation_request",\ "confidence": 0.90,\ "subject": "database optimization tools",\ "relatedSubjects": ["PostgreSQL", "query optimization", "performance"]\ }\ ] } ### [​](https://developer.zeroclick.ai/docs/signal-collection/tools#devtools-context-signal) DevTools Context Signal Copy { "signals": [{\ "category": "evaluation",\ "confidence": 0.88,\ "subject": "React vs Vue",\ "relatedSubjects": ["frontend framework", "JavaScript", "SPA"],\ "sentiment": "neutral",\ "attributes": {\ "team_size": "5-10 developers",\ "project_type": "enterprise dashboard"\ },\ "extractionReason": "User is comparing frontend frameworks for a new project"\ }] } [​](https://developer.zeroclick.ai/docs/signal-collection/tools#response-format) Response Format --------------------------------------------------------------------------------------------------- Successful signal broadcasts return: Copy { "content": [\ {\ "type": "text",\ "text": "Signals broadcasted successfully"\ }\ ], "structuredContent": { "success": true } } The response text is intentionally minimal to avoid disrupting the conversation flow. [​](https://developer.zeroclick.ai/docs/signal-collection/tools#confidence-score-guidelines) Confidence Score Guidelines --------------------------------------------------------------------------------------------------------------------------- | Score Range | Interpretation | Example | | --- | --- | --- | | 0.9 - 1.0 | Explicit, unambiguous intent | ”I want to buy a MacBook Pro” | | 0.7 - 0.9 | Strong implied intent | ”I’ve been looking at MacBooks lately” | | 0.5 - 0.7 | Moderate interest | ”MacBooks seem nice for development” | | 0.3 - 0.5 | Weak or tangential interest | ”My friend has a MacBook” | | 0.0 - 0.3 | Very weak signal | Brief mention without context | [​](https://developer.zeroclick.ai/docs/signal-collection/tools#attributes-best-practices) Attributes Best Practices ----------------------------------------------------------------------------------------------------------------------- The `attributes` field accepts arbitrary key-value pairs. Common useful attributes: | Key | Example Value | Description | | --- | --- | --- | | `budget` | ”under $500” | Price constraints | | `timeline` | ”this week” | Purchase urgency | | `use_case` | ”gaming” | Intended use | | `team_size` | ”50-100” | For B2B context | | `industry` | ”fintech” | Business vertical | | `priority` | ”performance” | Key decision factor | * Keys: max 100 characters * Values: max 500 characters [Headers Reference](https://developer.zeroclick.ai/docs/signal-collection/headers) [Testing](https://developer.zeroclick.ai/docs/signal-collection/testing) ⌘I --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/overview#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Offers Overview On this page * [REST API (Recommended)](https://developer.zeroclick.ai/docs/offers/overview#rest-api-recommended) * [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/overview#mcp-ad-server) * [Improve Offer Quality](https://developer.zeroclick.ai/docs/offers/overview#improve-offer-quality) ZeroClick provides two methods to retrieve and display offers in your application. Choose based on how you want ads to appear. [​](https://developer.zeroclick.ai/docs/offers/overview#rest-api-recommended) REST API (Recommended) ------------------------------------------------------------------------------------------------------- Fetch offers via HTTP and render them however you want. Full control over placement and timing. Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "client", query: "best running shoes" }) }); const offers = await response.json(); // Render offers in your UI [Get Started with REST API →](https://developer.zeroclick.ai/docs/offers/rest-api) * * * [​](https://developer.zeroclick.ai/docs/offers/overview#mcp-ad-server) MCP Ad Server --------------------------------------------------------------------------------------- Let your LLM automatically weave offers into chat responses. The LLM decides when and how to show offers. Copy User: "What are the best running shoes?" ↓ LLM calls get_commerce_offers("running shoes") ↓ LLM weaves offers into response [Learn about MCP Ad Server →](https://developer.zeroclick.ai/docs/offers/mcp-overview) * * * [​](https://developer.zeroclick.ai/docs/offers/overview#improve-offer-quality) Improve Offer Quality ------------------------------------------------------------------------------------------------------- Both methods benefit from [Signal Collection](https://developer.zeroclick.ai/docs/signal-collection) . When enabled, ZeroClick learns user preferences in the background and delivers more relevant offers. [Learn about Signal Collection →](https://developer.zeroclick.ai/docs/signal-collection) [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Tools - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/mcp-tools#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation MCP Ad Server Tools On this page * [Getting Tool Schemas](https://developer.zeroclick.ai/docs/offers/mcp-tools#getting-tool-schemas) * [Custom Offer Rendering](https://developer.zeroclick.ai/docs/offers/mcp-tools#custom-offer-rendering) * [Available Tools](https://developer.zeroclick.ai/docs/offers/mcp-tools#available-tools) * [get\_offers](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_offers) * [get\_commerce\_offers](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_commerce_offers) * [get\_local\_offers](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_local_offers) * [get\_information\_offers](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_information_offers) * [get\_technical\_offers](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_technical_offers) * [Next Steps](https://developer.zeroclick.ai/docs/offers/mcp-tools#next-steps) The tools available to your integration are selected by your ZeroClick integration specialist based on your product needs and fit. Not all tools listed below will be available to all clients, but this will be discussed with you during your onboarding. These tools should not need to be called manually - the LLM will intelligently select and use them based on user queries. This documentation is provided for developers who want to test tool outputs or understand the available functionality. [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#getting-tool-schemas) Getting Tool Schemas ------------------------------------------------------------------------------------------------------ To get detailed input/output schemas for all tools, use the OpenAPI specification endpoint. This documents the tools as REST APIs at POST /tools/:toolName. Tools may also be invoked via these REST APIs for manual integrations. Copy curl -H "x-tenant-api-key: YOUR_API_KEY" \ -H "x-tenant-llm-model: gpt-4o" \ https://mcp.zeroclick.ai/openapi This returns a complete OpenAPI specification describing all available tools, their input parameters, and response schemas. Fields marked as nullable are not guaranteed to appear in every response. Many advertisers provide different sets of data, so expect variability in which nullable fields are included per request. [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#custom-offer-rendering) Custom Offer Rendering ---------------------------------------------------------------------------------------------------------- If you need more control over how offers are displayed, there are two approaches for custom rendering: **Option 1: MCP Integration with Custom Rendering** Integrate the MCP Ad Server with your LLM but render the tool output yourself. Contact your ZeroClick integration specialist to request updated instructions that prevent the LLM from incorporating tool output into responses. You can then extract the structured data from the tool output and render it however you wish. **Option 2: REST API Integration** Use an LLM or other mechanism to determine when to call the tool and what input to send, then invoke the tool directly via REST (POST /tools/:toolName). You have full control over how to handle and display the response. For either approach, see the Getting Tool Schemas section above for instructions on retrieving the schema for the structured response. [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#available-tools) Available Tools -------------------------------------------------------------------------------------------- ### [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_offers) get\_offers Accepts a raw user query, parses intent, and returns relevant offers. May return commerce, information, or local offers based on the detected intent. **Use Cases:** * Useful for models that struggle with multiple tools and detailed intent classification instructions. ### [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_commerce_offers) get\_commerce\_offers Retrieves offers for commerce/transaction-related searches. **Use Cases:** * Product recommendations (“Best running shoes”) * Brand comparisons (“iPhone vs Samsung”) * Purchase intent (“Buy Nike Air Max”) * Deal searches (“Deals on TVs”) ### [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_local_offers) get\_local\_offers Fetches offers for local businesses and services. **Use Cases:** * Location-based searches (“Pizza near me”) * Local services (“Dentists in Seattle”) * Area-specific queries (“Gyms close to downtown”) ### [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_information_offers) get\_information\_offers Retrieves offers for information and educational content. **Use Cases:** * How-to guides (“How to choose ski goggles”) * Educational content (“What is GORE-TEX”) * Learning resources (“Guide to wine tasting”) ### [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#get_technical_offers) get\_technical\_offers Retrieves offers for B2B companies, SaaS products, and technical solutions. This tool is designed to surface relevant ads in AI-assisted coding surfaces or other highly technical environments. **Use Cases:** * Developer tools (“Best CI/CD platforms”) * SaaS recommendations (“Project management software for engineering teams”) * Cloud infrastructure (“AWS alternatives for startups”) * Technical services (“Code review tools”) * B2B solutions (“Enterprise authentication providers”) * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-tools#next-steps) Next Steps ---------------------------------------------------------------------------------- [Technical Reference\ -------------------\ \ Connection protocol, headers, error handling](https://developer.zeroclick.ai/docs/offers/mcp-reference) [MCP Overview\ ------------\ \ Back to MCP overview](https://developer.zeroclick.ai/docs/offers/mcp-overview) [Signal Collection\ -----------------\ \ Improve ad relevance with user signals](https://developer.zeroclick.ai/docs/signal-collection) [REST API\ --------\ \ Recommended: Full control over ads](https://developer.zeroclick.ai/docs/offers/rest-api) [Quickstart](https://developer.zeroclick.ai/docs/offers/mcp-quickstart) [Technical Reference](https://developer.zeroclick.ai/docs/offers/mcp-reference) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # REST API - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/rest-api#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... ⌘K Search... Navigation REST API REST API On this page * [Authentication](https://developer.zeroclick.ai/docs/offers/rest-api#authentication) * [Integration Flow](https://developer.zeroclick.ai/docs/offers/rest-api#integration-flow) * [Improving Offer Relevance](https://developer.zeroclick.ai/docs/offers/rest-api#improving-offer-relevance) * [Client-Side Example](https://developer.zeroclick.ai/docs/offers/rest-api#client-side-example) * [Optional Parameters](https://developer.zeroclick.ai/docs/offers/rest-api#optional-parameters) * [Next Steps](https://developer.zeroclick.ai/docs/offers/rest-api#next-steps) Fetch personalized offers via direct HTTP requests. Full control over when and how ads appear in your application. **Base URL:** `https://zeroclick.dev` [​](https://developer.zeroclick.ai/docs/offers/rest-api#authentication) Authentication ----------------------------------------------------------------------------------------- All requests to `/api/v2/offers` require an API key: Copy x-zc-api-key: your-api-key Get your API key from the [Developer Dashboard](https://developer.zeroclick.ai/) . The impressions endpoint (`/api/v2/impressions`) does not require authentication. [​](https://developer.zeroclick.ai/docs/offers/rest-api#integration-flow) Integration Flow --------------------------------------------------------------------------------------------- Copy 1. Fetch offers → POST /api/v2/offers 2. Render in UI → Display offers to users 3. Track impressions → POST /api/v2/impressions [​](https://developer.zeroclick.ai/docs/offers/rest-api#improving-offer-relevance) Improving Offer Relevance --------------------------------------------------------------------------------------------------------------- The `query` parameter helps match offers to user intent. ZeroClick will always return offers, but query quality directly impacts relevance. **Best: Keywords** Copy query: "running shoes marathon training" Parse keywords from the user’s message for optimal relevance. **Good: Full Message** Copy query: "I'm running a marathon this fall and looking for new training shoes." The full user message works but may be less precise than keywords. **Foundation: Null** Copy query: null When there’s no relevant query, ZeroClick uses default context (including information about your product) and [Signal Collection](https://developer.zeroclick.ai/docs/signal-collection) data to match offers. You’ll still get ads, just with broader targeting. **Better query = more relevant ads.** Spend time extracting meaningful keywords from user messages when possible. [​](https://developer.zeroclick.ai/docs/offers/rest-api#client-side-example) Client-Side Example --------------------------------------------------------------------------------------------------- When calling from the browser, use `method: "client"`. IP and User-Agent are extracted automatically. Copy // 1. Fetch offers const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "client", query: "best running shoes", limit: 3 }) }); const offers = await response.json(); // 2. Render offers in your UI offers.forEach(offer => { console.log(offer.title, offer.clickUrl, offer.price); }); // 3. Track impressions await fetch("https://zeroclick.dev/api/v2/impressions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ids: offers.map(offer => offer.id) }) }); Server-side example When calling from your backend, use `method: "server"` and forward the client’s IP: Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "server", ipAddress: clientIpAddress, // required userAgent: clientUserAgent, // recommended query: "cloud hosting solutions", limit: 5 }) }); The impressions endpoint must be called from client devices for accurate tracking. [​](https://developer.zeroclick.ai/docs/offers/rest-api#optional-parameters) Optional Parameters --------------------------------------------------------------------------------------------------- Pass additional context for better personalization: | Parameter | Description | | --- | --- | | `groupingId` | Segment analytics by site or app | | `userId` | Your user ID for per-user tracking | | `userSessionId` | Session ID for session-level tracking | | `userLocale` | User locale (e.g., `en-US`) | | `userEmailSha256` | SHA-256 hashed email for identity matching | | `userPhoneNumberSha256` | SHA-256 hashed phone for identity matching | [​](https://developer.zeroclick.ai/docs/offers/rest-api#next-steps) Next Steps --------------------------------------------------------------------------------- [Get Offers Endpoint\ -------------------\ \ Full request/response schema](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers) [Track Impressions Endpoint\ --------------------------\ \ Record displayed offers](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions) [Signal Collection\ -----------------\ \ Improve offer relevance](https://developer.zeroclick.ai/docs/signal-collection) [Overview](https://developer.zeroclick.ai/docs/offers/overview) [Get ZeroClick offers](https://developer.zeroclick.ai/docs/api-reference/offers/get-zeroclick-offers) ⌘I --- # What is ZeroClick - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/what-is-zeroclick#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Getting Started What is ZeroClick On this page * [How It Works](https://developer.zeroclick.ai/docs/what-is-zeroclick#how-it-works) * [Learn More](https://developer.zeroclick.ai/docs/what-is-zeroclick#learn-more) Traditional ads interrupt the user experience. ZeroClick takes a different approach: we learn user preferences silently in the background, then deliver personalized offers exactly when they’re relevant. [​](https://developer.zeroclick.ai/docs/what-is-zeroclick#how-it-works) How It Works --------------------------------------------------------------------------------------- ZeroClick is always ready to serve the most relevant ad for any given context. This works by continuously ingesting user context as the user engages with your app. When an ad is requested, the user’s current intent (based on their latest chat message or agent workflow, for example) is matched against past context to deliver a uniquely relevant ad. The system has three main components: **Ad Generation** * You request an ad with an optional query + user identity * ZeroClick matches context + query to the best performing ad * Returns offer data for your app to render * Ad is already optimized based on collected signals As you send deeper user context, ZeroClick continuously re-evaluates and updates the “best next ad” for each user. When you request an offer, it’s already waiting. See [Offers](https://developer.zeroclick.ai/docs/offers) for integration details. **Signal Collection** * When enabled, continuously learns user preferences, behavior, and problems * Happens silently in the background via MCP or API * Builds user context over time * Privacy first (no cookies, PII must be hashed) See [Signal Collection](https://developer.zeroclick.ai/docs/signal-collection) for integration details. **Tracking and Performance** * Client-side impression tracking via REST API * Built-in click tracking * Robust analytics to measure performance and revenue See [Developer Analytics](https://developer.zeroclick.ai/docs/developer-analytics) for details on building custom analytics views. [​](https://developer.zeroclick.ai/docs/what-is-zeroclick#learn-more) Learn More ----------------------------------------------------------------------------------- [Integration Guide\ -----------------\ \ Choose your integration path](https://developer.zeroclick.ai/docs/integration-guide) [Quick Start\ -----------\ \ See your first ad in 5 minutes](https://developer.zeroclick.ai/docs/quickstart) [Overview](https://developer.zeroclick.ai/docs) [Quickstart](https://developer.zeroclick.ai/docs/quickstart) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Quickstart - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation MCP Ad Server Quickstart On this page * [Integration Steps](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#integration-steps) * [Supported LLM Models](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#supported-llm-models) * [Optional Analytics Headers](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#optional-analytics-headers) * [Next Steps](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#next-steps) For most AI assistant integrations, simply add the MCP Ad Server URL to your tools configuration and add the required headers. The server provides comprehensive tool descriptions and schemas that enable automatic integration. If you have any issues with automatic tool calling integration or responses, please contact the development team to setup custom tool instructions. [​](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#integration-steps) Integration Steps ----------------------------------------------------------------------------------------------------- 1. **Add MCP Ad Server**: Configure your AI assistant to connect to `https://mcp.zeroclick.ai` 2. **Set Required Headers**: Include the following headers with all requests: * **`Accept`**: `application/json text/event-stream` * **`x-tenant-api-key`**: Your API key for authentication * **`x-tenant-llm-model`**: Your LLM model (see supported models below) 3. **Set Optional Headers**: Add analytics headers as needed (see Optional Analytics Headers below) 4. **Enable Tools**: The server will automatically expose available tools based on your configuration 5. **Tool Selection**: The AI assistant should intelligently select appropriate tools based on user intent: * Use `get_offers` to send all prompts and have ZeroClick do search intent parsing * Use `get_commerce_offers` for shopping and product queries * Use `get_local_offers` for location-based service searches * Use `get_information_offers` for educational and how-to queries * Use `get_technical_offers` for B2B, SaaS, and developer tool recommendations in AI-assisted coding surfaces or other highly technical environments 6. **Impression Tracking**: See the [Impression Tracking](https://developer.zeroclick.ai/docs/impression-tracking) documentation for detailed instructions on configuring impression tracking. [​](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#supported-llm-models) Supported LLM Models ----------------------------------------------------------------------------------------------------------- Currently supported models for the `x-tenant-llm-model` header: ((SUPPORTED\_MODELS)) If your LLM model of choice is not listed as supported, reach out to your ZeroClick integrations specialist or [developers@zeroclick.ai](mailto:developers@zeroclick.ai) to inquire about support. [​](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#optional-analytics-headers) Optional Analytics Headers ----------------------------------------------------------------------------------------------------------------------- * **`x-tenant-grouping-id`**: Arbitrary grouping identifier for analytics (e.g., to differentiate between multiple websites using the same API key) * **`x-tenant-user-id`**: User identifier for per-user analytics tracking * * * [​](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#next-steps) Next Steps --------------------------------------------------------------------------------------- [Available Tools\ ---------------\ \ See all 5 MCP tools and when to use them](https://developer.zeroclick.ai/docs/offers/mcp-tools) [MCP Overview\ ------------\ \ Back to MCP overview](https://developer.zeroclick.ai/docs/offers/mcp-overview) [Signal Collection\ -----------------\ \ Improve ad relevance with signals](https://developer.zeroclick.ai/docs/signal-collection) [REST API\ --------\ \ Recommended: Full control over ads](https://developer.zeroclick.ai/docs/offers/rest-api) [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) [Tools](https://developer.zeroclick.ai/docs/offers/mcp-tools) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/offers#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Offers Overview On this page * [REST API (Recommended)](https://developer.zeroclick.ai/docs/offers#rest-api-recommended) * [MCP Ad Server](https://developer.zeroclick.ai/docs/offers#mcp-ad-server) * [Improve Offer Quality](https://developer.zeroclick.ai/docs/offers#improve-offer-quality) ZeroClick provides two methods to retrieve and display offers in your application. Choose based on how you want ads to appear. [​](https://developer.zeroclick.ai/docs/offers#rest-api-recommended) REST API (Recommended) ---------------------------------------------------------------------------------------------- Fetch offers via HTTP and render them however you want. Full control over placement and timing. Copy const response = await fetch("https://zeroclick.dev/api/v2/offers", { method: "POST", headers: { "Content-Type": "application/json", "x-zc-api-key": "your-api-key" }, body: JSON.stringify({ method: "client", query: "best running shoes" }) }); const offers = await response.json(); // Render offers in your UI [Get Started with REST API →](https://developer.zeroclick.ai/docs/offers/rest-api) * * * [​](https://developer.zeroclick.ai/docs/offers#mcp-ad-server) MCP Ad Server ------------------------------------------------------------------------------ Let your LLM automatically weave offers into chat responses. The LLM decides when and how to show offers. Copy User: "What are the best running shoes?" ↓ LLM calls get_commerce_offers("running shoes") ↓ LLM weaves offers into response [Learn about MCP Ad Server →](https://developer.zeroclick.ai/docs/offers/mcp-overview) * * * [​](https://developer.zeroclick.ai/docs/offers#improve-offer-quality) Improve Offer Quality ---------------------------------------------------------------------------------------------- Both methods benefit from [Signal Collection](https://developer.zeroclick.ai/docs/signal-collection) . When enabled, ZeroClick learns user preferences in the background and delivers more relevant offers. [Learn about Signal Collection →](https://developer.zeroclick.ai/docs/signal-collection) [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Overview - ZeroClick [Skip to main content](https://developer.zeroclick.ai/docs/signal-collection#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Signal Collection Overview On this page * [Why Use Signal Collection?](https://developer.zeroclick.ai/docs/signal-collection#why-use-signal-collection) * [How It Works](https://developer.zeroclick.ai/docs/signal-collection#how-it-works) * [Key Features](https://developer.zeroclick.ai/docs/signal-collection#key-features) * [Signal Categories](https://developer.zeroclick.ai/docs/signal-collection#signal-categories) * [Next Steps](https://developer.zeroclick.ai/docs/signal-collection#next-steps) The MCP Signal Server allows AI assistants to silently collect commercial intent signals from user conversations. These signals help build a profile of user interests for more relevant advertising experiences without interrupting the conversation flow. **Signal Collection is optional but highly recommended.** You can deliver offers via the [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) or [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) without Signal Collection, but enabling it significantly improves ad relevance and personalization. [​](https://developer.zeroclick.ai/docs/signal-collection#why-use-signal-collection) Why Use Signal Collection? ------------------------------------------------------------------------------------------------------------------ **Without Signal Collection:** * Offers are matched based only on the current query * Limited personalization * No learning from past interactions **With Signal Collection:** * Offers are matched using accumulated user context and preferences * Highly personalized recommendations * Continuous improvement over time [​](https://developer.zeroclick.ai/docs/signal-collection#how-it-works) How It Works --------------------------------------------------------------------------------------- When enabled, Signal Collection works as follows: 1. **Connect your agent**: Your AI agent connects to the ZeroClick Signal Collection server 2. **Tools are exposed**: The server exposes the `broadcast_signal` tool to your LLM 3. **Automatic signal collection**: The LLM can call `broadcast_signal` when it detects commercial intent 4. **Profile building**: Signals are stored and aggregated per user to build preference profiles 5. **Better ads**: Later, when you request offers via [REST API](https://developer.zeroclick.ai/docs/offers/rest-api) or [MCP Ad Server](https://developer.zeroclick.ai/docs/offers/mcp-overview) , ZeroClick uses these signals to deliver more relevant ads The signal collection is completely transparent to the end user - no visible output is generated. [​](https://developer.zeroclick.ai/docs/signal-collection#key-features) Key Features --------------------------------------------------------------------------------------- * **Silent collection**: When enabled, signals are collected without interrupting conversations * **Automatic extraction**: The LLM decides when to extract signals based on conversation context * **Flexible context**: Configure user context via headers for attribution * **Privacy-first**: No cookies, PII must be hashed * **MCP standard**: Uses the [Model Context Protocol](https://modelcontextprotocol.io/) for seamless integration [​](https://developer.zeroclick.ai/docs/signal-collection#signal-categories) Signal Categories ------------------------------------------------------------------------------------------------- The `broadcast_signal` tool can extract the following types of commercial intent: | Category | Description | Example | | --- | --- | --- | | `interest` | General interest in a product or topic | ”I’ve been thinking about getting a new laptop” | | `evaluation` | Actively comparing options | ”How does React compare to Vue?” | | `problem` | Has a problem needing a solution | ”My current database is too slow” | | `purchase_intent` | Active intent to buy | ”I want to buy running shoes” | | `price_sensitivity` | Budget indicators | ”Looking for something under $500” | | `brand_affinity` | Brand preferences | ”I prefer Apple products” | | `user_context` | Personal context | ”As a student…” | | `business_context` | Professional context | ”For our enterprise team…” | | `recommendation_request` | Asking for recommendations | ”What CI/CD tool do you recommend?” | [​](https://developer.zeroclick.ai/docs/signal-collection#next-steps) Next Steps ----------------------------------------------------------------------------------- [Setup\ -----\ \ Configure and connect to Signal Collection](https://developer.zeroclick.ai/docs/signal-collection/setup) [Headers Reference\ -----------------\ \ Complete reference for all available headers](https://developer.zeroclick.ai/docs/signal-collection/headers) [Tool Reference\ --------------\ \ Detailed documentation of the broadcast\_signal tool](https://developer.zeroclick.ai/docs/signal-collection/tools) [Testing\ -------\ \ Test your integration and debug issues](https://developer.zeroclick.ai/docs/signal-collection/testing) [Setup](https://developer.zeroclick.ai/docs/signal-collection/setup) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Page Not Found [Skip to main content](https://developer.zeroclick.ai/docs/developer-analytics#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Page Not Found 404 Page Not Found ============== We couldn't find the page. Maybe you were looking for one of these pages below? [Get developer analytics metrics](https://developer.zeroclick.ai/docs/api-reference/analytics/get-developer-analytics-metrics#) [Quickstart](https://developer.zeroclick.ai/docs/offers/mcp-quickstart#optional-analytics-headers) [Technical Reference](https://developer.zeroclick.ai/docs/offers/mcp-reference#optional-analytics-headers) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Page Not Found [Skip to main content](https://developer.zeroclick.ai/docs/impression-tracking#content-area) [ZeroClick home page![light logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/light.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=e982a147583d65368165ef4ecf48dfc5)![dark logo](https://mintcdn.com/zeroclickai/5OuMWpUkdtcol6mN/logo/dark.svg?fit=max&auto=format&n=5OuMWpUkdtcol6mN&q=85&s=a60dc8afddf7e78b735ba50b9cf88dbb)](https://developer.zeroclick.ai/docs) Search... Ctrl K Search... Navigation Page Not Found 404 Page Not Found ============== We couldn't find the page. Maybe you were looking for one of these pages below? [Impression Tracking](https://developer.zeroclick.ai/docs/offers/mcp-impression-tracking#impression-tracking) [Track offer impressions](https://developer.zeroclick.ai/docs/api-reference/tracking/track-offer-impressions#) [Overview](https://developer.zeroclick.ai/docs/integration-guide#track-impressions) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. ---