Citations & Sources
Where AI answers get their sources — and the three layers GetMint exposes them through
When an AI model answers a prompt about your brand, it cites sources — URLs woven into the answer. GetMint captures them and exposes them through three layers, from raw to refined:
Pick the layer that matches your question:
| You want to know… | Layer | Call |
|---|---|---|
| "What exactly did the model say, and what did it cite?" | Raw results | GET …/visibility/raw-results |
| "Which domains and pages get cited across all my analyses?" | Explorer citations | GET …/explorer/citations |
| "What kind of site is this URL, and does it mention my brand?" | Enrichment | POST …/sources/enrichment |
Auth is the same everywhere: X-API-Key (or a session token). Full request/response schemas live in the API reference — this page teaches you the model, the gotchas, and one working example per layer.
Layer 1 — Raw results: citations per answer
/domains/{domainId}/topics/{topicId}/visibility/raw-resultsThe ground truth: each row is one prompt/response pair from one model, carrying two kinds of citations:
responseDomains— domains the model wove inline into its answer text, enriched with site categories.citations[]— structured source objects:{ url, title, text, website, brandMentioned, brandMentionContext }(all optional — models differ in what they expose).
curl "https://api.getmint.ai/api/domains/$DOMAIN_ID/topics/$TOPIC_ID/visibility/raw-results?models=gpt-5&page=1&limit=20" \
-H "X-API-Key: $MINT_API_KEY"Response (one row, trimmed):
{
"results": [
{
"prompt": "What are the best payment processing solutions?",
"response": "Based on my research, several solutions stand out...",
"model": "gpt-5",
"brandMentioned": true,
"citations": [
{
"url": "https://techcrunch.com/2026/01/10/payment-apis-compared",
"title": "Payment APIs Compared",
"website": "techcrunch.com",
"brandMentioned": true
}
],
"topOfMind": ["Stripe", "PayPal", "Square"],
"responseDomains": [
{ "domain": "techcrunch.com", "categories": ["Internet and Telecom > Technology News"] }
],
"reportId": "c5186e4a-3323-4da3-894e-463bc20494a2"
}
],
"pagination": { "page": 1, "limit": 20, "total": 24, "totalPages": 2 }
}- Only the visibility raw results carry citations; keep the
reportId— it is the key that enrichment needs later. limitdefault: 50 max 100;modelsis comma-separated.topOfMindlists the brands the answer named most prominently — a free mini share-of-voice signal.
Layer 2 — Explorer citations: one filterable table
/domains/{domainId}/explorer/citationsEvery citation from every analysis type — visibility competition sentiment alignment — flattened into one paginated table. Each row: { fanOutQueries, source, link, linkDomain, model, promptCategory, promptText, promptId, topicId, topicName }.
curl "https://api.getmint.ai/api/domains/$DOMAIN_ID/explorer/citations?page=1&limit=20&promptCategory=visibility,sentiment&sortBy=source&sortOrder=desc" \
-H "X-API-Key: $MINT_API_KEY"The response wraps rows in pagination (total, totalPages, hasNext) plus filterOptions — the distinct values of every filterable column across the full filtered set, ready to feed dropdowns.
The filters that matter
Prop
Type
limitdefault: 50 max 1000 — above that you get a400, not a clamp.- Responses are cached 60s — fresh reports can take up to a minute to appear.
topicId/topicNameexist only on visibility and competition rows.linkcan be absent — some models cite a domain without a full URL.
Layer 3 — Enrichment: metadata per URL
/domains/{domainId}/sources/enrichmentHand it up to 100 URLs plus the reportId they came from; get back, per URL: the site category, brand/competitor mentions found on the page, and crawl metadata (word count, publication date, internal/external links).
curl -X POST "https://api.getmint.ai/api/domains/$DOMAIN_ID/sources/enrichment" \
-H "Content-Type: application/json" -H "X-API-Key: $MINT_API_KEY" \
-d '{
"urls": ["https://techcrunch.com/2026/01/10/payment-apis-compared"],
"reportId": "c5186e4a-3323-4da3-894e-463bc20494a2"
}'Response — an object keyed by URL:
{
"https://techcrunch.com/2026/01/10/payment-apis-compared": {
"sourceCategory": "Internet and Telecom > Technology News",
"detectedBrands": [
{ "name": "Stripe", "count": 12, "isBrand": true },
{ "name": "PayPal", "count": 8, "isBrand": false }
],
"wordCount": 780,
"publicationDate": "2026-01-10T00:00:00.000Z",
"contentLinks": { "internal": ["https://techcrunch.com/about"], "external": ["https://stripe.com/"] }
}
}- Every field is optional — it appears only when the category lookup or the page crawl actually produced it.
- A URL with no data at all is omitted entirely; an empty object
{}means nothing could be enriched. Invalid URLs are skipped silently — the rest of the batch still processes. isBrand: true= your own brand;false= a competitor. Only brands withcount > 0appear.
Errors
| Status | When | Fix |
|---|---|---|
| 400 | Validation: missing urls/reportId, limit over the cap, bad sortBy, non-ISO dates | Check the message — it names the exact field |
| 401 | Missing or invalid key | Re-copy from Settings → API Keys |
| 404 | domainId not yours or nonexistent | List domains via GET /domains |
| 429 | Over 200 req/min | Back off per Rate Limits |