# Search Tools — Zapi reference > Every Search Tools endpoint on Zapi, with parameters, request shape and an example response. **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/search-tools **Full catalog:** https://zpi.web.id/apis · **Index:** https://zpi.web.id/llms-full.txt --- ## arXiv **Category:** search-tools · **Slug:** `arxiv` **Detail page:** https://zpi.web.id/api/search-tools/arxiv Searches an open-access repository of scientific preprints and returns paper metadata. **Tags:** search, academic, papers ### Search Returns matching preprints with titles, authors, abstracts, and links for a query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:arxiv/search` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-30 (default 10) | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:arxiv/search?query=transformer&count=10&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:arxiv/search?query=transformer&count=10&page=1", { 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/search-tools:arxiv/search?query=transformer&count=10&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 5, "items": [ { "url": "http://arxiv.org/abs/2201.00978v1", "title": "PyramidTNT: Improved Transformer-in-Transformer Baselines with Pyramid Architecture", "pdfUrl": "https://arxiv.org/pdf/2201.00978v1", "source": "arxiv.org", "authors": [ "Kai Han", "Jianyuan Guo", "Yehui Tang", "Yunhe Wang" ], "summary": "Transformer networks have achieved great progress for computer vision tasks. Transformer-in-Transformer (TNT) architecture utilizes inner transformer and outer transformer to extract both local and global representations. In this work, we present new TNT baselines by introducing two advanced designs: 1) pyramid architecture, and 2) convolutional stem. The new \"PyramidTNT\" significantly improves the original TNT by establishing hierarchical representations. PyramidTNT achieves better performances than the previous state-of-the-art vision transformers such as Swin Transformer. We hope this new baseline will be helpful to the further research and application of vision transformer. Code will be available at https://github.com/huawei-noah/CV-Backbones/tree/master/tnt_pytorch.", "publishedAt": "2022-01-04T04:56:57Z" }, { "url": "http://arxiv.org/abs/2104.11502v1", "title": "Learning to Cluster Faces via Transformer", "pdfUrl": "https://arxiv.org/pdf/2104.11502v1", "source": "arxiv.org", "authors": [ "Jinxing Ye", "Xioajiang Peng", "Baigui Sun", "Kai Wang", "Xiuyu Sun", "Hao Li", "Hanqing Wu" ], "summary": "Face clustering is a useful tool for applications like automatic face annotation and retrieval. The main challenge is that it is difficult to cluster images from the same identity with different face poses, occlusions, and image quality. Traditional clustering methods usually ignore the relationship between individual images and their neighbors which may contain useful context information. In this paper, we repurpose the well-known Transformer and introduce a Face Transformer for supervised face clustering. In Face Transformer, we decompose the face clustering into two steps: relation encoding and linkage predicting. Specifically, given a face image, a \\textbf{relation encoder} module aggregates local context information from its neighbors and a \\textbf{linkage predictor} module judges whether a pair of images belong to the same cluster or not. In the local linkage graph view, Face Transformer can generate more robust node and edge representations compared to existing methods. Experiments on both MS-Celeb-1M and DeepFashion show that our method achieves state-of-the-art performance, e.g., 91.12\\% in pairwise F-score on MS-Celeb-1M.", "publishedAt": "2021-04-23T09:43:36Z" }, { "url": "http://arxiv.org/abs/2404.05657v1", "title": "MLP Can Be A Good Transformer Learner", "pdfUrl": "https://arxiv.org/pdf/2404.05657v1", "source": "arxiv.org", "authors": [ "Sihao Lin", "Pumeng Lyu", "Dongrui Liu", "Tao Tang", "Xiaodan Liang", "Andy Song", "Xiaojun Chang" ], "summary": "Self-attention mechanism is the key of the Transformer but often criticized for its computation demands. Previous token pruning works motivate their methods from the view of computation redundancy but still need to load the full network and require same memory costs. This paper introduces a novel strategy that simplifies vision transformers and reduces computational load through the selective removal of non-essential attention layers, guided by entropy considerations. We identify that regarding the attention layer in bottom blocks, their subsequent MLP layers, i.e. two feed-forward layers, can elicit the same entropy quantity. Meanwhile, the accompanied MLPs are under-exploited since they exhibit smaller feature entropy compared to those MLPs in the top blocks. Therefore, we propose to integrate the uninformative attention layers into their subsequent counterparts by degenerating them into identical mapping, yielding only MLP in certain transformer blocks. Experimental results on ImageNet-1k show that the proposed method can remove 40% attention layer of DeiT-B, improving throughput and memory bound without performance compromise. Code is available at https://github.com/sihaoevery/lambda_vit.", "publishedAt": "2024-04-08T16:40:15Z" }, { "url": "http://arxiv.org/abs/1809.04281v3", "title": "Music Transformer", "pdfUrl": "https://arxiv.org/pdf/1809.04281v3", "source": "arxiv.org", "authors": [ "Cheng-Zhi Anna Huang", "Ashish Vaswani", "Jakob Uszkoreit", "Noam Shazeer", "Ian Simon", "Curtis Hawthorne", "Andrew M. Dai", "Matthew D. Hoffman", "Monica Dinculescu", "Douglas Eck" ], "summary": "Music relies heavily on repetition to build structure and meaning. Self-reference occurs on multiple timescales, from motifs to phrases to reusing of entire sections of music, such as in pieces with ABA structure. The Transformer (Vaswani et al., 2017), a sequence model based on self-attention, has achieved compelling results in many generation tasks that require maintaining long-range coherence. This suggests that self-attention might also be well-suited to modeling music. In musical composition and performance, however, relative timing is critically important. Existing approaches for representing relative positional information in the Transformer modulate attention based on pairwise distance (Shaw et al., 2018). This is impractical for long sequences such as musical compositions since their memory complexity for intermediate relative information is quadratic in the sequence length. We propose an algorithm that reduces their intermediate memory requirement to linear in the sequence length. This enables us to demonstrate that a Transformer with our modified relative attention mechanism can generate minute-long compositions (thousands of steps, four times the length modeled in Oore et al., 2018) with compelling structure, generate continuations that coherently elaborate on a given motif, and in a seq2seq setup generate accompaniments conditioned on melodies. We evaluate the Transformer with our relative attention mechanism on two datasets, JSB Chorales and Piano-e-Competition, and obtain state-of-the-art results on the latter.", "publishedAt": "2018-09-12T07:15:26Z" }, { "url": "http://arxiv.org/abs/2212.14538v2", "title": "Transformer in Transformer as Backbone for Deep Reinforcement Learning", "pdfUrl": "https://arxiv.org/pdf/2212.14538v2", "source": "arxiv.org", "authors": [ "Hangyu Mao", "Rui Zhao", "Hao Chen", "Jianye Hao", "Yiqun Chen", "Dong Li", "Junge Zhang", "Zhen Xiao" ], "summary": "Designing better deep networks and better reinforcement learning (RL) algorithms are both important for deep RL. This work focuses on the former. Previous methods build the network with several modules like CNN, LSTM and Attention. Recent methods combine the Transformer with these modules for better performance. However, it requires tedious optimization skills to train a network composed of mixed modules, making these methods inconvenient to be used in practice. In this paper, we propose to design \\emph{pure Transformer-based networks} for deep RL, aiming at providing off-the-shelf backbones for both the online and offline settings. Specifically, the Transformer in Transformer (TIT) backbone is proposed, which cascades two Transformers in a very natural way: the inner one is used to process a single observation, while the outer one is responsible for processing the observation history; combining both is expected to extract spatial-temporal representations for good decision-making. Experiments show that TIT can achieve satisfactory performance in different settings consistently.", "publishedAt": "2022-12-30T03:50:38Z" } ], "total": 174551, "hasMore": true, "nextPage": 2 } ``` --- ## Bing Search **Category:** search-tools · **Slug:** `bing` **Detail page:** https://zpi.web.id/api/search-tools/bing Bing Search. pencarian web lengkap, snippet, link, multi-bahasa dan region **Tags:** search, bing, engine ### Search - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:bing/search` - **Cache TTL:** 3600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-50 (default 10) | | `page` | number | query | no | Result page (default 1, max 20) | | `language` | string | query | no | Language code. Default en | | `region` | string | query | no | Region code. Default us | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:bing/search?query=pizza&count=10&page=1&language=en®ion=us" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:bing/search?query=pizza&count=10&page=1&language=en®ion=us", { 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/search-tools:bing/search?query=pizza&count=10&page=1&language=en®ion=us", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 10, "items": [ { "url": "https://brew.sh/", "title": "Homebrew: The Package Manager for Everywhere", "source": "bing.com", "snippet": "Homebrew installs the command-line tools and applications you need across macOS, Linux and WSL. Homebrew won’t install files outside its prefix.", "displayUrl": "brew.sh" }, { "url": "https://docs.brew.sh/Installation", "title": "Homebrew Documentation: Installation", "source": "bing.com", "snippet": "The script installs Homebrew to its default, supported, best prefix (/opt/homebrew for Apple Silicon, /usr/local for macOS Intel and /home/linuxbrew/.linuxbrew for Linux) so that you don’t need sudo …", "displayUrl": "https://docs.brew.sh › Installation" }, { "url": "https://www.youtube.com/channel/UCVQGtUcRjHTQLTTu-5s9_4Q", "title": "Brew - YouTube", "source": "bing.com", "snippet": "In our latest episode, many of you finally got to meet the newest Brew in the Brew-niverse! ☕ (And if you haven't seen him yet, make sure to check out our latest episode.)", "displayUrl": "https://www.youtube.com › channel" }, { "url": "https://github.com/Homebrew/brew", "title": "Homebrew/brew: The Package Manager for Everywhere - GitHub", "source": "bing.com", "snippet": "Homebrew is a non-profit project run entirely by volunteers, not employees. We need your funds to pay for software, hardware and hosting around continuous integration and future improvements to the …", "displayUrl": "https://github.com › Homebrew › brew" }, { "url": "https://www.merriam-webster.com/dictionary/brew", "title": "BREW Definition & Meaning - Merriam-Webster", "source": "bing.com", "snippet": "3 days ago · The meaning of BREW is to prepare (beer, ale, etc.) by steeping, boiling, and fermentation or by infusion and fermentation. How to use brew in a sentence.", "displayUrl": "https://www.merriam-webster.com › dictionary › brew" }, { "url": "https://www.brew-watches.com/", "title": "Brew Watch Co. – Brew Watches", "source": "bing.com", "snippet": "Brew Watch Co. is the top USA microbrand that creates retro-inspired timepieces.", "displayUrl": "brew-watches.com" }, { "url": "https://docs.brew.sh/Language-Runtimes-and-Packages", "title": "Homebrew Documentation: Language Runtimes and Packages", "source": "bing.com", "snippet": "Language Runtimes and Packages Homebrew provides language runtimes and applications but does not manage packages installed directly by tools such as gem, npm, pip or cpan. Those packages are …", "displayUrl": "https://docs.brew.sh › Language-Runtimes-and-Packages" }, { "url": "https://7brew.com/", "title": "7 Brew Drive-thru Coffee", "source": "bing.com", "snippet": "Visit 7 Brew for an elevated coffee drive-thru experience.", "displayUrl": "7brew.com" } ], "total": 83400, "hasMore": true, "nextPage": 2 } ``` --- ## Brave Search **Category:** search-tools · **Slug:** `brave` **Detail page:** https://zpi.web.id/api/search-tools/brave Web search via Brave — datacenter-friendly, no captcha, real-time dengan title/URL/snippet. **Tags:** search, web, brave ### Search - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:brave/search` - **Cache TTL:** 3600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `page` | number | query | no | Result page (default 1, max 10) | | `country` | string | query | no | Country code, 2 letters (id, us, gb, jp). Default id | | `safesearch` | enum(off|moderate|strict) | query | no | SafeSearch level. Default moderate | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:brave/search?query=pizza&page=1&country=id&safesearch=moderate" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:brave/search?query=pizza&page=1&country=id&safesearch=moderate", { 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/search-tools:brave/search?query=pizza&page=1&country=id&safesearch=moderate", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 20, "items": [ { "url": "https://coffeechronicler.com/best-way-to-make-coffee-at-home/", "title": "The Best Way to Make Coffee at Home (2026) Tested by Baristas", "source": "search.brave.com", "snippet": "11 February 2026 - If you ask me, it’s not just hype. Pour over coffee is my brewing method of choice, period. And I think it should be for most people. This is the ideal way to express a coffee bean’s true identity.", "displayUrl": "coffeechronicler.com" }, { "url": "https://www.aboutcoffee.org/brewing/", "title": "Brewing - NCA - About Coffee", "source": "search.brave.com", "snippet": "29 May 2026 - Learn how to brew coffee your way with brewing methods such as drip, pour-over, espresso, French press & cold brew. Get advice on equipment, grinding & more.", "displayUrl": "aboutcoffee.org" }, { "url": "https://www.thekitchn.com/how-to-make-coffee-23716786", "title": "How to Brew the Best Cup of Coffee at Home, According to a Barista", "source": "search.brave.com", "snippet": "23 March 2025 - Start with filtered water. Unless otherwise noted below, you should always start with clean, filtered water heated between 195 and 205°F . Grind the beans yourself. For the best tasting coffee, try to grind your coffee fresh if you can.", "displayUrl": "thekitchn.com" }, { "url": "https://www.thekitchn.com/best-coffee-brewing-method-22977756", "title": "We Tested 7 Methods for Making Coffee and Found a Clear Winner | The Kitchn", "source": "search.brave.com", "snippet": "29 May 2026 - It doesn’t take much digging through the vast array of coffee-making apparatuses, either at your local kitchen store or online, to get overwhelmed. There are drip machines, pod-machines, French presses — even this odd-looking contraption. When selecting the best brewer for you, you’ll want to consider a variety of factors: How fast is it?", "displayUrl": "thekitchn.com" }, { "url": "https://counterculturecoffee.com/blogs/counter-culture-coffee/coffee-basics-brewing-methods", "title": "Coffee Basics: Brewing Methods – Counter Culture Coffee", "source": "search.brave.com", "snippet": "Manual brewers like the Beehouse, Kalita Wave, or V60 yield sweet, clean coffees, and larger format brewers like the Chemex are perfect for brewing for a larger group. Grind Recommendation: A finer grind for smaller pour over cones—like table salt. Medium-Coarse grind for larger brewers like the Chemex—like kosher salt. The French press is an easy way to make full-bodied coffee.", "displayUrl": "counterculturecoffee.com" }, { "url": "https://en.wikipedia.org/wiki/Coffee_preparation", "title": "Coffee preparation - Wikipedia", "source": "search.brave.com", "snippet": "1 week ago - While the particular steps vary ... time ( brewed ), the liquid coffee extraction must be separated from the used grounds, and finally, if desired, the extracted coffee is combined with other elements of the desired beverage, such as sweeteners, dairy products, dairy alternatives, or toppings (such as shaved ...", "displayUrl": "en.wikipedia.org" }, { "url": "https://www.cafeelba.com/pages/brewing-coffee-101-how-to-brew-the-perfect-cup", "title": "Brewing Coffee 101: How to Brew the Perfect Cup – Café Elba", "source": "search.brave.com", "snippet": "2 weeks ago - It has been said that the two most important things you can do to ensure a great cup of coffee, is to buy freshly roasted coffee beans, and then grind the beans yourself right before brewing. Having said that, you can do those two things and still end up with a mediocre cup of coffee.", "displayUrl": "cafeelba.com" }, { "url": "https://www.instructables.com/How-to-Brew-Coffee/", "title": "How to Brew Coffee : 6 Steps - Instructables", "source": "search.brave.com", "snippet": "5 October 2017 - How to Brew Coffee: So for many people, coffee is an absolute must before they are considered functional in the mornings. But if you are just diving into the world of coffee, making your first cup can take effort especially if it is early in the morning. So to help you…", "displayUrl": "instructables.com" } ], "hasMore": true, "nextPage": 2 } ``` --- ## DuckDuckGo **Category:** search-tools · **Slug:** `duckduckgo` **Detail page:** https://zpi.web.id/api/search-tools/duckduckgo DuckDuckGo web search — privacy-focused search engine, no tracking, hasil pencarian web umum dengan title, URL, snippet. **Tags:** search, web, privacy ### Search Cari hasil pencarian berdasarkan keyword dengan pagination. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:duckduckgo/search` - **Cache TTL:** 900s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:duckduckgo/search?query=pizza" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:duckduckgo/search?query=pizza", { 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/search-tools:duckduckgo/search?query=pizza", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 10, "items": [ { "url": "https://www.pizzahut.com/", "title": "Pizza Hut | Delivery & Carryout - No One OutPizzas The Hut!", "source": "duckduckgo.com", "snippet": "Discover Pizza Hut's classic and new menu items, deals, and seamless ordering for delivery or carryout. No One OutPizzas the Hut®.", "displayUrl": "pizzahut.com" }, { "url": "https://www.dominos.com/en", "title": "Pizza Delivery & Carryout, Pasta, Chicken & More | Domino's", "source": "duckduckgo.com", "snippet": "Order pizza , pasta, sandwiches & more online for carryout or delivery from Domino's. View menu, find locations, track orders. Sign up for Domino's email & text offers to get great deals on your next order.", "displayUrl": "dominos.com" }, { "url": "https://www.papajohns.com/", "title": "Papa Johns Pizza Delivery & Carryout - Best Deals on Pizza, Sides & More", "source": "duckduckgo.com", "snippet": "Enjoy the ease of ordering delicious pizza for delivery or carryout from a Papa Johns near you. Start tracking the speed of your delivery and earn rewards on your favorite pizza , breadsticks, wings and more!", "displayUrl": "papajohns.com" }, { "url": "https://www.pizzahut.com/locator", "title": "Pizza Hut Store Locator", "source": "duckduckgo.com", "snippet": "Browse our 6,000+ locations by city and state below. With online delivery and take out ordering options, Pizza Hut makes it easy to skip the line. Our menu includes pizza , wings, pasta and more. Try our Original Stuffed Crust® Pizza or grab a slice of a classic Pepperoni Pizza . And if you're feeling hungry on-the-go, drop by one of The Hut Lane™ drive thru locations. Enjoy!", "displayUrl": "pizzahut.com" }, { "url": "https://locations.pizzahut.com/", "title": "Pizza Hut Near Me - Store Locations | Pizza Hut", "source": "duckduckgo.com", "snippet": "Browse all Pizza Hut locations in United States to find hot and fresh pizza , wings, pasta and more! Order carryout or delivery for quick service.", "displayUrl": "locations.pizzahut.com" }, { "url": "https://pizza.dominos.com/", "title": "Find Domino's in the US | Order Pizza Delivery Now", "source": "duckduckgo.com", "snippet": "Get delicious and tasty food delivered! Order from your nearest Domino's in the US for pizza , pasta, chicken, salad, sandwiches, dessert, and more.", "displayUrl": "pizza.dominos.com" }, { "url": "https://www.pizzahut.com/menu/pizza", "title": "Pizza Hut", "source": "duckduckgo.com", "snippet": "Supreme Pizza This loaded pizza is the perfect choice for family dinner or a lunch with your crew. Includes pepperoni, seasoned pork, beef, mushrooms, green bell peppers and onions.", "displayUrl": "pizzahut.com" }, { "url": "https://barrospizza.com/", "title": "Barro's Pizza: A Family Tradition- Voted Valley's Best Pizzeria!", "source": "duckduckgo.com", "snippet": "We're a family owned and operated pizza restaurant with award winning wings, salads, deli-style sandwiches, pasta and the Valley's favorite pizza .", "displayUrl": "barrospizza.com" }, { "url": "https://www.donatos.com/", "title": "Donatos Pizza", "source": "duckduckgo.com", "snippet": "Discover Donatos Pizza's delicious menu featuring Edge to Edge® pizzas , subs, salads, and wings available for delivery, pickup, or dine-in.", "displayUrl": "donatos.com" }, { "url": "https://www.ubereats.com/near-me/pizza", "title": "Pizza Delivery Near Me | Uber Eats", "source": "duckduckgo.com", "snippet": "Order Pizza delivery online from shops near you with Uber Eats. Discover the stores offering Pizza delivery nearby.", "displayUrl": "ubereats.com" } ], "hasMore": true, "nextPage": 2 } ``` --- ## GitHub Search **Category:** search-tools · **Slug:** `github-code` **Detail page:** https://zpi.web.id/api/search-tools/github-code Searches public code and repositories and returns matching file or repo metadata. **Tags:** search, repositories, code ### Search Returns matching code or repositories with file paths, snippets, and URLs for a query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:github-code/search` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-20 (default 10) | | `page` | number | query | no | Result page (default 1, max 50) | | `sort` | enum(stars|forks|updated) | query | no | Sort by: stars/forks/updated (default stars) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:github-code/search?query=react&count=10&page=1&sort=stars" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:github-code/search?query=react&count=10&page=1&sort=stars", { 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/search-tools:github-code/search?query=react&count=10&page=1&sort=stars", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 5, "items": [ { "url": "https://github.com/chimurai/http-proxy-middleware", "name": "http-proxy-middleware", "forks": 880, "owner": "chimurai", "stars": 11132, "title": "chimurai/http-proxy-middleware", "source": "github.com", "fullName": "chimurai/http-proxy-middleware", "language": "TypeScript", "updatedAt": "2026-08-01T11:55:01Z", "description": ":zap: The one-liner node.js http-proxy middleware for connect, express, next.js and more" }, { "url": "https://github.com/honojs/middleware", "name": "middleware", "forks": 360, "owner": "honojs", "stars": 971, "title": "honojs/middleware", "source": "github.com", "fullName": "honojs/middleware", "language": "TypeScript", "updatedAt": "2026-08-02T04:49:53Z", "description": "monorepo for Hono third-party middleware/helpers/wrappers" }, { "url": "https://github.com/rhinobase/hono-openapi", "name": "hono-openapi", "forks": 59, "owner": "rhinobase", "stars": 778, "title": "rhinobase/hono-openapi", "source": "github.com", "fullName": "rhinobase/hono-openapi", "language": "TypeScript", "updatedAt": "2026-07-31T13:06:26Z", "description": "Hono middleware to generate OpenAPI Swagger documentation" }, { "url": "https://github.com/rhinobase/hono-rate-limiter", "name": "hono-rate-limiter", "forks": 23, "owner": "rhinobase", "stars": 646, "title": "rhinobase/hono-rate-limiter", "source": "github.com", "fullName": "rhinobase/hono-rate-limiter", "language": "TypeScript", "updatedAt": "2026-07-25T09:58:00Z", "description": "Rate Limit middleware for Hono Server" }, { "url": "https://github.com/sergiodxa/remix-hono", "name": "remix-hono", "forks": 9, "owner": "sergiodxa", "stars": 553, "title": "sergiodxa/remix-hono", "source": "github.com", "fullName": "sergiodxa/remix-hono", "language": "TypeScript", "updatedAt": "2026-07-23T10:43:29Z", "description": "Hono middlewares for Remix" } ], "total": 231, "hasMore": true, "nextPage": 2 } ``` --- ## Hacker News **Category:** search-tools · **Slug:** `hackernews` **Detail page:** https://zpi.web.id/api/search-tools/hackernews Hacker News search via Algolia API — pencarian post & komentar tech/startup community dengan points, comments, author. **Tags:** search, tech, news, hn ### Search Cari hasil pencarian berdasarkan keyword dengan pagination. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:hackernews/search` - **Cache TTL:** 180s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:hackernews/search?query=python&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:hackernews/search?query=python&page=1", { 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/search-tools:hackernews/search?query=python&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 15, "items": [ { "url": "https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f", "hnUrl": "https://news.ycombinator.com/item?id=22238335", "title": "Why Discord is switching from Go to Rust", "author": "Sikul", "points": 1582, "source": "news.ycombinator.com", "comments": 642, "createdAt": "2020-02-04T17:30:40Z" }, { "url": "https://loglog.games/blog/leaving-rust-gamedev/", "hnUrl": "https://news.ycombinator.com/item?id=40172033", "title": "Leaving Rust gamedev after 3 years", "author": "darthdeus", "points": 1484, "source": "news.ycombinator.com", "comments": 972, "createdAt": "2024-04-26T17:33:56Z" }, { "url": "https://fasterthanli.me/articles/a-half-hour-to-learn-rust", "hnUrl": "https://news.ycombinator.com/item?id=25610741", "title": "A half-hour to learn Rust", "author": "selvan", "points": 1444, "source": "news.ycombinator.com", "comments": 330, "createdAt": "2021-01-02T05:50:39Z" }, { "url": "http://blog.rust-lang.org/2015/05/15/Rust-1.0.html", "hnUrl": "https://news.ycombinator.com/item?id=9551937", "title": "Announcing Rust 1.0", "author": "jhund", "points": 1363, "source": "news.ycombinator.com", "comments": 306, "createdAt": "2015-05-15T17:02:09Z" }, { "url": "https://github.com/citybound/citybound", "hnUrl": "https://news.ycombinator.com/item?id=19583384", "title": "CityBound – An open source city simulation game in Rust", "author": "formalsystem", "points": 1340, "source": "news.ycombinator.com", "comments": 264, "createdAt": "2019-04-05T15:18:45Z" }, { "url": "https://sandspiel.club/", "hnUrl": "https://news.ycombinator.com/item?id=18696291", "title": "Sandspiel – A falling sand game built in Rust and WebGL", "author": "15DCFA8F", "points": 1323, "source": "news.ycombinator.com", "comments": 185, "createdAt": "2018-12-17T01:18:18Z" }, { "url": "https://ladybird.org/posts/adopting-rust/", "hnUrl": "https://news.ycombinator.com/item?id=47120899", "title": "Ladybird adopts Rust, with help from AI", "author": "adius", "points": 1274, "source": "news.ycombinator.com", "comments": 698, "createdAt": "2026-02-23T11:29:22Z" }, { "url": "https://words.steveklabnik.com/a-sad-day-for-rust", "hnUrl": "https://news.ycombinator.com/item?id=22075076", "title": "A Sad Day for Rust", "author": "pjmlp", "points": 1243, "source": "news.ycombinator.com", "comments": 991, "createdAt": "2020-01-17T14:57:28Z" } ], "total": 620288, "hasMore": true, "nextPage": 2 } ``` --- ## Mojeek **Category:** search-tools · **Slug:** `mojeek` **Detail page:** https://zpi.web.id/api/search-tools/mojeek Performs web searches and returns ranked results with titles, URLs, and snippets. **Tags:** search ### Search Returns web search results for a given query string. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:mojeek/search` - **Cache TTL:** 900s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:mojeek/search?query=pizza&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:mojeek/search?query=pizza&page=1", { 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/search-tools:mojeek/search?query=pizza&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "query": "pizza", "results": [ { "url": "https://en.wikipedia.org/wiki/Pizza", "title": "Pizza - Wikipedia", "snippet": "The bottom of the pizza , called the \"crust\", may vary widely according to style—thin as in a typical hand-tossed Neapolitan pizza or thick as in a ..." }, { "url": "https://www.pizzahut.com/", "title": "Pizza Delivery & Takeaway Near You | Pizza Hut UK", "snippet": "Treat yourself to the best pizza , sides and desserts from your nearest Pizza Hut. Get delivery or takeaway today." }, { "url": "https://www.pizzaexpress.com/", "title": "Italian Restaurants Near You | Book a Table or Order Pizza", "snippet": "From our iconic Dough Balls to our thin and crispy Romana pizzas , enjoy all your favourites at home. ... them the good stuff with a pre-paid pizza ..." }, { "url": "https://www.joespizzanyc.com/", "title": "Joe's Pizza", "snippet": "Established in 1975 by Joe Pozzuoli, who is originally from Naples, Italy, the birthplace of pizza , Joe's Pizza is a \"Greenwich Village institution ..." }, { "url": "https://www.just-eat.co.uk/takeaway/nearme/pizza", "title": "Pizza Near Me: Takeaways & Delivery from best Restaurants |", "snippet": "Finding Pizza delivery or takeaway near you is easy with Just Eat! Simply enter your delivery address on our website or app, and we ll show you all ..." }, { "url": "https://www.seriouseats.com/pizza-recipes-5117816", "title": "Pizza Recipes", "snippet": "Our crisp, crunchy, chewy, and cheesy pizza recipes include everything from classic Neapolitan and New York pies to Sicilian and Detroit-style." }, { "url": "https://pdx.eater.com/maps/portland-oregon-best-pizza-pizzerias", "title": "The Best Pizza in Portland, Oregon | Eater Portland", "snippet": "The pizza residency inside Division’s Little Beast Brewing Beer Garden is a handsome match, as few things go together as well as craft beer and ..." }, { "url": "https://tonyspizzanapoletana.com/", "title": "Tony’s Pizza Napoletana – Tony Gemignani – San Francisco,", "snippet": "Tony ’ s Pizza Napoletana, founded by 13-time World Pizza Champion Tony Gemignani, was inspired by a pizzeria in Naples, Italy." }, { "url": "https://verygoodrecipes.com/pizza", "title": "Very Good Recipes of Pizza", "snippet": "Pizza night just got a cozy Italian twist with this cheesy pizza soup! Made with a rich tomato base, savory prosciutto, and golden broiled mozzarella ..." }, { "url": "https://www.scottspizzatours.com/", "title": "New York City Pizza Tours and Events | Scott's Pizza Tours", "snippet": "Round burnt bubbles on the top and edge of a pizza crust, often associated with Neapolitan pizza and other pizzas baked with extreme top heat." } ] } ``` --- ## npm **Category:** search-tools · **Slug:** `npm` **Detail page:** https://zpi.web.id/api/search-tools/npm Searches the public package registry and returns matching package metadata. **Tags:** search, packages ### Search Returns matching packages with names, versions, and descriptions for a query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:npm/search` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-30 (default 20) | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:npm/search?query=react&count=20&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:npm/search?query=react&count=20&page=1", { 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/search-tools:npm/search?query=react&count=20&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 5, "items": [ { "url": "https://www.npmjs.com/package/hono", "name": "hono", "links": { "npm": "https://www.npmjs.com/package/hono", "bugs": "https://github.com/honojs/hono/issues", "homepage": "https://hono.dev", "repository": "git+https://github.com/honojs/hono.git" }, "score": 2356.0767, "title": "hono", "source": "npmjs.com", "version": "4.12.33", "keywords": [ "hono", "web", "app", "http", "application", "framework", "router", "cloudflare", "workers", "fastly", "compute", "deno", "bun", "lambda", "nodejs" ], "publisher": "GitHub Actions", "description": "Web framework built on Web Standards", "publishedAt": "2026-07-31T10:42:41.417Z" }, { "url": "https://www.npmjs.com/package/@hono/node-server", "name": "@hono/node-server", "links": { "npm": "https://www.npmjs.com/package/@hono/node-server", "bugs": "https://github.com/honojs/node-server/issues", "homepage": "https://github.com/honojs/node-server", "repository": "git+https://github.com/honojs/node-server.git" }, "score": 623.7639, "title": "@hono/node-server", "source": "npmjs.com", "version": "2.0.12", "publisher": "GitHub Actions", "description": "Node.js Adapter for Hono", "publishedAt": "2026-07-26T05:02:01.126Z" }, { "url": "https://www.npmjs.com/package/hono-openapi", "name": "hono-openapi", "links": { "npm": "https://www.npmjs.com/package/hono-openapi", "bugs": "https://github.com/rhinobase/hono-openapi/issues", "homepage": "https://github.com/rhinobase/hono-openapi", "repository": "git+https://github.com/rhinobase/hono-openapi.git" }, "score": 513.671, "title": "hono-openapi", "source": "npmjs.com", "version": "1.3.1", "keywords": [ "hono", "openapi", "zod", "valibot", "typebox", "arktype", "effect" ], "publisher": "mathuraditya724", "description": "OpenAPI schema generator for Hono", "publishedAt": "2026-07-05T19:35:15.392Z" }, { "url": "https://www.npmjs.com/package/@hono/otel", "name": "@hono/otel", "links": { "npm": "https://www.npmjs.com/package/@hono/otel", "bugs": "https://github.com/honojs/middleware/issues", "homepage": "https://github.com/honojs/middleware", "repository": "git+https://github.com/honojs/middleware.git" }, "score": 478.1013, "title": "@hono/otel", "source": "npmjs.com", "version": "1.1.2", "publisher": "GitHub Actions", "description": "OpenTelemetry middleware for Hono", "publishedAt": "2026-05-08T08:29:53.507Z" }, { "url": "https://www.npmjs.com/package/hono-rate-limiter", "name": "hono-rate-limiter", "links": { "npm": "https://www.npmjs.com/package/hono-rate-limiter", "bugs": "https://github.com/rhinobase/hono-rate-limiter/issues", "homepage": "https://honohub.dev/docs/rate-limiter", "repository": "git+https://github.com/rhinobase/hono-rate-limiter.git" }, "score": 474.4182, "title": "hono-rate-limiter", "source": "npmjs.com", "version": "0.5.3", "keywords": [ "hono", "api", "middleware", "rest-api", "rate-limiting", "rate-limiter", "honojs" ], "publisher": "mathuraditya724", "description": "Rate limit middleware for Hono.", "publishedAt": "2025-12-29T18:14:39.982Z" } ], "total": 4360, "hasMore": true, "nextPage": 2 } ``` --- ## Openverse **Category:** search-tools · **Slug:** `openverse` **Detail page:** https://zpi.web.id/api/search-tools/openverse Searches an index of openly-licensed media and returns image metadata with attribution. **Tags:** search, images, creative-commons ### Search Returns openly-licensed images with URLs, license info, and attribution data for a query. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:openverse/search` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-30 (default 12) | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:openverse/search?query=cat&count=12&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:openverse/search?query=cat&count=12&page=1", { 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/search-tools:openverse/search?query=cat&count=12&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 5, "items": [ { "id": "1c5442f6-6bb6-4ab7-b603-f598e7579dd2", "url": "https://www.flickr.com/photos/32426194@N00/3481540500", "image": "https://live.staticflickr.com/3313/3481540500_c846c62863_b.jpg", "title": "Cat Fish 2", "source": "openverse.org", "creator": "admiller", "license": "by 2.0", "provider": "flickr", "thumbnail": "https://api.openverse.org/v1/images/1c5442f6-6bb6-4ab7-b603-f598e7579dd2/thumb/", "licenseUrl": "https://creativecommons.org/licenses/by/2.0/" }, { "id": "de42d499-d660-47b4-b203-28d5589c31d2", "url": "https://www.flickr.com/photos/29468339@N02/5840168826", "image": "https://live.staticflickr.com/2706/5840168826_486f364c6c_b.jpg", "title": "Cat bliss", "source": "openverse.org", "creator": "@Doug88888", "license": "by-nc-sa 2.0", "provider": "flickr", "thumbnail": "https://api.openverse.org/v1/images/de42d499-d660-47b4-b203-28d5589c31d2/thumb/", "licenseUrl": "https://creativecommons.org/licenses/by-nc-sa/2.0/" }, { "id": "b9bbd2be-a68e-4d2c-ad85-f43000cb8d55", "url": "https://www.flickr.com/photos/93665474@N00/3717404325", "image": "https://live.staticflickr.com/3436/3717404325_db41d8d687_b.jpg", "title": "cat", "source": "openverse.org", "creator": "Alex Balan", "license": "by-nc-sa 2.0", "provider": "flickr", "thumbnail": "https://api.openverse.org/v1/images/b9bbd2be-a68e-4d2c-ad85-f43000cb8d55/thumb/", "licenseUrl": "https://creativecommons.org/licenses/by-nc-sa/2.0/" }, { "id": "3d32b0c5-58b3-4e38-b034-cd6c8d674d73", "url": "https://www.flickr.com/photos/32695450@N05/11748899763", "image": "https://live.staticflickr.com/7300/11748899763_2dd16da8b4_b.jpg", "title": "cat in the sun", "source": "openverse.org", "creator": "fidber", "license": "by 2.0", "provider": "flickr", "thumbnail": "https://api.openverse.org/v1/images/3d32b0c5-58b3-4e38-b034-cd6c8d674d73/thumb/", "licenseUrl": "https://creativecommons.org/licenses/by/2.0/" }, { "id": "aafaf91c-4d64-4f2e-b8ec-d7e77131b888", "url": "https://www.flickr.com/photos/57443751@N07/6494613787", "image": "https://live.staticflickr.com/7004/6494613787_9a3031fa7d_b.jpg", "title": "Cat on the sofa", "source": "openverse.org", "creator": "sushiraider", "license": "by-nc-sa 2.0", "provider": "flickr", "thumbnail": "https://api.openverse.org/v1/images/aafaf91c-4d64-4f2e-b8ec-d7e77131b888/thumb/", "licenseUrl": "https://creativecommons.org/licenses/by-nc-sa/2.0/" } ], "total": 240, "hasMore": true, "nextPage": 2 } ``` --- ## Stack Overflow **Category:** search-tools · **Slug:** `stackoverflow` **Detail page:** https://zpi.web.id/api/search-tools/stackoverflow Stack Overflow & Stack Exchange search — Q&A programming dengan tags, score, view count. Support stackoverflow/superuser/serverfault/askubuntu. **Tags:** search, code, programming, qa ### Search Cari hasil pencarian berdasarkan keyword dengan pagination. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:stackoverflow/search` - **Cache TTL:** 180s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `page` | number | query | no | Result page (default 1, max 50) | | `site` | enum(stackoverflow|superuser|serverfault|askubuntu) | query | no | Stack Exchange site (default stackoverflow) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:stackoverflow/search?query=python&page=1&site=stackoverflow" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:stackoverflow/search?query=python&page=1&site=stackoverflow", { 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/search-tools:stackoverflow/search?query=python&page=1&site=stackoverflow", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 15, "items": [ { "url": "https://stackoverflow.com/questions/32308370/what-is-the-syntax-for-typescript-arrow-functions-with-generics", "tags": [ "typescript" ], "score": 825, "title": "What is the syntax for Typescript arrow functions with generics?", "author": "Andreas Frische", "source": "stackoverflow.com", "createdAt": "2015-08-31T09:46:38.000Z", "viewCount": 524972, "isAnswered": true, "answerCount": 18 }, { "url": "https://stackoverflow.com/questions/12710905/how-do-i-dynamically-assign-properties-to-an-object-in-typescript", "tags": [ "typescript" ], "score": 900, "title": "How do I dynamically assign properties to an object in TypeScript?", "author": "Peter Olson", "source": "stackoverflow.com", "createdAt": "2012-10-03T14:42:54.000Z", "viewCount": 1084771, "isAnswered": true, "answerCount": 31 }, { "url": "https://stackoverflow.com/questions/33535879/how-to-run-typescript-files-from-command-line", "tags": [ "node.js", "typescript" ], "score": 831, "title": "How to run TypeScript files from command line?", "author": "Gunchars", "source": "stackoverflow.com", "createdAt": "2015-11-05T02:54:39.000Z", "viewCount": 1282643, "isAnswered": true, "answerCount": 29 }, { "url": "https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript", "tags": [ "javascript", "typescript", "interface" ], "score": 723, "title": "Interface type check with Typescript", "author": "lhk", "source": "stackoverflow.com", "createdAt": "2013-01-20T14:37:38.000Z", "viewCount": 986629, "isAnswered": true, "answerCount": 30 }, { "url": "https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref", "tags": [ "reactjs", "typescript", "generics" ], "score": 175, "title": "React with Typescript -- Generics while using React.forwardRef", "author": "Primm", "source": "stackoverflow.com", "createdAt": "2019-10-20T00:58:22.000Z", "viewCount": 81791, "isAnswered": true, "answerCount": 7 }, { "url": "https://stackoverflow.com/questions/59988667/typescript-react-fcprops-confusion", "tags": [ "javascript", "reactjs", "typescript", "react-functional-component" ], "score": 257, "title": "TypeScript React.FC confusion", "author": "Kuldeep Bora", "source": "stackoverflow.com", "createdAt": "2020-01-30T14:52:54.000Z", "viewCount": 423457, "isAnswered": true, "answerCount": 5 }, { "url": "https://stackoverflow.com/questions/17655607/defining-typescript-generics-with-type-safety", "tags": [ "generics", "typescript" ], "score": 45, "title": "Defining typescript generics with type safety", "author": "Tim", "source": "stackoverflow.com", "createdAt": "2013-07-15T13:37:06.000Z", "viewCount": 17891, "isAnswered": true, "answerCount": 2 }, { "url": "https://stackoverflow.com/questions/56843790/typescript-generic-type-with-equal-operator-means", "tags": [ "typescript" ], "score": 85, "title": "typescript generic type with equal operator means?", "author": "Bill", "source": "stackoverflow.com", "createdAt": "2019-07-02T00:02:44.000Z", "viewCount": 18613, "isAnswered": true, "answerCount": 1 } ], "hasMore": true, "nextPage": 2 } ``` --- ## Wikipedia **Category:** search-tools · **Slug:** `wikipedia` **Detail page:** https://zpi.web.id/api/search-tools/wikipedia Wikipedia search — pencarian artikel ensiklopedia multi-bahasa (en/id) dengan title, snippet, URL halaman. **Tags:** search, knowledge, encyclopedia, wikipedia ### Search Cari hasil pencarian berdasarkan keyword dengan pagination. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:wikipedia/search` - **Cache TTL:** 180s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `page` | number | query | no | Result page (default 1, max 50) | | `lang` | enum(en|id) | query | no | Language code (en/id). Default en | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:wikipedia/search?query=pizza&page=1&lang=en" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:wikipedia/search?query=pizza&page=1&lang=en", { 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/search-tools:wikipedia/search?query=pizza&page=1&lang=en", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 10, "items": [ { "url": "https://en.wikipedia.org/wiki/Kuching", "title": "Kuching", "pageId": 153216, "source": "wikipedia.org", "summary": "the name \"Kuching\". It was perhaps derived from the Malay word for cat, \" kucing \", or from Cochin, an Indian trading port on the Malabar Coast and a generic" }, { "url": "https://en.wikipedia.org/wiki/Orthosiphon_aristatus", "title": "Orthosiphon aristatus", "pageId": 7979179, "source": "wikipedia.org", "summary": "microorganisms and fighting anorexia. It is known as kumis kucing in Indonesia and misai kucing in Malaysia, both of which translate to cat's whiskers. Orthosiphon" }, { "url": "https://en.wikipedia.org/wiki/Nasi_kucing", "title": "Nasi kucing", "pageId": 32345146, "source": "wikipedia.org", "summary": "Nasi kucing (from Javanese ꦤꦱꦶ​ꦏꦸꦕꦶꦁ 'nasi kucing '; Javanese: [ˈnasi ˈkutʃɪŋ], lit. 'small-portioned dish') is an Indonesian rice dish that originated" }, { "url": "https://en.wikipedia.org/wiki/Cat_tongue", "title": "Cat tongue", "pageId": 33131317, "source": "wikipedia.org", "summary": "(Spanish), macskanyelv (Hungarian), limbă de pisică (Romanian) or lidah kucing (Indonesian). Cat's tongue cookies are sweet, thin, and crunchy. The original" }, { "url": "https://en.wikipedia.org/wiki/Kuce", "title": "Kuce", "pageId": 21823541, "source": "wikipedia.org", "summary": "Kuce [ˈkut͡sɛ] is a village in the administrative district of Gmina Janowiec Kościelny, within Nidzica County, Warmian-Masurian Voivodeship, in northern" }, { "url": "https://en.wikipedia.org/wiki/Raas_cat", "title": "Raas cat", "pageId": 74928307, "source": "wikipedia.org", "summary": "Retrieved 9 February 2026. Ras Kucing Asli Indonesia. kucingkita.com. Accessed 15 August 2014. Mengenal Kucing Busok: Kucing Asli Pulau Raas. portalmadura" }, { "url": "https://en.wikipedia.org/wiki/Kue_lidah_kucing", "title": "Kue lidah kucing", "pageId": 64138534, "source": "wikipedia.org", "summary": "related to Kue lidah kucing . \"Resep Kue Lidah Kucing yang Bisa Dibikin Sambil Ngabuburit #dirumahaja\". kumparan. \"Kue Lidah Kucing , Si Gurih Warisan Belanda\"" }, { "url": "https://en.wikipedia.org/wiki/List_of_experimental_cat_breeds", "title": "List of experimental cat breeds", "pageId": 28660394, "source": "wikipedia.org", "summary": "is recognised by the Rare and Exotic Feline Registry. The Kucing Malaysia, or Piawaian Kucing Malaysia, is the first indigenous Malaysian cat breed. It" } ], "total": 929, "hasMore": true, "nextPage": 2 } ``` --- ## Yahoo Search **Category:** search-tools · **Slug:** `yahoo` **Detail page:** https://zpi.web.id/api/search-tools/yahoo Yahoo Search scraper — hasil pencarian, snippet, related searches. **Tags:** search, yahoo, web ### Search - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/search-tools:yahoo/search` - **Cache TTL:** 900s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | yes | Search keyword | | `count` | number | query | no | Results per page 1-50 (default 10) | | `page` | number | query | no | Result page (default 1, max 50) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/search-tools:yahoo/search?query=pizza&count=10&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/search-tools:yahoo/search?query=pizza&count=10&page=1", { 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/search-tools:yahoo/search?query=pizza&count=10&page=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 3, "query": "ihsg", "results": [ { "link": "https://www.idx.id/en/products/index/", "title": "Index [www.idx.id]", "snippet": "22 hours ago · Stock Index The Indonesia Stock Exchange (IDX) actively continues to innovate in the development through providing stock indices that can be used by all participants in Indonesia capital market. The index book \"IDX Stock Index Handbook\" contains a concise overview of the indices provided by the IDX.", "position": 1, "displayLink": "www.idx.id" }, { "link": "https://en.wikipedia.org/wiki/IDX_Composite", "title": "IDX Composite - Wikipedia", "snippet": "'Combined Stock Prices Index', IHSG) is a stock index of all stocks listed on the Indonesia Stock Exchange, IDX (formerly known as Jakarta Stock Exchange, JSX).", "position": 2, "displayLink": "en.wikipedia.org" }, { "link": "https://www.idxchannel.com/stocks?index=IHSG&indexdetail=mainidxindices", "title": "IDX Channel - Real Time Data Market & Chart Saham IHSG", "snippet": "Real-time Data Market, Chart, Data Historis, Analisis Dan Berita Saham Terkini Hari Ini | Market Stock - IDX Channel IHSG", "position": 3, "displayLink": "www.idxchannel.com" } ], "relatedSearches": [] } ``` ---