OpenSERP Cloud is the managed version of OpenSERP - same multi-engine search, no infrastructure to run. You call REST endpoints, we handle browsers, proxies, retries, and rate limits.
This page gets your first search running in under five minutes.
What you get
- One endpoint per web engine -
google,bing,yandex,baidu,duckduckgo,ecosia. - Megasearch - query several engines in a single call with deduplication.
- Any/Fast routing - let OpenSERP choose the first healthy engine for a 1-credit response.
- Image search - single-engine image search on every supported engine, plus Any/Fast/Mega image endpoints.
- JSON responses - a compact
query/meta/resultsenvelope. - Pay-as-you-go credits - no monthly minimum, no per-engine subscriptions.
If you already use the OpenSERP OSS server, Cloud is the managed API at https://api.openserp.org with an Authorization header.
1. Create an API key
Sign in to the dashboard and open API keys. Click Create key, name it (e.g. staging, prod-worker), and copy the secret. It looks like:
osk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
You only see the full secret once. Store it in your secrets manager or .env; never commit it.
The dashboard’s Search Playground is the fastest way to try the API without writing any code. Pick the key, type a query, hit run, and copy the working
curlfrom the request preview.
2. Run your first search
Replace YOUR_API_KEY with the secret you just copied.
curl
curl "https://api.openserp.org/v1/google/search?text=openserp&limit=5" \
-H "Authorization: Bearer YOUR_API_KEY"
JavaScript (fetch)
const res = await fetch("https://api.openserp.org/v1/google/search?text=openserp&limit=5", {
headers: { Authorization: `Bearer ${process.env.OPENSERP_KEY}` },
});
const data = await res.json();
console.log(data.results);
Python (requests)
import os
import requests
resp = requests.get(
"https://api.openserp.org/v1/google/search",
params={"text": "openserp", "limit": 5},
headers={"Authorization": f"Bearer {os.environ['OPENSERP_KEY']}"},
timeout=30,
)
resp.raise_for_status()
print(resp.json()["results"])
Go
req, _ := http.NewRequest("GET", "https://api.openserp.org/v1/google/search?text=openserp&limit=5", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("OPENSERP_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
io.Copy(os.Stdout, resp.Body)
3. Inspect the response
Every search returns the same envelope. Trimmed example:
{
"query": { "text": "openserp", "engines_requested": ["google"] },
"meta": {
"request_id": "019dc6c1-da45-706e-a57c-d671fa2862ee",
"requested_at": "2026-05-12T18:30:00Z",
"took_ms": 642
},
"results": [
{
"rank": 1,
"title": "OpenSERP - open-source SERP API",
"url": "https://openserp.org/",
"description": "OpenSERP is an API and CLI for search engine results...",
"ad": false,
"engine": "google"
}
]
}
Any/Fast responses also include meta.engine_used, meta.engines_tried, and the X-Engine-Used header.
The full schema is in the Endpoints reference.
4. Check what you spent
Two response headers tell you the cost of the call:
| Header | Meaning |
|---|---|
X-Credits-Used |
Credits charged for this request |
X-Credits-Remaining |
Balance after this request |
X-Engine-Used |
Engine used by Any/Fast routing |
X-Credits-Used is 0 for error responses you were not charged for. See Pricing & credits for the full table.
Next steps
- Authentication - header format, key rotation, scopes.
- Endpoints reference - every endpoint and parameter.
- Pricing & credits - dynamic billing and credit headers.
- Errors & rate limits - retry and failure handling.