Documentation 5 min read

Web Tech API

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"
}