The Web Tech API provides deep website technology intelligence, including web stack detection, HTTP headers, meta tags, security headers, and page structure analysis.
Authentication
All API requests require authentication. Include your API key in the request header:
X-API-Key: your_api_key_here
Production Endpoints
GET /api/v1/webtech/{domain}
GET /api/v1/webtech?url={url}
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
domain |
string | Conditional | The domain name to analyze (e.g., google.com ). Required if url is not provided. |
url |
string | Conditional | A full URL to analyze (e.g., https://www.github.com/profile ). Required if domain is not provided. Must include http:// or https:// . |
Response Field Descriptions
The API returns a JSON object with a detailed analysis of the website's front-end and back-end technologies.
Field | Type | Description |
---|---|---|
domain |
string | The sanitized domain name that was analyzed. |
final_url |
string | The final URL after following all redirects. |
status_code |
number | The HTTP status code of the final response. |
title |
string | The content of the page's <title> tag. |
html_lang |
string | The language specified in the <html> tag's lang attribute. |
meta |
object | A collection of meta tags, including SEO, Open Graph, and Twitter cards. |
headers |
object | All HTTP response headers from the final URL. |
security_headers |
object | A subset of headers specifically related to security. |
cookies |
array | An array of Set-Cookie header strings from the response. |
links |
object | Important links found on the page, like canonical and favicon. |
structure |
object | A summary of the page's HTML structure (scripts, forms, etc.). |
technologies |
array | An array of detected web technologies with name and version. |
redirect_chain |
array | An array of objects detailing each step of an HTTP redirect. |
metadata |
object | Information about the API request and data freshness. |
technologies
Array
This array contains objects, each representing a detected technology.
Field | Type | Description |
---|---|---|
name |
string | The name of the detected technology (e.g., React ). |
version |
string | The detected version number, or null if not found. |
Example Response
{
"domain": "github.com",
"final_url": "https://github.com/",
"status_code": 200,
"title": "GitHub: Let’s build from here",
"html_lang": "en",
"meta": {
"description": "GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and features, power your CI/CD and DevOps workflows, and secure code before you commit it.",
"keywords": null,
"generator": null,
"open_graph": {
"og:image": "https://github.githubassets.com/assets/cb-30379375.jpg",
"og:image:alt": "GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and features, power your CI/CD and DevOps workflows, and secure code before you commit it.",
"og:title": "GitHub: Let’s build from here",
"og:url": "https://github.com/"
},
"twitter": {
"twitter:card": "summary_large_image",
"twitter:site": "@github",
"twitter:title": "GitHub: Let’s build from here"
},
"robots": null
},
"headers": {
"server": "Varnish",
"content-type": "text/html; charset=utf-8",
"...": "..."
},
"security_headers": {
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"x-frame-options": "deny",
"x-content-type-options": "nosniff",
"x-xss-protection": "0"
},
"cookies": ["..."],
"links": {
"canonical": "https://github.com/",
"favicon": "https://github.githubassets.com/favicons/favicon.svg",
"manifest": "/manifest.json"
},
"structure": {
"script_count": 10,
"stylesheet_count": 2,
"image_count": 5,
"form_count": 2,
"anchor_count": 50,
"external_links": 10,
"internal_links": 40
},
"technologies": [
{ "name": "Varnish", "version": null },
{ "name": "React", "version": "18.2.0" }
],
"redirect_chain": [],
"metadata": {
"data_freshness": {"last_update_check": "2025-08-16T20:35:36.365Z"},
"timestamp": "2025-08-16T20:35:50.108Z",
"response_time_ms": 1850,
"request_id": "req_1755376547140_e2d4a023"
}
}
Examples
cURL (Domain in Path)
curl -X GET "https://api.chapyapi.com/api/v1/webtech/github.com" \
-H "X-API-Key: your_api_key_here"
cURL (URL as Query Parameter)
curl -X GET "https://api.chapyapi.com/api/v1/webtech?url=https://www.github.com/devAlphaSystem" \
-H "X-API-Key: your_api_key_here"
JavaScript
const apiKey = 'your_api_key_here';
async function fetchWebTech(target) {
const isUrl = target.startsWith('http://') || target.startsWith('https://');
const endpoint = isUrl ? `/api/v1/webtech?url=${encodeURIComponent(target)}` : `/api/v1/webtech/${target}`;
const response = await fetch(`https://api.chapyapi.com${endpoint}`, {
headers: {
'X-API-Key': apiKey
}
});
const data = await response.json();
console.log(data);
}
fetchWebTech('github.com');
fetchWebTech('https://www.github.com/devAlphaSystem');
Python
import requests
api_key = "your_api_key_here"
def fetch_web_tech(target):
if target.startswith('http://') or target.startswith('https://'):
url = f"https://api.chapyapi.com/api/v1/webtech?url={requests.utils.quote(target, safe='')}"
else:
url = f"https://api.chapyapi.com/api/v1/webtech/{target}"
headers = {"X-API-Key": api_key}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
fetch_web_tech("github.com")
fetch_web_tech("https://www.github.com/devAlphaSystem")
Error Handling
The API uses standard HTTP status codes and returns error details in JSON format.
Status Code | Error Code | Description |
---|---|---|
400 | VALIDATION_ERROR |
Invalid domain or URL format provided. |
401 | MISSING_API_KEY |
API key not provided. |
401 | INVALID_API_KEY |
API key is invalid, inactive, or expired. |
402 | QUOTA_EXCEEDED |
Your daily Web Tech request quota has been reached. |
403 | ENDPOINT_FORBIDDEN |
Your API key is not permitted to access this endpoint. |
403 | FORBIDDEN |
Access to private/reserved/local IPs is blocked (SSRF protection). |
429 | RATE_LIMIT_EXCEEDED |
Too many requests. Check X-RateLimit-Reset header. |
503 | SERVICE_INITIALIZING |
The service is starting up. Please try again shortly. |
503 | SERVICE_ERROR |
Failed to fetch or parse the target website. |
Error Response Example
{
"error": "Failed to resolve host: google-does-not-exist.com",
"code": "SERVICE_ERROR",
"requestId": "req_1755376547140_e2d4a023"
}