NestDaddy API Reference

One API key. Access to real-time web search, global news, tech news, financial news, and country-specific news. All endpoints return clean structured JSON — no scraping, no proxies.

Base URL
nestdaddy.com
All HTTPS
Format
JSON
CORS enabled
Auth
API Key
Query param or header
Latency
<200ms
Redis-cached

Available APIs

Authentication

Every request must include your API key via the key query parameter or the X-API-Key request header. The same key works across all API endpoints.

🔑
Get your API key from the Dashboard → API Keys tab. Each key is tied to a subscription and tracks its own monthly usage.
⚠️
Never expose your API key in client-side code. For browser-embedded widgets, use the Widget Builder instead — it handles auth server-side.
# Pass API key as query parameter
GET /api/v1/search?key=nd_live_xxxxxxxxxxxxxxxx&q=artificial+intelligence
GET /api/v1/news/global?key=nd_live_xxxxxxxxxxxxxxxx&limit=10
# Pass API key as request header (recommended)
GET /api/v1/news/tech
X-API-Key: nd_live_xxxxxxxxxxxxxxxx

Quick Start

Make your first API call in under 60 seconds. Replace YOUR_API_KEY with the key from your dashboard.

# Web Search
curl "https://nestdaddy.com/api/v1/search?key=YOUR_API_KEY&q=python+tutorial&limit=5"
# Global News (latest headlines)
curl "https://nestdaddy.com/api/v1/news/global?key=YOUR_API_KEY&limit=10"

# Tech News
curl "https://nestdaddy.com/api/v1/news/tech?key=YOUR_API_KEY&limit=10"

# Malaysia News
curl "https://nestdaddy.com/api/v1/news/malaysia?key=YOUR_API_KEY&limit=10"
import requests

API_KEY = "YOUR_API_KEY"

# Search
search = requests.get("https://nestdaddy.com/api/v1/search", params={
    "key": API_KEY, "q": "AI news", "limit": 5
})

# News
news = requests.get("https://nestdaddy.com/api/v1/news/global", params={
    "key": API_KEY, "limit": 10
})

for article in news.json()["articles"]:
    print(article["title"], "-", article["url"])
const API_KEY = "YOUR_API_KEY";

// Search
const search = await fetch(
  `https://nestdaddy.com/api/v1/search?key=${API_KEY}&q=latest+tech+news&limit=10`
);

// News
const news = await fetch(
  `https://nestdaddy.com/api/v1/news/tech?key=${API_KEY}&limit=10`
);
const data = await news.json();
data.articles.forEach(a => console.log(a.title));
$apiKey = 'YOUR_API_KEY';

// News
$url = "https://nestdaddy.com/api/v1/news/global?" . http_build_query([
    'key'   => $apiKey,
    'limit' => 10,
]);
$data = json_decode(file_get_contents($url), true);
foreach ($data['articles'] as $a) {
    echo $a['title'] . "\n";
}

All Endpoints

All endpoints use HTTPS GET. Parameters are passed as URL query strings.

GET https://nestdaddy.com/api/v1/search Web Search
GET https://nestdaddy.com/api/v1/news/global Global News
GET https://nestdaddy.com/api/v1/news/tech Tech News
GET https://nestdaddy.com/api/v1/news/financial Financial News
GET https://nestdaddy.com/api/v1/news/{country} Country News — malaysia / singapore / indonesia / thailand / vietnam / philippines / korea
GET https://nestdaddy.com/api/v1/images Image Search

Search API

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

Parameters

ParameterTypeRequiredDefaultDescription
keystringRequiredYour NestDaddy API key
qstringRequiredSearch query (min 2 chars)
limitintegerOptional10Results to return. Min: 1, Max: 50
sortstringOptionalrelevancerelevance BM25 ranking  |  date newest first
langstringOptionalISO 639-1 code — en, ms, zh, etc. Omit for all

Response

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

News APIs

