DuckDuckGo Search API endpoint
Returns DuckDuckGo image results for a query string: title, source page URL, image URL, thumbnail, dimensions, and hostname, plus page-based pagination.
/duckduckgo/imageQuery parameters:
q (required) — the search query.page (optional) — 1-based page number. Defaults to 1.region (optional) — DuckDuckGo region/locale code, e.g. us-en,
uk-en, wt-wt (worldwide, DuckDuckGo's own default when omitted).Notable response behavior:
url is DuckDuckGo's own reported source page
URL as-is.503.404.| Field | Filled in, of 98 checked | Values in the sample |
|---|---|---|
| position | 98 | 1 to 98, median 49 |
| title | 98 | “OpenAI представляє новий агент ChatGPT для «глибокого дослі…” and 95 other values |
| url | 98 | founder.ua and 82 other hosts |
| image_url | 98 | founder.ua and 80 other hosts |
| thumbnail | 98 | tse4.mm.bing.net and 4 other hosts |
| width | 98 | |
| height | 98 | |
| hostname | 98 | “founder.ua” and 82 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Search query | openai | |
| page | integer | No | 1 | 1-based page number, defaults to 1 | 1 |
| region | string | No | DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default) | us-en | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/duckduckgo/image?q=openai&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "openai",
"results": [
{
"position": 1,
"title": "OpenAI logo",
"url": "https://example.com/openai-logo",
"image_url": "https://example.com/openai-logo.jpg",
"thumbnail": "https://example.com/openai-logo-thumb.jpg",
"width": 1200,
"height": 800,
"hostname": "example.com"
}
],
"pagination": {
"page": 1,
"next_page": 2
}
}
}Request schema
No body schema
Response schema
#/definitions/duckduckgo.imageResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | duckduckgo.ImageResponse | No | ||||
| data.pagination | duckduckgo.SearchPagination | No | ||||
| data.pagination.next_page | integer | No | 2 | |||
| data.pagination.page | integer | No | 1 | |||
| data.query | string | No | openai | |||
| data.results | array | No | ||||
| data.results[].height | integer | No | 800 | |||
| data.results[].hostname | string | No | example.com | |||
| data.results[].image_url | string | No | https://example.com/openai-logo.jpg | |||
| data.results[].position | integer | No | 1 | |||
| data.results[].thumbnail | string | No | https://example.com/openai-logo-thumb.jpg | |||
| data.results[].title | string | No | OpenAI logo | |||
| data.results[].url | string | No | https://example.com/openai-logo | |||
| data.results[].width | integer | No | 1200 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/duckduckgo/image?q=openai&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"