Overview Documentation

Search API Reference

Query NestDaddy's web index and get clean, structured JSON results — no scraping, no proxies, no Google quotas. BM25 relevance ranking with language and date filtering.

Max Results / Request
50
Per API call
Response Format
JSON
CORS enabled
Latency (cached)
<100ms
Redis-cached queries

Authentication

Every request must include your API key via the key query parameter or the X-API-Key request header.

🔑
Get your API key from the Dashboard → API Keys tab. Each key tracks its own usage and quota.
⚠️
Never expose your API key in client-side code. For browser-embedded widgets, use the Widget Builder instead — it handles auth server-side.
# Passing API key as query parameter
GET /api/v1/search?key=nd_live_xxxxxxxxxxxxxxxx&q=artificial+intelligence
# Passing API key as request header
GET /api/v1/search?q=artificial+intelligence
X-API-Key: nd_live_xxxxxxxxxxxxxxxx

Quick Start

Make your first search in under 60 seconds.

curl "https://nestdaddy.com/api/v1/search?key=YOUR_API_KEY&q=python+tutorial&limit=5"
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://nestdaddy.com/api/v1/search"

response = requests.get(BASE_URL, params={
    "key":   API_KEY,
    "q":     "python tutorial",
    "limit": 10,
    "sort":  "relevance",
})

data = response.json()
for result in data["results"]:
    print(result["title"], "-", result["url"])
const API_KEY = "YOUR_API_KEY";
const query   = "python tutorial";

const url = `https://nestdaddy.com/api/v1/search?key=${API_KEY}&q=${encodeURIComponent(query)}&limit=10`;

const res  = await fetch(url);
const data = await res.json();

data.results.forEach(r => console.log(r.title, r.url));
$apiKey = 'YOUR_API_KEY';
$url    = "https://nestdaddy.com/api/v1/search?" . http_build_query([
    'key'   => $apiKey,
    'q'     => 'python tutorial',
    'limit' => 10,
]);

$data = json_decode(file_get_contents($url), true);
foreach ($data['results'] as $r) {
    echo $r['title'] . " - " . $r['url'] . "\n";
}

Endpoint

GET https://nestdaddy.com/api/v1/search

All requests use HTTPS GET. Parameters are passed as URL query strings. CORS is enabled — suitable for browser-based applications (though protect your key server-side).

Parameters

ParameterTypeRequiredDefaultDescription
key string Required Your NestDaddy API key
q string Required Search query. Minimum 2 characters.
limit integer Optional 10 Number of results to return. Min: 1, Max: 50.
sort string Optional relevance relevance — BM25 score ranking. date — newest first.
lang string Optional ISO 639-1 language code. E.g. en, ms, zh. Omit for all languages.

Response

Successful responses return HTTP 200 with a JSON body.

Response — 200 OK ● 200 OK
{
  "success":  true,
  "api":      "search",
  "query":    "python tutorial",
  "sort_by":  "relevance",
  "count":    10,
  "results": [
    {
      "title":          "Python Tutorial for Beginners",
      "url":            "https://example.com/python-tutorial",
      "snippet":        "Learn Python programming from scratch...",
      "domain":         "example.com",
      "language":       "en",
      "published_date": "2024-08-15",
      "score":          18.42
    }
  ],
  "quota": {
    "used":      1241,
    "limit":     30000,
    "remaining": 28759
  }
}

Result Object Fields

FieldTypeDescription
titlestringPage title
urlstringFull URL of the result page
snippetstringMeta description or extract (max 200 chars)
domainstringRoot domain, e.g. example.com
languagestringISO 639-1 detected language
published_datestringPublication date (ISO 8601) if available, else empty string
scorefloatBM25 relevance score — higher is more relevant

Quota Object Fields

FieldTypeDescription
usedintegerTotal requests used this billing period
limitinteger | nullMonthly quota limit. null = unlimited
remaininginteger | nullRequests remaining this period. null = unlimited

Errors

All errors return a JSON body with error and message fields.

Error Response ● 4xx / 5xx
{
  "error":   "Missing query",
  "message": "Query parameter \"q\" is required"
}
HTTP StatusErrorCause
400Missing queryThe q parameter is absent or empty
400Query too shortQuery is less than 2 characters
401Invalid API keyThe key is missing, wrong, or deactivated
401Quota exceededMonthly request quota has been reached
401Subscription inactiveYour subscription is paused or expired
500Internal errorServer-side error — contact [email protected]

Code Examples

Search with date sort

response = requests.get("https://nestdaddy.com/api/v1/search", params={
    "key":   API_KEY,
    "q":     "machine learning 2024",
    "limit": 20,
    "sort":  "date",
})
const res = await fetch(
  `https://nestdaddy.com/api/v1/search?key=${API_KEY}&q=machine+learning+2024&limit=20&sort=date`
);
const data = await res.json();

Error handling

response = requests.get(BASE_URL, params={"key": API_KEY, "q": query})

if response.status_code == 200:
    data = response.json()
    print(f"Found {data['count']} results")
elif response.status_code == 401:
    print("Auth error:", response.json()["message"])
else:
    print("Error:", response.status_code)
const res  = await fetch(url);
const data = await res.json();

if (!res.ok) {
  console.error("API error", res.status, data.message);
  return;
}
console.log(`Found ${data.count} results`);

Pagination

The Search API returns up to 50 results per request. There is no page offset parameter — use sort=date with date-range keywords in your query, or combine multiple targeted queries.

💡
Tip: For bulk data collection, the Images API supports true pagination with the page parameter and up to 100 results per request.

Language Filter

Use the lang parameter to restrict results to a specific language.

# English only
curl "https://nestdaddy.com/api/v1/search?key=YOUR_KEY&q=technology&lang=en"

# Malay only
curl "https://nestdaddy.com/api/v1/search?key=YOUR_KEY&q=teknologi&lang=ms"
# Common language codes: en, ms, zh, ar, fr, de, es, ja
response = requests.get(BASE_URL, params={
    "key": API_KEY, "q": "news", "lang": "en"
})

Rate Limits

Rate limits apply per API key per minute. Exceeding the limit returns 429 Too Many Requests.

Starter Plan
60 / min
Requests per minute
Growth Plan
120 / min
Requests per minute
Pro Plan
300 / min
Requests per minute
⏱️
Implement exponential backoff when you receive a 429. Wait at least 1 second before retrying, doubling each retry up to 60 seconds.

Monthly Quota

Each plan includes a monthly request quota returned in every API response under the quota object.

PlanMonthly RequestsMax per RequestPrice
Free Trial1,00010$0 / 7 days
Starter30,00050$9.99 / mo
Growth100,00050$24.99 / mo
Pro500,00050$79.99 / mo

Need a custom plan? Contact us for enterprise pricing.