> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trybluemoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cited Inventory API — the domains AI engines cite, and who sells them

> A read-only feed of the domains AI answer engines actually cite, with citation volume, market breakdown, trend, and each domain's advertising monetization profile from its ads.txt. Built for media companies, agencies, and DSPs.

AI answer engines (ChatGPT, Perplexity, Gemini, Google AI Overviews) answer buying questions by citing a small set of sources — and those sources are rarely the ones traditional media plans assume. The Cited Inventory API exposes what Bluemoon measures every day: **which domains the AI engines cite, how often, in which markets, and who can sell advertising on them**.

## What it is for

* **Media companies and sales houses**: see which of your represented titles are AI-cited, and which high-authority domains in your market you do not yet represent.
* **Agencies and DSPs**: build curated deal lists or contextual targeting from domains whose authority is validated by the answer engines themselves. Pages that AI engines cite receive the clicks from AI answers — human traffic in active research mode.
* **Advertisers**: pull your own tracked brands' cited sources into your planning tools, with the seller of each source identified.

<Warning>
  What this feed does **not** claim: display advertising on a cited domain does not change what an AI engine says — ad creative never enters a model's input. If your goal is AI visibility itself, the lever is indexable content, and Bluemoon measures that effect separately. This feed describes *where AI attention already is*, so you can buy the human attention that follows it.
</Warning>

## Authentication and key scopes

Every request carries an API key issued by Bluemoon:

```bash theme={null}
curl -H "Authorization: Bearer bsk_partner_..." \
  "https://app.trybluemoon.com/api/partner/v1/cited-inventory?market=CH"
```

Keys are issued per consumer and individually revocable. **The key defines what you see:**

| Key scope        | What the endpoint returns                                                                                                                       |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| **Global**       | The cross-client feed: aggregated, anonymized, domain-level market data.                                                                        |
| **Organization** | Your own Bluemoon account's cited sources — the domains AI engines cite for the brands *you* track, in full, no anonymization (it's your data). |

To request a key, contact your Bluemoon account manager at [hello@trybluemoon.com](mailto:hello@trybluemoon.com).

## Endpoint

```
GET /api/partner/v1/cited-inventory
```

| Parameter      | Type                      | Default     | Description                                                                                                                                      |
| -------------- | ------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `market`       | `CH`, `DE`, … or `GLOBAL` | all markets | Keep only domains cited in answers collected for that market, sorted by citations there. `GLOBAL` means answers collected without geo targeting. |
| `minCitations` | integer                   | `10`        | Drop domains below this 90-day citation count.                                                                                                   |
| `sellableBy`   | sales-house slug          | —           | Keep only domains whose ads.txt names that sales house as an authorized seller.                                                                  |
| `format`       | `json` or `csv`           | `json`      | CSV is convenient for deal-list workflows.                                                                                                       |

## Response

```json theme={null}
{
  "scope": "organization",
  "organization": { "id": "…", "name": "Acme AG" },
  "generatedAt": "2026-08-18T11:40:00.000Z",
  "windowDays": 90,
  "filters": { "market": "CH", "minCitations": 10, "sellableBy": null },
  "count": 142,
  "hosts": [
    {
      "host": "example-review-site.ch",
      "citations90d": 49,
      "trendPct": 12.5,
      "markets": { "CH": 41, "GLOBAL": 8 },
      "organizations": 4,
      "platforms": ["chatgpt", "gemini", "perplexity"],
      "sellableBy": [
        {
          "house": "example-sales-house",
          "confidence": "confirmed",
          "relationship": "DIRECT",
          "evidence": ["google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0"]
        }
      ],
      "adSystems": [
        { "adSystem": "google.com", "relationship": "DIRECT", "accounts": 2 },
        { "adSystem": "rubiconproject.com", "relationship": "RESELLER", "accounts": 1 }
      ]
    }
  ]
}
```

Field notes:

