Questions people ask about a page, and a suggested FAQ
GET
/sites/{siteId}/pages/{pageId}/faq-suggest- Scope
pages:read- MCP tool
faq_suggest
Questions people ask about a page, and a suggested FAQ The stored FAQ suggestion (null until it was run once) and the searches it can be run for, best first. Reading never costs anything. Google shows FAQ rich results only for some kinds of sites; the value is matching the questions AI answers use.
Parameters
| Name | In | Details |
|---|---|---|
siteIdRequired | path | stringWebsite id, from GET /sites. |
pageIdRequired | path | stringPage id, from GET /pages or GET /pages/findings. |
Response
200 · application/json
| Field | Details |
|---|---|
page | object · required |
page.id | string · required |
page.url | address (URL) · required |
page.title | string or null · required |
keywordChoices | list of object · required |
keywordChoices[].keyword | string · required |
keywordChoices[].source | tracked | keyword | search_console · required; tracked: a tracked keyword that ranks with this page; keyword: a keyword whose Search Console page is this one; search_console: a search the page appears for |
keywordChoices[].clicks | integer · required; Search Console clicks, 28 days |
keywordChoices[].impressions | integer · required; Search Console impressions, 28 days |
keywordChoices[].position | number or null · required; Tracked position, else the 28-day average |
keywordChoices[].storedResults | date (YYYY-MM-DD) or null · required; Day of stored results with People also ask that a run would reuse for free |
suggestion | object · required |
suggestion.keyword | string |
suggestion.locationCode | number |
suggestion.languageCode | string |
suggestion.suggestedAt | string |
suggestion.results | object |
suggestion.results.date | string |
suggestion.results.source | string |
suggestion.results.checkUrl | string |
suggestion.results.peopleAlsoAsk | list of strings |
suggestion.results.relatedSearches | list of strings |
suggestion.results.topPagesRead | list of objects |
suggestion.results.topPagesRead[].url | string |
suggestion.results.topPagesRead[].domain | string |
suggestion.results.topPagesRead[].read | true or false |
suggestion.results.topPagesRead[].questions | number |
suggestion.pageText | string |
suggestion.questions | list of objects |
suggestion.questions[].question | string |
suggestion.questions[].askedBy | number |
suggestion.questions[].sources | list of objects |
suggestion.questions[].sources[].source | string |
suggestion.questions[].sources[].from | |
suggestion.questions[].wordings | list of strings |
suggestion.questions[].answered | string |
suggestion.questions[].answeringSentence | string |
suggestion.suggestedFaq | list of objects |
suggestion.suggestedFaq[].index | number |
suggestion.suggestedFaq[].question | string |
suggestion.suggestedFaq[].answer | string |
suggestion.suggestedFaq[].fromSentences | list of strings |
suggestion.addSection | list of objects |
suggestion.addSection[].question | string |
suggestion.addSection[].heading | string |
suggestion.addSection[].why | string |
suggestion.reasonsLanguage | string |
suggestion.model | string |
suggestion.resultsCostUsd | number |
link | address (URL) · required; The page in the app, at the FAQ card |
Errors
| Status | Meaning |
|---|---|
401 | Missing, unknown or revoked key. Codes: missing_key, invalid_key. |
403 | The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden. |
404 | Not found. Codes: not_found. |
429 | Too many requests this hour for this key. Codes: rate_limited. |
Example request
curl \
-H "Authorization: Bearer mr_ws_…" \
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/faq-suggest"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/faq-suggest", {
headers: { Authorization: "Bearer mr_ws_…" },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.get(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/faq-suggest",
headers={"Authorization": "Bearer mr_ws_…"},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/faq-suggest");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.get("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/faq-suggest", { headers: { Authorization: "Bearer mr_ws_…" } });Example response
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/guides/trail-bike-sizing/",
"title": "Trail bike sizing guide | Acme Bikes"
},
"keywordChoices": [
{
"keyword": "trail bike sizing",
"source": "tracked",
"clicks": 41,
"impressions": 2310,
"position": 7,
"storedResults": "2026-10-09"
}
],
"suggestion": {
"keyword": "trail bike sizing",
"locationCode": 2840,
"languageCode": "en",
"suggestedAt": "2026-10-09T08:12:51.000Z",
"results": {
"date": "2026-10-09",
"source": "live",
"checkUrl": "https://www.google.com/search?q=trail%20bike%20sizing&num=10&hl=en&gl=US",
"peopleAlsoAsk": [
"How do I know what size trail bike I need?",
"What size bike for 5'10?",
"Is it better to size up or down on a mountain bike?"
],
"relatedSearches": [
"trail bike size chart",
"mtb sizing calculator"
],
"topPagesRead": [
{
"url": "https://ridgecycles.example/sizing",
"domain": "ridgecycles.example",
"read": true,
"questions": 4
},
{
"url": "https://trailhub.example/fit",
"domain": "trailhub.example",
"read": false,
"questions": 0
}
]
},
"pageText": "live",
"questions": [
{
"question": "How do I know what size trail bike I need?",
"askedBy": 3,
"sources": [
{
"source": "paa",
"from": null
},
{
"source": "top_page",
"from": "ridgecycles.example"
},
{
"source": "search_console",
"from": null
}
],
"wordings": [
"How do I know what size trail bike I need?",
"How do I choose my trail bike size?",
"what size trail bike do i need"
],
"answered": "yes",
"answeringSentence": "Start from your height: riders from 170 to 180 cm usually fit a size M frame."
},
{
"question": "Is it better to size up or down on a mountain bike?",
"askedBy": 2,
"sources": [
{
"source": "paa",
"from": null
},
{
"source": "top_page",
"from": "ridgecycles.example"
}
],
"wordings": [
"Is it better to size up or down on a mountain bike?",
"Should I size up or down?"
],
"answered": "partly",
"answeringSentence": "Between two sizes, the smaller frame is easier to handle on tight trails."
},
{
"question": "How much does a trail bike weigh?",
"askedBy": 1,
"sources": [
{
"source": "answer_gap",
"from": null
}
],
"wordings": [
"How much does a trail bike weigh?"
],
"answered": "no",
"answeringSentence": null
}
],
"suggestedFaq": [
{
"index": 0,
"question": "How do I know what size trail bike I need?",
"answer": "Start from your height: riders from 170 to 180 cm usually fit a size M frame.",
"fromSentences": [
"Start from your height: riders from 170 to 180 cm usually fit a size M frame."
]
},
{
"index": 1,
"question": "Is it better to size up or down on a mountain bike?",
"answer": "Between two sizes, the smaller frame is easier to handle on tight trails.",
"fromSentences": [
"Between two sizes, the smaller frame is easier to handle on tight trails."
]
}
],
"addSection": [
{
"question": "How much does a trail bike weigh?",
"heading": "How much our trail bikes weigh",
"why": "AI answers to this question name other shops, never this one."
}
],
"reasonsLanguage": "en",
"model": "claude-sonnet-4-6",
"resultsCostUsd": 0.002
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f#faq-suggest"
}{
"error": {
"code": "missing_key",
"message": "Send the key as Authorization: Bearer mr_site_…"
}
}{
"error": {
"code": "missing_scope",
"message": "This key does not have the scope this call needs."
}
}{
"error": {
"code": "not_found",
"message": "Page not found. Use a page_id from page_findings or list_pages, or the exact crawled url."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}The MCP server does the same with the tool faq_suggest.