A JSON API that returns the autocomplete suggestions of Google, Bing, YouTube, Amazon, Rakuten Ichiba, Yahoo!, DuckDuckGo, Baidu, Yandex, Naver and Daum, expanded, in all 20 site languages. Japanese is expanded with kana (あ–ん), A–Z and 0–9; other languages with a space plus the language's own letters, A–Z and 0–9. Start on the free plan (pricing).
An API key is required. Log in and issue a key from “API” in the user menu. Send it with every request.
Authorization: Bearer gsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Use the key from your server only. If you embed it in browser JavaScript, other people can use it.
Set {source} to one of the following.
| source | Returns |
|---|---|
google | Google suggestions |
bing | Bing suggestions |
youtube | YouTube suggestions |
amazon | Amazon suggestions (ja: Amazon.co.jp; other languages: that language's main marketplace) |
rakuten | Rakuten Ichiba (Japan) suggestions |
yahoo | Yahoo! Search suggestions |
duckduckgo | DuckDuckGo suggestions (lang=ja returns suggestions for Japan) |
baidu | Baidu suggestions (zh, zh-tw, ja, en) |
yandex | Yandex suggestions (ru, uk, tr) |
naver | Naver suggestions (ko) |
daum | Daum suggestions (ko) |
| Parameter | Description |
|---|---|
q (required) | Keyword (1–60 characters). Full-width/half-width characters, letter case and spaces are normalized. |
lang | ja (default), en, ru, ko, zh and the other site language codes (20 in all). ja adds the kana expansion (nihongo); other languages add a space plus their own letters (native). en has neither. |
group | all (default) or a comma-separated list of itself,nihongo,native,alphabet,number. |
flat | 1 returns a single deduplicated suggestions array. |
Fetching a keyword that is not cached yet takes tens of seconds, so the API first returns 202 and queues it. Send the same request again after retry_after_seconds; once the data is ready you get 200 with the results. Results are cached for 7 days. After they expire, the old data is returned with "stale": true while it is being refreshed. The cache is separate for each combination of source, q and lang.
curl -H "Authorization: Bearer $KEY" \ "https://gstudio1.com/api/v1/google/suggest?q=%E3%83%A9%E3%83%B3%E3%83%8B%E3%83%B3%E3%82%B0&flat=1" curl -H "Authorization: Bearer $KEY" \ "https://gstudio1.com/api/v1/rakuten/suggest?q=%E3%83%A9%E3%83%B3%E3%83%8B%E3%83%B3%E3%82%B0&flat=1"
// 202 (queued)
{ "ok": true, "status": "queued", "source": "google", "queue_position": 3, "retry_after_seconds": 24, ... }
// 200 (ready)
{ "ok": true, "status": "ready", "query": "ランニング", "source": "google", "fetched_at": "2026-09-19T01:02:03Z",
"stale": false, "count": 412, "suggestions": ["ランニング シューズ", "..."] }
GET /api/v1/usage — Usage of your key over the last 30 days and your plan limits (authentication required)GET /api/v1/status — Queue depth and worker status (no authentication)| Item | Limit |
|---|---|
| Requests per minute | 30 |
| Requests per day (UTC) | 1,000 |
| New (uncached) keywords per day | 20 Counted per source. Keywords that are already cached do not count. |
When a limit is exceeded the API returns 429 with Retry-After. Every response includes X-RateLimit-Limit / Remaining / Reset and X-Daily-Limit / X-Daily-Remaining.
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_query / invalid_lang / invalid_group | Invalid parameter (including a source not offered for that language) |
| 401 | invalid_api_key | Missing or invalid key |
| 404 | not_found | Invalid source or path |
| 429 | rate_limited / daily_quota_exceeded / new_keyword_quota_exceeded | Limit exceeded (see Retry-After) |
| 502 | upstream_failed | Fetch failed (you can retry after one hour) |
| 503 | queue_full | Busy (see Retry-After) |