Appearance
Crypto Articles Search
The Articles Search endpoint works like Crypto Articles but adds keyword filtering on the article title. Only articles whose title contains an exact match for your keyword or phrase are returned.
Use this to:
- Build a search bar in your crypto news app ("Show me all articles mentioning Bitcoin")
- Monitor news coverage of a specific coin, project, or person
- Create keyword-triggered alerts (e.g. "ETF", "SEC", "hack", "partnership")
- Export keyword-filtered datasets to CSV for analysis
Base URL
https://crypto-news51.p.rapidapi.comRapidAPI key required
Include your RapidAPI credentials on every request. See Authentication.
Search articles
GET/api/v1/crypto/articles/search
Returns a paginated array of news articles published within the selected time frame whose title contains the specified keyword or phrase. Results are sorted by published descending (newest first).
Authentication
| Header | Value |
|---|---|
X-RapidAPI-Key | Your RapidAPI secret key |
X-RapidAPI-Host | crypto-news51.p.rapidapi.com |
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| title_keywords | string | — | required Word or phrase to match against article titles. The filter is case-insensitive and checks for an exact substring match — bitcoin will match "Bitcoin ETF approved" but not "BTC rally". Multi-word phrases are supported (e.g. interest rate). |
| page | integer | 1 | Page number for pagination. |
| limit | integer | 10 | Number of articles per page. Maximum: 100. |
| time_frame | string | 24h | Lookback window. Accepted values:1h — last 1 hour6h — last 6 hours12h — last 12 hours24h — last 24 hours |
| format | string | json | Response format: json or csv. |
Exact substring match
title_keywords is not a full-text search — it checks whether the exact string appears in the title. Searching for bitcoin will not return articles about btc or satoshi. Use the most common spelling or abbreviation your audience expects.
Example requests
bash
curl "https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search?title_keywords=bitcoin&page=1&limit=10&time_frame=24h&format=json" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: crypto-news51.p.rapidapi.com"bash
curl "https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search?title_keywords=interest%20rate&time_frame=24h&limit=20" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: crypto-news51.p.rapidapi.com"bash
curl "https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search?title_keywords=ethereum&time_frame=24h&limit=100&format=csv" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: crypto-news51.p.rapidapi.com" \
-o ethereum-articles.csvjavascript
const keyword = 'bitcoin'
const params = new URLSearchParams({
title_keywords: keyword,
page: '1',
limit: '10',
time_frame: '24h',
format: 'json',
})
const response = await fetch(
`https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search?${params}`,
{
headers: {
'X-RapidAPI-Key': process.env.RAPIDAPI_KEY,
'X-RapidAPI-Host': 'crypto-news51.p.rapidapi.com',
},
}
)
const articles = await response.json()
console.log(`Found ${articles.length} articles mentioning "${keyword}"`)
for (const article of articles) {
const { label, score } = article.sentiment
const confidence = (score * 100).toFixed(1)
console.log(`[${label.toUpperCase()} ${confidence}%] ${article.title}`)
}javascript
async function searchAllPages(keyword, timeFrame = '24h') {
const headers = {
'X-RapidAPI-Key': process.env.RAPIDAPI_KEY,
'X-RapidAPI-Host': 'crypto-news51.p.rapidapi.com',
}
const all = []
let page = 1
const limit = 100
while (true) {
const params = new URLSearchParams({
title_keywords: keyword,
page,
limit,
time_frame: timeFrame,
format: 'json',
})
const res = await fetch(
`https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search?${params}`,
{ headers }
)
const batch = await res.json()
if (!Array.isArray(batch) || batch.length === 0) break
all.push(...batch)
if (batch.length < limit) break
page++
}
return all
}
// Monitor multiple keywords at once
const keywords = ['bitcoin', 'ethereum', 'SEC', 'ETF']
const results = await Promise.all(
keywords.map(async (kw) => {
const articles = await searchAllPages(kw, '24h')
return { keyword: kw, count: articles.length, articles }
})
)
for (const { keyword, count } of results) {
console.log(`"${keyword}": ${count} articles in the last 24h`)
}python
import os
import requests
response = requests.get(
"https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search",
params={
"title_keywords": "bitcoin",
"page": 1,
"limit": 10,
"time_frame": "24h",
"format": "json",
},
headers={
"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
"X-RapidAPI-Host": "crypto-news51.p.rapidapi.com",
},
)
response.raise_for_status()
articles = response.json()
print(f"Found {len(articles)} articles\n")
for article in articles:
s = article["sentiment"]
confidence = round(s["score"] * 100, 1)
published = article["published"][:10] # date only
print(f" [{s['label'].upper():8} {confidence:5.1f}%] {published} {article['title'][:70]}")python
import os
import requests
from collections import Counter
session = requests.Session()
session.headers.update({
"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
"X-RapidAPI-Host": "crypto-news51.p.rapidapi.com",
})
def search(keyword, time_frame="24h"):
all_articles, page, limit = [], 1, 100
while True:
resp = session.get(
"https://crypto-news51.p.rapidapi.com/api/v1/crypto/articles/search",
params={"title_keywords": keyword, "page": page,
"limit": limit, "time_frame": time_frame},
)
resp.raise_for_status()
batch = resp.json()
if not batch:
break
all_articles.extend(batch)
if len(batch) < limit:
break
page += 1
return all_articles
# Summarize sentiment per keyword
for keyword in ["bitcoin", "ethereum", "XRP", "ETF"]:
articles = search(keyword, time_frame="24h")
counts = Counter(a["sentiment"]["label"] for a in articles)
total = len(articles)
if total == 0:
print(f'"{keyword}": no articles found')
continue
print(
f'"{keyword}": {total} articles — '
f'🟢 {counts["positive"]} '
f'⚪ {counts["neutral"]} '
f'🔴 {counts["negative"]}'
)Response
A JSON array of article objects. The schema is identical to Crypto Articles.
json
[
{
"title": "Best Crypto Presales April 2026: Bitcoin Everlight (BTCL) vs BlockchainFX (BFX) Final Presale Stage",
"summary": "The post Best Crypto Presales April 2026: Bitcoin Everlight (BTCL) vs BlockchainFX (BFX) Final Presale Stage appeared on BitcoinEthereumNews.com.",
"media": [
"https://i0.wp.com/blockchainreporter.net/wp-content/uploads/2025/03/trading-chart143-1-67d186b5332da.webp"
],
"link": "https://bitcoinethereumnews.com/bitcoin/best-crypto-presales-april-2026-bitcoin-everlight-btcl-vs-blockchainfx-bfx-final-presale-stage/",
"authors": [
{ "name": "Bitcoin Ethereum News" }
],
"published": "2026-04-07T10:27:08+00:00",
"category": "financial",
"subCategory": "cryptocurrency",
"language": "en",
"timeZone": "UTC",
"sentiment": {
"label": "neutral",
"score": 0.8986603617668152
}
}
]For a full field-by-field breakdown see Article object fields.
Pagination
Works the same as Crypto Articles — detect the last page when the returned array length is less than limit.
page 1 → items 1–10
page 2 → items 11–20
...
last page → array.length < limitEmpty result ≠ error
If no articles match your keyword in the selected time frame, the API returns an empty array [] with HTTP 200 — not a 404. Always handle the empty-array case in your code.
Error responses
| Status | Code | Description |
|---|---|---|
| 400 | bad_request | time_frame / limit value is invalid |
| 401 | unauthorized | X-RapidAPI-Key is missing or invalid |
| 403 | forbidden | Your RapidAPI plan does not include access to this endpoint |
| 429 | too_many_requests | RapidAPI rate limit exceeded |
| 500 | internal_error | Server error — safe to retry after a short delay |
Example 400 response for an invalid time_frame:
json
{
"detail":"Timeframe '24hd' not supported. Choose from ['1h', '6h', '12h', '24h']"
}Example 400 response for an invalid limit:
json
{
"detail":"Maximum allowed value for 'limit' is 100."
}Rate limits
Limits are enforced by RapidAPI and depend on your subscription plan:
| Plan | Price | Requests / month | Rate Limit |
|---|---|---|---|
| Basic | $0 | 50 | 1,000 / hour |
| Pro | $10 | 100,000 | 100 / min |
| Ultra | $20 | 500,000 | 180 / min |
| Mega | $50 | 1,000,000 | 180 / min |
Check your current usage in the RapidAPI developer dashboard.
Related endpoints
| Endpoint | Description |
|---|---|
| Crypto Articles | All articles without keyword filtering |
| Crypto Sentiment | Aggregated sentiment counts for a time interval |