curl --request GET \
--url https://api.scraperize.com/v1/twitter/user-tweets \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-tweets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/twitter/user-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{
"data": {
"tweets": [
{
"id": "2010751592346030461",
"url": "https://x.com/thedankoe/status/2010751592346030461",
"text": "https://t.co/7l7Jef99QZ",
"isLongForm": false,
"lang": "zxx",
"createdAtMs": 1768235512000,
"createdAt": "2026-01-12T16:31:52.000Z",
"counts": {
"likes": 357792,
"retweets": 57448,
"replies": 9317,
"quotes": 15941,
"bookmarks": 940591
},
"views": "246051197",
"media": [],
"mentions": [],
"urls": [
{
"url": "https://t.co/7l7Jef99QZ",
"expandedUrl": "http://x.com/i/article/2010742786430021632",
"displayUrl": "x.com/i/article/2010…"
}
],
"hashtags": [],
"cashtags": [],
"card": {
"id": "Q2FyZDpodHRwczovL3QuY28vN2w3SmVmOTlRWg=="
},
"communityNote": null,
"article": {
"id": "2010742786430021632",
"title": "How to fix your entire life in 1 day",
"previewText": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They create these resolutions because everyone",
"coverImage": {
"url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"width": 1456,
"height": 582
},
"fullText": null,
"raw": {
"article_results": {
"id": "QXJ0aWNsZUVudGl0eVJlc3VsdHM6MjAxMDc0Mjc4NjQzMDAyMTYzMg==",
"result": {
"__isArticleResult": "ArticleEntity",
"cover_media_results": {
"id": "QXBpTWVkaWFSZXN1bHRzOgwABQoAARvnn8qQm0ABCgACAAAAAA9KOzAAAA==",
"result": {
"id": "QXBpTWVkaWE6DAAFCgABG+efypCbQAEKAAIAAAAAD0o7MAAA",
"media_info": {
"original_img_height": 582,
"original_img_url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"original_img_width": 1456
}
}
},
"id": "QXJ0aWNsZUVudGl0eToyMDEwNzQyNzg2NDMwMDIxNjMy",
"preview_text": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They create these resolutions because everyone",
"rest_id": "2010742786430021632",
"title": "How to fix your entire life in 1 day"
}
}
}
},
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"possiblySensitive": false,
"conversationControl": null,
"editTweetIds": [
"2010751592346030461"
],
"place": null,
"isPinned": true
},
{
"id": "2107097241290695165",
"url": "https://x.com/thedankoe/status/2107097241290695165",
"text": "If you get addicted to things easily, good, your problem is aim. Point that same obsession at a skill, your body, or your work for 2 years and people will start calling you \"disciplined\" instead.",
"isLongForm": false,
"lang": "en",
"createdAtMs": 1791206104000,
"createdAt": "2026-10-05T13:15:04.000Z",
"counts": {
"likes": 1425,
"retweets": 122,
"replies": 82,
"quotes": 9,
"bookmarks": 297
},
"views": "31371",
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2107097241290695165"
],
"place": null,
"isPinned": false
},
{
"id": "2106788829189271668",
"url": "https://x.com/thedankoe/status/2106788829189271668",
"text": "Pick a challenge too big for who you are now. \n\nThat's how people change. A challenge above your level drags the new version of you out.\n\nIt will suck. You'll fail constantly. You'll feel like a fraud for months. Your old self will beg you to stay the same.\n\nBut if you can pull this off, 10-20 times throughout your life, you will blow past everyone else.",
"isLongForm": true,
"lang": "en",
"createdAtMs": 1791132573000,
"createdAt": "2026-10-04T16:49:33.000Z",
"counts": {
"likes": 7156,
"retweets": 974,
"replies": 231,
"quotes": 98,
"bookmarks": 3185
},
"views": "196726",
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2106788829189271668"
],
"place": null,
"isPinned": false
}
],
"tweetCount": 5,
"fetchedAt": "2026-10-05T14:42:27.369Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found (it may not exist, be deleted, or be private).",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "Required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}User tweets
Fetches a public profile (https://x.com/<handle>) and returns the user’s tweets in display order (pinned first, then newest → oldest). Strictly tweet details — no user/author objects. Returns the most recent tweets (one page, no pagination). Set trim=true for a lightweight response.
curl --request GET \
--url https://api.scraperize.com/v1/twitter/user-tweets \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-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.scraperize.com/v1/twitter/user-tweets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/twitter/user-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{
"data": {
"tweets": [
{
"id": "2010751592346030461",
"url": "https://x.com/thedankoe/status/2010751592346030461",
"text": "https://t.co/7l7Jef99QZ",
"isLongForm": false,
"lang": "zxx",
"createdAtMs": 1768235512000,
"createdAt": "2026-01-12T16:31:52.000Z",
"counts": {
"likes": 357792,
"retweets": 57448,
"replies": 9317,
"quotes": 15941,
"bookmarks": 940591
},
"views": "246051197",
"media": [],
"mentions": [],
"urls": [
{
"url": "https://t.co/7l7Jef99QZ",
"expandedUrl": "http://x.com/i/article/2010742786430021632",
"displayUrl": "x.com/i/article/2010…"
}
],
"hashtags": [],
"cashtags": [],
"card": {
"id": "Q2FyZDpodHRwczovL3QuY28vN2w3SmVmOTlRWg=="
},
"communityNote": null,
"article": {
"id": "2010742786430021632",
"title": "How to fix your entire life in 1 day",
"previewText": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They create these resolutions because everyone",
"coverImage": {
"url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"width": 1456,
"height": 582
},
"fullText": null,
"raw": {
"article_results": {
"id": "QXJ0aWNsZUVudGl0eVJlc3VsdHM6MjAxMDc0Mjc4NjQzMDAyMTYzMg==",
"result": {
"__isArticleResult": "ArticleEntity",
"cover_media_results": {
"id": "QXBpTWVkaWFSZXN1bHRzOgwABQoAARvnn8qQm0ABCgACAAAAAA9KOzAAAA==",
"result": {
"id": "QXBpTWVkaWE6DAAFCgABG+efypCbQAEKAAIAAAAAD0o7MAAA",
"media_info": {
"original_img_height": 582,
"original_img_url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"original_img_width": 1456
}
}
},
"id": "QXJ0aWNsZUVudGl0eToyMDEwNzQyNzg2NDMwMDIxNjMy",
"preview_text": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They create these resolutions because everyone",
"rest_id": "2010742786430021632",
"title": "How to fix your entire life in 1 day"
}
}
}
},
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"possiblySensitive": false,
"conversationControl": null,
"editTweetIds": [
"2010751592346030461"
],
"place": null,
"isPinned": true
},
{
"id": "2107097241290695165",
"url": "https://x.com/thedankoe/status/2107097241290695165",
"text": "If you get addicted to things easily, good, your problem is aim. Point that same obsession at a skill, your body, or your work for 2 years and people will start calling you \"disciplined\" instead.",
"isLongForm": false,
"lang": "en",
"createdAtMs": 1791206104000,
"createdAt": "2026-10-05T13:15:04.000Z",
"counts": {
"likes": 1425,
"retweets": 122,
"replies": 82,
"quotes": 9,
"bookmarks": 297
},
"views": "31371",
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2107097241290695165"
],
"place": null,
"isPinned": false
},
{
"id": "2106788829189271668",
"url": "https://x.com/thedankoe/status/2106788829189271668",
"text": "Pick a challenge too big for who you are now. \n\nThat's how people change. A challenge above your level drags the new version of you out.\n\nIt will suck. You'll fail constantly. You'll feel like a fraud for months. Your old self will beg you to stay the same.\n\nBut if you can pull this off, 10-20 times throughout your life, you will blow past everyone else.",
"isLongForm": true,
"lang": "en",
"createdAtMs": 1791132573000,
"createdAt": "2026-10-04T16:49:33.000Z",
"counts": {
"likes": 7156,
"retweets": 974,
"replies": 231,
"quotes": 98,
"bookmarks": 3185
},
"views": "196726",
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2106788829189271668"
],
"place": null,
"isPinned": false
}
],
"tweetCount": 5,
"fetchedAt": "2026-10-05T14:42:27.369Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found (it may not exist, be deleted, or be private).",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "Required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}cache_max_age) are free.Copy for AI assistant
Copy for AI assistant
I want to make an API call to /v1/twitter/user-tweets. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/user-tweets
Description: Fetches a public profile (`https://x.com/<handle>`) and returns the user's tweets in display order (pinned first, then newest → oldest). Strictly tweet details — no user/author objects. Returns the most recent tweets (one page, no pagination). Set `trim=true` for a lightweight response.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: User handle WITHOUT the @ symbol, e.g. `thedankoe`.
- trim (select): Return trimmed-down tweets (essential fields only).
- cache_max_age (select): Optional. Return a cached result if one this age or newer exists — served for **0 credits** with `meta.cached=true` and `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and refreshes the cache. Omit to always scrape fresh.
Example Response:
{
"data": {
"tweets": [
{
"id": "2010751592346030461",
"url": "https://x.com/thedankoe/status/2010751592346030461",
"text": "https://t.co/7l7Jef99QZ",
"isLongForm": false,
"lang": "zxx",
"createdAtMs": 1768235512000,
"createdAt": "2026-01-12T16:31:52.000Z",
"counts": {
"likes": 357792,
"retweets": 57448,
"replies": 9317,
"quotes": 15941,
"bookmarks": 940591
},
"views": "246051197",
"media": [],
"mentions": [],
"urls": [
{
"url": "https://t.co/7l7Jef99QZ",
"expandedUrl": "http://x.com/i/article/2010742786430021632",
"displayUrl": "x.com/i/article/2010…"
}
],
"hashtags": [],
"cashtags": [],
"card": {
"id": "Q2FyZDpodHRwczovL3QuY28vN2w3SmVmOTlRWg=="
},
"communityNote": null,
"article": {
"id": "2010742786430021632",
"title": "How to fix your entire life in 1 day",
"previewText": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They crea…",
"coverImage": {
"url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"width": 1456,
"height": 582
},
"fullText": null,
"raw": {
"article_results": {
"id": "QXJ0aWNsZUVudGl0eVJlc3VsdHM6MjAxMDc0Mjc4NjQzMDAyMTYzMg==",
"result": {
"__isArticleResult": "ArticleEntity",
"cover_media_results": {
"id": "QXBpTWVkaWFSZXN1bHRzOgwABQoAARvnn8qQm0ABCgACAAAAAA9KOzAAAA==",
"result": {
"id": "QXBpTWVkaWE6DAAFCgABG+efypCbQAEKAAIAAAAAD0o7MAAA",
"media_info": {
"original_img_height": 582,
"original_img_url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"original_img_width": 1456
}
}
},
"id": "QXJ0aWNsZUVudGl0eToyMDEwNzQyNzg2NDMwMDIxNjMy",
"preview_text": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They crea…",
"rest_id": "2010742786430021632",
"title": "How to fix your entire life in 1 day"
}
}
}
},
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"possiblySensitive": false,
"conversationControl": null,
"editTweetIds": [
"2010751592346030461"
],
"place": null,
"isPinned": true
}
],
"tweetCount": 5,
"fetchedAt": "2026-10-05T14:42:27.369Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}
Please help me write code in my preferred programming language to make this API call and handle the response appropriately. Include error handling and best practices.
Authorizations
Your API key. Send it in the x-api-key header (or Authorization: Bearer <key>). Create and manage keys from your dashboard.
Query Parameters
User handle WITHOUT the @ symbol, e.g. thedankoe.
Return trimmed-down tweets (essential fields only).
Optional. Return a cached result if one this age or newer exists — served for 0 credits with meta.cached=true and meta.cachedAt. Otherwise a fresh scrape runs (1 credit) and refreshes the cache. Omit to always scrape fresh.
1d, 3d, 7d, 14d, 30d