# ServerSearcher — API reference for AI agents
Base URL: https://www.serversearcher.com
## Plain-text search (recommended for LLMs)
```bash
curl -s "https://www.serversearcher.com/api/hostingsearch/search?format=text&type=dedicated&sortConfig=priceAsc&pageSize=20"
curl -s "https://www.serversearcher.com/api/hostingsearch/search?format=text&type=dedicated&maxPrice=200&minRam=32"
```
Response is UTF-8 plain text with:
- Active filters echoed at the top
- Total match count
- Each plan with provider page and affiliate checkout URLs
## JSON search API
```bash
curl -s "https://www.serversearcher.com/api/hostingsearch/search?type=dedicated&maxPrice=200&pageSize=20"
curl -s -X POST "https://www.serversearcher.com/api/hostingsearch/search" \
-H "Content-Type: application/json" \
-d '{"type":["dedicated"],"maxPrice":"200","pageSize":20,"sortConfig":"priceAsc"}'
```
## HTML search results table (secondary)
The page `GET /servers/search/?type=dedicated&maxPrice=200` server-renders a
`
` containing the first page of matching
plans (provider, plan, specs, location, monthly price). The table is in the HTML of
every request — no JavaScript is required to read it — and query parameters change
the server-rendered output. Use the `format=text` API above when you need more than
the first page.
## Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| format | string | Set to `text` for plain-text responses (GET only) |
| type | string[] | Plan types: `dedicated`, `virtual`, `cloud`, etc. |
| minRam | string | Minimum RAM (GB) |
| minCpuCores | string | Minimum CPU cores |
| cpuModel | string | CPU model substring (e.g. `EPYC`); `*` and `?` are wildcards |
| maxPrice | string | Maximum monthly price |
| location | string[] | City UUID, country code (e.g. `US`), or `US-new-york` |
| provider | string[] | Provider IDs |
| sortConfig | string | `priceAsc`, `priceDesc`, `ramAsc`, `ramDesc`, `cpuAsc`, `cpuDesc`, … |
| page | number | Page number (default 1) |
| pageSize | number | Results per page (default 50, max 150) |
| hasTerraform | boolean | `true` to filter Terraform-supported providers |
## JSON response shape
Both the GET and POST forms of `/api/hostingsearch/search` return the same object:
```json
{
"plans": [
{
"id": "…",
"name": "…",
"description": "…",
"type": "dedicated",
"cpuCores": 8,
"cpuThreads": 16,
"cpuModel": "…",
"cpuFrequency": 3.4,
"ram": 64,
"includedBandwidthQuota": 20,
"portSpeed": 1000,
"secondPortSpeed": null,
"additionalDetails": null,
"directPlanUrl": "…",
"minMonthlyCostUsd": 129.0,
"pricePerRamUsd": 2.02,
"pricePerCpuUsd": 16.13,
"pricePerRamCpuUsd": 0.25,
"disks": [{ "id": "…", "capacity": 960, "type": "NVME" }],
"gpus": [
{
"id": "…",
"model": "…",
"count": 1,
"vRAM": 24,
"architecture": "…",
"cudaCores": 10752
}
],
"pricing": [
{
"id": "…",
"monthlyCost": 119.0,
"hourlyCost": null,
"currency": "EUR",
"minimumTerm": 1,
"setupFee": null,
"billingCycle": "MONTHLY",
"usd": {
"amount": 129.0,
"rate": 0.92,
"rateAt": "…",
"fetchedAt": "…",
"source": "…"
}
}
],
"locations": [
{
"locationId": "…",
"qty": 4,
"name": "…",
"cityId": "…",
"city": "Amsterdam",
"countryIso": "NL",
"countryName": "Netherlands",
"facility": null
}
],
"promoCodes": [
{
"id": "…",
"code": "…",
"discountAmount": 50,
"discountType": "…",
"currency": "USD",
"credit": null,
"description": "…",
"expiresAt": "…"
}
],
"provider": {
"id": "…",
"name": "…",
"slug": "…",
"logo": "…",
"website": "…",
"terraformProvider": "OFFICIAL"
}
}
],
"totalResults": 412,
"page": 1,
"pageSize": 50,
"searchId": "…",
"exchangeRatesAvailable": true
}
```
`totalResults` is the count before pagination, so `Math.ceil(totalResults / pageSize)`
is the number of pages. `minMonthlyCostUsd` and the three `pricePer*Usd` fields are
normalised to USD and are the values the site sorts on; `exchangeRatesAvailable` is
`false` when the latest FX read failed, in which case those fields may be stale.
## MCP
Endpoint: `https://www.serversearcher.com/api/mcp`
Tool: `search_servers` with the same filter fields as the JSON API. The `provider`
filter additionally accepts org slugs (e.g. `runpod`), resolved server-side —
the JSON API itself takes provider ids only. `type` includes `gpu` here too.