Documentation

Two pipes: records out, logs in.

A BI feed that hands your warehouse additive records, and a webhook that receives your CDN’s crawler logs.

BI connector

POST /bi/records returns flat records for a date range from one of two tables — mentions or sources — grouped by the dimensions you pass. Gated by the bi_connector flag.

POST https://app.bementioned.ai/api/v1/projects/{project_id}/bi/records

{
  "start_date": "2026-07-01",
  "end_date": "2026-07-31",
  "table": "mentions",
  "dimensions": ["week", "brand_id", "model_channel_id"],
  "limit": 10000,
  "offset": 0
}

Dimensions are a closed set, with at most one time grain per request:

date · week · month · model_channel_id · country_code · prompt_id · topic_id · tag_id · brand_id · domain · url · source_type

Rows carry only additive components — counts, and sums beside their counts — and no ratios, on purpose: sum the components in your BI tool and divide once, and the aggregate is exact at any grouping.

One warning worth reading twice: scope_response_count is the row’s denominator and repeats identically across sibling rows of one scope — never SUM it across brands, domains or URLs. And source_type is always split and echoed on every row: api and web_scrape are never blended.

Ingest webhook — agent analytics

Push your CDN or server access logs and the product turns them into agent-analytics visits: which AI crawlers read which pages. The token is minted when you create an ingest source in the app — prefixed bmi_, shown once, rotatable.

curl -X POST https://app.bementioned.ai/api/v1/ingest/agent-logs \
  -H "X-Ingest-Token: bmi_your_token_here" \
  --data-binary @access-log-batch.csv

The endpoint stores the payload verbatim and answers 202 with a receipt — lines kept, and lines dropped by reason:

{
  "batch_id": 118,
  "line_count": 5000,
  "kept_count": 4816,
  "dropped": { "no_ua_match": 121, "ip_spoof": 12, "malformed": 51 }
}

Limits: 25 MiB per batch, 600 batches per minute per source, and a strict bad-credential bucket. 401 for a missing or revoked token, 403 for a paused source, 413 over the size cap, 429 with Retry-After.

This surface carries no plan flag and no serving rate-limit tie-in: capture never stops for a plan reason. Lines are parsed by the source’s declared format; unverifiable bot claims are dropped and accounted for in the receipt.