Public API v1
Read and manage account websites, analytics organization, campaign keywords, and indexing through a stable, AI-friendly HTTP API.
Developer access
Get your Semalt API key
Create a free Semalt account to access the Public API and connect AI tools through MCP.
Quick start
Authenticate every request with the API key from your Semalt account using the Authorization: Bearer header.
curl 'https://semalt.com/api/v1/sites?limit=25' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Accept: application/json' https://semalt.com/api/v1Every write endpoint accepts one JSON object and requires Content-Type: application/json. Endpoints that do not need fields still expect an empty JSON object: {}.
curl --request POST \
--url 'https://semalt.com/api/v1/sites' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"domain":"example.com"}'Site records
Site collections preserve each accessible website record without grouping by domain or Search Console property. Repeated domains or properties are intentional when they are available through several accounts.
access_type=own— owned by the authenticated account.access_type=linked— owned by a linked account.access_type=shared— available to this account without direct or linked ownership.
Hidden and removed records are excluded. Use the returned id for every detail request. My SEO campaign data is exposed only when the authenticated account has a campaign for the site's domain.
Account
Authenticated Semalt account information.
GET /me Get the authenticated account
/meReturns the account associated with the authenticated API key and the account ids linked to it.
Sites
Website records available to the authenticated account.
GET /sites List accessible sites
/sitesReturns website records available to the authenticated account. Records are not grouped, so the same domain can appear more than once when it is available through different accounts or properties.
limit query · optional · integer · default: 50 Maximum number of site records to return in this cursor page. The API may return fewer records; use has_more and next_cursor to continue.
cursor query · optional · string Continuation cursor from the previous response meta.next_cursor. Omit it for the first page and treat its value as opaque.
search query · optional · string Case-insensitive substring matched against the website domain and, when present, its Search Console property URL.
tag_ids query · optional · array<integer> Comma-separated site tag ids from GET /site-tags. By default a site may match any supplied tag; use tag_match=all to require every tag.
tag_match query · optional · string · any | all · default: any How tag_ids are combined: any returns a site with at least one selected tag; all requires every selected tag.
exclude_tag_ids query · optional · array<integer> Comma-separated site tag ids. Sites carrying any excluded tag are omitted.
site_type query · optional · string · gsc | manual Return only Search Console-connected records (gsc) or manually added records (manual).
access_type query · optional · string · own | linked | shared Filter by how this account can access the site: direct ownership, a linked account, or another available account relationship.
has_search_console query · optional · boolean When true, return only records connected to a usable Search Console property; when false, return records without one.
POST /sites Add a website
/sitesCreates or restores a manual website for the authenticated account. The operation is idempotent by normalized domain: adding the same domain again returns its existing site record.
application/json one JSON objectWebsite to add. A complete URL is accepted and normalized to its domain.
domain body · required · string Public domain or HTTP/HTTPS URL.
{
"domain": "example.com"
}GET /sites/{site_id} Get one site
/sites/{site_id}Use an id returned by a site collection. The request returns 404 when the site is hidden, removed, unknown, or not accessible to the current account.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
Keyword Groups
Reusable, site-specific keyword collections used as analytics filters.
GET /sites/{site_id}/keyword-groups List keyword groups
/sites/{site_id}/keyword-groupsReturns reusable keyword groups visible for the selected site. Groups identify their owner and whether the authenticated account can edit them.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
POST /sites/{site_id}/keyword-groups Create a keyword group
/sites/{site_id}/keyword-groupsCreates a personal reusable keyword group for the domain represented by site_id.
application/json one JSON objectName for the new group.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
name body · required · string {
"name": "Commercial keywords"
}POST /sites/{site_id}/keyword-groups/{group_id} Rename a keyword group
/sites/{site_id}/keyword-groups/{group_id}Renames an editable non-default keyword group.
application/json one JSON objectNew group name.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
group_id path · required · integer Keyword group identifier returned for the selected site.
name body · required · string {
"name": "High-intent keywords"
}POST /sites/{site_id}/keyword-groups/{group_id}/delete Delete a keyword group
/sites/{site_id}/keyword-groups/{group_id}/deletePermanently deletes an editable non-default group and its keyword membership. Confirm this destructive action before calling it.
application/json one JSON objectSend an empty JSON object to confirm the request shape.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
group_id path · required · integer Keyword group identifier returned for the selected site.
{}GET /sites/{site_id}/keyword-groups/{group_id}/keywords List group keywords
/sites/{site_id}/keyword-groups/{group_id}/keywordsReturns keyword rows stored in one reusable group. search is a case-insensitive keyword substring.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
group_id path · required · integer Keyword group identifier returned for the selected site.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
search query · optional · string Text used to narrow keyword or query results. For Google SERP token search, provide at least four characters.
POST /sites/{site_id}/keyword-groups/{group_id}/keywords Add keywords to a group
/sites/{site_id}/keyword-groups/{group_id}/keywordsAdds normalized keywords to an editable group. Exact duplicates are skipped and reported, so retrying the same payload is safe.
application/json one JSON objectKeyword text values to add.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
group_id path · required · integer Keyword group identifier returned for the selected site.
keywords body · required · array<string> {
"keywords": [
"technical seo audit",
"managed seo services"
]
}POST /sites/{site_id}/keyword-groups/{group_id}/keywords/remove Remove keywords from a group
/sites/{site_id}/keyword-groups/{group_id}/keywords/removeRemoves keyword rows by ids returned by the group keyword list. Confirm the affected rows before calling it.
application/json one JSON objectKeyword row ids to remove.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
group_id path · required · integer Keyword group identifier returned for the selected site.
keyword_ids body · required · array<integer> {
"keyword_ids": [
123,
124
]
}Search Console
Google Search Console properties and their analytics.
GET /search-console/sites List Search Console properties
/search-console/sitesReturns accessible Search Console properties with current and previous metrics for each record on this cursor page. By default, the current period ends yesterday and covers the preceding 29 inclusive calendar dates.
limit query · optional · integer · default: 50 Maximum number of site records to return in this cursor page. The API may return fewer records; use has_more and next_cursor to continue.
cursor query · optional · string Continuation cursor from the previous response meta.next_cursor. Omit it for the first page and treat its value as opaque.
search query · optional · string Case-insensitive substring matched against the website domain and, when present, its Search Console property URL.
tag_ids query · optional · array<integer> Comma-separated site tag ids from GET /site-tags. By default a site may match any supplied tag; use tag_match=all to require every tag.
tag_match query · optional · string · any | all · default: any How tag_ids are combined: any returns a site with at least one selected tag; all requires every selected tag.
exclude_tag_ids query · optional · array<integer> Comma-separated site tag ids. Sites carrying any excluded tag are omitted.
access_type query · optional · string · own | linked | shared Filter by how this account can access the site: direct ownership, a linked account, or another available account relationship.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
GET /search-console/sites/{site_id}/overview Get Search Console overview
/search-console/sites/{site_id}/overviewReturns summary cards and daily charts for the exact Search Console property associated with site_id.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
GET /search-console/sites/{site_id}/traffic Get a Search Console traffic series
/search-console/sites/{site_id}/trafficReturns one daily series for a selected query, page, device, or country. metric chooses which measurement is copied into each item.value; every item also contains clicks, impressions, CTR, and average position for context. Use value to select the exact dimension value.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
metric query · optional · string · clicks | impressions | ctr | position · default: position Selects the measurement written to each traffic-series item.value: clicks is Google result visits, impressions is result appearances, ctr is clicks divided by impressions as a percentage, and position is average Google result position. Each item still includes all four measurements. Default: position.
dimension query · optional · string · query | page | device | country · default: query Entity represented by value in the traffic series. Use query for a search phrase, page for a page URL, device for desktop/mobile/tablet, or country for a Search Console country code.
value query · optional · string Exact query text, page URL, device name, or country code whose daily series should be returned. Its meaning is determined by dimension.
device query · optional · string · desktop | mobile | tablet Restrict Search Console data to one device category.
country query · optional · string Restrict Search Console data to a canonical country code returned by Search Console, usually a three-character code.
GET /search-console/sites/{site_id}/keywords List Search Console keywords
/search-console/sites/{site_id}/keywordsReturns aggregated search queries. search matches query text; metric ranges are inclusive and apply before pagination.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
search query · optional · string Case-insensitive substring matched against Search Console query text.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
device query · optional · string · desktop | mobile | tablet Restrict Search Console data to one device category.
country query · optional · string Restrict Search Console data to a canonical country code returned by Search Console, usually a three-character code.
sort_by query · optional · string · value | keywords | pages | clicks | impressions | ctr | first_time | position · default: impressions Column used to order aggregated Search Console rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
clicks_min query · optional · number Keep rows with at least this many clicks.
clicks_max query · optional · number Keep rows with no more than this many clicks.
impressions_min query · optional · number Keep rows with at least this many impressions.
impressions_max query · optional · number Keep rows with no more than this many impressions.
ctr_min query · optional · number Keep rows with CTR at or above this percentage.
ctr_max query · optional · number Keep rows with CTR at or below this percentage.
position_min query · optional · number Keep rows whose average position is at least this numeric value.
position_max query · optional · number Keep rows whose average position is no greater than this numeric value; useful for TOP 10-style filtering.
GET /search-console/sites/{site_id}/pages List Search Console pages
/search-console/sites/{site_id}/pagesReturns aggregated pages. search matches a page URL or path; metric ranges are inclusive and apply before pagination.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
search query · optional · string Case-insensitive substring matched against a Search Console page URL or path.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
device query · optional · string · desktop | mobile | tablet Restrict Search Console data to one device category.
country query · optional · string Restrict Search Console data to a canonical country code returned by Search Console, usually a three-character code.
sort_by query · optional · string · value | keywords | pages | clicks | impressions | ctr | first_time | position · default: impressions Column used to order aggregated Search Console rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
clicks_min query · optional · number Keep rows with at least this many clicks.
clicks_max query · optional · number Keep rows with no more than this many clicks.
impressions_min query · optional · number Keep rows with at least this many impressions.
impressions_max query · optional · number Keep rows with no more than this many impressions.
ctr_min query · optional · number Keep rows with CTR at or above this percentage.
ctr_max query · optional · number Keep rows with CTR at or below this percentage.
position_min query · optional · number Keep rows whose average position is at least this numeric value.
position_max query · optional · number Keep rows whose average position is no greater than this numeric value; useful for TOP 10-style filtering.
GET /search-console/sites/{site_id}/devices List Search Console devices
/search-console/sites/{site_id}/devicesReturns aggregated desktop, mobile, and tablet performance. country can narrow the rows before aggregation.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
device query · optional · string · desktop | mobile | tablet Restrict Search Console data to one device category.
country query · optional · string Restrict Search Console data to a canonical country code returned by Search Console, usually a three-character code.
sort_by query · optional · string · value | keywords | pages | clicks | impressions | ctr | first_time | position · default: impressions Column used to order aggregated Search Console rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
clicks_min query · optional · number Keep rows with at least this many clicks.
clicks_max query · optional · number Keep rows with no more than this many clicks.
impressions_min query · optional · number Keep rows with at least this many impressions.
impressions_max query · optional · number Keep rows with no more than this many impressions.
ctr_min query · optional · number Keep rows with CTR at or above this percentage.
ctr_max query · optional · number Keep rows with CTR at or below this percentage.
position_min query · optional · number Keep rows whose average position is at least this numeric value.
position_max query · optional · number Keep rows whose average position is no greater than this numeric value; useful for TOP 10-style filtering.
GET /search-console/sites/{site_id}/countries List Search Console countries
/search-console/sites/{site_id}/countriesReturns performance grouped by canonical Google Search Console country code. device can narrow the rows before aggregation.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
device query · optional · string · desktop | mobile | tablet Restrict Search Console data to one device category.
country query · optional · string Restrict Search Console data to a canonical country code returned by Search Console, usually a three-character code.
sort_by query · optional · string · value | keywords | pages | clicks | impressions | ctr | first_time | position · default: impressions Column used to order aggregated Search Console rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
clicks_min query · optional · number Keep rows with at least this many clicks.
clicks_max query · optional · number Keep rows with no more than this many clicks.
impressions_min query · optional · number Keep rows with at least this many impressions.
impressions_max query · optional · number Keep rows with no more than this many impressions.
ctr_min query · optional · number Keep rows with CTR at or above this percentage.
ctr_max query · optional · number Keep rows with CTR at or below this percentage.
position_min query · optional · number Keep rows whose average position is at least this numeric value.
position_max query · optional · number Keep rows whose average position is no greater than this numeric value; useful for TOP 10-style filtering.
Google SERP
Google ranking analytics resolved from an accessible website.
GET /google-serp/sites List sites with Google SERP metrics
/google-serp/sitesReturns accessible site records with ranking statistics joined by normalized domain. The same domain remains separate when it is accessible through more than one account record. The default date range ends today.
limit query · optional · integer · default: 50 Maximum number of site records to return in this cursor page. The API may return fewer records; use has_more and next_cursor to continue.
cursor query · optional · string Continuation cursor from the previous response meta.next_cursor. Omit it for the first page and treat its value as opaque.
search query · optional · string Case-insensitive substring matched against the website domain and, when present, its Search Console property URL.
tag_ids query · optional · array<integer> Comma-separated site tag ids from GET /site-tags. By default a site may match any supplied tag; use tag_match=all to require every tag.
tag_match query · optional · string · any | all · default: any How tag_ids are combined: any returns a site with at least one selected tag; all requires every selected tag.
exclude_tag_ids query · optional · array<integer> Comma-separated site tag ids. Sites carrying any excluded tag are omitted.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
site_type query · optional · string · gsc | manual Return only Search Console-connected records (gsc) or manually added records (manual).
access_type query · optional · string · own | linked | shared Filter by how this account can access the site: direct ownership, a linked account, or another available account relationship.
GET /google-serp/sites/{site_id}/overview Get Google SERP overview
/google-serp/sites/{site_id}/overviewReturns site statistics for the selected search engine and date range. If an exact snapshot is unavailable, the analytics source may use the nearest earlier snapshot.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
date_from query · optional · string Inclusive first calendar date of the requested analytics period in YYYY-MM-DD format. If omitted, the endpoint selects a recent default period.
date_to query · optional · string Inclusive last calendar date of the requested analytics period in YYYY-MM-DD format. If both dates are supplied in reverse order, site summaries normalize their order.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
GET /google-serp/sites/{site_id}/keywords List Google SERP keyword positions
/google-serp/sites/{site_id}/keywordsReturns keyword positions and movement for the domain resolved from site_id. search is a keyword token search and should contain at least four characters. keyword_group_id restricts results to a reusable group visible for this site. Continue cursor pagination with next_token from the result as page_token.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
date query · optional · string Requested snapshot date in YYYY-MM-DD format. When the exact snapshot is unavailable, Google SERP data may come from the nearest earlier snapshot.
search query · optional · string Text used to narrow keyword or query results. For Google SERP token search, provide at least four characters.
keyword_group_id query · optional · integer Restrict results to keywords in this reusable group. Obtain the id from GET /sites/{site_id}/keyword-groups; an empty group returns no matching rows.
page_url query · optional · string Exact page URL or path previously returned by Google SERP analytics.
position_group query · optional · string · top1 | top3 | top10 | quick_wins Convenience filter for position sets: top1 is position 1, top3 is 1–3, top10 is 1–10, and quick_wins is 4–10.
position_change query · optional · string · dynamics | moved_up | moved_down | changed | not_changed | entered | dropped Filter keywords by movement between snapshots. dynamics means no movement filter.
primary_only query · optional · boolean When true, return only primary Google SERP position records.
sort_by query · optional · string · key_val | pos | searches | popularity · default: popularity Column used to order Google SERP keyword rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
page_token query · optional · string Opaque Google SERP keyword cursor from the previous result next_token. Omit it for the first page.
GET /google-serp/sites/{site_id}/pages List best Google SERP pages
/google-serp/sites/{site_id}/pagesReturns best-performing pages for the resolved domain. keyword_group_id calculates page metrics only from keywords in a reusable group. page_url and keyword are exact upstream values; numeric minimum and maximum filters are inclusive.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
date query · optional · string Requested snapshot date in YYYY-MM-DD format. When the exact snapshot is unavailable, Google SERP data may come from the nearest earlier snapshot.
keyword_group_id query · optional · integer Restrict results to keywords in this reusable group. Obtain the id from GET /sites/{site_id}/keyword-groups; an empty group returns no matching rows.
page_url query · optional · string Exact page URL or path previously returned by Google SERP analytics.
keyword query · optional · string Exact keyword value previously returned by Google SERP analytics.
queries_min query · optional · number Keep pages with at least this many tracked queries.
queries_max query · optional · number Keep pages with no more than this many tracked queries.
average_position_min query · optional · number Keep pages whose average position is at least this value.
average_position_max query · optional · number Keep pages whose average position is no greater than this value.
share_percent_min query · optional · number Keep pages whose visibility share is at least this percentage.
share_percent_max query · optional · number Keep pages whose visibility share is no greater than this percentage.
rating_min query · optional · number Keep pages whose rating is at least this value.
rating_max query · optional · number Keep pages whose rating is no greater than this value.
sort_by query · optional · string · total_queries | keywords | avg_pos | share_percent | rating · default: total_queries Column used to order Google SERP page rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
GET /google-serp/sites/{site_id}/competitors List Google SERP competitors
/google-serp/sites/{site_id}/competitorsReturns the top competitors by shared keywords for the resolved domain.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
date query · optional · string Requested snapshot date in YYYY-MM-DD format. When the exact snapshot is unavailable, Google SERP data may come from the nearest earlier snapshot.
GET /google-serp/rankings List global Google SERP rankings
/google-serp/rankingsReturns a page of global domain rankings for one search engine and snapshot date.
search_engine_id query · optional · integer · default: 1 Numeric search-engine/location identifier returned by Semalt analytics. The default value 1 is the standard engine.
date query · optional · string Requested snapshot date in YYYY-MM-DD format. When the exact snapshot is unavailable, Google SERP data may come from the nearest earlier snapshot.
sort_by query · optional · string · rank | authority_linear | authority_percentile | authority_commercial | total_queries | total_pages · default: rank Column used to order global Google SERP rankings.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
AI Analytics
AI visibility analytics for GPT-4.1 nano and GPT-5 nano.
GET /ai-analytics/sites List sites with AI visibility metrics
/ai-analytics/sitesReturns accessible site records with visibility metrics for the selected public model name. The default model is gpt-5-nano.
limit query · optional · integer · default: 50 Maximum number of site records to return in this cursor page. The API may return fewer records; use has_more and next_cursor to continue.
cursor query · optional · string Continuation cursor from the previous response meta.next_cursor. Omit it for the first page and treat its value as opaque.
search query · optional · string Case-insensitive substring matched against the website domain and, when present, its Search Console property URL.
tag_ids query · optional · array<integer> Comma-separated site tag ids from GET /site-tags. By default a site may match any supplied tag; use tag_match=all to require every tag.
tag_match query · optional · string · any | all · default: any How tag_ids are combined: any returns a site with at least one selected tag; all requires every selected tag.
exclude_tag_ids query · optional · array<integer> Comma-separated site tag ids. Sites carrying any excluded tag are omitted.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
site_type query · optional · string · gsc | manual Return only Search Console-connected records (gsc) or manually added records (manual).
access_type query · optional · string · own | linked | shared Filter by how this account can access the site: direct ownership, a linked account, or another available account relationship.
GET /ai-analytics/sites/{site_id}/overview Get AI Analytics overview
/ai-analytics/sites/{site_id}/overviewReturns AI visibility statistics for the domain resolved from site_id and the selected model.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
GET /ai-analytics/sites/{site_id}/queries List AI query positions
/ai-analytics/sites/{site_id}/queriesReturns query, page, position, and category data. query_id and page_id are exact ids returned by this endpoint; position_group provides common TOP filters without constructing arrays.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
position_group query · optional · string · top1 | top3 | top10 | quick_wins Convenience filter for position sets: top1 is position 1, top3 is 1–3, top10 is 1–10, and quick_wins is 4–10.
query_id query · optional · integer Exact AI Analytics query id returned by a previous query result.
page_id query · optional · integer Exact AI Analytics page id returned by a previous result.
sort_by query · optional · string · key_val | page_val | pos | ts · default: pos Column used to order AI query-position rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
GET /ai-analytics/sites/{site_id}/pages List best AI Analytics pages
/ai-analytics/sites/{site_id}/pagesReturns best-performing pages for the resolved domain and selected model.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
sort_by query · optional · string · total_queries | avg_pos | share_percent | rating · default: total_queries Column used to order AI Analytics page rows.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
GET /ai-analytics/sites/{site_id}/competitors List AI competitors
/ai-analytics/sites/{site_id}/competitorsReturns the leading AI visibility competitors for the resolved domain and selected model.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
GET /ai-analytics/rankings List global AI visibility rankings
/ai-analytics/rankingsReturns a page of global domain rankings for the selected AI model.
model query · optional · string · gpt-4.1-nano | gpt-5-nano · default: gpt-5-nano AI model dataset to query. gpt-4.1-nano selects GPT-4.1 nano analytics; gpt-5-nano selects GPT-5 nano analytics.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
My SEO
Campaign data associated with the authenticated account and an accessible website domain.
GET /my-seo/sites List sites with campaign data
/my-seo/sitesReturns accessible sites and joins campaign details only when the authenticated account has a campaign for the site domain. Sites without such a campaign have campaign_access=false and campaign=null.
limit query · optional · integer · default: 50 Maximum number of site records to return in this cursor page. The API may return fewer records; use has_more and next_cursor to continue.
cursor query · optional · string Continuation cursor from the previous response meta.next_cursor. Omit it for the first page and treat its value as opaque.
search query · optional · string Case-insensitive substring matched against the website domain and, when present, its Search Console property URL.
tag_ids query · optional · array<integer> Comma-separated site tag ids from GET /site-tags. By default a site may match any supplied tag; use tag_match=all to require every tag.
tag_match query · optional · string · any | all · default: any How tag_ids are combined: any returns a site with at least one selected tag; all requires every selected tag.
exclude_tag_ids query · optional · array<integer> Comma-separated site tag ids. Sites carrying any excluded tag are omitted.
site_type query · optional · string · gsc | manual Return only Search Console-connected records (gsc) or manually added records (manual).
access_type query · optional · string · own | linked | shared Filter by how this account can access the site: direct ownership, a linked account, or another available account relationship.
has_campaign query · optional · boolean When true, return only sites with a campaign; when false, return only sites without one.
campaign_status query · optional · string · draft | launched | paused | cancelled Return only campaigns in this lifecycle state.
campaign_plan query · optional · string · autoseo | fullseo Return only campaigns using this plan.
GET /my-seo/sites/{site_id}/keywords List campaign keywords
/my-seo/sites/{site_id}/keywordsAvailable when the authenticated account has a campaign for the site domain. search matches keyword text; target_url is an exact normalized target URL; keyword_group_id restricts results to a reusable group visible for this site.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
search query · optional · string Text used to narrow keyword or query results. For Google SERP token search, provide at least four characters.
keyword_group_id query · optional · integer Restrict results to keywords in this reusable group. Obtain the id from GET /sites/{site_id}/keyword-groups; an empty group returns no matching rows.
source query · optional · string · gsc | serp | manual Filter campaign keywords by their source.
status query · optional · string · pending | approved | rejected Filter campaign keywords by review status.
target_url query · optional · string Exact normalized target URL assigned to a campaign keyword.
sort_by query · optional · string · keyword | source | url | position | popularity | status | updated_at · default: popularity Column used to order campaign keywords.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
POST /my-seo/sites/{site_id}/keywords Add manual campaign keywords
/my-seo/sites/{site_id}/keywordsAdds keyword and target URL pairs to the authenticated account campaign for the site domain when it is a launched FullSEO campaign. Duplicate pairs update the existing manual records. Target URLs must belong to the campaign domain.
application/json one JSON objectManual keyword rows and their initial review state.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
items body · required · array<object> approved body · optional · boolean · default: true true saves as Approved; false saves as Recommended.
{
"items": [
{
"keyword": "technical seo audit",
"url": "https://example.com/seo-audit"
}
],
"approved": true
}GET /my-seo/sites/{site_id}/backlinks List campaign backlinks
/my-seo/sites/{site_id}/backlinksAvailable when the authenticated account has a campaign for the site domain. search matches donor domain, page, question, or associated keyword text.
site_id path · required · integer Stable site identifier returned by a site collection endpoint.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
search query · optional · string Case-insensitive substring matched against donor domain, page, question, and keyword text.
link_type query · optional · string · discussion | article | wiki Filter backlinks by placement type.
domain_rating query · optional · string · under40 | 40_70 | 70plus Filter donor domain rating into a simple range: under40, 40_70 (40 inclusive, 70 exclusive), or 70plus.
sort_by query · optional · string · placed | donor | dr | referring_domains | backlinks | rank | top100 · default: placed Column used to order campaign backlinks.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
Indexing
Indexing URLs owned by the authenticated account.
GET /indexing/urls List indexing URLs
/indexing/urlsReturns indexing URLs and their current crawler status for the authenticated account. url_contains and domain are independent, case-insensitive substring filters.
page query · optional · integer · default: 1 One-based result page number. Use 1 for the first page.
page_size query · optional · integer · default: 50 Maximum number of items in one page. Public API responses cap this value at 200; some product datasets may apply a lower internal cap.
url_contains query · optional · string Case-insensitive substring matched against the complete submitted URL.
domain query · optional · string Domain or hostname substring. A supplied URL is normalized to its domain before filtering.
status query · optional · string · queued | processing | visited | failed Filter by readable indexing state.
bot query · optional · string · google | openai | bing Filter by crawler that processes the URL.
sort_by query · optional · string · url | domain | bot | status | created · default: created Column used to order indexing records.
sort_direction query · optional · string · ASC | DESC Sort in ascending (ASC) or descending (DESC) order using sort_by. Defaults are endpoint-specific when omitted.
POST /indexing/urls Add URLs to indexing
/indexing/urlsSubmits each unique URL for every selected bot and debits the account indexing balance only for persisted requests. google is the default bot; bing is also supported. This operation does not accept an idempotency key: after an ambiguous network failure, inspect GET /indexing/urls before retrying.
application/json one JSON objectComplete URLs and supported crawler names.
urls body · required · array<string> bots body · optional · array<string> · default: google {
"urls": [
"https://example.com/",
"https://example.com/page"
],
"bots": [
"google"
]
}Errors
Errors use application/problem+json. The stable code is suitable for application logic; include request_id when contacting support.
{
"type": "https://semalt.com/api-docs#errors",
"title": "Unauthorized",
"status": 401,
"code": "invalid_api_key",
"detail": "The API key is invalid or inactive.",
"request_id": "..."
}