{
  "openapi": "3.1.0",
  "info": {
    "title": "DuckDuckGo Search API",
    "version": "1.0.0",
    "description": "DuckDuckGo web results, rank checks, instant answers, search suggestions, news and videos, exposed through FetchLayer as structured JSON."
  },
  "servers": [
    {
      "url": "https://api.fetchlayer.dev/duckduckgo"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "API Key",
        "description": "Send your FetchLayer key as Authorization: Bearer ss-your-key."
      }
    }
  },
  "paths": {
    "/search": {
      "post": {
        "operationId": "search",
        "tags": [
          "Web search"
        ],
        "summary": "Search DuckDuckGo web results",
        "description": "Ranked organic web results for a query: each result’s position, title, URL, the URL as printed under the title, domain, snippet and the date DuckDuckGo shows beside it. Ads shown with the results come back separately in ads and never take a position, so positions count organic results only; a URL DuckDuckGo repeats on a later page is counted once, so positions have no gaps and no duplicates. When DuckDuckGo shows a summary box above the results it comes back as zeroClick. limit defaults to 10, the first page, and goes up to 200; DuckDuckGo lists at most about 190–200 organic results for any query and then stops, at which point endOfResults is true. Continue a search with nextCursor, sent with the same query, region, safeSearch and timeRange — a cursor sent with different filters is a 400. Results reflect a US searcher (us-en) unless you set region, and rankings differ between regions. A query that matches nothing is a 200 with an empty results list, not an error. Set includeSitelinks to also get the links shown under first-page results. DuckDuckGo publishes no total-result count. Billing: each result page read counts as one request (pagesScraped) — 10 results on the first page and up to 15 on each after; a short first page may mean one more page is read to reach limit, and a sitelinks read adds one. To find where one site ranks, use rank-check instead: it costs one request at any depth.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query, as you would type it (1–500 characters)."
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "safeSearch": {
                    "type": "string",
                    "description": "DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright.",
                    "example": "moderate"
                  },
                  "timeRange": {
                    "type": "string",
                    "description": "any, day, week, month or year: only results published within it.",
                    "example": "any"
                  },
                  "limit": {
                    "type": "number",
                    "description": "Organic results to return (1–200), or -1 for the maximum.",
                    "example": "10"
                  },
                  "pages": {
                    "type": "number",
                    "description": "Most result pages to read in this request (1–20), or -1. Defaults to as many as limit needs. Each page read counts as one request."
                  },
                  "cursor": {
                    "type": "string",
                    "description": "A previous response’s nextCursor. Send it with the same query, region, safeSearch and timeRange."
                  },
                  "includeSitelinks": {
                    "type": "boolean",
                    "description": "Also return the links DuckDuckGo shows under first-page results (sitelinks). Reading them adds one page to pagesScraped, only when they were actually read; when they can’t be, a note says so and nothing extra is billed.",
                    "example": "false"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "open source crm",
                    "limit": 10
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the results are for."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level applied."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range applied."
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "position": {
                            "type": "number",
                            "description": "1-based position among organic results, counted across pages. Ads never take a position."
                          },
                          "page": {
                            "type": "number",
                            "description": "The result page it appeared on."
                          },
                          "title": {
                            "type": "string",
                            "description": "The result title."
                          },
                          "url": {
                            "type": "string",
                            "description": "The destination URL."
                          },
                          "displayedUrl": {
                            "type": "string",
                            "description": "The URL as printed under the title, or null."
                          },
                          "domain": {
                            "type": "string",
                            "description": "Hostname of url."
                          },
                          "snippet": {
                            "type": "string",
                            "description": "The text under the result, or null."
                          },
                          "date": {
                            "type": "string",
                            "description": "The date DuckDuckGo shows beside the result, as given (e.g. 2026-08-03T00:00:00), or null. No time zone is stated, so none is added."
                          },
                          "sitelinks": {
                            "type": [
                              "array",
                              "null"
                            ],
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "With includeSitelinks, the links shown under a first-page result, each with title, url and snippet; null where there are none or includeSitelinks is off."
                          }
                        }
                      },
                      "description": "Organic results, in ranked order."
                    },
                    "resultCount": {
                      "type": "number",
                      "description": "Results in this response. DuckDuckGo publishes no total-result count anywhere; page with nextCursor until endOfResults."
                    },
                    "ads": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "Ads shown with the results, never ranked: page, title, url (the advertiser’s landing page, when stated), domain, displayedUrl, snippet."
                    },
                    "zeroClick": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "The summary box above the results — heading, abstract, url, source (e.g. \"Wikipedia\"), imageUrl — or null."
                    },
                    "endOfResults": {
                      "type": "boolean",
                      "description": "DuckDuckGo has no further results for this query."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "Result pages read. Each counts as one request against your plan. When the first page comes back short, one more may be read to reach limit, and a sitelinks read adds one."
                    },
                    "pagesRequested": {
                      "type": "number",
                      "description": "The most pages this request would have read. Compare with pagesScraped."
                    },
                    "nextCursor": {
                      "type": "string",
                      "description": "Pass back as cursor, with the same query and filters, to continue. null at the end."
                    },
                    "hasNextPage": {
                      "type": "boolean",
                      "description": "Whether there is more to fetch."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "search",
                      "requestedUrl": "https://duckduckgo.com/?q=open+source+crm&kl=us-en&kp=-1",
                      "scrapedAt": "2026-09-15T19:47:52.280Z",
                      "transport": "duckduckgo",
                      "notes": [],
                      "query": "open source crm",
                      "region": "us-en",
                      "safeSearch": "moderate",
                      "timeRange": "any",
                      "results": [
                        {
                          "position": 1,
                          "page": 1,
                          "title": "Best Open Source CRM Software for 2026: Top 8 Picks Reviewed",
                          "url": "https://crm.org/crmland/open-source-crm",
                          "displayedUrl": "crm.org/crmland/open-source-crm",
                          "domain": "crm.org",
                          "snippet": "Open source CRMs give you full control over your data, workflows, and hosting. We reviewed 8 top tools for flexibility, control, and cost-saving features—perfect for teams that like to self-host. Read more!",
                          "date": "2026-01-19T00:00:00"
                        },
                        {
                          "position": 2,
                          "page": 1,
                          "title": "9 Best Open Source CRMs Of 2026 - Forbes Advisor",
                          "url": "https://www.forbes.com/advisor/business/software/best-open-source-crm/",
                          "displayedUrl": "www.forbes.com/advisor/business/software/best-open-source-crm/",
                          "domain": "www.forbes.com",
                          "snippet": "In this roundup, you’ll learn about the best open source CRM software options. We’ll discuss features, costs and what to look for when choosing CRM software.",
                          "date": "2026-02-09T00:00:00"
                        },
                        {
                          "position": 3,
                          "page": 1,
                          "title": "10 Best Open Source CRM Software Reviewed In 2026",
                          "url": "https://croclub.com/tools/best-open-source-crm-software/",
                          "displayedUrl": "croclub.com/tools/best-open-source-crm-software/",
                          "domain": "croclub.com",
                          "snippet": "Discover the best open source CRM software for your team. Compare features, pros & cons, prices, and more in my complete guide.",
                          "date": "2026-08-03T00:00:00"
                        }
                      ],
                      "resultCount": 10,
                      "ads": [
                        {
                          "page": 1,
                          "title": "Top 10 CRM Tools - Free List of the Top Products",
                          "url": "https://www.capterra.com/sem-compare-b/customer-relationship-management-software/",
                          "domain": "capterra.com",
                          "displayedUrl": "capterra.com",
                          "snippet": "No Matter Your Mission, Get The Right CRM Tools To Accomplish It. Easily Find The CRM Tools You’re Looking For w/ Our Comparison Grid."
                        }
                      ],
                      "zeroClick": null,
                      "endOfResults": false,
                      "pagesScraped": 1,
                      "pagesRequested": 1,
                      "nextCursor": "eyJ2IjoxLCJmIjoiNlJjMDVmZjVvZ1BNIiwiZm9ybSI6…",
                      "hasNextPage": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rank-check": {
      "post": {
        "operationId": "rank-check",
        "tags": [
          "Web search"
        ],
        "summary": "Check where a site ranks for a query",
        "description": "Find where a domain or URL ranks in DuckDuckGo’s organic results for a query — built for SEO rank tracking. Send a query and a target and get back whether it was found, its best (lowest) position, and every match with its position, URL, title and result page, scanning up to depth positions (1–200, default 100). A domain target (example.com, or https://www.example.com/) matches that site and, by default, its subdomains; matching is on whole hostname labels, so notexample.com and example.com.evil.net never match, and www. is ignored on both sides. A URL with a path (example.com/blog) matches pages on that host under that path: /blog, /blog/ and /blog/post, but not /blogging. Positions are counted exactly as search counts them — organic results only, ads never take a position, a repeated URL once. The scan stops after the first result page containing a match, so several matches on that page are all reported; set allMatches to scan the full depth. found: false always means the whole depth was examined, or every result DuckDuckGo lists when that is fewer (a note says so); if DuckDuckGo cannot be read part-way through, the response is a retryable 503, never a \"not found\". Rankings differ by the searcher’s country: results reflect a US searcher (us-en) unless you set region, and positions shift over time. DuckDuckGo lists at most about 190–200 results for a query, so a deeper check ends with endOfResults true. A deep check can take 30 seconds or more. Billing: A rank check costs 1 credit regardless of depth: scanning 200 positions across 10 or more result pages is billed as one request. serpPagesFetched reports how many result pages were read and is never billed.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query, as a searcher would type it (1–500 characters)."
                  },
                  "target": {
                    "type": "string",
                    "description": "What to look for: a domain such as example.com (matches the site and its subdomains), or a URL with a path such as example.com/blog (matches pages under that path)."
                  },
                  "depth": {
                    "type": "number",
                    "description": "Organic positions to scan, e.g. 10, 20, 50 or 100 (1–200), or -1 for the maximum. One request at any depth.",
                    "example": "100"
                  },
                  "allMatches": {
                    "type": "boolean",
                    "description": "Scan the full depth and report every matching position, instead of stopping after the first result page with a match.",
                    "example": "false"
                  },
                  "includeSubdomains": {
                    "type": "boolean",
                    "description": "For a domain target, whether subdomains such as blog.example.com count as the site.",
                    "example": "true"
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "safeSearch": {
                    "type": "string",
                    "description": "DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright.",
                    "example": "moderate"
                  },
                  "timeRange": {
                    "type": "string",
                    "description": "any, day, week, month or year: only results published within it.",
                    "example": "any"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query",
                  "target"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "reddit api",
                    "target": "fetchlayer.dev",
                    "depth": 200
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the results are for."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level applied."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range applied."
                    },
                    "target": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "The target as understood: input, type (domain or url_prefix), value (the hostname, or host and path, that was matched) and includeSubdomains."
                    },
                    "found": {
                      "type": "boolean",
                      "description": "Whether the target appeared within the scanned depth."
                    },
                    "position": {
                      "type": "number",
                      "description": "Its best (lowest) organic position, or null."
                    },
                    "matches": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "Every match found: position, url, title and page."
                    },
                    "depth": {
                      "type": "number",
                      "description": "The depth you asked for."
                    },
                    "depthScanned": {
                      "type": "number",
                      "description": "Organic positions actually examined."
                    },
                    "serpPagesFetched": {
                      "type": "number",
                      "description": "Result pages read. Informational only — never billed."
                    },
                    "endOfResults": {
                      "type": "boolean",
                      "description": "DuckDuckGo ran out of results before the requested depth."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "Always 1: a rank check counts as one request against your plan, however deep it scans."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "rank-check",
                      "requestedUrl": "https://duckduckgo.com/?q=reddit+api&kl=us-en&kp=-1",
                      "scrapedAt": "2026-09-15T19:53:58.766Z",
                      "transport": "duckduckgo",
                      "notes": [
                        "Stopped after the first page containing the target; set allMatches to scan the full depth."
                      ],
                      "query": "reddit api",
                      "region": "us-en",
                      "safeSearch": "moderate",
                      "timeRange": "any",
                      "target": {
                        "input": "fetchlayer.dev",
                        "type": "domain",
                        "value": "fetchlayer.dev",
                        "includeSubdomains": true
                      },
                      "found": true,
                      "position": 129,
                      "matches": [
                        {
                          "position": 129,
                          "url": "https://fetchlayer.dev/blog/reddit-api-closed-2026",
                          "title": "Reddit API Shut Down in 2026: What Still Works | FetchLayer",
                          "page": 10
                        },
                        {
                          "position": 131,
                          "url": "https://fetchlayer.dev/reddit-scraper",
                          "title": "Reddit Scraper API & MCP for AI Agents | FetchLayer",
                          "page": 10
                        }
                      ],
                      "depth": 200,
                      "depthScanned": 139,
                      "serpPagesFetched": 10,
                      "endOfResults": false,
                      "pagesScraped": 1
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/instant-answer": {
      "post": {
        "operationId": "instant-answer",
        "tags": [
          "Answers"
        ],
        "summary": "Get the instant answer for a query",
        "description": "DuckDuckGo’s instant answer for a query: a topic summary with its source and URL (usually Wikipedia), an image, a definition or direct answer where DuckDuckGo has one, infobox fact rows such as the developer or first release date, the official website, and related topics. For an ambiguous term, type is disambiguation and results lists the meanings, each with the section it belongs to in group. A query DuckDuckGo has no instant answer for is a 200 with found: false, not an error. Billing: one request.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query, as you would type it (1–500 characters)."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "python programming language"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "found": {
                      "type": "boolean",
                      "description": "Whether DuckDuckGo has an instant answer for the query."
                    },
                    "type": {
                      "type": "string",
                      "description": "article, disambiguation, category, exclusive, name, or null."
                    },
                    "heading": {
                      "type": "string",
                      "description": "The topic heading, or null."
                    },
                    "abstract": {
                      "type": "string",
                      "description": "The topic summary, or null."
                    },
                    "abstractSource": {
                      "type": "string",
                      "description": "Where the summary comes from, e.g. \"Wikipedia\"."
                    },
                    "abstractUrl": {
                      "type": "string",
                      "description": "The source page for the summary."
                    },
                    "imageUrl": {
                      "type": "string",
                      "description": "An image for the topic, or null."
                    },
                    "answer": {
                      "type": "string",
                      "description": "A direct answer (a calculation, a conversion), or null."
                    },
                    "answerType": {
                      "type": "string",
                      "description": "What kind of answer it is, or null."
                    },
                    "definition": {
                      "type": "string",
                      "description": "A dictionary definition, or null. definitionSource and definitionUrl say where it is from."
                    },
                    "entity": {
                      "type": "string",
                      "description": "What the topic is, e.g. \"programming language\", or null."
                    },
                    "officialWebsite": {
                      "type": "string",
                      "description": "The topic’s official website, or null."
                    },
                    "infobox": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "Fact rows, each { label, value }."
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "Primary links — or, on a disambiguation, the meanings — each { text, url, iconUrl, group }."
                    },
                    "relatedTopics": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "Related topics, each { text, url, iconUrl, group }. group names the section on a disambiguation."
                    },
                    "redirect": {
                      "type": "string",
                      "description": "The URL DuckDuckGo redirects the query to, when it does, or null."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "Always 1."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "instant-answer",
                      "requestedUrl": "https://duckduckgo.com/?q=python+programming+language",
                      "scrapedAt": "2026-09-15T19:47:52.225Z",
                      "transport": "duckduckgo",
                      "notes": [],
                      "query": "python programming language",
                      "found": true,
                      "type": "article",
                      "heading": "Python (programming language)",
                      "abstract": "Python is a high-level, general-purpose programming language that emphasizes code readability, simplicity, and ease-of-writing with the use of significant indentation, an extensive standard library, and garbage collection. Python supports multiple programming paradigms but with an emphasis on object-oriented programming and dynamic typing.",
                      "abstractSource": "Wikipedia",
                      "abstractUrl": "https://en.wikipedia.org/wiki/Python_(programming_language)",
                      "imageUrl": "https://duckduckgo.com/i/4d83768732377cf3.png",
                      "answer": null,
                      "answerType": null,
                      "definition": null,
                      "definitionSource": null,
                      "definitionUrl": null,
                      "entity": "programming language",
                      "officialWebsite": "https://www.python.org/",
                      "infobox": [
                        {
                          "label": "Designed by",
                          "value": "Guido van Rossum"
                        },
                        {
                          "label": "Developer",
                          "value": "Python Software Foundation"
                        },
                        {
                          "label": "First appeared",
                          "value": "February 20, 1991"
                        }
                      ],
                      "results": [
                        {
                          "text": "Official site",
                          "url": "https://www.python.org/",
                          "iconUrl": "https://duckduckgo.com/i/python.org.ico",
                          "group": null
                        }
                      ],
                      "relatedTopics": [
                        {
                          "text": "Pydoc - Pydoc is the standard documentation module for the programming language Python.",
                          "url": "https://duckduckgo.com/Pydoc",
                          "iconUrl": null,
                          "group": null
                        },
                        {
                          "text": "NumPy - NumPy is a library for the Python programming language, adding support for large, multi-dimensional arrays and matrices.",
                          "url": "https://duckduckgo.com/NumPy",
                          "iconUrl": null,
                          "group": null
                        }
                      ],
                      "redirect": null,
                      "pagesScraped": 1
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/suggestions": {
      "post": {
        "operationId": "suggestions",
        "tags": [
          "Answers"
        ],
        "summary": "Get search suggestions for a partial query",
        "description": "The completions DuckDuckGo’s search box suggests for a partial query, in DuckDuckGo’s order — useful for keyword research and query expansion. Takes a region but no safe search or time range; sending either is a 400. Billing: one request.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The partial query to complete (1–500 characters)."
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "fetchla"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The partial query."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the suggestions are for."
                    },
                    "suggestions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "The completions, in DuckDuckGo’s order."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "Always 1."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "suggestions",
                      "requestedUrl": "https://duckduckgo.com/?q=fetchla&kl=us-en",
                      "scrapedAt": "2026-09-15T19:47:52.217Z",
                      "transport": "duckduckgo",
                      "notes": [],
                      "query": "fetchla",
                      "region": "us-en",
                      "suggestions": [
                        "fetch lands",
                        "fetchland",
                        "fetch lands mtg",
                        "fetchlab",
                        "fetchlands scryfall",
                        "fetch land magic",
                        "fetchland set",
                        "fetchlater"
                      ],
                      "pagesScraped": 1
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/news": {
      "post": {
        "operationId": "news",
        "tags": [
          "News, videos & images"
        ],
        "summary": "Search DuckDuckGo News",
        "description": "News articles for a query from DuckDuckGo News, in order: title, URL, publisher, excerpt, publication time as ISO 8601 (plus relativeTime, as DuckDuckGo phrases it) and image. Filter by region, safe search and time range. limit defaults to 30 and goes up to 150; hasMore says whether DuckDuckGo had more. Billing: each list page read counts as one request (about 30 articles a page).",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query (1–500 characters)."
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "safeSearch": {
                    "type": "string",
                    "description": "DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright.",
                    "example": "moderate"
                  },
                  "timeRange": {
                    "type": "string",
                    "description": "any, day, week, month or year: only results published within it.",
                    "example": "any"
                  },
                  "limit": {
                    "type": "number",
                    "description": "Articles to return (1–150), or -1 for the maximum.",
                    "example": "30"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "openai",
                    "limit": 10
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the results are for."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level applied."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range applied."
                    },
                    "articles": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "position": {
                            "type": "number",
                            "description": "1-based position in the list."
                          },
                          "title": {
                            "type": "string",
                            "description": "The headline."
                          },
                          "url": {
                            "type": "string",
                            "description": "The article URL."
                          },
                          "source": {
                            "type": "string",
                            "description": "The publisher, or null."
                          },
                          "excerpt": {
                            "type": "string",
                            "description": "The excerpt DuckDuckGo shows, or null."
                          },
                          "publishedAt": {
                            "type": "string",
                            "description": "Publication time, ISO 8601, or null."
                          },
                          "relativeTime": {
                            "type": "string",
                            "description": "As phrased by DuckDuckGo, e.g. \"2 hours ago\"."
                          },
                          "imageUrl": {
                            "type": "string",
                            "description": "The article image, or null."
                          }
                        }
                      },
                      "description": "The articles, in DuckDuckGo’s order."
                    },
                    "articleCount": {
                      "type": "number",
                      "description": "Articles in this response."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "List pages read. Each counts as one request against your plan."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether DuckDuckGo had more articles than were returned."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "news",
                      "requestedUrl": "https://duckduckgo.com/?q=openai&kl=us-en&kp=-1&ia=news&iax=news",
                      "scrapedAt": "2026-09-15T19:47:53.372Z",
                      "transport": "duckduckgo",
                      "notes": [],
                      "query": "openai",
                      "region": "us-en",
                      "safeSearch": "moderate",
                      "timeRange": "any",
                      "articles": [
                        {
                          "position": 1,
                          "title": "OpenAI, Anthropic, and Google Join Forces for Safety as Antitrust Concerns Mount",
                          "url": "https://gizmodo.com/openai-anthropic-and-google-join-forces-for-safety-as-antitrust-concerns-mount-2000811888",
                          "source": "Gizmodo",
                          "excerpt": "OpenAI just revealed that it has been working with its top competitors, Anthropic and Google DeepMind, on the problem for several weeks.",
                          "publishedAt": "2026-09-15T06:45:00.000Z",
                          "relativeTime": "13 hours ago",
                          "imageUrl": "https://gizmodo.com/app/uploads/2026/09/GettyImages-2292626872-1200x675.jpg"
                        },
                        {
                          "position": 2,
                          "title": "OpenAI backs bipartisan House plan for third-party safety assessments",
                          "url": "https://www.politico.com/news/2026/09/15/openai-backs-bipartisan-house-plan-for-third-party-safety-assessments-01076588",
                          "source": "Politico",
                          "excerpt": "The leading AI lab endorses a bipartisan proposal that would require top AI companies to work with independent safety assessors.",
                          "publishedAt": "2026-09-15T13:57:00.000Z",
                          "relativeTime": "6 hours ago",
                          "imageUrl": "https://www.politico.com/dims4/default/resize/1200/quality/90/format/jpg?url=https%3A%2F%2Fstatic.politico.com%2Ff2%2F09%2Fdc27a7294a758654b5e81f1f1244%2Fhttps-delivery-gettyimages.com%2Fdownloads%2F2153474303"
                        }
                      ],
                      "articleCount": 10,
                      "pagesScraped": 1,
                      "hasMore": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/videos": {
      "post": {
        "operationId": "videos",
        "tags": [
          "News, videos & images"
        ],
        "summary": "Search DuckDuckGo Videos",
        "description": "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).",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query (1–500 characters)."
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "safeSearch": {
                    "type": "string",
                    "description": "DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright.",
                    "example": "moderate"
                  },
                  "timeRange": {
                    "type": "string",
                    "description": "any, day, week, month or year: only results published within it.",
                    "example": "any"
                  },
                  "limit": {
                    "type": "number",
                    "description": "Videos to return (1–120), or -1 for the maximum.",
                    "example": "30"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "bun javascript runtime",
                    "limit": 10
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the results are for."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level applied."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range applied."
                    },
                    "videos": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "position": {
                            "type": "number",
                            "description": "1-based position in the list."
                          },
                          "title": {
                            "type": "string",
                            "description": "The video title."
                          },
                          "url": {
                            "type": "string",
                            "description": "The video page URL."
                          },
                          "description": {
                            "type": "string",
                            "description": "The description DuckDuckGo shows, or null."
                          },
                          "duration": {
                            "type": "string",
                            "description": "As shown, e.g. \"4:10\", or null."
                          },
                          "publisher": {
                            "type": "string",
                            "description": "Where the video is hosted, e.g. \"YouTube\"."
                          },
                          "uploader": {
                            "type": "string",
                            "description": "The channel or account that uploaded it, or null."
                          },
                          "publishedAt": {
                            "type": "string",
                            "description": "Publication date, or null."
                          },
                          "viewCount": {
                            "type": "number",
                            "description": "View count, or null."
                          },
                          "thumbnailUrl": {
                            "type": "string",
                            "description": "Thumbnail image URL, or null."
                          },
                          "embedUrl": {
                            "type": "string",
                            "description": "An embeddable player URL, or null."
                          }
                        }
                      },
                      "description": "The videos, in DuckDuckGo’s order."
                    },
                    "videoCount": {
                      "type": "number",
                      "description": "Videos in this response."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "List pages read. Each counts as one request against your plan."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether DuckDuckGo had more videos than were returned."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "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
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/images": {
      "post": {
        "operationId": "images",
        "tags": [
          "News, videos & images"
        ],
        "summary": "Search DuckDuckGo Images",
        "description": "Images for a query from DuckDuckGo Images, in order: title, full-size image URL, thumbnail, width and height, the page the image appears on and its domain. Filter by size, color, type, layout and usage license, as well as region, safe search and time range. hasMore says whether more images exist; there is no total count.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "description": "The search query (1–500 characters)."
                  },
                  "region": {
                    "type": "string",
                    "description": "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.",
                    "example": "us-en"
                  },
                  "safeSearch": {
                    "type": "string",
                    "description": "DuckDuckGo’s own filter level: strict, moderate or off. DuckDuckGo still returns a site for a query that names it outright.",
                    "example": "moderate"
                  },
                  "timeRange": {
                    "type": "string",
                    "description": "any, day, week, month or year: only results published within it.",
                    "example": "any"
                  },
                  "limit": {
                    "type": "number",
                    "description": "Images to return (1–300), or -1 for the maximum.",
                    "example": "50"
                  },
                  "size": {
                    "type": "string",
                    "description": "small, medium, large or wallpaper."
                  },
                  "color": {
                    "type": "string",
                    "description": "color (any colour image), monochrome, or red, orange, yellow, green, blue, purple, pink, brown, black, gray, teal or white."
                  },
                  "type": {
                    "type": "string",
                    "description": "photo, clipart, gif, transparent or line."
                  },
                  "layout": {
                    "type": "string",
                    "description": "square, tall or wide."
                  },
                  "license": {
                    "type": "string",
                    "description": "any, public, share, share_commercially, modify or modify_commercially.",
                    "example": "any"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "query"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "query": "eiffel tower",
                    "limit": 50
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "search, rank-check, instant-answer, suggestions, news, videos or images."
                    },
                    "requestedUrl": {
                      "type": "string",
                      "description": "The DuckDuckGo page this result corresponds to."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "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": {
                      "type": "string",
                      "description": "The source this data came from. Always \"duckduckgo\"."
                    },
                    "scrapedAt": {
                      "type": "string",
                      "description": "ISO 8601 timestamp of when the data was collected."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query that was run."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the results are for."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level applied."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range applied."
                    },
                    "size": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The size filter applied, or null. color, type, layout and license are echoed the same way."
                    },
                    "images": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "position": {
                            "type": "number",
                            "description": "1-based position in the list."
                          },
                          "title": {
                            "type": "string",
                            "description": "The title of the page the image is on."
                          },
                          "imageUrl": {
                            "type": "string",
                            "description": "The full-size image, on its original host."
                          },
                          "thumbnailUrl": {
                            "type": "string",
                            "description": "A thumbnail of the image."
                          },
                          "width": {
                            "type": "number",
                            "description": "Full-size width in pixels."
                          },
                          "height": {
                            "type": "number",
                            "description": "Full-size height in pixels."
                          },
                          "sourcePageUrl": {
                            "type": "string",
                            "description": "The page the image appears on."
                          },
                          "domain": {
                            "type": "string",
                            "description": "Hostname of the source page."
                          }
                        }
                      },
                      "description": "The images, in DuckDuckGo’s order."
                    },
                    "imageCount": {
                      "type": "number",
                      "description": "Images in this response."
                    },
                    "pagesScraped": {
                      "type": "number",
                      "description": "Image list pages read, about 75–100 images each. Each counts as one request against your plan."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether DuckDuckGo had more images than were returned."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "images",
                      "requestedUrl": "https://duckduckgo.com/?q=eiffel+tower&kl=us-en&kp=-1&ia=images&iax=images",
                      "scrapedAt": "2026-09-15T21:04:30.840Z",
                      "transport": "duckduckgo",
                      "notes": [],
                      "query": "eiffel tower",
                      "region": "us-en",
                      "safeSearch": "moderate",
                      "timeRange": "any",
                      "size": null,
                      "color": null,
                      "type": null,
                      "layout": null,
                      "license": null,
                      "images": [
                        {
                          "position": 1,
                          "title": "Eiffel Tower | History, Height, & Facts | Britannica",
                          "imageUrl": "https://cdn.britannica.com/54/75854-050-E27E66C0/Eiffel-Tower-Paris.jpg",
                          "thumbnailUrl": "https://tse3.mm.bing.net/th/id/OIP.Z97bkX40h0DN2g8WwHpqJwHaLO?r=0&pid=Api",
                          "width": 1056,
                          "height": 1600,
                          "sourcePageUrl": "https://www.britannica.com/topic/Eiffel-Tower-Paris-France",
                          "domain": "www.britannica.com"
                        },
                        {
                          "position": 2,
                          "title": "Eiffel Tower: Where is it Located",
                          "imageUrl": "https://cdn.britannica.com/52/245552-050-3D7334F9/Eiffel-Tower-Paris.jpg",
                          "thumbnailUrl": "https://tse4.mm.bing.net/th/id/OIP.54RmpGCUWV9JgeBRQFxVjAHaHo?r=0&pid=Api",
                          "width": 1551,
                          "height": 1600,
                          "sourcePageUrl": "https://letstalksport.co.uk/news/2025/11/28/eiffel-tower-where-is-it-located.html",
                          "domain": "letstalksport.co.uk"
                        }
                      ],
                      "imageCount": 50,
                      "pagesScraped": 1,
                      "hasMore": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/resolve-url": {
      "post": {
        "operationId": "resolve-url",
        "tags": [
          "Utility"
        ],
        "summary": "Parse a DuckDuckGo URL",
        "description": "Turn a DuckDuckGo URL into the request fields it encodes, without contacting DuckDuckGo. A search, news or video page (duckduckgo.com/?q=reddit+api&kl=uk-en&ia=news) comes back as its kind, query, region, safe search and time range; a topic page (duckduckgo.com/Python_(programming_language)) as its topic in query; a result or ad link through DuckDuckGo as its destination in targetUrl and, for an ad, the advertiser in adDomain. Fields the URL does not carry are null. Any other URL is a 400 saying why. Parsing a URL does not consume a credit.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "A DuckDuckGo URL: a search, news or video page, a topic page, or a result or ad link."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "number",
                    "description": "Time limit for each page read, in milliseconds (1000–120000)."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "url": "https://duckduckgo.com/?q=reddit+api&kl=uk-en&ia=web"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resultType": {
                      "type": "string",
                      "description": "Always \"resolve-url\"."
                    },
                    "url": {
                      "type": "string",
                      "description": "The URL you sent."
                    },
                    "kind": {
                      "type": "string",
                      "description": "search, news, videos, images, maps, shopping, suggestions, topic, result-link or ad-link."
                    },
                    "query": {
                      "type": "string",
                      "description": "The query — or, for a topic page, the topic. Pass it to search, news or videos."
                    },
                    "region": {
                      "type": "string",
                      "description": "The region the URL carries, or null."
                    },
                    "safeSearch": {
                      "type": "string",
                      "description": "The safe search level the URL carries, or null."
                    },
                    "timeRange": {
                      "type": "string",
                      "description": "The time range the URL carries, or null."
                    },
                    "targetUrl": {
                      "type": "string",
                      "description": "Where a result or ad link leads, or null."
                    },
                    "adDomain": {
                      "type": "string",
                      "description": "The advertiser, for an ad link, or null."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "resultType": "resolve-url",
                      "url": "https://duckduckgo.com/?q=reddit+api&kl=uk-en&ia=web",
                      "kind": "search",
                      "query": "reddit api",
                      "region": "uk-en",
                      "safeSearch": null,
                      "timeRange": null,
                      "targetUrl": null,
                      "adDomain": null
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    }
  }
}