API

Sources

The Sources API returns the AI-cited domains and URLs analyzed throughout a project. It is part of citation analysis of SE Visible where prompts and AI results tell you what AI engines said, and sources tell you which web pages they pulled the information from. Use it to identify the domains and pages that drive your AI visibility, see how often they appear in AI answers, and track whether they mention your brand or your competitors’ brands.

Using the SE Visible API, you can:

  • list the domains AI models cite for a project, with appearance counts, coverage, and prompt reach
  • drill into the individual URLs behind those domains, with page title, category, and HTTP status
  • filter sources by model, country, topic, prompt, sentiment, brand mentions, and competitor presence
  • compare a selected metric across two different date ranges to analyze performance changes

All endpoints are relative to the base URL https://api.seranking.com/v1/se-visible.


Get project sources

GET https://api.seranking.com/v1/se-visible/projects/{project_id}/sources

Retrieves the sources (domains or URLs) that AI models cited across a project, with extensive filtering. The shape of each row in the response depends on source_type: domain returns one row per cited domain, url returns one row per cited page.

Note:

  • source_type switches the response between domain rows and URL rows. It also changes which source_sort_field values are valid: passing a sort field that belongs to the other type returns 422.
  • Most numeric fields are wrapped in a metric object with a values array. A single period returns one entry in values. When you supply date_range[1] (compare mode), the field returns two entries plus a delta with absolute and percentage.

Request parameters

Path parameters

ParameterTypeRequiredDescription
project_idString (UUID)YesUUID of the project.

Query parameters

ParameterTypeRequiredDefaultDescription
date_rangeObjectYesN/ABase period at index 0, optional compare period at index 1. Each has from and to in YYYY-MM-DD. See Date ranges and compare mode.
source_typeStringNodomainRow shape of the response: domain or url. Also determines the valid set of source_sort_field values.
model_typesArray of StringNoN/AFilter by AI model types (e.g. chatgpt, perplexity).
country_codesArray of StringNoN/AFilter by ISO 3166-1 alpha-2 country codes.
topic_idsArray of IntegerNoN/AFilter by topic IDs.
prompt_idsArray of IntegerNoN/AFilter by prompt IDs.
tracked_brand_idsArray of IntegerNoN/AFilter by tracked brand IDs.
sentimentsArray of StringNoN/AFilter by sentiment: positive, neutral, negative.
search_queryStringNoN/AFilter sources by a substring of the domain or URL.
domain_idIntegerNoN/ARestrict results to a single domain.
typesArray of StringNoN/AFilter by URL category type (e.g. blog, news, social). See the Reference for the full list.
is_my_brand_mentionsIntegerNoN/AFilter sources by whether the project’s primary brand is mentioned: 1 mentioned, 0 not mentioned, -1 mention status not available.
competitors_count_fromIntegerNoN/AMinimum number of competitor brands on the source (inclusive, min 0).
competitors_count_toIntegerNoN/AMaximum number of competitor brands on the source (inclusive, min 0).
brand_idsArray of IntegerNoN/AKeep sources that mention these brand IDs (see brand_match_mode).
brand_match_modeStringNoanyWhen filtering by brand_ids, match any of the brands or all of them.
source_sort_fieldStringNoN/AField to sort by. The valid set depends on source_type. For domain: ai_answers_count, pages, coverage, prompts_count, mention_rate, my_brand_mentions_count, competitors_count, first_seen, last_seen. For url: ai_answers_count, coverage, prompts_count, competitors_count, my_brand_mentions, gap_score, first_seen, last_seen, last_check_date. Passing a value outside the set for the current source_type returns 422.
sort_orderStringNoN/ASort direction: asc or desc.
limitIntegerNo1000Maximum number of sources to return (min 1, max 10000).
offsetIntegerNo0Number of sources to skip from the start of the list.

Request example

curl -X GET --globoff 'https://api.seranking.com/v1/se-visible/projects/550e8400-e29b-41d4-a716-446655440000/sources?source_type=domain&date_range[0][from]=2026-05-01&date_range[0][to]=2026-05-31&source_sort_field=ai_answers_count&sort_order=desc' \
  -H 'Authorization: Token YOUR_API_KEY'

Response parameters

If successful, the server returns a sources object with the row list and a total count.

ParameterTypeDescription
itemsArraySource rows. Each row is a domain object (when source_type=domain) or a URL object (when source_type=url).
totalIntegerTotal number of sources available for the filters.

Most numeric fields are returned as a metric object rather than a plain number:

