# Lite (/search/lite)

`POST https://api.keirolabs.cloud/api/v2/search/lite`

Cost: 0.0375 credits on plans · 1 pay as you go · Latency: ~0.3-1 s

Cost-efficient raw SERP (web, images, videos) — title, URL and snippet per result. Content mode (page text, prompt ranking, and region/date/domain filters) is temporarily unavailable; Lite is SERP-only right now. Use Search + Content for page text.

**When to use it.** Use Lite for the cheapest raw SERP — link discovery, quick result lists, and image/video feeds. Content extraction, prompt ranking, and region/date/domain filters are temporarily unavailable on this endpoint.

**When not to.** Don't use Lite when you need page text (use Search+Content), a synthesized cited answer (use Answer), or multi-iteration research (use Web Agent).

## Request

**cURL**

```bash
curl -X POST https://api.keirolabs.cloud/api/v2/search/lite \
  -H "Authorization: Bearer $KEIRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "open source llm observability", "count": 10}'
```

**Python**

```python
import os, requests

res = requests.post(
    "https://api.keirolabs.cloud/api/v2/search/lite",
    headers={"Authorization": f"Bearer {os.environ['KEIRO_API_KEY']}"},
    json={
        "query": "open source llm observability",
        "count": 10
    },
)
print(res.json())
```

**Node.js**

```js
const res = await fetch("https://api.keirolabs.cloud/api/v2/search/lite", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.KEIRO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "query": "open source llm observability",
    "count": 10
  }),
});
console.log(await res.json());
```

## Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `query` | string | yes | The search query (1-500 chars). |
| `type` | enum | no | Search tab: web, images, videos. |
| `count` | integer | no | Max results to return. Range: 1-30 (server-clamped). Alias: maxResults. |
| `language` | string | no | Optional language tag, e.g. "de-DE". |
| `content` | boolean | no | TEMPORARILY UNSUPPORTED — content:true returns 400 while Lite is SERP-only. Use /api/v2/search/content for page text. |
| `prompt` | string | no | TEMPORARILY UNSUPPORTED — returns 400 while Lite is SERP-only. |

## Response

```json title="200 OK"
{
  "query": "keirolabs",
  "type": "web",
  "content": false,
  "count": 2,
  "results": [
    {
      "title": "KeiroLabs \u2014 pricing",
      "url": "https://keirolabs.cloud/pricing",
      "domain": "keirolabs.cloud",
      "snippet": "Plans start at $29/mo\u2026",
      "position": 1
    },
    {
      "title": "KeiroLabs Docs",
      "url": "https://platform.keirolabs.cloud/docs",
      "domain": "platform.keirolabs.cloud",
      "snippet": "Quick start, authentication, endpoints\u2026",
      "position": 2
    }
  ],
  "creditsCharged": 0.0375,
  "creditsRemaining": 1141
}
```

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `results` | array | no | List of results in SERP order. |
| `results[].title` | string | no | Result title. |
| `results[].url` | string | no | Page URL. |
| `results[].domain` | string | no | Result domain. |
| `results[].snippet` | string | no | Short text excerpt from the search engine. |
| `results[].position` | integer | no | 1-based rank in the SERP. |
| `results[].score` | number | no | Relevance score (0-1) when the engine supplies one. |
| `query` | string | no | The query that was searched. |
| `type` | string | no | Search tab echoed back (web, images, videos). |
| `count` | integer | no | Number of results returned. |
| `content` | boolean | no | Always false while Lite is SERP-only. |
| `creditsCharged` | number | no | Credits deducted (0.0375 on a plan, 1 on signup or pack credits). |
| `creditsRemaining` | number | no | Remaining credit balance after this request. |

## Errors

| Status | Code | Cause | Fix |
| --- | --- | --- | --- |
| `400` | `VALIDATION_ERROR` | Missing/invalid query, or query > 500 chars | Ensure query is a non-empty string (1-500 chars). |
| `400` | `CONTENT_MODE_DISABLED` | content:true or prompt supplied while Lite is SERP-only | Omit content/prompt, or use /api/v2/search/content for page text. |
| `401` | `UNAUTHORIZED` | Missing or invalid API key | Check your Authorization: Bearer header. |
| `402` | `INSUFFICIENT_CREDITS` | Not enough credits | Buy more credits or upgrade at /dashboard/billing. |
| `429` | `RATE_LIMIT_EXCEEDED` | Too many requests | Check X-RateLimit-Remaining. Wait for Retry-After seconds. |
| `500` | `LITE_NOT_CONFIGURED` | Server has no SE_ROUTER_TOKEN | Server-side config issue — contact support. |
| `502` | `SEARCH_UNAVAILABLE` | Search backend unreachable | Credits auto-refunded. Retry; if persistent, contact support. |

## Rate limits

| Tier | Limit |
| --- | --- |
| Free | 15/min |
| Starter | 60/min |
| Pro | 120/min |
| Startup | 240/min |
| Enterprise | 300/min |

Over the limit you get a `429`. See [Rate limits](/rate-limits) for headers and backoff.