StackPeek API Documentation
Free technology stack detection API. Detect CMS, frameworks, analytics, CDN, libraries, and more from any website. No API keys, no authentication required.
https://stackpeek.dev/api/v1
Authentication
No authentication is required. The API is free and open for everyone. Simply make HTTP requests to the endpoints below.
POST /detect
Detect technologies used by a website. Optionally filter by specific categories.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
url |
string | required | The website URL to analyze (must include protocol) |
categories |
array | optional | Filter by specific categories (e.g. ["cms", "javascript-frameworks"]). Omit to scan all categories. |
Example Request
curl -X POST "https://stackpeek.dev/api/v1/detect" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"categories": ["cms", "javascript-frameworks"]
}'Example Response
{
"status": "success",
"data": {
"url": "https://example.com",
"scannedAt": "2026-02-14T10:30:00.000Z",
"technologies": [
{
"name": "React",
"category": "javascript-frameworks",
"categoryLabel": "JavaScript Frameworks",
"website": "https://react.dev",
"version": "18.2.0",
"confidence": 95,
"evidence": ["html:data-reactroot", "script:react-dom"]
},
{
"name": "WordPress",
"category": "cms",
"categoryLabel": "CMS",
"website": "https://wordpress.org",
"confidence": 100,
"evidence": ["html:wp-content", "meta:generator"]
}
],
"meta": {
"totalDetected": 12,
"categoriesFound": 5,
"scanDurationMs": 1420
}
}
}GET /detect
Detect technologies via GET request. URL passed as query parameter. No category filtering in GET variant.
Query Parameters
| Param | Type | Required | Description |
|---|---|---|---|
url |
string | required | The website URL to analyze (URL-encoded) |
Example Request
curl "https://stackpeek.dev/api/v1/detect?url=https%3A%2F%2Fexample.com"
GET /categories
Returns all technology categories with fingerprint counts.
Example Response
{
"status": "success",
"data": [
{ "id": "cms", "label": "CMS", "count": 8 },
{ "id": "javascript-frameworks", "label": "JavaScript Frameworks", "count": 12 },
{ "id": "analytics", "label": "Analytics", "count": 15 },
{ "id": "cdn", "label": "CDN", "count": 6 }
]
}GET /technologies
Returns all detectable technologies across all categories.
Example Response
{
"status": "success",
"data": [
{
"name": "React",
"category": "javascript-frameworks",
"categoryLabel": "JavaScript Frameworks",
"website": "https://react.dev",
"hasVersionDetection": true
},
{
"name": "WordPress",
"category": "cms",
"categoryLabel": "CMS",
"website": "https://wordpress.org",
"hasVersionDetection": true
}
]
}Response Format
All responses are JSON. Successful responses include "status": "success". Error responses include "error" and "message" fields.
Technology Object Structure
| Field | Type | Description |
|---|---|---|
name | string | Technology name (e.g. "React") |
category | string | Category ID (e.g. "javascript-frameworks") |
categoryLabel | string | Human-readable category (e.g. "JavaScript Frameworks") |
website | string | Official website URL |
version | string | Detected version (if available) |
confidence | number | Detection confidence (0-100) |
evidence | array | Fingerprint matches (e.g. ["html:data-reactroot"]) |
Available Categories
cms, javascript-frameworks, backend-frameworks, css-frameworks, analytics, cdn, web-servers, ecommerce, javascript-libraries, marketing, payment, security, tag-managers, programming-languages, seo, hosting, font-services, build-tools
Error Codes
| Status | Meaning |
|---|---|
400 | Bad Request — Missing URL, Invalid URL, or Blocked URL (SSRF protection) |
404 | Not Found — Endpoint does not exist |
429 | Too Many Requests — Rate limit exceeded (30 req/min) |
500 | Internal Server Error — Something went wrong |
502 | Bad Gateway — Target site unreachable |
504 | Gateway Timeout — Target site timeout |
Error Response Example
{
"error": "Missing URL",
"message": "Provide a \"url\" field in the request body"
}Rate Limits
The API applies rate limiting to protect service quality:
| Limit | Value |
|---|---|
| Requests per minute | 30 per IP address |
| Window | 60 seconds sliding window |
When rate limited, the API returns a 429 status with a Retry-After header.
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
cURL Example
# Detect all technologies
curl "https://stackpeek.dev/api/v1/detect?url=https%3A%2F%2Fexample.com"
# Detect specific categories
curl -X POST "https://stackpeek.dev/api/v1/detect" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"categories": ["cms", "javascript-frameworks"]
}'
# List all categories
curl "https://stackpeek.dev/api/v1/categories"JavaScript Example
// Detect all technologies
const response = await fetch(
'https://stackpeek.dev/api/v1/detect?url=' +
encodeURIComponent('https://example.com')
);
const data = await response.json();
console.log(data);
// Detect specific categories
const postResponse = await fetch('https://stackpeek.dev/api/v1/detect', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://example.com',
categories: ['cms', 'javascript-frameworks']
}),
});
const result = await postResponse.json();
console.log(result);Python Example
import requests
# Detect all technologies
response = requests.get(
'https://stackpeek.dev/api/v1/detect',
params={'url': 'https://example.com'}
)
data = response.json()
print(data)
# Detect specific categories
response = requests.post(
'https://stackpeek.dev/api/v1/detect',
json={
'url': 'https://example.com',
'categories': ['cms', 'javascript-frameworks']
}
)
result = response.json()
print(result)