docs / endpoint
POST /v1/keywords/questions
People-Also-Ask questions observed for a topic, deduplicated.
Credits: 20 credits per call.
Timeout: 60s
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
keyword |
string | required | — | Topic keyword to fetch People-Also-Ask questions for. Required, max 700 chars. |
location |
any | optional | 2840 |
Google Ads geotarget ID. Optional, default 2840 (United States). Look one up with /v1/locations. |
language |
string | optional | "en" |
ISO language code. Optional, default "en". |
limit |
integer | optional | 50 |
Optional, default 50. 1-200. |
Request
→ requestPOST /v1/keywords/questions
POST /v1/keywords/questions HTTP/1.1
Authorization: Bearer sof_live_your_key_here
Content-Type: application/json
{
"keyword": "running shoes",
"location": 2840,
"language": "en",
"limit": 50
}
Response
Wrapped in the standard envelope -- id, object, created_at, elapsed_ms, cache, credits -- documented once on The Contract. The body below is a real envelope with this endpoint's data shape; values vary per request, and a … marks an array cut short for display.
← response200
{
"id": "keyw_lqex65mztezj7b2vliioz5fv",
"request_id": "req_ahrnchlbsvhgdhq47jggyg746u",
"object": "keyword_questions",
"created_at": "2026-08-09T07:21:58Z",
"elapsed_ms": 180,
"cache": "miss",
"credits": {
"charged": 20,
"balance": 9857
},
"data": {
"keyword": "running shoes",
"items": [
{
"question": "How often should you replace running shoes?",
"first_seen": "2026-06-11",
"last_seen": "2026-07-25",
"times_seen": 18
},
{
"question": "Are carbon plate shoes worth it?",
"first_seen": "2026-07-02",
"last_seen": "2026-07-27",
"times_seen": 7
},
"…"
],
"count": 42,
"coverage": {
"from": "2026-07-01",
"observations": 130
}
}
}
Response fields
What each field in data (above) means.
| Field | Description |
|---|---|
data.keyword |
The keyword you requested. |
data.items |
People-Also-Ask questions observed for this keyword, up to limit. |
data.items[].question |
The question text. |
data.items[].first_seen |
Date this question was first observed. |
data.items[].last_seen |
Date this question was last observed. |
data.items[].times_seen |
Number of times this question has been observed. |
data.count |
Total number of distinct questions found, before limit truncation. |
data.coverage |
How much of the archive this response drew from. |
data.coverage.from |
Earliest date the archive could have observed, floor-clamped to the archive's retention window. |
data.coverage.observations |
Number of times we checked for this keyword in the window -- can be > 0 even when items is empty. |