Research

Keyword and competitor research

Research keyword opportunities

post

Get keyword ideas from seed keywords using DataForSEO. Returns search volume, difficulty, and intent data. Requires Power plan or higher.

Authorizations
X-API-KEYstringRequired
Body
seed_keywordsstring[] · min: 1 · max: 10Required

Seed keywords to research

locationstringOptionalDefault: United States
languagestringOptionalDefault: en
include_questionsbooleanOptionalDefault: true
limitnumber · min: 1 · max: 500OptionalDefault: 50
Responses
chevron-right
200

Keyword research results

application/json
totalnumberOptional
seed_keywordsstring[]Optional
locationstringOptional
post
/v1/research/keywords
200

Keyword research results

Analyze SERP for a keyword

post

Get detailed SERP analysis including organic results, SERP features, People Also Ask, and search intent. Requires Power plan or higher.

Authorizations
X-API-KEYstringRequired
Body
keywordstring · max: 200Required
locationstringOptionalDefault: United States
languagestringOptionalDefault: en
Responses
chevron-right
200

SERP analysis results

application/json
keywordstringOptional
locationstringOptional
search_intentstring · enumOptionalPossible values:
difficultystring · enumOptionalPossible values:
serp_featuresstring[]Optional
people_also_askstring[]Optional
unique_domainsnumberOptional
post
/v1/research/serp
200

SERP analysis results

Analyze competitor keywords

post

Get keywords that a competitor domain ranks for. Useful for competitive analysis and content gap identification. Requires Power plan or higher.

Authorizations
X-API-KEYstringRequired
Body
domainstringRequired

Competitor domain to analyze (e.g., "competitor.com")

locationstringOptionalDefault: United States
limitnumber · min: 1 · max: 200OptionalDefault: 50
Responses
chevron-right
200

Competitor keyword analysis

application/json
domainstringOptional
totalnumberOptional
total_volumenumberOptional
post
/v1/research/competitors
200

Competitor keyword analysis

Cluster keywords by intent and topic

post

Group keywords by search intent (informational, commercial, transactional, navigational) and topic clusters. Useful for content planning and site architecture.

Authorizations
X-API-KEYstringRequired
Body
keywordsstring[] · min: 1 · max: 500Required
methodstring · enumOptionalDefault: bothPossible values:
Responses
chevron-right
200

Keyword clustering results

application/json
total_keywordsnumberOptional
methodstringOptional
post
/v1/research/cluster
200

Keyword clustering results

Bulk SERP clustering with site assignment

post

Submit a large batch of keywords (15K-60K) for SERP-based clustering and automatic site assignment. Keywords are clustered by URL overlap, then assigned to sites based on category matching from an Airtable source. Results are written to an Airtable output table.

This is an async operation. Use the returned job_id to poll for status.

Authorizations
X-API-KEYstringRequired
Body
keywords_csvstringOptional

Raw CSV content (Ahrefs/SEMrush format). Either this or keywords array is required.

Responses
post
/v1/research/serp-cluster-bulk

Get cluster bulk job status

get

Poll for the status of a bulk SERP clustering job. Returns progress info and summary when complete.

Authorizations
X-API-KEYstringRequired
Path parameters
jobIdstring · uuidRequired
Responses
chevron-right
200

Job status

application/json
job_idstringOptional
statusstring · enumOptionalPossible values:
messagestring · nullableOptional
summaryobject · nullableOptional

Available when status is completed

errorstring · nullableOptional
get
/v1/research/serp-cluster-bulk/{jobId}

Generate articles from approved clusters

post

Reads rows from the Airtable output table, creates articles in Cuppa, and dispatches generation. By default only rows with Status = Assigned AND the Approved checkbox = true are included. Articles appear in the Cuppa UI under the correct site. Status is written back to Airtable.

Authorizations
X-API-KEYstringRequired
Path parameters
jobIdstring · uuidRequired
Body
airtable_status_columnstringOptional

Column name in Airtable to write generation status updates

cuppa_article_id_fieldstringOptional

Airtable column for article UUID; must match filter and write-back

Default: Cuppa Article ID
Responses
post
/v1/research/serp-cluster-bulk/{jobId}/generate

Last updated

Was this helpful?