{"name":"Infinite Audience","description":"Enrich customer data, discover high-fidelity net-new audiences, and activate them in your channels through an AI agent. Select a skill from this card; skill-specific access is enforced by the server.","supportedInterfaces":[{"url":"https://a2a.infiniteaudience.ai/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://a2a.infiniteaudience.ai/a2a","protocolBinding":"JSONRPC","protocolVersion":"0.3"}],"provider":{"url":"https://infiniteaudience.ai","organization":"NO FAIT (dba Infinite Audience)"},"version":"1.6.0","documentationUrl":"https://docs.infiniteaudience.ai/agents/a2a/","capabilities":{"streaming":true,"pushNotifications":false,"extendedAgentCard":false},"securitySchemes":{"infiniteAudienceOAuth":{"oauth2SecurityScheme":{"description":"Delegated user access using authorization code and PKCE.","flows":{"authorizationCode":{"authorizationUrl":"https://api.infiniteaudience.ai/v1/oauth/authorize","tokenUrl":"https://api.infiniteaudience.ai/v1/oauth/token","refreshUrl":"https://api.infiniteaudience.ai/v1/oauth/token","scopes":{"discovery":"Catalog, counts, and history; may perform backend computation.","purchase":"Authorize billable usage and exports: create, match, and deliver data using the existing account. Usage may consume the organization’s balance or incur charges."},"pkceRequired":true}},"oauth2MetadataUrl":"https://api.infiniteaudience.ai/.well-known/oauth-authorization-server"}},"infiniteAudienceDeviceOAuth":{"oauth2SecurityScheme":{"description":"Delegated access for chat and terminal clients using device authorization.","flows":{"deviceCode":{"deviceAuthorizationUrl":"https://api.infiniteaudience.ai/v1/oauth/device_authorization","tokenUrl":"https://api.infiniteaudience.ai/v1/oauth/token","scopes":{"discovery":"Catalog, counts, and history; may perform backend computation.","purchase":"Authorize billable usage and exports: create, match, and deliver data using the existing account. Usage may consume the organization’s balance or incur charges."}}},"oauth2MetadataUrl":"https://api.infiniteaudience.ai/.well-known/oauth-authorization-server"}},"infiniteAudienceBearer":{"httpAuthSecurityScheme":{"description":"Short-lived token from server-to-server API-key exchange.","scheme":"Bearer","bearerFormat":"JWT"}}},"securityRequirements":[{"schemes":{"infiniteAudienceOAuth":{}}},{"schemes":{"infiniteAudienceDeviceOAuth":{}}},{"schemes":{"infiniteAudienceBearer":{}}}],"defaultInputModes":["text/plain"],"defaultOutputModes":["text/plain"],"skills":[{"id":"discovery-count","name":"Discovery Count","description":"Count matching records in the audience graph given geo, demographic, behavioral, or custom filter criteria. Accepts saved segment IDs, audience IDs, multi-segment composition, filter_groups, or flat filters. Returns total record count without purchasing records; backend compute usage is recorded as non-commercial telemetry. Requires 'discovery' scope.","tags":["audiences","discovery","counts"]},{"id":"discovery-lookup","name":"Discovery Lookup","description":"Return masked sample rows and field metadata for a defined audience without purchasing records. Accepts saved segment IDs, audience IDs, multi-segment composition, filter_groups, or flat filters. Useful for validating filter criteria before committing to a delivery; backend compute usage is non-commercial telemetry. Requires 'discovery' scope.","tags":["audiences","discovery","samples"]},{"id":"discovery-crosstab","name":"Discovery Crosstab","description":"Cross-tabulate a population by two categorical dimensions (e.g. state x gender) and return a pivot table of counts. Accepts saved segment IDs, audience IDs, multi-segment composition, filter_groups, or flat filters. Backend compute usage is non-commercial telemetry. Requires 'discovery' scope.","tags":["audiences","discovery","analysis"]},{"id":"discovery-overlap","name":"Discovery Overlap","description":"Calculate how many records appear in both of two populations (audiences, segments, or ad-hoc filter sets) and return overlap count, overlap_pct, and demographic deltas. Backend compute usage is non-commercial telemetry. Requires 'discovery' scope.","tags":["audiences","discovery","overlap"]},{"id":"audience-management","name":"Audience Management","description":"Create and manage audiences: composition wrappers that group one or more segments for delivery. Audiences have no subtype — use segment-management to create typed cohorts. Duplicate an existing audience via the duplicate_audience tool — the duplicate carries the source composition with lineage tracking (parent and root ancestor recorded, segment versions pinned) and starts with a null record count until recounted. Refresh a stale or expired audience via the refresh_audience tool — since an audience is a composition of one or more member segments (possibly mixed subtypes) with no single 'primary' segment, refresh_audience requires a segment_id naming which member to refresh; it refreshes that segment and bumps the audience's own version/expiry, but never any other audience referencing the same segment. Also supports bulk operations — create, patch, or archive multiple audiences in a single request. Requires 'purchase' scope.","tags":["audiences","composition","management"]},{"id":"segment-management","name":"Segment Management","description":"Create and manage segments of all types: filter (criteria-based), matched (uploaded CSV/JSON/JSONL/Avro lists, optionally gzip-compressed and split into same-format shards), similarity (lookalike), and propensity (model-scored). Segments are reusable cohort definitions that can be composed into audiences for delivery. Duplicate any segment via the duplicate_segment tool — the duplicate preserves the subtype and all subtype-specific data (referenced, never recomputed) with lineage tracking; filter duplicates start with a null count while other subtypes carry the source counts, and duplicating a matched segment whose match data is unavailable is rejected with a 409 conflict. Refresh a stale segment against the current identity graph via the refresh_segment tool — referencing audiences are never touched; archived segments and matched duplicates that share another segment's data are rejected with a 409. Bulk operations: create up to 25 segments, or rename/archive/restore up to 50 at once via the bulk_patch_segments and bulk_archive_segments tools (status-only and reversible). Requires 'purchase' scope. For get_segment_demographics, get_segment_audiences, and count_segment (which require only 'discovery' scope but can meter compute or update cached state), submit under the segment-lookup skill instead.","tags":["segments","cohorts","management"]},{"id":"segment-lookup","name":"Segment Lookup","description":"Segment inspection: get a demographic breakdown via get_segment_demographics (any subtype — non-filter segments resolve via the same ID-set composition audiences use), list the audiences that reference a segment (with campaign linkage) via get_segment_audiences, or recount via count_segment (runs a fresh BigQuery count for any subtype). Demographics and recount operations record non-commercial compute telemetry. Requires 'discovery' scope.","tags":["segments","demographics","counts"]},{"id":"catalog","name":"Data Catalog","description":"Browse the enrichment field catalog (available data attributes, coverage rates, and pricing structure: base rate, field surcharges, destination surcharges). Call before building enrichment audiences to discover valid options. Requires 'discovery' scope.","tags":["catalog","fields","enrichment"]},{"id":"identity-resolution","name":"Identity Resolution & Match History","description":"Synchronous or file-based identity resolution, plus full match history access. Synchronous inline resolution for up to 100 contact records (email, phone, name, address) submitted directly — returns match statistics via a MATCH_REPORT (matchCount, matchRatePct, recordCount) and emits usage per matched record when the records leave in the response. For larger datasets, use the segment-management skill (subtype=matched) to start an unbilled file-processing job; its one-time match usage is emitted only on the first successful delivery. Match history: list or retrieve past micro-batch runs (run_id, match_rate, amount_charged, created_at) and file-based match jobs (match_id, matching_status, segment_id, audience_id). amount_charged is a conservative pending-usage estimate for micro-batches and remains null for a file job until its first delivery. Supports cursor pagination for unlimited history depth. Requires 'purchase' scope; for history-only reads use the match-history skill, which requires only 'discovery' scope.","tags":["identity","matching","enrichment"]},{"id":"match-history","name":"Match History","description":"Retrieve and paginate through the organization's identity resolution history. Covers both micro-batch runs (POST /v1/match) and file-based jobs (POST /v1/match/file). Returns run_id or match_id, match_count, match_rate, amount_charged, input_record_count, status, created_at, and expires_at. Micro-batch amount_charged is a conservative pending-usage estimate; file-job amount_charged remains null until the first successful delivery emits its one-time match usage. File jobs also expose segment_id, audience_id, and matching_status. Use to audit recent activity, compare estimated usage costs, or find a specific job by date range. Requires 'discovery' scope — no purchase scope needed.","tags":["matching","history","status"]},{"id":"integration-result-history","name":"Integration Result History","description":"List or retrieve safe, retained integration activity without exposing private workflow artifacts. Results include provenance, counts, selected fields, billing rail, promotion deadline, and durable Library links. Requires 'discovery' scope.","tags":["integrations","history","results"]},{"id":"integration-result-promotion","name":"Save Integration Result","description":"Promote an eligible integration result into durable Segment and Audience objects using the exact settled result. Promotion is idempotent, does not re-run enrichment, and does not create a second usage charge. Requires 'purchase' scope.","tags":["integrations","segments","audiences"]},{"id":"delivery-history","name":"Delivery History","description":"List past deliveries for a given audience or file-based match job, or org-wide across all audiences with optional status/destination/audience filters and cursor pagination. Each entry includes destination, status, record count, cost, output format, explicit output compression, stored byte size, and timestamps. Useful for auditing prior purchases or resuming a workflow. Requires 'discovery' scope.","tags":["delivery","history","status"]},{"id":"pricing","name":"Pricing & Quoting","description":"Get a binding price estimate for an audience download. Returns cost_estimate (total, base, one-time deferred file-match cost when applicable, field, and destination surcharges), billing_count, sufficient_balance, shortfall, and already_delivered (true when this exact delivery has been made before and re-delivery is free). LiveRamp and Narrative remain unavailable until their partner pushes can confirm data egress. Requires 'discovery' scope.","tags":["pricing","quotes","delivery"]},{"id":"data-purchase","name":"Audience Delivery","description":"Initiate a direct download for a saved audience (CSV/JSON/JSONL with optional gzip, or Avro with native DEFLATE). The first successful delivery of completed file-match data also emits that run's one-time match usage. Output compression is explicit and never inherited from input uploads. A different format/compression after an already-paid delivery is re-exported without another delivery or match charge. LiveRamp and Narrative remain unavailable until their partner pushes can confirm data egress. Use the pricing skill first to confirm pricing. Requires 'purchase' scope.","tags":["audiences","delivery","activation"]},{"id":"delivery-status","name":"Delivery Status","description":"Check the status and download URLs for a specific delivery. Poll after initiating a delivery to determine when records are ready. Note: download_urls are short-lived presigned GCS URLs regenerated fresh on every GET — do not cache them. Requires 'discovery' scope.","tags":["delivery","status","downloads"]},{"id":"account-info","name":"Account & Balance","description":"Retrieve the org's source-routed billing state: active contract and rated current-period usage, effective prepaid balance after reservations/pending usage, automatic-recharge state, postpay ceiling, payment readiness, and projection staleness. A parent-billed child sees only its own attributed usage and never the agency's pooled balance or invoices. Requires 'account' scope.","tags":["account","usage","balance"]},{"id":"campaign-management","name":"Campaign Management","description":"Create, update, and archive campaign workspaces, including their campaign brief and goals. Link or unlink audiences from campaigns. Pass metadata.campaign_id to supply an active campaign context for the turn. Requires 'purchase' scope. For read-only campaign list and detail requests, submit under the campaign-lookup skill instead — it only requires 'discovery' scope.","tags":["campaigns","audiences","workspace"],"examples":["Create a new campaign called Q3 Prospecting with goals for acquiring regional retail customers","Link audience abc123 to campaign xyz789"]},{"id":"campaign-lookup","name":"Campaign Lookup","description":"Read-only campaign inspection: list campaigns or get a single campaign's brief and linked audiences. Pass metadata.campaign_id to supply an active campaign context for the turn. Requires 'discovery' scope.","tags":["campaigns","audiences","workspace"],"examples":["List my active campaigns","Show recent deliveries for campaign xyz789"]}]}