* **`citations90d`** — how many times AI answers cited this domain in the last 90 days.
* **`trendPct`** — last 30 days vs the 30 days before, in percent; `null` when the earlier window is too small for a meaningful trend.
* **`markets`** — citations broken down by the country the answers were collected for. Bluemoon collects answers with real geo targeting per market, not prompt wording.
* **`sellableBy`** — sales houses from the [directory below](#the-sales-house-directory) whose footprint appears in the domain's public `ads.txt`. `confidence` is `confirmed` for account-level evidence and `probable` for a comment-only mention; when several houses match, they are ordered strongest first (confirmed DIRECT before resellers). Every claim carries the raw `ads.txt` lines as evidence — the source is public and auditable.
* **`adSystems`** — the domain's raw monetization profile (which SSPs, `DIRECT` or `RESELLER`, how many seller accounts). If your sales house is not in the directory yet, match your own account ids against this field.

## The sales-house directory

`ads.txt` lines carry **account numbers, not names** — `google.com, pub-5786…` tells a machine who may sell a site, but tells a human nothing. The directory is Bluemoon's mapping from those numbers to the companies behind them. It is what turns a raw file into the answer *"this AI-cited site is sold by Media Impact"*: the `sellableBy` field of this API, the "Sold by" badge in the Bluemoon dashboard, and the `sellableBy=` filter for deal lists all read from it.

Every entry was verified on the live `ads.txt` files of the house's own publishers (August 2026). A house is identified **only by its own advertising infrastructure or by the publisher's own declaration** — never by a seller seat it shares with the rest of the market (see the evidence rules below).

| Sales house         | Slug                  | Market | Identified by                                                                                                               |
| ------------------- | --------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------- |
| Goldbach            | `goldbach`            | CH     | Its own ad system `gb-next.ch` (per-client accounts such as `gba-comparis`), `MANAGERDOMAIN=gb-next.ch`                     |
| audienzz            | `audienzz`            | CH     | `MANAGERDOMAIN=audienzz.com`, own systems `audienzz.com` / `audienzz.ch` (NZZ, CH Media dailies, some German regionals)     |
| Ringier Advertising | `ringier-advertising` | CH     | `MANAGERDOMAIN=ringier-advertising.ch`, own system `ringier-advertising.ch` (Blick, Cash, Beobachter; parts of SMG)         |
| Ströer              | `stroeer`             | DE     | `OWNERDOMAIN=stroeer.com` + `MANAGERDOMAIN=yieldlove.com` (its SSP subsidiary), own systems `stroeer.com` / `yieldlove.com` |
| Media Impact        | `media-impact`        | DE     | `MANAGERDOMAIN=mediaimpact.de`, own line `mediaimpact.de, MI1111, DIRECT` (Bild, Welt, Business Insider)                    |
| Ad Alliance         | `ad-alliance`         | DE     | `MANAGERDOMAIN=ad-alliance.de`, own system `ad-alliance.de` (Stern, RTL, n-tv, Brigitte, Geo)                               |
| BurdaForward        | `burdaforward`        | DE     | Operates as **BCN**: `MANAGERDOMAIN=bcn.group` + `OWNERDOMAIN=burda.com`, own line `bcn.group, 40748507, DIRECT`            |
| iq digital          | `iq-digital`          | DE     | `MANAGERDOMAIN=iqdigital.de`, own `iqdigital.de, iqd-…, DIRECT` lines (FAZ, Handelsblatt, Zeit)                             |
| Seven.One Media     | `sevenone-media`      | DE     | Own system `seven.one` (verified on joyn.de and wetter.com — the TV-brand sites publish no ads.txt)                         |

We report **representation, not supply-chain presence**. Two things count as proof that a house sells a site: **(1)** an `OWNERDOMAIN`/`MANAGERDOMAIN` declaration naming the house — the site states in plain text who runs its sales; **(2)** a `DIRECT` data line through the house's own ad system or a cross-verified seat. A comment naming the house is reported as `probable`, never `confirmed`.

`RESELLER` lines are deliberately ignored. Reseller seats travel across the whole open market — the seat `xandr.com, 14082, RESELLER` sits on a German broadcaster's site *and* on a US outdoor magazine — so honouring them would label unrelated publishers as sold by a house that merely sits somewhere in their supply chain. That distinction is the difference between a deal list you can act on and one you cannot.

Adding a house takes minutes once its footprint is verified — if yours is missing, write to [hello@trybluemoon.com](mailto:hello@trybluemoon.com) and we will verify and add it.

CSV columns: `host, citations_90d, trend_pct, organizations, markets, sellable_by, confidence, relationship, ad_systems`.

## Using it with OpenRTB

The feed is deliberately upstream of the bidstream — Bluemoon is a data layer, not a bidder or an exchange. Two standard integration patterns:

* **Curated deals**: package the filtered host list as a private marketplace deal in your SSP; the deal travels as `imp.pmp.deals[].id` in bid requests. Refresh from the feed on your own schedule; your SSP owns the deal.
* **Contextual segments**: attach page-level segments (`site.content.data[].segment[]`) such as *AI-cited source* via your SSP or a Prebid RTD module. The data describes **pages, never users** — there is no personal identifier anywhere in this product, by construction.

## Freshness, privacy, and limits

* The global feed is a pre-computed snapshot, refreshed weekly; `generatedAt` tells you its age. Organization-scoped responses are computed from your live data behind a short cache. Either way, polling is always cheap and always fast.
* The global feed is domain-level only, and a domain is published only when it clears a k-anonymity gate (cited across at least 2 independent organizations, or 50+ citations) — it can never reveal what any single Bluemoon customer tracks. Organization-scoped keys see only that organization's own data.
* No user data, no audience segments, no identifiers. Domain-level facts derived from public AI answers and public `ads.txt` files.
