Sources are the domains that AI providers cite when answering tracked prompts. This endpoint aggregates citation data at the domain level across all prompts in a project.
List sources
GET /projects/{project_id}/sources
Returns source domains with citation counts, paginated and sorted by reference_count descending.
Path parameters
| Param | Type | Description |
|---|
project_id | string (UUID) | The project ID |
Query parameters
| Param | Type | Default | Description |
|---|
page | integer | 1 | Page number (starts at 1) |
page_size | integer | 50 | Results per page (min 1, max 100) |
duration_days | integer | 7 | Days to look back |
date_from | string | — | Start date (YYYY-MM-DD) |
date_to | string | — | End date (YYYY-MM-DD) |
providers | string | — | Comma-separated provider filter |
curl "https://topify-customer-api-production.up.railway.app/api/public/v1/projects/{project_id}/sources?page=1&page_size=50&duration_days=7" \
-H "X-API-Key: tk_live_..."
resp = client.get(f"/projects/{project_id}/sources", params={"page": 1, "page_size": 50, "duration_days": 7})
const resp = await fetch(`${BASE}/projects/${projectId}/sources?page=1&page_size=50&duration_days=7`, { headers });
Response
{
"success": true,
"data": [
{
"source_id": "s1t2u3v4-...",
"domain": "techcrunch.com",
"category": 1,
"reference_count": 127
},
{
"source_id": "w5x6y7z8-...",
"domain": "forbes.com",
"category": 1,
"reference_count": 89
}
]
}
SourceDomainResponse fields
| Field | Type | Nullable | Description |
|---|
source_id | string (UUID) | No | Source ID |
domain | string | No | Domain name |
category | integer | No | Domain category ID |
reference_count | integer | No | Total citations across all prompts in the date range |
The data field is a flat array (not wrapped in an object) for this endpoint. Pagination does not include a total count — fetch pages until an empty array is returned.