# DuckDuckGo Search API — duckduckgo.com results as JSON: organic results, ads with sitelinks, knowledge panel, related searches, inline news, videos, images and shopping ads, spelling correction; plus DuckDuckGo News, Images, Videos, Maps (local places), autocomplete and Instant Answers. Any region, safe-search level and time range, with pagination.

> A DuckDuckGo results page for a query: organic results, text ads with sitelinks, the knowledge panel, related searches, inline news, videos, images and shopping ads, and the spelling correction. Region, safe search, time range and pagination.
> ReefAPI engine `duckduckgo` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/duckduckgo/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/duckduckgo/v1/search — 2 credits
A DuckDuckGo results page for a query: organic results, text ads with sitelinks, the knowledge panel, related searches, inline news, videos, images and shopping ads, and the spelling correction. Region, safe search, time range and pagination.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `region` (string, optional, default "wt-wt") — Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.
- `safe` (enum, optional, default "moderate") — Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted. [one of: strict, moderate, off]
- `time` (string, optional) — Only results from the last day (d), week (w), month (m) or year (y), or a custom range YYYY-MM-DD..YYYY-MM-DD (either end may be left open).
- `page` (integer, optional, default 1) — Result page, 1-based. Page 1 holds 10 organic rows, later pages 15 (the source's own page sizes).
- `start` (integer, optional) — Alternative to page: the raw result offset DuckDuckGo uses (0, 10, 25, 40 …).
- `source` (enum, optional, default "auto") — Which DuckDuckGo page to read. `auto` is the most complete and the most reliable. [one of: auto, js, html, lite]

**Returns:** search_parameters{q, region, safe, time, page, offset, source}, search_information{source, organic_count}, organic_results[{position, title, link, displayed_link, domain, site_name, snippet, date, favicon, rich_snippet{label: value}, video{duration, views}}], ads[{position, block_position, title, link (advertiser URL), tracking_link, displayed_link, domain, snippet, sitelinks[{title, link, tracking_link}], callouts[], logo}], knowledge_graph{title, type, entity_type, description, source, source_link, image, official_website, attributes[{label, value}], profiles[{network, id}], related_topics[], results[]}, related_searches[{query, link}], news_results[{position, title, link, snippet, source, date, relative_date, thumbnail}], inline_videos[], inline_images[], shopping_ads[{position, title, price, sale_price, brand, merchant, link, tracking_link, thumbnail}], spelling{original_query, suggested_query, kind}, pagination{current_page, next_page, next_start}

**Example request body:**
```json
{
  "q": "best laptop 2026"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/news — 1 credit
DuckDuckGo News for a query: headline, link, excerpt, publisher, publication time and image.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `region` (string, optional, default "wt-wt") — Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.
- `safe` (enum, optional, default "moderate") — Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted. [one of: strict, moderate, off]
- `time` (string, optional) — Only articles from the last day (d), week (w) or month (m).
- `page` (integer, optional, default 1) — Result page, 1-based (source page size: news 30, videos 60, images 100).

**Returns:** news_results[{position, title, link, snippet, source, date (ISO 8601 UTC), relative_date, thumbnail}], search_parameters, pagination{current_page, next_page}

**Example request body:**
```json
{
  "q": "nvidia"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/images — 2 credits
DuckDuckGo Images for a query with size, colour, type, layout, licence and time filters: full image URL, thumbnail, source page, dimensions.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `region` (string, optional, default "wt-wt") — Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.
- `safe` (enum, optional, default "moderate") — Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted. [one of: strict, moderate, off]
- `size` (enum, optional) — Image size filter. [one of: Small, Medium, Large, Wallpaper]
- `color` (enum, optional) — Colour filter ('color' = colour images only, 'Monochrome' = black & white). [one of: color, Monochrome, Red, Orange, Yellow, Green, Blue, Purple, Pink, Brown, Black, Gray, Teal, White]
- `type` (enum, optional) — Image type filter. [one of: photo, clipart, gif, transparent, line]
- `layout` (enum, optional) — Aspect filter. [one of: Square, Tall, Wide]
- `license` (enum, optional) — Usage-rights filter (Public = public domain, Share / ShareCommercially / Modify / ModifyCommercially = free to share or modify, any = all Creative Commons). [one of: any, Public, Share, ShareCommercially, Modify, ModifyCommercially]
- `time` (enum, optional) — Only images first seen in the last day / week / month / year. [one of: d, w, m, y]
- `page` (integer, optional, default 1) — Result page, 1-based (source page size: news 30, videos 60, images 100).

**Returns:** images_results[{position, title, image, thumbnail, source_page, width, height, domain, format, discovered_at}], search_parameters, pagination

**Example request body:**
```json
{
  "q": "red panda"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/videos — 2 credits
DuckDuckGo Videos for a query with time, resolution, length and licence filters: video link, duration, publisher, uploader, publication date, view count, thumbnail, embed URL.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `region` (string, optional, default "wt-wt") — Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.
- `safe` (enum, optional, default "moderate") — Safe search level (DuckDuckGo's own three levels). 1 / -1 / -2 also accepted. [one of: strict, moderate, off]
- `time` (enum, optional) — Only videos published in the last day / week / month. [one of: d, w, m]
- `resolution` (enum, optional) — Video resolution filter. [one of: high, standard]
- `duration` (enum, optional) — Video length filter. [one of: short, medium, long]
- `license` (enum, optional) — Video licence filter. [one of: creative_commons, youtube]
- `page` (integer, optional, default 1) — Result page, 1-based (source page size: news 30, videos 60, images 100).

**Returns:** video_results[{position, title, link, description, duration, published_at, publisher, uploader, views, embed_url, thumbnail, motion_thumbnail}], search_parameters, pagination

**Example request body:**
```json
{
  "q": "how to tie a tie"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/maps — 2 credits
DuckDuckGo Maps (local places) for a query inside a bounding box or around a point: name, category, address, coordinates, phone, website, rating, review count, price level, opening hours, recent reviews and the listing source (Tripadvisor, Yelp, Apple Maps).

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `bbox` (string, optional) — Search area as lat_top_left,lon_top_left,lat_bottom_right,lon_bottom_right. Give bbox or lat+lon.
- `lat` (number, optional) — Latitude of the point to search around (with lon).
- `lon` (number, optional) — Longitude of the point to search around (with lat).
- `strict_bbox` (boolean, optional, default true) — With bbox: only places inside the box (true, default) or also nearby (false).

**Returns:** local_results[{position, title, place_id, category, address, address_lines[], city, country_code, gps_coordinates{latitude, longitude}, timezone, phone, website, rating, reviews, price, is_closed, open_now, hours{Mon..Sun}, thumbnail, listing_source, listing_link, sources[{name, place_id}], profiles{}, review_details[{rating, snippet, date, user}]}], more_results_link, search_parameters

**Example request body:**
```json
{
  "q": "coffee",
  "bbox": "48.90,2.28,48.82,2.42"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/autocomplete — 1 credit
DuckDuckGo's search suggestions for a partial query.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `region` (string, optional, default "wt-wt") — Region as DuckDuckGo's kl code: wt-wt (no region, default), us-en, uk-en, ca-en, au-en, in-en, de-de, fr-fr, es-es, it-it, nl-nl, br-pt, mx-es, ar-es, jp-jp, kr-kr, tr-tr, ru-ru, pl-pl, se-sv, ch-de, … (DuckDuckGo's own list; other codes are rejected). DuckDuckGo also localises by the caller's location, so the request leaves from the region's own country for us, uk, ca, de, fr, es, it, br and th regions, from Germany for other European regions (France for be-fr and ch-fr) and from the US otherwise, wt-wt included; meta.exit_country names it.

**Returns:** suggestions[{position, suggestion}], q, region

**Example request body:**
```json
{
  "q": "pyth"
}
```

### POST https://api.reefapi.com/duckduckgo/v1/instant_answer — 1 credit
DuckDuckGo's official Instant Answer for a query: Wikipedia-style abstract, direct answer, definition, infobox attributes, social profiles, related topics. Not every query has one.

**Parameters:**
- `q` (string, required) — Search query, any language. DuckDuckGo operators work: site:, "exact phrase", -exclude, filetype:, intitle:.
- `disambiguation` (boolean, optional, default false) — false (default): the main article when the name is ambiguous ("Berlin" → the city). true: DuckDuckGo's list of meanings instead (related_topics).

**Returns:** instant_answer{title, type, entity_type, description, source, source_link, image, official_website, answer, answer_type, definition, definition_source, definition_link, redirect, attributes[{label, value}], profiles[{network, id}], related_topics[{text, link, icon, group}], results[{text, link}]}

**Example request body:**
```json
{
  "q": "Albert Einstein"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=duckduckgo
- Human docs page: https://reefapi.com/docs/duckduckgo
- Overview page: https://reefapi.com/duckduckgo-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
