Discovery
Get Viral Tweets
Returns the latest pre-computed viral crypto tweets for a time window and sort order.
GET
/
api
/
v1
/
viral-tweets
Get Viral Tweets
curl --request GET \
--url https://api.openbits.ai/api/v1/viral-tweets \
--header 'x-api-key: <api-key>'import requests
url = "https://api.openbits.ai/api/v1/viral-tweets"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.openbits.ai/api/v1/viral-tweets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openbits.ai/api/v1/viral-tweets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.openbits.ai/api/v1/viral-tweets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.openbits.ai/api/v1/viral-tweets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openbits.ai/api/v1/viral-tweets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"tweets": [
{
"id": "1890000000000000001",
"text": "Stablecoins are the new bank rails.",
"url": "https://x.com/openbits/status/1890000000000000001",
"createdAt": "2026-04-05T09:10:00.000Z",
"views": 125000,
"likes": 4200,
"retweets": 880,
"replies": 140,
"quotes": 55,
"bookmarks": 310,
"viralityScore": 12.5,
"hookType": "bold-claim",
"tweetFormat": "single",
"topic": "defi",
"topicSecondary": null,
"author": {
"id": "44196397",
"username": "openbits",
"name": "OpenBits",
"profileImageUrl": "https://pbs.twimg.com/profile_images/example.jpg",
"verified": true,
"followersCount": 10000
}
}
],
"meta": {
"window": "6h",
"sort": "viral",
"count": 1,
"generatedAt": "2026-04-05T09:20:00.000Z",
"creditCost": 100000,
"insights": {
"classifiedCount": 1,
"hookTypes": {
"bold-claim": 1
},
"formats": {
"single": 1
},
"topics": {
"defi": 1
}
}
}
}
Requires authentication. Costs 100,000 credits per request. Refreshed after each crawl cycle.
Parameters
string
One of
6h, 12h, or 24h. Defaults to 6h.string
One of
viral, views, or likes. Defaults to viral.Response
object[]
Ranked tweet rows for the selected window and sort.
Show tweets
Show tweets
string
Tweet ID.
string
Full tweet text.
string
Tweet permalink URL.
string
Tweet creation time (ISO 8601).
number
View count.
number
Like count.
number
Retweet count.
number
Reply count.
number
Quote tweet count.
number
Bookmark count.
number
Views divided by follower count, rounded to 2 decimals.
string | null
How the tweet opens:
question, stat, bold-claim, urgency, story, announcement, or unknown. Null if not classified.string | null
Tweet structure:
single, thread, or quote-tweet. Null if not classified.string | null
Primary crypto narrative:
memecoin, airdrop, market-analysis, drama, education, defi, nft, regulation, or other. Null if not classified.string | null
Optional secondary topic. Null if single-topic or not classified.
object
Metadata for the selected snapshot.
Show meta
Show meta
string
Normalized window parameter.
string
Normalized sort parameter.
number
Number of tweets returned.
string | null
Snapshot generation time (ISO 8601), or
null when no rows exist.number
Credits charged for this request (100,000).
object | null
Aggregated classification distributions. Null when no tweets are classified.
{
"tweets": [
{
"id": "1890000000000000001",
"text": "Stablecoins are the new bank rails.",
"url": "https://x.com/openbits/status/1890000000000000001",
"createdAt": "2026-04-05T09:10:00.000Z",
"views": 125000,
"likes": 4200,
"retweets": 880,
"replies": 140,
"quotes": 55,
"bookmarks": 310,
"viralityScore": 12.5,
"hookType": "bold-claim",
"tweetFormat": "single",
"topic": "defi",
"topicSecondary": null,
"author": {
"id": "44196397",
"username": "openbits",
"name": "OpenBits",
"profileImageUrl": "https://pbs.twimg.com/profile_images/example.jpg",
"verified": true,
"followersCount": 10000
}
}
],
"meta": {
"window": "6h",
"sort": "viral",
"count": 1,
"generatedAt": "2026-04-05T09:20:00.000Z",
"creditCost": 100000,
"insights": {
"classifiedCount": 1,
"hookTypes": {
"bold-claim": 1
},
"formats": {
"single": 1
},
"topics": {
"defi": 1
}
}
}
}
Was this page helpful?
⌘I
Get Viral Tweets
curl --request GET \
--url https://api.openbits.ai/api/v1/viral-tweets \
--header 'x-api-key: <api-key>'import requests
url = "https://api.openbits.ai/api/v1/viral-tweets"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.openbits.ai/api/v1/viral-tweets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openbits.ai/api/v1/viral-tweets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.openbits.ai/api/v1/viral-tweets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.openbits.ai/api/v1/viral-tweets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openbits.ai/api/v1/viral-tweets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"tweets": [
{
"id": "1890000000000000001",
"text": "Stablecoins are the new bank rails.",
"url": "https://x.com/openbits/status/1890000000000000001",
"createdAt": "2026-04-05T09:10:00.000Z",
"views": 125000,
"likes": 4200,
"retweets": 880,
"replies": 140,
"quotes": 55,
"bookmarks": 310,
"viralityScore": 12.5,
"hookType": "bold-claim",
"tweetFormat": "single",
"topic": "defi",
"topicSecondary": null,
"author": {
"id": "44196397",
"username": "openbits",
"name": "OpenBits",
"profileImageUrl": "https://pbs.twimg.com/profile_images/example.jpg",
"verified": true,
"followersCount": 10000
}
}
],
"meta": {
"window": "6h",
"sort": "viral",
"count": 1,
"generatedAt": "2026-04-05T09:20:00.000Z",
"creditCost": 100000,
"insights": {
"classifiedCount": 1,
"hookTypes": {
"bold-claim": 1
},
"formats": {
"single": 1
},
"topics": {
"defi": 1
}
}
}
}