Bing News API
Find news articles matching a query.
What is this API?
Serqo’s Bing News API returns news results shown for a Bing query as structured JSON. Use engine: "bing" and type: "news"; returned items may include headlines, source labels, displayed dates, snippets and links.
Common use cases
- Monitor which news sources appear for a query in Bing.
- Compare visible news results across query and country settings.
- Collect article links and displayed metadata for news research.
Request example
POST https://api.serqo.io/v1/search
| Field | Value |
|---|---|
| engine | bing |
| type | news |
Request headers
Create an API key and store it on your server. Send the API key in the x-api-key header.
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | JSON request body. |
| x-api-key | YOUR_API_KEY | API key used to authenticate the request. |
export SERP_API_KEY='YOUR_API_KEY'
curl https://api.serqo.io/v1/search \
-H "x-api-key: $SERP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"q": "electric vehicle charging",
"engine": "bing",
"type": "news",
"gl": "us",
"hl": "en"
}' Code examples
Use the same API key with a standard HTTP client. These examples require Node.js 22 or later, or Python 3.
const response = await fetch('https://api.serqo.io/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SERP_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"q": "electric vehicle charging","engine":"bing","type":"news"}),
});
const result = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${result.error?.message ?? 'Search failed'}`);
console.log(result.data);import json
import os
from urllib.request import Request, urlopen
payload = {"q": "electric vehicle charging","engine":"bing","type":"news"}
request = Request(
'https://api.serqo.io/v1/search',
data=json.dumps(payload).encode(),
headers={
'x-api-key': os.environ['SERP_API_KEY'],
'Content-Type': 'application/json',
},
)
with urlopen(request) as response:
result = json.load(response)
print(result['data'])Parameters
The number of results returned per request depends on the search engine and may vary.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | — | Non-empty search query. |
| engine | string | No | Use bing for this API. | |
| type | string | No | web | Use news for this API. |
| gl | string | No | — | Two-letter lowercase country code, for example us. |
| hl | string | No | — | Interface language code, for example en. |
| start | integer | No | — | Offset from 0 to 1000000. Use nextStart from the response. |
| safe | off | active | No | — | Explicit-content filter: off disables it, active enables it. |
| tbs | string | No | — | Not supported by Bing; omit it to avoid INVALID_PARAM. |
Only q is required by the API, but keep engine and type as shown for this search. A dash means the API does not assign a default. Unknown parameters return 422 INVALID_PARAM.
Response
HTTP 200. A real API response, trimmed to the first three results for readability. Field availability and result groups vary by the returned page; values can be null.
{
"success": true,
"requestId": "req_9092e516-562d-448d-8807-7fcd887ee23b",
"data": {
"engine": "bing",
"type": "news",
"query": {
"q": "electric vehicle charging",
"gl": "us",
"hl": "en"
},
"searchInformation": {
"totalResults": null,
"timeTakenMs": null,
"displayed": null
},
"results": [
{
"position": 1,
"type": "news",
"title": "This Week In Electric Vehicles - Chile's Charging Network Fuels Strong Market Growth",
"url": "https://finance.yahoo.com/energy/articles/week-electric-vehicles-chiles-charging-123713346.html",
"displayedUrl": "Yahoo Finance",
"domain": "finance.yahoo.com",
"source": "Yahoo Finance",
"date": null,
"snippet": null,
"thumbnail": "https://www.bing.com/data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7",
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"card": "list",
"tid": "6adaef27edbd48c485727707ea36c77e"
}
},
{
"position": 2,
"type": "news",
"title": "I Took America’s Cheapest EV Into the Charging Desert of the Deep South",
"url": "https://www.msn.com/en-us/news/other/i-took-america-s-cheapest-ev-into-the-charging-desert-of-the-deep-south/ar-AA2fRTID?ocid=BingNewsVerp",
"displayedUrl": "The Wall Street Journal on MSN",
"domain": "msn.com",
"source": "The Wall Street Journal on MSN",
"date": null,
"snippet": null,
"thumbnail": "https://www.bing.com/data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7",
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"card": "list",
"tid": "6adaef27edbd48c485727707ea36c77e"
}
},
{
"position": 3,
"type": "news",
"title": "Electric-car charging: The basics",
"url": "https://www.greencarreports.com/news/1145736_electric-car-charging-the-basics",
"displayedUrl": "Green Car Reports",
"domain": "greencarreports.com",
"source": "Green Car Reports",
"date": "1y",
"snippet": null,
"thumbnail": null,
"favicon": null,
"duration": null,
"price": null,
"rating": null,
"sitelinks": [],
"extensions": {
"card": "list",
"tid": "6adaef27edbd48c485727707ea36c77e"
}
}
],
"features": {
"relatedSearches": [
{
"query": "All",
"url": "https://www.bing.com/search?q=electric+vehicle+charging&FORM=HDRSC1"
},
{
"query": "Web",
"url": "https://www.bing.com/search?q=electric+vehicle+charging&webscp=1&FORM=HDRWSC"
},
{
"query": "Search",
"url": "https://www.bing.com/copilotsearch?q=electric+vehicle+charging&FORM=CSSCOP"
},
{
"query": "Images",
"url": "https://www.bing.com/images/search?q=electric+vehicle+charging&FORM=HDRSC3"
},
{
"query": "Videos",
"url": "https://www.bing.com/videos/search?q=electric+vehicle+charging&FORM=HDRSC4"
},
{
"query": "Maps",
"url": "https://www.bing.com/maps?q=electric+vehicle+charging&FORM=HDRSC6"
},
{
"query": "News",
"url": "https://www.bing.com/news/search?q=Top+stories&FORM=HDRSC7"
},
{
"query": "Shopping",
"url": "https://www.bing.com/shop/topics?q=electric+vehicle+charging&FORM=SHOPTB"
},
{
"query": "Flights",
"url": "https://www.bing.com/travel/search?q=electric+vehicle+charging&m=flights&FORM=FBSCOP"
},
{
"query": "Top stories",
"url": "https://www.bing.com/news/search?q=Top+stories&nvaug=%5bNewsVertical+Category%3d%22rt_MaxClass%22%5d&FORM=NSBABR"
},
{
"query": "Sports",
"url": "https://www.bing.com/news/search?q=Sports&nvaug=%5bNewsVertical+Category%3d%22rt_Sports%22%5d&FORM=NSBABR"
},
{
"query": "U.S.",
"url": "https://www.bing.com/news/search?q=U.S.&nvaug=%5bNewsVertical+Category%3d%22rt_US%22%5d&FORM=NSBABR"
}
]
},
"pagination": {
"pageSize": 30,
"page": 1,
"start": 0,
"hasNext": false,
"nextStart": null
},
"meta": {
"elapsedMs": 689
}
},
"meta": {
"cache": "miss"
}
}
Response fields
| Field | Type | Description |
|---|---|---|
| data.query | object | Search query passed to the engine. |
| data.searchInformation | object | Reported result count and search timing, when provided. |
| success | boolean | Whether the request succeeded. True in this example. |
| requestId | string | Request identifier to include when troubleshooting. |
| data.type | string | Search type used for this response. |
| data.engine | string | Engine that returned the results. |
| data.results | array | Main result list. Check feature groups as well when present. |
| data.features | object | Additional result groups; groups not returned by the engine may be absent. |
| data.pagination | object | Current offset and next-page availability. |
| data.meta.elapsedMs | number | Search duration in milliseconds, not a performance guarantee. |
| meta.cache | string | null | hit, miss, or null if cache status is unknown. |
Result fields
Read entries from data.results. Additional groups, when present, are in data.features.
| Field | Type | Description |
|---|---|---|
| data.results[].domain | string | null | Destination domain, when available. |
| data.results[].favicon | string | null | Site icon when provided. |
| data.results[].sitelinks | array | Additional links nested under the result. |
| data.results[].sitelinks[].title | string | Sitelink label. |
| data.results[].sitelinks[].url | string | null | Sitelink destination. |
| data.results[].extensions | object | Other result-specific properties. |
| data.results[].snippetHighlightedWords | string[], optional | Highlighted terms in the snippet, when provided. |
| data.results[].position | integer | Rank on this results page, starting at 1. |
| data.results[].type | string | Result category: organic, news, image, video, shopping, local, forum, book, patent or ad. This can differ from the request type. |
| data.results[].title | string | null | Title shown in the result. |
| data.results[].url | string | null | Destination URL when resolved; it may be null. |
| data.results[].displayedUrl | string | null | URL or domain displayed by the engine; not always a clickable link. |
| data.results[].source | string | null | Source name or displayed domain. |
| data.results[].date | string | null | Date text when extracted; not necessarily an ISO timestamp. |
| data.results[].snippet | string | null | Result summary. |
| data.results[].thumbnail | string | null | Thumbnail URL or inline data URL, when provided. |
| data.results[].duration | string | null | Video duration text when provided. |
| data.results[].price | string | null | Price text when provided. |
| data.results[].rating | number | null | Rating when provided. |
Publication date and source details may be null. Read the returned result category; do not assume every entry is labeled news.
Pagination
- Check
data.pagination.hasNext; stop when it is false. - Use
data.pagination.nextStartasstart. Keep the other search parameters unchanged. - Send the next request. Each page is a separate search request.
| Field | Type | Description |
|---|---|---|
| data.pagination.nextUrl | string | null | Search-engine URL for the next page, when available; use nextStart with this API. |
| data.pagination.requestedPage | integer | Page requested; may differ from the returned page if the engine does not provide it. |
| data.pagination.page | integer | Current page number. |
| data.pagination.start | integer | Current result offset. |
| data.pagination.hasNext | boolean | Whether another page is available. |
| data.pagination.nextStart | integer | null | Offset for the next request, or null when unavailable. |
Errors
{
"success": false,
"requestId": "req_example",
"error": {
"code": "INVALID_PARAM",
"message": "Unknown parameter \"page\"",
"retryable": false
}
} | Field | Type | Description |
|---|---|---|
| error.code | string | Machine-readable error code. |
| error.message | string | Reason the request failed. |
| error.retryable | boolean | Whether retrying is recommended. |
| error.retryAfterMs | number, optional | Minimum wait before retrying, in milliseconds. |
| HTTP status | Meaning | What to do |
|---|---|---|
| 400 | Invalid request or unsupported search type. | Check the query and engine/type combination. |
| 401 | Missing, invalid or revoked API key. | Check the authentication header and API key. |
| 402 | Insufficient credits. | Check your credit balance. |
| 403 | Permission or plan restriction. | Check account access and plan limits. |
| 422 | Invalid parameter. | Correct the parameter identified by error.message. |
| 429 | Request rate or queue limit. | Follow the retry rules below. |
| 5xx | Server or search service failure. | Keep the requestId; retry only if allowed. |
Retry rules
- Retry only when
error.retryableistrue. - If
error.retryAfterMsis present, wait at least that many milliseconds.
Pricing and limits
- Successful searches use credits at the applicable rate.
- Failed searches and timeouts are not charged.
- Cache hits are free at the default rate. Before searching, your available balance must cover the full request cost.
See plan pricing and rate-limit and credit details.
Frequently asked questions
Does this API provide a complete or historical news archive?
No. It returns a snapshot of Bing news results for one request, not every article or a historical archive. Collect and store responses in your own system if you need a timeline.
How are Bing News searches charged?
Successful searches use the applicable credit rate for the engine, type and country. Failed searches and timeouts release the reservation; cache hits are free at the default rate. See Pricing and limits below for the current rules.