Skip to main content
Use audience matching to assess how well a supplied persona fits the advertisers in your catalog. Each match includes a fit score from 0 to 1, reasons, and the audience characteristics behind the match. For campaign planning, you can prepare a catalog containing your brand, submit each candidate persona separately, and collect the returned scores to help prioritize audiences. For sponsorship selection, submit a persona against a catalog of advertisers to find relevant brands.
Audience matching is in beta. Scores describe relevance under the reported scoring strategy; they are not purchase probabilities or proof of buying intent. The API accepts one persona per request, not a contact list, and does not generate new personas or sync audiences to ad platforms.

Before you start

You need an Upriver API key with access and quota for catalog intake and matching. Use the same API user for catalog setup and matching: catalogs belong to the user who creates them. The examples use curl and jq. Set UPRIVER_API_KEY in your environment. If you already have a prepared catalog, set CATALOG_ID to its ID and skip to Match a persona.

Prepare your advertiser catalog

1. Create a catalog

A catalog is the set of advertisers you want to match against. Save the returned catalog_id for subsequent requests.

2. Add advertisers

Choose a stable ref for each advertiser. The match response uses this identifier to connect results back to your own records. You can submit up to 200 entries per request; inspect each entry’s status in the response before continuing.

3. Research the entries

Hydration researches the advertisers and prepares the characteristics used for matching. Adding an entry alone does not mean it is ready to match.
A 202 response means the request was accepted. Check selected and skipped; mode indicates whether processing started immediately (inline) or was queued (queued). Check progress periodically:
Wait for succeeded before expecting the prepared entry to participate fully. pending and running mean work is unfinished; partial means only some research is available. For failed or stale, retry hydration for the affected ref. To retry a partial entry, include its ref and "force": true in the hydration request. Avoid repeatedly restarting entries that are still running.

Match a persona

Send a description of the audience’s stated needs, interests, and situation. Include relevant constraints and objections. Use information you actually have; do not invent individual preferences from a broad segment label.
Provide exactly one of persona.summary (free text), persona.profile (structured fields), or persona.facets (characteristics you have already typed). See the Match Persona reference for all request fields, settings, and the complete response schema.

Read the score and audience breakdown

A facet is a short statement about a persona or an advertiser’s audience, such as a need, interest, or situation. The response separates the supplied persona’s interpretation from the matches it supports. This illustrative excerpt shows the fields to use for a score column and its explanation. Values are examples, not measured results; other response fields are omitted.

Compare candidate audiences

Submit each persona against the same prepared catalog with the same settings. Store its description, advertiser ref, score, reasons, strategy, and response status together. In a spreadsheet or a workflow such as Clay, these can become columns you use to review and prioritize candidate segments. This requires your own integration; it is not a built-in Clay audience-list scoring operation. Check status before comparing results. completeness can be complete, truncated, or unavailable. A fallback or a different strategy_version can change what a score means, so do not silently mix these results into one ranking. The endpoint returns qualifying matches rather than a score for every catalog entry. A missing advertiser or empty matches array is not a zero score: check research readiness, response status, exclusions, and score thresholds. Validate any filtering threshold on examples representative of your use case.

Get facets without running a match

To inspect an advertiser’s stored characteristics and evidence, request:
This returns facets with kind, text, confidence, evidence_grade, sensitive, brand/product scope, and supporting evidence. It reads existing research; it does not create new research or score a persona. The default limit is 200, with a maximum of 500. Check truncated to see whether more facets exist than the response contains. POST /v1/audience_dimensions serves a different starting point: a brand URL becomes researched audience facts categorized as behaviors, motivations, lifestyles, concerns, or interests. Matching facets can draw on that research, but also on brand, product, and persona research. Use Personas when you need to discover audience personas before assessing their fit. There is no separate endpoint that only interprets a supplied persona; its facets come back in the match response.

Limits and troubleshooting

Matching is limited to 60 requests per 60-second window per API user, in addition to account quota. The default result limit is 10; you can request 1–50 advertisers. For example, an unknown or inaccessible catalog returns 404 with: