DuckDuckGo Videos API — Search Videos as JSON
Documentation menu
FetchLayer FetchLayer API

Search DuckDuckGo Videos

Videos for a query from DuckDuckGo Videos, in order: title, URL, description, duration, publisher (e.g. YouTube), uploader, publication date, view count, thumbnail and embed URL. Filter by region, safe search and time range. limit defaults to 30 and goes up to 120; hasMore says whether DuckDuckGo had more. Billing: each list page read counts as one request (about 60 videos a page).

POST /videos News, videos & images
https://api.fetchlayer.dev/duckduckgo/videos
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

query string required

The search query (1–500 characters).

region string optional

Region code: us-en, uk-en, de-de, fr-fr, es-es, it-it, jp-jp, in-en, au-en, ca-en, br-pt and 52 more (64 codes, DuckDuckGo’s own list), or wt-wt for no region. Results and rankings differ by region. (default: us-en)

safeSearch string optional

DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright. (default: moderate)

timeRange string optional

any, day, week, month or year: only results published within it. (default: any)

limit number optional

Videos to return (1–120), or -1 for the maximum. (default: 30)

format string optional

json or markdown. (default: json)

timeoutMs number optional

Time limit for each page read, in milliseconds (1000–120000).

Response Fields

videos

Search DuckDuckGo Videos

resultType string

search, rank-check, instant-answer, suggestions, news, videos or images.

requestedUrl string

The DuckDuckGo page this result corresponds to.

notes string[]

Caveats about this particular result — a list that may be incomplete, a depth DuckDuckGo could not reach, a later page that could not be read. Empty when there are none. Read it on every call.

transport string

The source this data came from. Always "duckduckgo".

scrapedAt string

ISO 8601 timestamp of when the data was collected.

query string

The query that was run.

region string

The region the results are for.

safeSearch string

The safe search level applied.

timeRange string

The time range applied.

videos object[]

The videos, in DuckDuckGo’s order.

videos[].position number

1-based position in the list.

videos[].title string

The video title.

videos[].url string

The video page URL.

videos[].description string

The description DuckDuckGo shows, or null.

videos[].duration string

As shown, e.g. "4:10", or null.

videos[].publisher string

Where the video is hosted, e.g. "YouTube".

videos[].uploader string

The channel or account that uploaded it, or null.

videos[].publishedAt string

Publication date, or null.

videos[].viewCount number

View count, or null.

videos[].thumbnailUrl string

Thumbnail image URL, or null.

videos[].embedUrl string

An embeddable player URL, or null.

videoCount number

Videos in this response.

pagesScraped number

List pages read. Each counts as one request against your plan.

hasMore boolean

Whether DuckDuckGo had more videos than were returned.

Request

curl -X POST "https://api.fetchlayer.dev/duckduckgo/videos" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"query":"bun javascript runtime","limit":10}'

Response

{
  "resultType": "videos",
  "requestedUrl": "https://duckduckgo.com/?q=bun+javascript+runtime&kl=us-en&kp=-1&ia=videos&iax=videos",
  "scrapedAt": "2026-09-15T19:47:53.729Z",
  "transport": "duckduckgo",
  "notes": [],
  "query": "bun javascript runtime",
  "region": "us-en",
  "safeSearch": "moderate",
  "timeRange": "any",
  "videos": [
    {
      "position": 1,
      "title": "Bun Tutorial - JavaScript Runtime (Node.js Alternative) [Full Course]",
      "url": "https://www.youtube.com/watch?v=eTB0UCDnMQo",
      "description": "Welcome this Bun crash course. Bun is a cutting-edge toolkit designed to supercharge your JavaScript and TypeScript applications.",
      "duration": "1:07:54",
      "publisher": "YouTube",
      "uploader": "freeCodeCamp.org",
      "publishedAt": "2023-10-12T13:51:09",
      "viewCount": 92615,
      "thumbnailUrl": "https://tse2.mm.bing.net/th/id/OVP.4UTPQsVjf3bNLNZ_9I6IIAHgFo?pid=Api",
      "embedUrl": "https://www.youtube.com/embed/eTB0UCDnMQo?autoplay=1"
    },
    {
      "position": 2,
      "title": "Bun Crash Course | JavaScript Runtime, Bundler & Transpiler",
      "url": "https://www.youtube.com/watch?v=U4JVw8K19uY",
      "description": "In this crash course, we will look at the Bun.js JavaScript runtime/bundler/toolkit.",
      "duration": "40:19",
      "publisher": "YouTube",
      "uploader": "Traversy Media",
      "publishedAt": "2023-09-18T12:52:41",
      "viewCount": 82976,
      "thumbnailUrl": "https://tse1.mm.bing.net/th/id/OVP.7LRij__maH4zQlFKGbcsWQHgFo?pid=Api",
      "embedUrl": "https://www.youtube.com/embed/U4JVw8K19uY?autoplay=1"
    }
  ],
  "videoCount": 10,
  "pagesScraped": 1,
  "hasMore": true
}