Real-time news articles from curated global sources. One endpoint per category — same parameters across all news APIs.

Parameters

ParameterTypeRequiredDefaultDescription
keystringRequiredYour NestDaddy API key
limitintegerOptional10Articles to return. Max: 50
qstringOptionalFilter articles by keyword
langstringOptionalFilter by language: en, ms, zh, etc.
sortstringOptionaldatedate newest first  |  relevance if query given

Response

200 OK — News ● 200 OK
{
  "success":  true,
  "api":      "news_global",
  "count":    10,
  "articles": [
    {
      "title":      "OpenAI Launches New Model",
      "url":        "https://techcrunch.com/openai-new-model",
      "source":     "TechCrunch",
      "published":  "2025-04-28T10:00:00Z",
      "thumbnail":  "https://example.com/image.jpg",
      "summary":    "OpenAI announced a new frontier model...",
      "language":   "en",
      "category":   "global"
    }
  ],
  "quota": { "used": 120, "limit": 15000, "remaining": 14880 }
}
import requests

API_KEY = "YOUR_API_KEY"

# Get latest tech news
r = requests.get("https://nestdaddy.com/api/v1/news/tech", params={
    "key": API_KEY, "limit": 10
})
for article in r.json()["articles"]:
    print(article["title"])

# Filter Malaysia news by keyword
r2 = requests.get("https://nestdaddy.com/api/v1/news/malaysia", params={
    "key": API_KEY, "q": "ekonomi", "lang": "ms"
})
const API_KEY = "YOUR_API_KEY";

// Financial news
const res = await fetch(
  `https://nestdaddy.com/api/v1/news/financial?key=${API_KEY}&limit=10`
);
const { articles } = await res.json();
articles.forEach(a => console.log(a.title, a.source));
# Global news
curl "https://nestdaddy.com/api/v1/news/global?key=YOUR_API_KEY&limit=5"

# Singapore news
curl "https://nestdaddy.com/api/v1/news/singapore?key=YOUR_API_KEY&limit=10"

Errors

All errors return a JSON body with error and message fields. Applies to all endpoints.

Error Response ● 4xx / 5xx
{
  "error":   "Quota exceeded",
  "message": "Monthly quota of 15,000 requests reached. Upgrade your plan."
}
HTTP StatusErrorCause
400Missing queryThe q parameter is absent or empty (Search API)
400Query too shortQuery is less than 2 characters
401Invalid API keyThe key is missing, wrong, or deactivated
401Quota exceededMonthly request quota has been reached — upgrade plan
401Subscription inactiveSubscription is paused or expired
429Rate limitToo many requests per minute — slow down and retry
500Internal errorServer-side error — contact [email protected]

Rate Limits

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

Free / Basic
30 / min
Requests per minute
Starter
60 / min
Requests per minute
Growth
120 / min
Requests per minute
Pro
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.

Pricing & Monthly Quota

Each plan includes a monthly request quota returned in every API response under the quota object. Quotas reset at the start of each billing cycle.

News APIs (Global / Tech / Financial / Local)

PlanMonthly CallsRate LimitPrice
Free1,00030 / min$0
Basic15,00030 / min$9.99 / mo
Starter50,00060 / min$19 / mo
Growth150,000120 / min$49 / mo
Pro500,000300 / min$99 / mo

Country News (per country — Malaysia, Singapore, Indonesia, Thailand, Vietnam, Philippines, Korea)

PlanMonthly CallsRate LimitPrice
Free1,00030 / min$0
Basic15,00030 / min$9.99 / mo
Starter50,00060 / min$24 / mo
Growth150,000120 / min$49 / mo
Pro500,000300 / min$99 / mo

Web Search & Images API

PlanMonthly CallsRate LimitPrice
Free1,00030 / min$0
Starter30,00060 / min$9.99 / mo
Growth100,000120 / min$24.99 / mo
Pro500,000300 / min$79.99 / mo

Need more? Contact us for custom enterprise pricing.