Stack Exchange API
Free Stack Exchange API with no key: questions, answers, users, tags and search across Stack Overflow and 170+ sites. Tested curl example and live JSON.
Endpoint tested and returned HTTP 200 on 2026-08-19
What is the Stack Exchange API?
The Stack Exchange API provides free, key-free access to questions, answers, comments, users and tags across Stack Overflow and every other Stack Exchange site, with search and filtering.
One API covers the entire Stack Exchange network — Stack Overflow, Server Fault, Super User and over 170 others — selected with a single `site` parameter. Anonymous access works, though registering a free app key raises the daily quota considerably.
Two implementation details matter. Responses are gzip-compressed by default and most HTTP clients handle that transparently, but a raw socket client will see binary. And the default `filter` returns a trimmed field set — question bodies are excluded unless you request a filter that includes them.
Quick facts
- Base URL
https://api.stackexchange.com/2.3- Authentication
- Anonymous access allowed. A free app key raises the daily quota from 300 to 10,000 requests.
- Rate limit
- 300 requests per day per IP anonymously; 10,000 per day with a free key.
- Pricing
- Free. Content is CC BY-SA licensed and attribution is required.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Stack Exchange API
Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.
1. Fetch recent Stack Overflow questions
GET https://api.stackexchange.com/2.3/questions?site=stackoverflow&pagesize=1&order=desc&sort=activity
curl 'https://api.stackexchange.com/2.3/questions?site=stackoverflow&pagesize=1&order=desc&sort=activity'const res = await fetch("https://api.stackexchange.com/2.3/questions?site=stackoverflow&pagesize=1&order=desc&sort=activity");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.stackexchange.com/2.3/questions?site=stackoverflow&pagesize=1&order=desc&sort=activity", timeout=20)
res.raise_for_status()
print(res.json()){
"items": [
{
"tags": [
"android",
"shell",
"automation",
"adb"
],
"owner": {
"account_id": 1631142,
"reputation": 131,
"user_id": 1505650,
"user_type": "registered",
"profile_image": "https://www.gravatar.com/avatar/f050b80594d5d59676e0620842eb0316?s=256&d=identicon&r=PG",
"display_name": "HaroldT",
"link": "https://stackoverflow.com/users/1505650/haroldt"
},
"is_answered": true,
"view_count": 19270,
"accepted_answer_id": 11398427,
"answer_count": 5,
"score": 7,
"last_activity_date": 1787171265,
"creation_date": 1341545159,
"question_id": 11355417,
"content_license": "CC BY-SA 3.0",
"link": "https://stackoverflow.com/questions/11355417/android-notifications-through-adb",
"title": "Android Notifications through ADB"
}
],
"has_more": true,
"quota_max": 300,
"quota_remaining": 298
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
site | string | Required | Which network site to query. stackoverflow |
pagesize | integer | Optional | Results per page, max 100. 20 |
order / sort | string | Optional | asc or desc, and activity, votes, creation or relevance. desc |
tagged | string | Optional | Semicolon-separated tags to filter by. python;pandas |
filter | string | Optional | Field filter — the default omits question bodies. withbody |
Response fields
itemsarray- The results array.
items[].titlestring- Question title.
items[].tagsarray- Tags applied to the question.
items[].scoreinteger- Net vote score.
items[].is_answeredboolean- Whether an answer has been accepted.
items[].linkstring- Canonical URL — required for CC BY-SA attribution.
quota_remaininginteger- Requests left in your daily quota.
has_moreboolean- Whether further pages exist.
What you can build with the Stack Exchange API
- Show recent questions for a tag on a documentation site
- Monitor unanswered questions about your library
- Analyse technology trends from tag activity
- Build a developer Q&A search across the network
Common errors and how to fix them
400 without site
The `site` parameter is mandatory on almost every endpoint.
Fix: Always pass site=stackoverflow or another network site.
throttle_violation
Daily quota exhausted or requests sent too rapidly.
Fix: Register a free app key for 10,000/day, and watch `quota_remaining` in each response.
Question body missing
The default filter excludes bodies to keep responses small.
Fix: Pass filter=withbody to include them.
Stack Exchange API — frequently asked questions
Does the Stack Exchange API need an API key?
No, anonymous access works, but it is limited to 300 requests per day per IP. Registering a free app key raises that to 10,000.
Why is the question body missing from my results?
The default filter trims responses to keep them small. Pass filter=withbody to include question and answer bodies.
Can I query sites other than Stack Overflow?
Yes. The `site` parameter selects from over 170 network sites — serverfault, superuser, askubuntu and the rest all use the same API.
Do I need to attribute content from the API?
Yes. Stack Exchange content is CC BY-SA licensed, so you must attribute the author and link back to the original post using the `link` field.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Markdown to HTML Converter
Convert Markdown to clean HTML with a live preview — headings, emphasis, links, lists, code blocks, tables and blockquotes. 100% in your browser.
Stack Exchange is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.