OpenSERP Cloud Quickstart →

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/results envelope.
  • 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 curl from the request preview.

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