Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: DataForSEO AiOptimization Content Analysis API
description: DataForSEO API is the starting point on your journey towards building powerful SEO software. With DataForSEO you can get all the data you need to build an efficient application while also saving your time and budget. DataForSEO API is using the REST technology for interchanging data between your application and our service. The data exchange is made through the widely used HTTP protocol, which allows applying our API to almost all programming languages.
version: 1.0.0
servers:
- url: https://api.dataforseo.com
- url: https://sandbox.dataforseo.com
tags:
- name: ContentAnalysis
paths:
/v3/content_analysis/id_list:
post:
tags:
- ContentAnalysis
description: 'This endpoint is designed to provide you with a list of IDs and metadata for all Content Analysis tasks created within the specified time period, including both successful and uncompleted tasks.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/id_list/?bash'''
operationId: ContentAnalysisIdList
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisIdListRequestInfo'
example:
- datetime_from: '2026-04-12 04:39:39 +00:00'
datetime_to: '2026-04-14 04:39:39 +00:00'
limit: 100
offset: 0
sort: desc
include_metadata: true
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisIdListResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/available_filters:
get:
tags:
- ContentAnalysis
description: 'Here you will find all the necessary information about filters that can be used with Content Analysis API endpoints.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/filters/?bash'''
operationId: ContentAnalysisAvailableFilters
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisAvailableFiltersResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/locations:
get:
tags:
- ContentAnalysis
description: 'You will receive the list of locations by this API call.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/locations/?bash'''
operationId: Locations
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisLocationsResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/languages:
get:
tags:
- ContentAnalysis
description: 'You will receive the list of languages by calling this API.
As a response of the API server, you will receive JSON-encoded data containing a tasks array with the information specific to the set tasks.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/languages/?bash'''
operationId: Languages
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisLanguagesResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/categories:
get:
tags:
- ContentAnalysis
description: 'We use Google product and service categories. This endpoint will provide you with the full list of available categories.
You can also download the CSV file by this link.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/categories/?bash'''
operationId: ContentAnalysisCategories
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisCategoriesResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/search/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with detailed citation data available for the target keyword.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/search/live/?bash'''
operationId: SearchLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSearchLiveRequestInfo'
example:
- keyword_fields:
snippet: logitech
keyword: logitech
page_type:
- ecommerce
- news
- blogs
- message-boards
- organization
search_mode: as_is
filters:
- main_domain
- '='
- reviewfinder.ca
order_by:
- content_info.sentiment_connotations.anger,desc
limit: 10
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSearchLiveResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/summary/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with an overview of citation data available for the target keyword.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/summary/live/?bash'''
operationId: ContentAnalysisSummaryLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryLiveRequestInfo'
example:
- keyword: logitech
page_type:
- ecommerce
- news
- blogs
- message-boards
- organization
internal_list_limit: 8
positive_connotation_threshold: 0.5
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryLiveResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/sentiment_analysis/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with sentiment analysis data for the citations available for the target keyword.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/sentiment_analysis/live/?bash'''
operationId: SentimentAnalysisLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSentimentAnalysisLiveRequestInfo'
example:
- keyword: logitech
internal_list_limit: 1
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSentimentAnalysisLiveResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/rating_distribution/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with rating distribution data for the keyword and other parameters specified in the request.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/rating_distribution/live/?bash'''
operationId: RatingDistributionLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisRatingDistributionLiveRequestInfo'
example:
- keyword: logitech
search_mode: as_is
internal_list_limit: 10
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisRatingDistributionLiveResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/phrase_trends/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with data on all citations of the target keyword for the indicated date range.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/phrase_trends/live/?bash'''
operationId: PhraseTrendsLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisPhraseTrendsLiveRequestInfo'
example:
- keyword: logitech
search_mode: as_is
date_from: '2026-01-15'
date_group: month
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisPhraseTrendsLiveResponseInfo'
security:
- basicAuth: []
/v3/content_analysis/category_trends/live:
post:
tags:
- ContentAnalysis
description: 'This endpoint will provide you with data on all citations in the target category for the indicated date range.
for more info please visit ''https://docs.dataforseo.com/v3/content_analysis/category_trends/live/?bash'''
operationId: CategoryTrendsLive
requestBody:
content:
application/json:
schema:
type: array
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisCategoryTrendsLiveRequestInfo'
example:
- category_code: 10994
search_mode: as_is
date_from: '2026-01-15'
date_group: month
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisCategoryTrendsLiveResponseInfo'
security:
- basicAuth: []
components:
schemas:
ContentAnalysisIdListResponseInfo:
type: object
allOf:
- $ref: '#/components/schemas/BaseResponseInfo'
- type: object
properties:
tasks:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisIdListTaskInfo'
description: array of tasks
ContentAnalysisSearchLiveItem:
type: object
properties:
type:
type:
- string
- 'null'
description: type of element
url:
type:
- string
- 'null'
description: URL where the citation was found
domain:
type:
- string
- 'null'
description: domain name
main_domain:
type:
- string
- 'null'
description: main domain
url_rank:
type:
- integer
- 'null'
description: 'rank of the url
this value is based on backlink data for the given URL from DataForSEO Backlink Index;
url_rank is calculated based on the method for node ranking in a linked database – a principle used in the original Google PageRank algorithm
learn more about the metric and how it is calculated in this help center article'
spam_score:
type:
- integer
- 'null'
description: 'backlink spam score of the url
this value is based on backlink data for the given URL from DataForSEO Backlink Index;
learn more about how the metric is calculated on this help center page'
domain_rank:
type:
- integer
- 'null'
description: 'rank of the domain
this value is based on backlink data for the given domain from DataForSEO Backlink Index;
domain_rank is calculated based on the method for node ranking in a linked database – a principle used in the original Google PageRank algorithm
learn more about the metric and how it is calculated in this help center article'
fetch_time:
type:
- string
- 'null'
description: 'date and time when our crawler visited the page
in the UTC format: “yyyy-mm-dd hh-mm-ss +00:00”
example:
2017-01-24 13:20:59 +00:00'
country:
type:
- string
- 'null'
description: 'country code of the domain registration
to obtain a full list of available countries, refer to the Locations endpoint'
language:
type:
- string
- 'null'
description: 'main language of the domain
to obtain a full list of available languages, refer to the Languages endpoint'
score:
type:
- number
- 'null'
description: 'citation prominence score
this value is based on url_rank, domain_rank, keyword presence in title, main_title, url, snippet
the higher the score, the more value the related citation has'
page_category:
type:
- array
- 'null'
items:
type: integer
description: 'contains all relevant page categories
product and service categories relevant for the page
to obtain a full list of available categories, refer to the Categories endpoint'
page_types:
type:
- array
- 'null'
items:
type: string
description: page types
ratings:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentRatingInfo'
description: 'ratings found on the page
all ratings found on the page based on microdata'
social_metrics:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/SocialMetricsInfo'
description: 'social media engagement metrics
data on social media interactions associated with the content based on website embeds developed and supported by social media platforms'
content_info:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/AnalysisContentInfo'
description: contains data on citations from the given url
ContentAnalysisCategoryTrendsLiveRequestInfo:
type: object
properties:
category_code:
type:
- integer
- 'null'
description: 'target category code
required field
to obtain a full list of available categories, refer to the Categories endpoint'
page_type:
type:
- array
- 'null'
items:
type: string
description: 'target page types
optional field
use this parameter to filter the dataset by page types
possible values:
"ecommerce", "news", "blogs", "message-boards", "organization"'
search_mode:
type:
- string
- 'null'
description: 'results grouping type
optional field
possible grouping types:
as_is – returns data on all citations for the target category_code
one_per_domain – returns data on one citation of the category_code per domain
default value: as_is'
internal_list_limit:
type:
- integer
- 'null'
description: 'maximum number of elements within internal arrays
optional field
you can use this field to limit the number of elements within the following arrays:
top_domains
text_categories
page_categories
countries
languages
default value: 1
maximum value: 20'
date_from:
type: string
description: 'starting date of the time range
required field
minimum value: 2022-10-31
date format: "yyyy-mm-dd"
example:
"2019-01-15"'
date_to:
type:
- string
- 'null'
description: 'ending date of the time range
optional field
if you don’t specify this field, today’s date will be used by default
date format: "yyyy-mm-dd"
example:
"2019-01-15"'
date_group:
type:
- string
- 'null'
description: 'time range which will be used to group the results
optional field
default value: month
possible values: day, week, month'
initial_dataset_filters:
type:
- array
- 'null'
items:
type:
- object
- 'null'
description: 'initial dataset filtering parameters
optional field
initial filtering parameters that apply to fields in the Search endpoint;
you can add several filters at once (8 filters maximum)
you should set a logical operator and, or between the conditions
the following operators are supported:
regex, not_regex, <, <=, >, >=, =, <>, in, not_in, like,not_like, has, has_not, match, not_match
you can use the % operator with like and not_like to match any string of zero or more characters
example:
["domain","<>", "logitech.com"]
[["domain","<>","logitech.com"],"and",["content_info.connotation_types.negative",">",1000]]
[["domain","<>","logitech.com"]],
"and",
[["content_info.connotation_types.negative",">",1000],
"or",
["content_info.text_category","has",10994]]]
for more information about filters, please refer to Content Analysis API – Filters'
rank_scale:
type:
- string
- 'null'
description: 'defines the scale used for calculating and displaying the rank values
optional field
you can use this parameter to choose whether rank values are presented on a 0–100 or 0–1000 scale
possible values:
one_hundred — rank values are displayed on a 0–100 scale
one_thousand — rank values are displayed on a 0–1000 scale
default value: one_thousand
learn more about how this parameter works in this Help Center article'
tag:
type:
- string
- 'null'
description: 'user-defined task identifier
optional field
the character limit is 255
you can use this parameter to identify the task and match it with the result
you will find the specified tag value in the data object of the response'
example:
- category_code: 10994
search_mode: as_is
date_from: '2026-01-15'
date_group: month
TopDomainInfo:
properties:
domain:
type:
- string
- 'null'
count:
type:
- integer
- 'null'
format: int64
SocialMetricsInfo:
properties:
type:
type:
- string
- 'null'
description: type of element
like_count:
type:
- integer
- 'null'
description: likes count
format: int64
ContentAnalysisSearchLiveResponseInfo:
type: object
allOf:
- $ref: '#/components/schemas/BaseResponseInfo'
- type: object
properties:
tasks:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSearchLiveTaskInfo'
description: array of tasks
ContentAnalysisSummaryLiveResponseInfo:
type: object
allOf:
- $ref: '#/components/schemas/BaseResponseInfo'
- type: object
properties:
tasks:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryLiveTaskInfo'
description: array of tasks
ContentAnalysisRatingDistributionLiveResultInfo:
type: object
properties:
type:
type:
- string
- 'null'
description: type of element
min:
type:
- number
- 'null'
description: min rating on a distribution scale
max:
type:
- number
- 'null'
description: max rating on a distribution scale
metrics:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryInfo'
description: contains rating distribution metrics
PositiveConnotationDistribution:
type: object
properties:
positive:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryInfo'
negative:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryInfo'
neutral:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisSummaryInfo'
ContentAnalysisAvailableFiltersResponseInfo:
type: object
allOf:
- $ref: '#/components/schemas/BaseResponseInfo'
- type: object
properties:
tasks:
type:
- array
- 'null'
items:
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/ContentAnalysisAvailableFiltersTaskInfo'
ContentAnalysisSummaryLiveRequestInfo:
type: object
properties:
keyword:
type: string
description: 'target keyword
required field
UTF-8 encoding
the keywords will be converted to a lowercase format;
Note: to match an exact phrase instead of a stand-alone keyword, use double quotes and backslashes;
example:
"keyword": "\"tesla palo alto\""
learn more about rules and limitations of keyword and keywords fields in DataForSEO APIs in this Help Center article'
keyword_fields:
type:
- object
- 'null'
additionalProperties:
type:
- string
- 'null'
description: "target keyword fields and target keywords\noptional field\nuse this parameter to filter the dataset by keywords that certain fields should contain;\nfields you can specify: title, main_title, previous_title, snippet\nyou can indicate several fields;\nNote: to match an exact phrase instead of a stand-alone keyword, use double quotes and backslashes;\nexample:\n\"keyword_fields\": {\n \"snippet\": \"\\\"logitech mouse\\\"\",\n \"main_title\": \"sale\"\n}"
page_type:
type:
- array
- 'null'
items:
type: string
description: 'target page types
optional field
use this parameter to filter the dataset by page types
possible values:
"ecommerce", "news", "blogs", "message-boards", "organization"'
internal_list_limit:
type:
- integer
- 'null'
description: 'maximum number of elements within internal arrays
optional field
you can use this field to limit the number of elements within the following arrays:
top_domains
text_categories
page_categories
countries
languages
default value: 1
maximum value: 20'
positive_connotation_threshold:
type:
- number
- 'null'
description: 'positive connotation threshold
optional field
specified as the probability index threshold for positive sentiment related to the citation content
if you specify this field, connotation_types object in the response will only contain data on citations with positive sentiment probability more than or equal to the specified value
possible values: from 0 to 1
default value: 0.4'
sentiments_connotation_threshold:
type:
- number
- 'null'
description: 'sentiment connotation threshold
optional field
specified as the probability index threshold for sentiment connotations related to the citation content
if you specify this field, sentiment_connotations object in the response will only contain data on citations where the
probability per each sentiment is more than or equal to the specified value
possible values: from 0 to 1
default value: 0.4'
initial_dataset_filters:
type:
- array
- 'null'
items:
type:
- object
- 'null'
description: 'initial dataset filtering parameters
optional field
initial filtering parameters that apply to fields in the Search endpoint
you can add several filters at once (8 filters maximum)
you should set a logical operator and, or between the conditions
the following operators are supported:
regex, not_regex, <, <=, >, >=, =, <>, in, not_in, like,not_like, has, has_not
you can use the % operator with like and not_like to match any string of zero or more characters
example:
["domain","<>", "logitech.com"]
[["domain","<>","logitech.com"],"and",["content_info.connotation_types.negative",">",1000]]
[["domain","<>","logitech.com"]],
"and",
[["content_info.connotation_types.negative",">",1000],
"or",
["content_info.text_category","has",10994]]]
for more information about filters, please refer to Content Analysis API – Filters'
rank_scale:
type:
- string
- 'null'
description: 'defines the scale used for calculating and displaying the rank values
optional field
you can use this parameter to choose whether rank values are presented on a 0–100 or 0–1000 scale
possible values:
one_hundred — rank values are displayed on a 0–100 scale
one_thousand — rank values are displayed on a 0–1000 scale
default value: one_thousand
learn more about how this parameter works in this Help Center article'
tag:
type:
- string
- 'null'
description: 'user-defined task identifier
optional field
the character limit is 255
you can use this parameter to identify the task and match it with the result
you will find the specified tag value in the data object of the response'
example:
- keyword: logitech
page_type:
- ecommerce
- news
- blogs
- message-boards
- organization
internal_list_limit: 8
positive_connotation_threshold: 0.5
ContentAnalysisPhraseTrendsLiveRequestInfo:
type: object
properties:
keyword:
type: string
description: 'target keyword
required field
UTF-8 encoding
the keywords will be converted to a lowercase format;
Note: to match an exact phrase instead of a stand-alone keyword, use double quotes and backslashes;
example:
"keyword": "\"tesla palo alto\""
learn more about rules and limitations of keyword and keywords fields in DataForSEO APIs in this Help Center article'
keyword_fields:
type:
- object
- 'null'
additionalProperties:
type:
- string
- 'null'
description: "target keyword fields and target keywords\noptional field\nuse this parameter to filter the dataset by keywords that certain fields should contain;\nfields you can specify: title, main_title, previous_title, snippet\nyou can indicate several fields;\nNote: to match an exact phrase instead of a stand-alone keyword, use double quotes and backslashes;\nexample:\n\"keyword_fields\": {\n \"snippet\": \"\\\"logitech mouse\\\"\",\n \"main_title\": \"sale\"\n}"
page_type:
type:
- array
- 'null'
items:
type: string
description: 'target page types
optional field
use this parameter to filter the dataset by page types
possible values:
"ecommerce", "news", "blogs", "message-boards", "organization"'
search_mode:
# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dataforseo/refs/heads/main/openapi/dataforseo-contentanalysis-api-openapi.yml