FieldTypeDescription
valuesArray of NumberMetric value per period. One entry for a single period; two entries in compare mode (base, then compare). An entry can be null when a period has no data.
deltaObjectPresent only in compare mode. Difference between the two periods.
delta.absoluteNumberAbsolute change (base minus compare).
delta.percentageNumberPercentage change.

Domain rows (source_type=domain)

ParameterTypeDescription
domainStringDomain name.
domain_idIntegerUnique domain identifier.
brand_idsArray of IntegerBrand IDs mentioned on this domain.
first_seenDatetimeFirst time this domain appeared in results.
last_seenDatetimeLast time this domain appeared in results.
ai_answers_countMetric objectNumber of AI answers that cited this domain.
pagesMetric objectDistinct URLs of this domain seen as a source.
coverageMetric objectPercentage of prompts whose answers cited this domain.
competitors_countMetric objectDistinct competitor brands attached to this domain’s source URLs in the period.
prompts_countMetric objectDistinct prompts whose answers cited this domain.
my_brand_mentions_countMetric objectURLs on this domain that mention the primary brand.
mention_rateMetric objectPercentage of this domain’s pages whose URL mentions the primary brand.
responses_countMetric objectTotal AI responses observed in the period.

URL rows (source_type=url)

ParameterTypeDescription
urlStringFull URL.
domain_idIntegerIdentifier of the domain this URL belongs to.
brand_idsArray of IntegerBrand IDs mentioned on this URL.
titleStringPage title extracted from the HTML.
typeStringURL category type (e.g. blog, news, social). See the Reference for the full list.
statusInteger or nullHTTP status code of the URL. null if not yet checked.
first_seenDatetimeFirst time this URL appeared in results.
last_seenDatetimeLast time this URL appeared in results.
last_check_dateDatetime or nullWhen this URL was last parsed for brand mentions. null if not yet parsed.
competitors_countIntegerCompetitor brand count for this URL (plain scalar).
my_brand_mentionsInteger1 if the URL currently mentions the primary brand, 0 otherwise.
gap_scoreInteger or nullGap score for ranking. null when not computable.
ai_answers_countMetric objectNumber of AI answers that cited this URL.
coverageMetric objectPercentage of prompts whose answers cited this URL.
prompts_countMetric objectDistinct prompts whose answers cited this URL.
responses_countMetric objectTotal AI responses observed in the period.

Response example

Domain sources, single period

{
  "items": [
    {
      "domain": "example.com",
      "domain_id": 123,
      "ai_answers_count": {
        "values": [45]
      },
      "pages": {
        "values": [12]
      },
      "coverage": {
        "values": [75.5]
      },
      "brand_ids": [1, 2],
      "competitors_count": {
        "values": [2]
      },
      "prompts_count": {
        "values": [10]
      },
      "my_brand_mentions_count": {
        "values": [3]
      },
      "mention_rate": {
        "values": [25]
      },
      "responses_count": {
        "values": [60]
      },
      "first_seen": "2024-01-01 00:00:00",
      "last_seen": "2024-01-15 00:00:00"
    }
  ],
  "total": 1
}

URL sources, compare mode

{
  "items": [
    {
      "url": "https://example.com/article1",
      "domain_id": 123,
      "ai_answers_count": {
        "values": [15, 8],
        "delta": {
          "absolute": 7,
          "percentage": 87.5
        }
      },
      "coverage": {
        "values": [25.5, 16],
        "delta": {
          "absolute": 9.5,
          "percentage": 59.38
        }
      },
      "type": "blog",
      "title": "Article 1",
      "brand_ids": [1, 2],
      "competitors_count": 2,
      "my_brand_mentions": 1,
      "gap_score": null,
      "prompts_count": {
        "values": [5, 3],
        "delta": {
          "absolute": 2,
          "percentage": 66.67
        }
      },
      "responses_count": {
        "values": [60, 50],
        "delta": {
          "absolute": 10,
          "percentage": 20
        }
      },
      "first_seen": "2024-01-01 00:00:00",
      "last_seen": "2024-02-15 00:00:00",
      "last_check_date": "2024-02-15 00:00:00",
      "status": 200
    }
  ],
  "total": 1
}

Learn how SE Ranking’s API can boost your SEO!

Hi! Meet our product experts!

One of them will walk you through the API and show you how to get the most out of it.

  • Enjoy a tailored demo on integrating rich, structured SEO data into your stack.
  • Pin down every tech detail live—auth, endpoints, rate limits, data formats.
  • Compare usage tiers and pricing so you can unlock maximum data value.

Request a free demo to see our tools and integrations in action

By clicking this button, you agree to SE Ranking’s
Terms of Service and Privacy Statement.