Discord APIdiscord.com ↗
Search and retrieve Discord Help Center articles via API. Access full article content, metadata, and category listings across 3 endpoints.
What is the Discord API?
This API provides structured access to the Discord Help Center across 3 endpoints, letting you search articles by keyword, retrieve full article content in both plain text and HTML, and list all top-level help categories. The search_articles endpoint returns paginated results including titles, snippets, section IDs, vote counts, and label names, making it straightforward to build support tooling or knowledge-base integrations against Discord's official documentation.
curl -X GET 'https://api.parse.bot/scraper/eec89afa-c079-4f37-b701-cfba66d49653/search_articles' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace discord-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Discord Help Center API Client
A practical example of using the Parse API to interact with Discord's Help Center.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Any, Optional
class ParseClient:
"""Client for interacting with the Discord Help Center API via Parse."""
def __init__(self, api_key: Optional[str] = None):
"""Initialize the Parse client with API credentials."""
self.base_url = "https://api.parse.bot"
self.scraper_id = "eec89afa-c079-4f37-b701-cfba66d49653"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError(
"API key not found. Set PARSE_API_KEY environment variable or pass it directly."
)
def _call(self, endpoint: str, method: str = "POST", **params: Any) -> dict:
"""
Make an API call to Parse.
Args:
endpoint: The API endpoint name
method: HTTP method (GET or POST)
**params: Query parameters or payload data
Returns:
Response JSON as dictionary
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
def search_articles(
self, query: str, page: int = 1, per_page: int = 10
) -> dict:
"""
Search Discord Help Center articles by keyword query.
Args:
query: Search query string to find relevant help articles
page: Page number for pagination (default: 1)
per_page: Number of results per page, between 1 and 100 (default: 10)
Returns:
Dictionary with search results including total_count, page info, and results array
"""
return self._call(
"search_articles", method="GET", query=query, page=page, per_page=per_page
)
def get_article(self, article_id: str) -> dict:
"""
Retrieve full article content by article ID.
Args:
article_id: Numeric article ID from search results (e.g., "360045138571")
Returns:
Dictionary with article content including body_text, body_html, and metadata
"""
return self._call("get_article", method="GET", article_id=article_id)
def list_categories(self) -> dict:
"""
List all top-level categories in the Discord Help Center.
Returns:
Dictionary with categories array and count
"""
return self._call("list_categories", method="GET")
def format_article_summary(article: dict) -> str:
"""Format an article summary for display."""
return f" • {article['title']}\n ID: {article['id']} | Votes: {article['vote_sum']} | Updated: {article['updated_at'][:10]}"
def main():
"""Main example demonstrating practical usage of the Discord Help Center API."""
# Initialize the client
client = ParseClient()
print("=" * 80)
print("Discord Help Center API - Practical Usage Example")
print("=" * 80)
# Step 1: List available categories
print("\n1. Fetching available help categories...")
categories = client.list_categories()
print(f"Found {categories['count']} categories:")
for category in categories["categories"][:5]: # Show first 5
print(f" • {category['name']}")
if categories["count"] > 5:
print(f" ... and {categories['count'] - 5} more")
# Step 2: Search for articles about voice settings
search_query = "voice settings"
print(f"\n2. Searching for articles about '{search_query}'...")
search_results = client.search_articles(query=search_query, per_page=5)
print(f"Found {search_results['total_count']} articles (showing {len(search_results['results'])} results):")
for article in search_results["results"]:
print(format_article_summary(article))
# Step 3: Get full content of the first article
if search_results["results"]:
first_article = search_results["results"][0]
article_id = str(first_article["id"])
print(f"\n3. Fetching full content for article: {first_article['title']}")
full_article = client.get_article(article_id)
print(f"\nArticle Details:")
print(f" Title: {full_article['title']}")
print(f" Author ID: {full_article['author_id']}")
print(f" Created: {full_article['created_at'][:10]}")
print(f" Last Updated: {full_article['updated_at'][:10]}")
print(f" Vote Score: {full_article['vote_sum']} ({full_article['vote_count']} votes)")
print(f" Promoted: {'Yes' if full_article['promoted'] else 'No'}")
print(f" Labels: {', '.join(full_article['label_names'])}")
print(f"\nArticle Preview:")
# Show first 300 characters of the article text
preview = full_article["body_text"][:300]
print(f" {preview}...")
# Step 4: Search for more specific topics and iterate through results
print(f"\n4. Searching for 'server creation' articles...")
server_search = client.search_articles(query="server creation", per_page=3)
print(f"Found {server_search['total_count']} articles:")
for idx, article in enumerate(server_search["results"], 1):
print(f"\n Article {idx}: {article['title']}")
print(f" Snippet: {article['snippet'][:100]}...")
print(f" URL: {article['url'][:50]}...")
print("\n" + "=" * 80)
print("Example completed successfully!")
print("=" * 80)
if __name__ == "__main__":
main()Search Discord Help Center articles by keyword query. Returns paginated results with title, snippet, metadata, and labels for each matching article.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search query string to find relevant help articles. |
| per_page | integer | Number of results per page, between 1 and 100. |
{
"type": "object",
"fields": {
"page": "integer",
"query": "string",
"results": "array of article summaries with id, title, snippet, url, section_id, created_at, updated_at, vote_sum, promoted, label_names",
"per_page": "integer",
"page_count": "integer",
"total_count": "integer"
},
"sample": {
"page": 1,
"query": "voice settings",
"results": [
{
"id": 360045784891,
"url": "https://support.discord.com/hc/en-us/articles/360045784891-Video-Screenshare-Updates-Multistream-and-More",
"title": "Video & Screenshare Updates - Multistream and More!",
"snippet": "Participant Settings Advanced In-Call Options In-Call Screenshare Options In-Call Voice Settings New",
"promoted": false,
"vote_sum": -179,
"created_at": "2020-07-02T17:33:38Z",
"section_id": 201110537,
"updated_at": "2026-06-09T06:50:00Z",
"label_names": [
"voice",
"stream",
"screenshare"
]
}
],
"per_page": 3,
"page_count": 130,
"total_count": 388
}
}About the Discord API
Endpoints and Data Coverage
The search_articles endpoint accepts a required query string and optional page and per_page parameters (1–100 results per page). Each result in the results array includes id, title, snippet, url, section_id, created_at, updated_at, vote_sum, promoted flag, and label_names. The response envelope also carries total_count, page_count, and the active page and per_page values, giving you everything needed to paginate through a full result set.
Full Article Retrieval
The get_article endpoint takes a numeric article_id (obtainable from search_articles results) and returns the complete article. The response includes both body_html (raw HTML) and body_text (plain text), alongside title, url, vote_sum, author_id, promoted, created_at, and edited_at. Having both body formats means you can render rich content or index clean text without additional parsing work on your end.
Category Navigation
The list_categories endpoint requires no inputs and returns a count plus an array of category objects, each carrying id, name, description, url, position, created_at, and updated_at. This is useful for mapping the Help Center's topic structure before deciding which search queries to run, or for building a category-driven navigation layer in a support application.
The Discord API is a managed, monitored endpoint for discord.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when discord.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official discord.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an in-app support widget that surfaces relevant Discord Help Center articles based on user-entered search terms
- Index Discord's official documentation into a vector database for semantic search using the
body_textfield fromget_article - Monitor Help Center articles for edits by comparing
edited_attimestamps across recurring fetches - Classify help content by category using
list_categoriesto mapsection_idvalues returned in search results - Aggregate article quality signals using
vote_sumandpromotedfields to surface the most trusted help content - Generate structured FAQs or training data for a support chatbot from
body_textarticle content - Track which label names appear most frequently in search results to understand common Discord support topics
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Discord have an official developer API?+
What does `search_articles` return beyond the article title?+
id, title, snippet, url, section_id, created_at, updated_at, vote_sum, a promoted boolean, and a label_names array. The id from these results is what you pass to get_article to retrieve the full body.Does `get_article` return community forum posts or server-specific content?+
Is there a way to filter search results by category or section?+
search_articles endpoint accepts only query, page, and per_page — there is no server-side category or section filter parameter. You can use section_id in the returned results alongside list_categories data to filter client-side. You can fork this API on Parse and revise it to add a section-scoped filtering endpoint if that behavior is needed.How fresh is the article data?+
created_at and edited_at fields so you can detect when Discord last updated a given article.