# Autocomplete — Zapi reference > What each platform thinks you are about to type — search suggestions from engines, marketplaces and media catalogues. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a key at https://zpi.web.id/dashboard/keys (free tier — 2,000 req/mo, no credit card). **Response envelope:** `{ status: "success" | "error", message: string, content: }` **Rate limit:** 60 req/min (free tier). Per-endpoint cache TTL is documented below. **Errors:** standard HTTP codes (`401` invalid key, `429` rate limited, `5xx` upstream). Body always has `{ status: "error", message, errors? }`. ```bash curl "https://api.zpi.web.id/v1/CATEGORY:SCRAPER/ENDPOINT?param=value" \ -H "x-api-key: $ZAPI_KEY" ``` **Category page:** https://zpi.web.id/category/autocomplete **Full catalog:** https://zpi.web.id/apis · **Index:** https://zpi.web.id/llms-full.txt --- ## Amazon Autocomplete **Category:** autocomplete · **Slug:** `amazon` **Detail page:** https://zpi.web.id/api/autocomplete/amazon Amazon search-box suggestions across eight marketplaces — buying intent rather than information intent. **Tags:** amazon, ecommerce, shopping, suggest ### Autocomplete Product completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:amazon/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `market` | enum(us|uk|de|jp|ca|au|sg|in) | query | no | Amazon marketplace. Default us | | `count` | number | query | no | Maximum suggestions. Default 10, max 20 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:amazon/autocomplete?q=cat&market=us&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:amazon/autocomplete?q=cat&market=us&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:amazon/autocomplete?q=cat&market=us&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "cat litter", "type": "KEYWORD" }, { "text": "cat food", "type": "KEYWORD" }, { "text": "cat tree", "type": "KEYWORD" }, { "text": "cat toys", "type": "KEYWORD" }, { "text": "cat water fountain", "type": "KEYWORD" }, { "text": "cat treats", "type": "KEYWORD" }, { "text": "cat litter box", "type": "KEYWORD" }, { "text": "cat carrier", "type": "KEYWORD" } ], "query": "cat", "market": "us", "provider": "amazon" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:amazon/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default en | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:amazon/expand?q=cat&modifiers=all&lang=en&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:amazon/expand?q=cat&modifiers=all&lang=en&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:amazon/expand?q=cat&modifiers=all&lang=en&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cat", "count": 260, "items": [ { "via": "alphabet", "text": "cat bed" }, { "via": "alphabet", "text": "cat brush" }, { "via": "alphabet", "text": "cat bowls" }, { "via": "alphabet", "text": "cat backpack" }, { "via": "alphabet", "text": "cat beds for indoor cats" }, { "via": "alphabet", "text": "cat brushes for indoor cats" }, { "via": "alphabet", "text": "cat box" }, { "via": "alphabet", "text": "cat brush for shedding" } ], "locale": "en", "provider": "amazon", "modifiers": "alphabet", "truncated": false, "variantsTried": 27, "variantsFailed": 0 } ``` --- ## Bing Autocomplete **Category:** autocomplete · **Slug:** `bing-autocomplete` **Detail page:** https://zpi.web.id/api/autocomplete/bing-autocomplete Bing search autocomplete, with relevance scores. **Tags:** bing, microsoft, autocomplete, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/autocomplete?q=cara%20membuat&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/autocomplete?q=cara%20membuat&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/autocomplete?q=cara%20membuat&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 12, "items": [ { "text": "cara membuat daftar isi", "relevance": 1300 }, { "text": "cara membuat google form", "relevance": 1299 }, { "text": "cara membuat npwp online", "relevance": 1298 }, { "text": "cara membuat cv", "relevance": 1297 }, { "text": "cara membuat halaman di word", "relevance": 1296 }, { "text": "cara membuat daftar pustaka", "relevance": 1295 }, { "text": "cara membuat dropdown di excel", "relevance": 1294 }, { "text": "cara membuat email baru", "relevance": 1293 } ], "query": "cara membuat", "provider": "bing" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:bing-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cara membuat", "count": 421, "items": [ { "via": "alphabet", "text": "cara membuat cv" }, { "via": "alphabet", "text": "cara membuat cv yang menarik" }, { "via": "alphabet", "text": "cara membuat cv lamaran kerja" }, { "via": "alphabet", "text": "cara membuat checklist di excel" }, { "via": "alphabet", "text": "cara membuat cv ats" }, { "via": "alphabet", "text": "cara membuat cover di word" }, { "via": "alphabet", "text": "cara membuat centang di word" }, { "via": "alphabet", "text": "cara membuat ceklis di word" } ], "locale": "id", "provider": "bing", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## Brave Autocomplete **Category:** autocomplete · **Slug:** `brave-autocomplete` **Detail page:** https://zpi.web.id/api/autocomplete/brave-autocomplete Brave Search autocomplete, from an independent index. **Tags:** brave, privacy, autocomplete, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/autocomplete?q=cara%20membuat&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/autocomplete?q=cara%20membuat&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/autocomplete?q=cara%20membuat&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 8, "items": [ { "text": "cara membuat daftar isi otomatis" }, { "text": "cara membuat daftar isi manual" }, { "text": "cara membuat nomor halaman di word untuk skripsi" }, { "text": "cara membuat skck online lewat hp" }, { "text": "cara membuat cv" }, { "text": "cara membuat garis di word" }, { "text": "cara membuat skck" }, { "text": "cara membuat huruf kapital di excel secara otomatis" } ], "query": "cara membuat", "provider": "brave" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:brave-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cara membuat", "count": 285, "items": [ { "via": "seed", "text": "cara membuat daftar isi otomatis" }, { "via": "seed", "text": "cara membuat daftar isi manual" }, { "via": "seed", "text": "cara membuat nomor halaman di word untuk skripsi" }, { "via": "seed", "text": "cara membuat skck online lewat hp" }, { "via": "seed", "text": "cara membuat cv" }, { "via": "seed", "text": "cara membuat garis di word" }, { "via": "seed", "text": "cara membuat skck" }, { "via": "seed", "text": "cara membuat huruf kapital di excel secara otomatis" } ], "locale": "id", "provider": "brave", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## eBay Autocomplete **Category:** autocomplete · **Slug:** `ebay` **Detail page:** https://zpi.web.id/api/autocomplete/ebay eBay search-box suggestions. The index is English-language. **Tags:** ebay, ecommerce, shopping, suggest ### Autocomplete Product completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:ebay/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:ebay/autocomplete?q=cat%20tree&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:ebay/autocomplete?q=cat%20tree&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:ebay/autocomplete?q=cat%20tree&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "cat tree tower" }, { "text": "cat tree for large cats" }, { "text": "cat tree tower for large cats" }, { "text": "cat tree tower condo" }, { "text": "cat tree tower for large cats unique" }, { "text": "cat tree" }, { "text": "cat tree condo for large cats" }, { "text": "cat tree with litter box enclosure" } ], "query": "cat tree", "provider": "ebay" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:ebay/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default en | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:ebay/expand?q=cat%20tree&modifiers=all&lang=en&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:ebay/expand?q=cat%20tree&modifiers=all&lang=en&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:ebay/expand?q=cat%20tree&modifiers=all&lang=en&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cat tree", "count": 117, "items": [ { "via": "alphabet", "text": "cat tree with litter box enclosure" }, { "via": "alphabet", "text": "cat tree with litter box" }, { "via": "alphabet", "text": "cat tree with 2 wicker beds" }, { "via": "alphabet", "text": "big cat tree" }, { "via": "alphabet", "text": "black cat tree" }, { "via": "alphabet", "text": "cat tree for big cats" }, { "via": "alphabet", "text": "heavy duty cat tree" }, { "via": "alphabet", "text": "door hanging cat tree" } ], "locale": "en", "provider": "ebay", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## Ecosia Autocomplete **Category:** autocomplete · **Slug:** `ecosia` **Detail page:** https://zpi.web.id/api/autocomplete/ecosia Ecosia search suggestions. **Tags:** ecosia, suggest, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:ecosia/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | Market language, two letters | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:ecosia/autocomplete?q=cara%20membuat&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:ecosia/autocomplete?q=cara%20membuat&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:ecosia/autocomplete?q=cara%20membuat&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 8, "items": [ { "text": "cara membuat daftar isi" }, { "text": "cara membuat google form" }, { "text": "cara membuat npwp online" }, { "text": "cara membuat cv" }, { "text": "cara membuat halaman di word" }, { "text": "cara membuat daftar pustaka" }, { "text": "cara membuat dropdown di excel" }, { "text": "cara membuat email baru" } ], "query": "cara membuat", "provider": "ecosia" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:ecosia/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:ecosia/expand?q=cara%20membuat&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:ecosia/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:ecosia/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cara membuat", "count": 137, "items": [ { "via": "seed", "text": "cara membuat daftar isi" }, { "via": "seed", "text": "cara membuat google form" }, { "via": "seed", "text": "cara membuat npwp online" }, { "via": "seed", "text": "cara membuat cv" }, { "via": "seed", "text": "cara membuat halaman di word" }, { "via": "seed", "text": "cara membuat daftar pustaka" }, { "via": "seed", "text": "cara membuat dropdown di excel" }, { "via": "seed", "text": "cara membuat email baru" } ], "locale": "id", "provider": "ecosia", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 24 } ``` --- ## Google Autocomplete **Category:** autocomplete · **Slug:** `google` **Detail page:** https://zpi.web.id/api/autocomplete/google Google's suggestion lists across five surfaces — web, YouTube, Images, local and Scholar. The same endpoint returns a different universe per surface. **Tags:** google, suggest, keyword-research, seo, youtube ### Web Web search autocomplete, with relevance scores. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/web` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | UI language, two letters. Default id | | `region` | string | query | no | Country bias, two letters. Default ID | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 15, "items": [ { "text": "cara membuat cv", "relevance": 601 }, { "text": "cara membuat npwp online", "relevance": 600 }, { "text": "cara membuat cv lamaran kerja", "relevance": 562 }, { "text": "cara membuat email baru", "relevance": 561 }, { "text": "cara membuat npwp", "relevance": 560 }, { "text": "cara membuat daftar isi otomatis", "relevance": 559 }, { "text": "cara membuat martabak manis", "relevance": 558 }, { "text": "cara membuat cireng", "relevance": 557 } ], "query": "cara membuat", "locale": "id-ID", "surface": "web", "provider": "google" } ``` --- ### YouTube Video search autocomplete. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/youtube` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | UI language, two letters. Default id | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 14, "items": [ { "text": "cara membuat layangan" }, { "text": "cara membuat daftar isi otomatis word" }, { "text": "cara membuat donat" }, { "text": "cara membuat slime" }, { "text": "cara membuat cireng" }, { "text": "cara membuat bolu pisang" }, { "text": "cara membuat pesawat dari kertas" }, { "text": "cara membuat cilok" } ], "query": "cara membuat", "locale": "id", "surface": "youtube", "provider": "google" } ``` --- ### Images Image search autocomplete. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/images` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | UI language, two letters. Default id | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "kucing" }, { "text": "kucing persia", "highlighted": "kucing persia" }, { "text": "kucing lucu", "highlighted": "kucing lucu" }, { "text": "kucing anggora", "highlighted": "kucing anggora" }, { "text": "kucing munchkin", "highlighted": "kucing munchkin" }, { "text": "kucing hutan", "highlighted": "kucing hutan" }, { "text": "kucing bengal", "highlighted": "kucing bengal" }, { "text": "kucing siam", "highlighted": "kucing siam" } ], "query": "kucing", "locale": "id", "surface": "images", "provider": "google" } ``` --- ### Local Places and local search autocomplete. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/local` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | UI language, two letters. Default id | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "restoran jakarta", "highlighted": "restoran jakarta" }, { "text": "restoran jakarta selatan", "highlighted": "restoran jakarta selatan" }, { "text": "restoran terdekat", "highlighted": "restoran terdekat" }, { "text": "restoran" }, { "text": "restoran terdekat dari lokasi saya", "highlighted": "restoran terdekat dari lokasi saya" }, { "text": "restoran jakarta timur", "highlighted": "restoran jakarta timur" }, { "text": "restoran kelapa gading", "highlighted": "restoran kelapa gading" }, { "text": "restoran di grand indonesia", "highlighted": "restoran di grand indonesia" } ], "query": "restoran", "locale": "id", "surface": "local", "provider": "google" } ``` --- ### Scholar Academic search autocomplete. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/scholar` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `lang` | string | query | no | UI language, two letters. Default id | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "machine learning algorithms" }, { "text": "machine learning approach" }, { "text": "machine learning techniques" }, { "text": "machine learning models" }, { "text": "machine learning methods" }, { "text": "machine learning applications" }, { "text": "machine learning review" }, { "text": "machine learning classification" } ], "query": "machine learning", "locale": "id", "surface": "scholar", "provider": "google" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `surface` | enum(web|youtube|images|local|scholar) | query | no | Which Google suggestion universe to expand. Default web | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique query found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cara membuat", "count": 558, "items": [ { "via": "alphabet", "text": "cara membuat akun google" }, { "via": "alphabet", "text": "cara membuat akun" }, { "via": "alphabet", "text": "cara membuat akun spmb" }, { "via": "alphabet", "text": "cara membuat akun google baru" }, { "via": "alphabet", "text": "cara membuat anak" }, { "via": "alphabet", "text": "cara membuat ayam kecap" }, { "via": "alphabet", "text": "cara membuat akta kelahiran" }, { "via": "alphabet", "text": "cara membuat asinan buah" } ], "locale": "id", "surface": "web", "provider": "google", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## IMDb Autocomplete **Category:** autocomplete · **Slug:** `imdb-autocomplete` **Detail page:** https://zpi.web.id/api/autocomplete/imdb-autocomplete IMDb title and name autocomplete — returns records with ids, years, posters and cast, not just query strings. **Tags:** imdb, movie, tv, autocomplete ### Autocomplete Titles and names matching a seed. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Title or name to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/autocomplete?q=kucing&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/autocomplete?q=kucing&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/autocomplete?q=kucing&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 8, "items": [ { "id": "tt43408259", "url": "https://www.imdb.com/title/tt43408259/", "cast": "Keiko Ananta, La Rheina Isabelle Bishop", "rank": 248370, "text": "Kucing Hitam", "type": "movie", "year": 2026 }, { "id": "tt7144986", "url": "https://www.imdb.com/title/tt7144986/", "cast": "Masayu Anastasia, Adi Nugroho", "rank": 940051, "text": "12:06 Rumah Kucing", "type": "movie", "year": 2017, "image": "https://m.media-amazon.com/images/M/MV5BNGEwY2NkOTgtMjEyMi00ZTQ2LWJkNWQtNjk5NTUxNjJjY2I0XkEyXkFqcGc@._V1_.jpg" }, { "id": "tt9277738", "url": "https://www.imdb.com/title/tt9277738/", "cast": "Aline Adita, Natalius Chendana", "rank": 1357627, "text": "Rawa Kucing", "type": "short", "year": 2013, "image": "https://m.media-amazon.com/images/M/MV5BNGI4ZTMwNjUtN2ZjMC00M2Q4LWJiMzEtN2Q0ZTcxNDJmMGJhXkEyXkFqcGc@._V1_.jpg" }, { "id": "tt13469414", "url": "https://www.imdb.com/title/tt13469414/", "cast": "Harith Haziq, Rayyan Dino", "rank": 1619194, "text": "Kucing Air", "type": "short", "year": 2019, "image": "https://m.media-amazon.com/images/M/MV5BYWFlNjJhZTUtMjRiMC00N2ZkLWIwMmUtYzY2ZTliZDFiYTE5XkEyXkFqcGc@._V1_.jpg" }, { "id": "tt9699148", "url": "https://www.imdb.com/title/tt9699148/", "cast": "Judith Cabral, Sarah Natochenny", "rank": 85775, "text": "44 Cats", "type": "tvSeries", "year": 2018, "image": "https://m.media-amazon.com/images/M/MV5BOTM0ODFhNjktMzZkYS00ZmNiLTlmYzYtM2UxMzQwOGU2YWYwXkEyXkFqcGc@._V1_.jpg" }, { "id": "tt32378496", "url": "https://www.imdb.com/title/tt32378496/", "cast": "Ana Tasya Lalita, Muhammad Redho", "rank": 2262933, "text": "Kucing Zel Zel", "type": "tvMiniSeries", "year": 2021, "image": "https://m.media-amazon.com/images/M/MV5BY2NkMTYyMDgtNTJkZC00MjUxLTk3OGQtNGYxOWI1ZjliMzE3XkEyXkFqcGc@._V1_.jpg" }, { "id": "tt35670577", "url": "https://www.imdb.com/title/tt35670577/", "cast": "Kate Mara, Rooney Mara", "rank": 1699, "text": "Bucking Fastard", "type": "movie", "year": 2026, "image": "https://m.media-amazon.com/images/M/MV5BZjcxMzc5ZjctODg1NS00N2JkLTg5NDgtMDgwNmUzZTg5OGQxXkEyXkFqcGc@._V1_.jpg" }, { "id": "tt10681410", "url": "https://www.imdb.com/title/tt10681410/", "rank": 2655882, "text": "Kucing Menangis", "type": "tvSeries", "year": 2018 } ], "query": "kucing", "provider": "imdb" } ``` --- ### Expand Enumerate titles — the seed with every letter appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default en | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/expand?q=kucing&modifiers=all&lang=en&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/expand?q=kucing&modifiers=all&lang=en&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:imdb-autocomplete/expand?q=kucing&modifiers=all&lang=en&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "kucing", "count": 82, "items": [ { "via": "seed", "text": "Kucing Hitam" }, { "via": "seed", "text": "12:06 Rumah Kucing" }, { "via": "seed", "text": "Rawa Kucing" }, { "via": "seed", "text": "Kucing Air" }, { "via": "seed", "text": "44 Cats" }, { "via": "seed", "text": "Kucing Zel Zel" }, { "via": "seed", "text": "Bucking Fastard" }, { "via": "seed", "text": "Kucing Menangis" } ], "locale": "en", "provider": "imdb", "modifiers": "alphabet", "truncated": false, "variantsTried": 27, "variantsFailed": 0 } ``` --- ## Qwant Autocomplete **Category:** autocomplete · **Slug:** `qwant` **Detail page:** https://zpi.web.id/api/autocomplete/qwant Qwant search suggestions, per locale. **Tags:** qwant, privacy, suggest, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:qwant/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `locale` | string | query | no | Locale as lang_COUNTRY. Default id_ID | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:qwant/autocomplete?q=cara%20membuat&locale=id_ID&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:qwant/autocomplete?q=cara%20membuat&locale=id_ID&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:qwant/autocomplete?q=cara%20membuat&locale=id_ID&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 7, "items": [ { "text": "kucing" }, { "text": "kucing lucu" }, { "text": "kucing meme" }, { "text": "kucing bengal" }, { "text": "kucing garong" }, { "text": "kucing kartun" }, { "text": "kucing png" } ], "query": "kucing", "locale": "id_ID", "provider": "qwant" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:qwant/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:qwant/expand?q=kucing&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:qwant/expand?q=kucing&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:qwant/expand?q=kucing&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "kucing", "count": 268, "items": [ { "via": "seed", "text": "kucing" }, { "via": "seed", "text": "kucing lucu" }, { "via": "seed", "text": "kucing meme" }, { "via": "seed", "text": "kucing bengal" }, { "via": "seed", "text": "kucing garong" }, { "via": "seed", "text": "kucing kartun" }, { "via": "seed", "text": "kucing png" }, { "via": "alphabet", "text": "kucing comel" } ], "locale": "id", "provider": "qwant", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## Steam Autocomplete **Category:** autocomplete · **Slug:** `steam` **Detail page:** https://zpi.web.id/api/autocomplete/steam Steam store suggestions — returns games with app ids, prices and art, not just query strings. **Tags:** steam, games, store, suggest ### Autocomplete Store completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:steam/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `country` | string | query | no | Store country, sets the currency. Default ID | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:steam/autocomplete?q=counter&country=ID&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:steam/autocomplete?q=counter&country=ID&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:steam/autocomplete?q=counter&country=ID&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 5, "items": [ { "url": "https://store.steampowered.com/app/730/", "text": "Counter-Strike 2", "appId": 730, "image": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/730/942c04efaa5bc87afb6f2a97dbf17ac614c8a84d/capsule_sm_120.jpg?t=1784564069", "price": "Free To Play" }, { "url": "https://store.steampowered.com/app/10/", "text": "Counter-Strike", "appId": 10, "image": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/10/capsule_sm_120.jpg?t=1745368572", "price": "Rp 69 999" }, { "url": "https://store.steampowered.com/app/240/", "text": "Counter-Strike: Source", "appId": 240, "image": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/240/capsule_sm_120.jpg?t=1745368575", "price": "Rp 90 999" }, { "url": "https://store.steampowered.com/app/3418500/", "text": "CS Manager", "appId": 3418500, "image": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/3418500/14db6902ac3f032e4d01366ea6234c1f69b6699b/capsule_sm_120.jpg?t=1784552493" }, { "url": "https://store.steampowered.com/app/2678630/", "text": "Counter-Strike 2 Soundtrack", "appId": 2678630, "image": "https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/2678630/capsule_sm_120.jpg?t=1698860153", "price": "Free To Play" } ], "query": "counter", "country": "ID", "provider": "steam" } ``` --- ### Expand Enumerate games — the seed with every letter appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:steam/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default en | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:steam/expand?q=counter&modifiers=all&lang=en&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:steam/expand?q=counter&modifiers=all&lang=en&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:steam/expand?q=counter&modifiers=all&lang=en&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "counter", "count": 62, "items": [ { "via": "seed", "text": "Counter-Strike 2" }, { "via": "seed", "text": "Counter-Strike" }, { "via": "seed", "text": "Counter-Strike: Source" }, { "via": "seed", "text": "CS Manager" }, { "via": "seed", "text": "Counter-Strike 2 Soundtrack" }, { "via": "alphabet", "text": "Command & Conquer Red Alert™, Counterstrike™ and The Aftermath™" }, { "via": "alphabet", "text": "Graviteam Tactics: Counter Blow" }, { "via": "alphabet", "text": "Battle Simulator: Counter Terrorist" } ], "locale": "en", "provider": "steam", "modifiers": "alphabet", "truncated": false, "variantsTried": 27, "variantsFailed": 0 } ``` --- ## TikTok Autocomplete **Category:** autocomplete · **Slug:** `tiktok` **Detail page:** https://zpi.web.id/api/autocomplete/tiktok TikTok search suggestions — video-culture vocabulary the search engines do not surface. **Tags:** tiktok, social, trends, suggest ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:tiktok/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:tiktok/autocomplete?q=kucing&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:tiktok/autocomplete?q=kucing&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:tiktok/autocomplete?q=kucing&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 8, "items": [ { "text": "kucing", "groupId": "3240705525907998029" }, { "text": "KUCING LUCU", "groupId": "2268664385593907840" }, { "text": "kucing lucu kucing lucu terbaru 2026 homestay", "groupId": "3046108270621440140" }, { "text": "kucing meong meong", "groupId": "565904191545475047" }, { "text": "kucing oren", "groupId": "1290971289867481180" }, { "text": "KUCING MEONG MEONG CUPLIKAN", "groupId": "948772630415099724" }, { "text": "Kucing Meong Meong Lucu", "groupId": "3169249122804362108" }, { "text": "kucing joget", "groupId": "255711722976585418" } ], "query": "kucing", "provider": "tiktok" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:tiktok/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:tiktok/expand?q=kucing&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:tiktok/expand?q=kucing&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:tiktok/expand?q=kucing&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "kucing", "count": 331, "items": [ { "via": "alphabet", "text": "Kucing bengal" }, { "via": "alphabet", "text": "Kucing besar" }, { "via": "alphabet", "text": "kucing bulu" }, { "via": "alphabet", "text": "Kucing Bernyanyi" }, { "via": "alphabet", "text": "kucing bau" }, { "via": "alphabet", "text": "kucing botak" }, { "via": "alphabet", "text": "kucing bisa ngomong" }, { "via": "alphabet", "text": "kucing british shorthair" } ], "locale": "id", "provider": "tiktok", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` --- ## Wikipedia Autocomplete **Category:** autocomplete · **Slug:** `wikipedia-autocomplete` **Detail page:** https://zpi.web.id/api/autocomplete/wikipedia-autocomplete Wikipedia article autocomplete from the OpenSearch action. Matches titles by prefix, not phrases. **Tags:** wikipedia, knowledge, autocomplete, opensearch ### Autocomplete Article titles matching a prefix. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Title prefix to complete | | `lang` | string | query | no | Wikipedia edition, e.g. id, en, jv. Default id | | `count` | number | query | no | Maximum titles. Default 10, max 50 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/autocomplete?q=kucing&lang=id&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/autocomplete?q=kucing&lang=id&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/autocomplete?q=kucing&lang=id&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "url": "https://id.wikipedia.org/wiki/Kucing", "text": "Kucing" }, { "url": "https://id.wikipedia.org/wiki/Kucing_emas", "text": "Kucing emas" }, { "url": "https://id.wikipedia.org/wiki/Kucing_persia", "text": "Kucing persia" }, { "url": "https://id.wikipedia.org/wiki/Kucing_Schr%C3%B6dinger", "text": "Kucing Schrödinger" }, { "url": "https://id.wikipedia.org/wiki/Kucingan_(tumbuhan)", "text": "Kucingan (tumbuhan)" }, { "url": "https://id.wikipedia.org/wiki/Kucing_siam", "text": "Kucing siam" }, { "url": "https://id.wikipedia.org/wiki/Kucing_pallas", "text": "Kucing pallas" }, { "url": "https://id.wikipedia.org/wiki/Kucing_liar_eropa", "text": "Kucing liar eropa" } ], "query": "kucing", "locale": "id", "provider": "wikipedia" } ``` --- ### Expand Walk the title index — the prefix with every letter appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/expand?q=kucing&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/expand?q=kucing&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:wikipedia-autocomplete/expand?q=kucing&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "kucing", "count": 88, "items": [ { "via": "seed", "text": "Kucing" }, { "via": "seed", "text": "Kucing emas" }, { "via": "seed", "text": "Kucing persia" }, { "via": "seed", "text": "Kucing Schrödinger" }, { "via": "seed", "text": "Kucingan (tumbuhan)" }, { "via": "seed", "text": "Kucing siam" }, { "via": "seed", "text": "Kucing pallas" }, { "via": "seed", "text": "Kucing liar eropa" } ], "locale": "id", "provider": "wikipedia", "modifiers": "alphabet", "truncated": false, "variantsTried": 27, "variantsFailed": 16 } ``` --- ## Yahoo Autocomplete **Category:** autocomplete · **Slug:** `yahoo-autocomplete` **Detail page:** https://zpi.web.id/api/autocomplete/yahoo-autocomplete Yahoo search autocomplete. **Tags:** yahoo, autocomplete, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/autocomplete?q=cara%20membuat&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/autocomplete?q=cara%20membuat&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/autocomplete?q=cara%20membuat&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "cara membuat daftar isi secara otomatis" }, { "text": "cara membuat google form" }, { "text": "cara membuat npwp pribadi secara online" }, { "text": "cara membuat halaman di word" }, { "text": "cara membuat daftar pustaka" }, { "text": "cara membuat google drive" }, { "text": "cara membuat daftar isi" }, { "text": "cara membuat barcode" } ], "query": "cara membuat", "provider": "yahoo" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:yahoo-autocomplete/expand?q=cara%20membuat&modifiers=all&lang=id&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cara membuat", "count": 54, "items": [ { "via": "seed", "text": "cara membuat daftar isi secara otomatis" }, { "via": "seed", "text": "cara membuat google form" }, { "via": "seed", "text": "cara membuat npwp pribadi secara online" }, { "via": "seed", "text": "cara membuat halaman di word" }, { "via": "seed", "text": "cara membuat daftar pustaka" }, { "via": "seed", "text": "cara membuat google drive" }, { "via": "seed", "text": "cara membuat daftar isi" }, { "via": "seed", "text": "cara membuat barcode" } ], "locale": "id", "provider": "yahoo", "modifiers": "questions", "truncated": false, "variantsTried": 10, "variantsFailed": 0 } ``` --- ## Yandex Autocomplete **Category:** autocomplete · **Slug:** `yandex` **Detail page:** https://zpi.web.id/api/autocomplete/yandex Yandex search suggestions. The index is Russian-centric; other languages return fewer or no completions. **Tags:** yandex, suggest, keyword-research ### Autocomplete Completions for a seed query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:yandex/autocomplete` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed text to complete | | `count` | number | query | no | Cap the list. Default: everything the upstream returns | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:yandex/autocomplete?q=cat&count=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:yandex/autocomplete?q=cat&count=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:yandex/autocomplete?q=cat&count=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "text": "caterpillar 2010" }, { "text": "catur online" }, { "text": "catch me if you can full movie" }, { "text": "catch me if you can film 2002" }, { "text": "cathay pacific airways" }, { "text": "catawiki" }, { "text": "catgpt на русском" }, { "text": "cataz" } ], "query": "cat", "provider": "yandex" } ``` --- ### Expand Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:yandex/expand` - **Cache TTL:** 1800s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | Seed to expand | | `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all | | `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default en | | `count` | number | query | no | Cap the returned list. Default: every unique result found | **cURL:** ```bash curl "https://api.zpi.web.id/v1/autocomplete:yandex/expand?q=cat&modifiers=all&lang=en&count=200" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/autocomplete:yandex/expand?q=cat&modifiers=all&lang=en&count=200", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/autocomplete:yandex/expand?q=cat&modifiers=all&lang=en&count=200", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "seed": "cat", "count": 386, "items": [ { "via": "alphabet", "text": "cat and dog" }, { "via": "alphabet", "text": "cat and sofa" }, { "via": "alphabet", "text": "cat art" }, { "via": "alphabet", "text": "cat animal" }, { "via": "alphabet", "text": "cat animation" }, { "via": "alphabet", "text": "cat and sofa кроссовки" }, { "via": "alphabet", "text": "cat anatomy" }, { "via": "alphabet", "text": "cat and mouse" } ], "locale": "en", "provider": "yandex", "modifiers": "all", "truncated": false, "variantsTried": 44, "variantsFailed": 0 } ``` ---