<Devsly/>
NotebookLM Watermark Remover
Remove the NotebookLM watermark from PDF slide exports — free, unlimited, and 100% in your browser.
View
NotebookLM Video Watermark Remover
Remove the NotebookLM watermark from every frame of your MP4 and auto-trim the end card — free and unlimited.
View
Gemini Watermark Remover
Remove the Gemini (Veo) sparkle watermark from every frame of your AI-generated MP4 — free and unlimited.
View
MCP https://devsly.io/mcp MCP Tools Best Skills API Docs

Keyboard Shortcuts

Navigation

Quick Search
⌘ / Ctrl + K
Toggle Dark Mode
⌘ / Ctrl + D
Close Dialogs
Esc

Tool Actions

Execute / Process
⌘ / Ctrl + Enter
Clear Input
⌘ / Ctrl + Shift + C
Copy Output
⌘ / Ctrl + Shift + X

Editor

Select All
⌘ / Ctrl + A
Undo
⌘ / Ctrl + Z
Redo
⌘ / Ctrl + Shift + Z

API Documentation

Complete reference for Devsly Developer Tools API with interactive examples

DevSly MCP Server

DevSly runs a hosted MCP server (Model Context Protocol). Add it to Claude — or any AI client that supports remote MCP — and your assistant can call DevSly tools directly from the chat: DNS/IP/HTTP lookups, the webhook tester, the NotebookLM & Gemini video watermark remover, and a page design auditor that flags unedited-AI-template tells (stock gradients, glassmorphism, emoji icon grids, cliché copy) alongside accessibility issues.

Server URL
MCP Endpoint
https://devsly.io/mcp

No API key needed. MCP uses OAuth 2.1 — when you add the server, your client sends you to DevSly to sign in and approve access, then receives a token automatically. This is separate from the REST API keys documented below (those are only for /api/v1). Manage or revoke connected AI apps from your dashboard under the AI / MCP tab.

Connect your AI assistant

Adding DevSly to Claude takes under a minute.

  1. Open Claude → Settings → Connectors (or “Add custom connector”).
  2. Paste https://devsly.io/mcp as the server URL and continue.
  3. You’ll be redirected to DevSly — sign in and click Approve.
  4. Ask the assistant to use a tool, e.g. “look up the DNS records for example.com.”
Verify the connection (JSON-RPC)
cURL
curl -X POST https://devsly.io/mcp \
  -H "Authorization: Bearer <oauth-token>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Without a token the endpoint returns 401 with a WWW-Authenticate header pointing at the OAuth metadata, which is what starts the sign-in flow.

Available tools

Eleven tools are exposed over tools/call. They reuse the same validation and SSRF protections as the REST API. Every tool also carries standard MCP annotations — readOnlyHint, destructiveHint, idempotentHint, openWorldHint — so any MCP-compatible client (Claude or otherwise, not just tools/list's name/description text) can tell automatically which tools are safe to call freely and which change or delete something, without needing model-specific instructions.

ToolArgumentsDescription
ip_infoipGeolocation, ISP/ASN, reverse DNS, IPv4/IPv6 class for an IP.
dns_lookupdomainA / AAAA / MX / NS / TXT / CNAME / SOA records.
http_headersurlFinal HTTP status & response headers (SSRF-guarded).
webhook_create—Create a webhook test endpoint and capture URL.
webhook_list—List your webhook endpoints with request counts.
webhook_requestswebhook_idRead requests captured by a webhook endpoint.
webhook_deletewebhook_idDelete a webhook endpoint and its captured requests.
remove_video_watermarkserviceStart a NotebookLM/Gemini video watermark-removal job.
watermark_statusjob_idPoll a watermark job; returns the cleaned-video download link.
discover_site_pagesurl, limitList up to 20 page URLs for a site (sitemap.xml, or homepage links).
audit_page_designurl, page_typeAudit one page for AI-template tells, accessibility, and style-budget issues.
Example: call a tool
JSON-RPC
{"jsonrpc":"2.0","id":2,"method":"tools/call",
 "params":{"name":"dns_lookup","arguments":{"domain":"example.com"}}}

Video watermark remover

A remote MCP server can’t receive a local file from the chat, so remove_video_watermark returns a one-time upload_url. The assistant can upload the video for you, or hand you the link to upload it in your browser (up to 300 MB, 2 hours). Then watermark_status returns a single-use download link for the cleaned video. Uploads and results are deleted right after processing.

Flow
remove_video_watermark({service:"gemini"})  → { job_id, upload_url }
POST the MP4 to upload_url  (multipart/form-data, field "video")
watermark_status({job_id})  → { status:"done", download_url }

Design audit

audit_page_design fetches one page (and up to 4 linked stylesheets, all SSRF-guarded) and reports design issues an assistant can fix directly: signs the page is an unedited AI-generated template (stock gradient heroes, gradient-filled headings, glassmorphism cards, decorative blobs, emoji feature icons, fake "trusted by" logos, a blinking green "live"/"online" dot with no real signal behind it, cliché copy, one generic font with no identity, every surface sharing an identical corner-radius/shadow recipe), alignment bugs at the source level (a spacing class applied to only some of an otherwise-identical repeated group, missing box-sizing: border-box combined with width+padding, floats with no clearfix, columns mixing width units), plus baseline accessibility (contrast, touch targets, missing alt text) and style-budget proliferation. Each finding carries a selector/property, what was measured, the threshold, and a concrete fix. It audits one page per call — use discover_site_pages first to get a page list, then call it once per URL.

Flow
discover_site_pages({url:"https://example.com/"})  → { source, pages: [...] }
audit_page_design({url: pages[0]})  → { page_type, findings: [...], summary }
// repeat audit_page_design for each page in the list

Results are heuristic static analysis (no real browser layout or CSS cascade) — a good sanity check before shipping a fix, not a substitute for looking at the rendered page. Fetched page content is third-party data; treat it as such, not as instructions.

Results are cached per URL — 5 minutes for audit_page_design, 30 minutes for discover_site_pages — so repeatedly checking the same page (an assistant re-verifying mid‑chat, a retry, looping over a page list twice) doesn't refetch it every time; the response includes cached and cache_age_seconds so you can tell live results from cached ones. Pass fresh: true to force a live re-check, e.g. right after applying a fix.

OAuth & security

The server implements a full OAuth 2.1 authorization server with PKCE, dynamic client registration, exact redirect-URI matching, short-lived access tokens and refresh rotation. Clients discover everything from the standard metadata endpoints — you don’t configure them by hand.

EndpointPurpose
/.well-known/oauth-protected-resourceResource metadata (RFC 9728)
/.well-known/oauth-authorization-serverAS metadata (RFC 8414)
/oauth/registerDynamic client registration (RFC 7591)
/oauth/authorizeAuthorization + consent (PKCE S256)
/oauth/tokenToken exchange & refresh

Network tools stay SSRF-guarded, uploads are validated by content signature and stored outside the web root, and any data captured by webhooks is treated as untrusted. You can revoke a connected app at any time from your dashboard.

API Key Required

You need to login or register to get your API key.

Authentication

All API requests require authentication using an API key. Include your API key in the request header.

Header Authentication
Request Headers
X-API-Key: YOUR_API_KEY_HERE
Alternative: Bearer Token
Request Headers
Authorization: Bearer YOUR_API_KEY_HERE

⚡ Rate Limits

API rate limits depend on your subscription plan:

Plan Daily Limit Rate Limit
Free 100 requests/day 10 requests/minute
Pro 10,000 requests/day 100 requests/minute
Enterprise 10,000 requests/day 3,000 requests/minute

⚠️ Error Handling

The API uses standard HTTP status codes and returns JSON error responses.

Error Response Format
JSON
{
  "error": "Invalid API key",
  "code": 401,
  "message": "The provided API key is invalid or has been revoked"
}
Common Error Codes
Code Status Description
400 Bad Request Invalid or missing parameters
401 Unauthorized Invalid or missing API key
429 Too Many Requests Rate limit exceeded
500 Internal Server Error Server error occurred
GET /api/v1/network/whois

Perform WHOIS lookup to get domain registration information including registrar, creation date, expiration date, nameservers, and real-time pricing with premium domain detection.

810+ TLDs Real-time Pricing Premium Detection Availability Check
Parameters
Parameter Type Required Description
domain string Required Domain name to lookup (e.g., example.com)
include_pricing boolean Optional Include real-time pricing data from registrar (default: true)
currency string Optional Currency for pricing: USD, EUR, GBP, CNY, INR, CAD, AUD, JPY, MXN, BRL (default: USD)
mode string Optional Query mode: full (WHOIS + Pricing, default), fast (Pricing only, ~3x faster), availability_only (Fastest, just availability + price)
Performance Tip: Use mode=fast for domain sales/search pages. It skips WHOIS lookup and returns results in ~500ms instead of ~2-3 seconds. Results are cached for faster subsequent requests.
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/whois?domain=google.com" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/whois?domain=google.com', {
  method: 'GET',
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE'
  }
});

const data = await response.json();
console.log(data);
Python
import requests

response = requests.get(
    'https://devsly.io/api/v1/network/whois',
    params={'domain': 'google.com'},
    headers={'X-API-Key': 'YOUR_API_KEY_HERE'}
)

data = response.json()
print(data)
Response Fields
Field Type Description
available boolean|null Whether the domain is available for registration (null if unknown)
is_registered boolean|null Whether the domain is currently registered (null if unknown)
is_premium boolean Whether the domain is listed as a premium domain
is_reserved boolean Whether the domain is reserved by the registry
premium_type string|null Type of premium: "registry_premium", "aftermarket", "reserved", "high_price" (null if not premium)
availability_confidence string Confidence level of availability check: "high", "medium", or "low"
whois_server string WHOIS server used for the lookup
parsed_data object Parsed WHOIS information (registrar, dates, nameservers, status)
raw_data string Raw WHOIS response from the server
pricing object|null Real-time pricing data (if include_pricing=true)
pricing.available boolean Availability status from registrar
pricing.is_premium boolean Whether domain is priced as premium at registrar
pricing.registration_price number|null Registration price (null if not available)
pricing.renewal_price number|null Renewal price (null if not available)
pricing.currency string Currency code (USD, EUR, etc.)
meta object Metadata about the query (present in fast/availability_only modes)
meta.cached boolean Whether the result was served from cache
meta.cache_expires integer Unix timestamp when the cache entry expires
meta.query_time_ms integer Query execution time in milliseconds
Example Response (Registered Domain)
200 OK
{
  "success": true,
  "domain": "google.com",
  "available": false,
  "is_registered": true,
  "is_premium": false,
  "is_reserved": false,
  "premium_type": null,
  "availability_confidence": "high",
  "whois_server": "whois.verisign-grs.com",
  "raw_data": "...",
  "parsed_data": {
    "domain_name": "google.com",
    "registrar": "MarkMonitor Inc.",
    "creation_date": "1997-09-15T04:00:00Z",
    "expiration_date": "2028-09-14T04:00:00Z",
    "updated_date": "2024-02-08T08:08:00Z",
    "status": ["clientDeleteProhibited", "clientTransferProhibited", "clientUpdateProhibited"],
    "name_servers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"],
    "registrant": null
  },
  "execution_time_ms": 1250
}
Example Response (Available Domain)
200 OK
{
  "success": true,
  "domain": "xyzrandomdomain123456.com",
  "available": true,
  "is_registered": false,
  "is_premium": false,
  "is_reserved": false,
  "premium_type": null,
  "availability_confidence": "high",
  "whois_server": "whois.verisign-grs.com",
  "raw_data": "No match for domain \"XYZRANDOMDOMAIN123456.COM\"...",
  "parsed_data": {
    "domain_name": null,
    "registrar": null,
    "creation_date": null,
    "expiration_date": null,
    "updated_date": null,
    "status": [],
    "name_servers": [],
    "registrant": null
  },
  "pricing": {
    "available": true,
    "is_premium": false,
    "registration_price": 10.88,
    "renewal_price": 10.88,
    "currency": "USD"
  },
  "execution_time_ms": 850
}
Example Response (Premium Domain with Pricing)
200 OK
{
  "success": true,
  "domain": "vwx.dev",
  "available": true,
  "is_registered": false,
  "is_premium": true,
  "is_reserved": false,
  "premium_type": "registry_premium",
  "availability_confidence": "high",
  "whois_server": "whois.nic.google",
  "raw_data": "...",
  "parsed_data": {
    "domain_name": null,
    "registrar": null,
    "creation_date": null,
    "expiration_date": null,
    "updated_date": null,
    "status": [],
    "name_servers": [],
    "registrant": null
  },
  "pricing": {
    "available": true,
    "is_premium": true,
    "registration_price": 97.90,
    "renewal_price": 97.90,
    "currency": "USD"
  },
  "execution_time_ms": 1250
}
POST /api/v1/network/domains/check

Check availability and pricing for multiple domains in a single request. Ideal for domain search pages, bulk availability checks, and domain portfolio management.

Up to 100 Domains Parallel Processing Smart Caching Real-time Pricing
Request Body (JSON)
Parameter Type Required Description
domains array Required Array of domain names to check (max 100)
mode string Optional Query mode: fast (default, recommended), full
currency string Optional Currency for pricing: USD, EUR, GBP, etc. (default: USD)
GET Support: You can also use GET with comma-separated domains: /api/v1/network/domains/check?domains=a.com,b.net,c.org
Example Request
cURL
curl -X POST "https://devsly.io/api/v1/network/domains/check" \
  -H "X-API-Key: YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "domains": ["example.com", "mybrand.net", "startup.io", "cool.dev"],
    "mode": "fast",
    "currency": "USD"
  }'
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/domains/check', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    domains: ['example.com', 'mybrand.net', 'startup.io', 'cool.dev'],
    mode: 'fast',
    currency: 'USD'
  })
});

const data = await response.json();
console.log(data);
Python
import requests

response = requests.post(
    'https://devsly.io/api/v1/network/domains/check',
    json={
        'domains': ['example.com', 'mybrand.net', 'startup.io', 'cool.dev'],
        'mode': 'fast',
        'currency': 'USD'
    },
    headers={'X-API-Key': 'YOUR_API_KEY_HERE'}
)

data = response.json()
print(data)
Response Fields
Field Type Description
success boolean Whether the bulk request succeeded
query_time_ms integer Total execution time in milliseconds
total integer Total number of domains checked
cached_count integer Number of results served from cache
checked_count integer Number of domains checked via API
results object Results keyed by domain name
results.{domain}.available boolean|null Whether the domain is available
results.{domain}.is_premium boolean Whether it's a premium domain
results.{domain}.pricing object Pricing information (registration, renewal, currency)
results.{domain}.cached boolean Whether result was from cache
Example Response
200 OK
{
  "success": true,
  "query_time_ms": 1250,
  "total": 4,
  "cached_count": 1,
  "checked_count": 3,
  "mode": "fast",
  "currency": "USD",
  "results": {
    "example.com": {
      "success": true,
      "available": false,
      "is_registered": true,
      "is_premium": false,
      "availability_confidence": "high",
      "cached": true
    },
    "mybrand.net": {
      "success": true,
      "available": true,
      "is_registered": false,
      "is_premium": false,
      "availability_confidence": "high",
      "pricing": {
        "registration": 11.99,
        "renewal": 11.99,
        "currency": "USD",
        "is_premium": false
      },
      "cached": false
    },
    "startup.io": {
      "success": true,
      "available": true,
      "is_registered": false,
      "is_premium": true,
      "availability_confidence": "high",
      "pricing": {
        "registration": 59.99,
        "renewal": 59.99,
        "currency": "USD",
        "is_premium": true
      },
      "cached": false
    },
    "cool.dev": {
      "success": true,
      "available": true,
      "is_registered": false,
      "is_premium": false,
      "availability_confidence": "high",
      "pricing": {
        "registration": 14.99,
        "renewal": 14.99,
        "currency": "USD",
        "is_premium": false
      },
      "cached": false
    }
  }
}
Rate Limiting: Maximum 100 domains per request. For larger batches, split into multiple requests.
GET /api/v1/network/dns-lookup

Retrieve DNS records for a domain including A, AAAA, MX, NS, TXT, CNAME, and SOA records.

Parameters
Parameter Type Required Description
domain string Required Domain name to lookup
type string Optional Record type: ALL, A, AAAA, MX, NS, TXT, CNAME, SOA (default: ALL)
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/dns-lookup?domain=google.com&type=A" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "domain": "google.com",
  "records": {
    "A": ["142.250.185.46"],
    "AAAA": ["2a00:1450:4001:830::200e"],
    "MX": [
      {"priority": 10, "host": "smtp.google.com"}
    ],
    "NS": ["ns1.google.com", "ns2.google.com"],
    "TXT": ["v=spf1 include:_spf.google.com ~all"]
  }
}
GET /api/v1/network/ip-info

Get detailed information about an IP address including geolocation, ISP, and organization data.

Parameters
Parameter Type Required Description
ip string Optional IP address to lookup (defaults to requester's IP)
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/ip-info?ip=8.8.8.8" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "ip": "8.8.8.8",
  "data": {
    "country": "United States",
    "country_code": "US",
    "region": "California",
    "city": "Mountain View",
    "latitude": 37.386,
    "longitude": -122.0838,
    "isp": "Google LLC",
    "organization": "Google Public DNS",
    "timezone": "America/Los_Angeles"
  }
}
GET /api/v1/network/http-headers

Comprehensive HTTP response header analyzer with advanced security scoring. Analyzes 40+ header types including security headers (HSTS, CSP, X-Frame-Options, etc.), SSL/TLS certificates, cache optimization, CORS configuration, CDN/WAF detection, cookie security, and performance features. Returns detailed analysis with recommendations, severity ratings, and an overall security grade from A+ to F.

13 Security Headers SSL/TLS Analysis CDN/WAF Detection Performance Metrics Cookie Security Overall Scoring
Parameters
Parameter Type Required Description
url string Required Full URL to analyze (https://example.com)
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/http-headers?url=https://google.com" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "url": "https://wapi.com.tr",
  "effective_url": "https://wapi.com.tr/",
  "http_code": 200,
  "http_version": 3,
  "response_time": 96,
  "execution_time_ms": 96,
  "timings": {
    "dns": 0.21,
    "connect": 5.59,
    "ssl": 0,
    "ttfb": 94.87,
    "total": 95.7
  },
  "network": {
    "primary_ip": "2606:4700:3033::ac43:b8a4",
    "primary_port": 443,
    "redirect_count": 0
  },
  "size": {
    "header": 1202,
    "download": 14260,
    "total": -1
  },
  "headers": {
    "date": "Sat, 04 Oct 2025 09:14:07 GMT",
    "content-type": "text/html; charset=UTF-8",
    "server": "cloudflare",
    "x-content-type-options": "nosniff",
    "x-frame-options": "SAMEORIGIN",
    "x-xss-protection": "1; mode=block",
    "referrer-policy": "strict-origin-when-cross-origin",
    "content-security-policy": "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';",
    "content-encoding": "br",
    "set-cookie": "PHPSESSID=098b9fcb6d3970b81fb3349e7c3bdbdc; HttpOnly; SameSite=Lax"
  },
  "analysis": {
    "security": {
      "score": 49,
      "max_score": 150,
      "percentage": 32.7,
      "grade": "F",
      "summary": {
        "critical": 2,
        "high": 0,
        "medium": 4,
        "low": 1
      },
      "checks": [
        {
          "name": "Strict-Transport-Security (HSTS)",
          "category": "critical",
          "max_score": 20,
          "score": 0,
          "present": false,
          "passed": false,
          "description": "Forces HTTPS connections and prevents downgrade attacks",
          "recommendation": "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload",
          "risk": "Man-in-the-middle attacks, SSL stripping, session hijacking",
          "details": ["✗ HSTS header not found"]
        },
        {
          "name": "X-Frame-Options",
          "category": "high",
          "max_score": 10,
          "score": 10,
          "present": true,
          "value": "SAMEORIGIN",
          "passed": true,
          "description": "Prevents clickjacking attacks",
          "details": ["✓ Valid directive: SAMEORIGIN"]
        }
      ]
    },
    "ssl_tls": {
      "enabled": true,
      "grade": "A",
      "certificate": {
        "subject": "CN = wapi.com.tr",
        "issuer": "C = US, O = Google Trust Services, CN = WE1",
        "valid_from": "Sep  6 11:15:36 2025 GMT",
        "valid_to": "Dec  5 12:13:57 2025 GMT"
      },
      "ssl_version": "OpenSSL/3.0.7"
    },
    "cache": {
      "cacheable": false,
      "score": 5,
      "max_score": 20,
      "details": [
        "• No caching allowed (no-store)",
        "✓ must-revalidate present"
      ]
    },
    "performance": {
      "compression": "br",
      "http2": false,
      "http3": true,
      "score": 10,
      "max_score": 20,
      "details": [
        "✓ Brotli compression enabled (best)",
        "✓ HTTP/3 (QUIC) advertised via Alt-Svc"
      ]
    },
    "cdn_waf": {
      "cdn": "Cloudflare",
      "waf": "CLOUDFLARE",
      "details": [
        "✓ CDN detected: Cloudflare (via Server header)",
        "✓ WAF detected: CLOUDFLARE"
      ]
    },
    "cookies": {
      "score": 9,
      "max_score": 15,
      "cookies": [
        {
          "name": "PHPSESSID",
          "secure": false,
          "httponly": true,
          "samesite": "Lax",
          "score": 3,
          "issues": ["Missing Secure flag"]
        }
      ]
    }
  },
  "overall_score": {
    "score": 31.7,
    "max_score": 97.5,
    "percentage": 32.5,
    "grade": "F"
  }
}
POST /api/v1/network/my-webhook-create

Create a new webhook endpoint for testing HTTP requests. Returns a unique webhook URL that can receive and log HTTP requests in real-time.

Request Body Parameters

No request body parameters required.

Example Request
cURL
curl -X POST "https://devsly.io/api/v1/network/my-webhook-create" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/my-webhook-create', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE'
  }
});

const data = await response.json();
console.log(data);
Python
import requests

response = requests.post(
    'https://devsly.io/api/v1/network/my-webhook-create',
    headers={'X-API-Key': 'YOUR_API_KEY_HERE'}
)

data = response.json()
print(data)
Example Response
200 OK
{
  "success": true,
  "webhook_id": "a1b2c3d4e5f6g7h8",
  "webhook_url": "https://devsly.io/webhook/a1b2c3d4e5f6g7h8",
  "created_at": "2025-10-05T12:00:00Z",
  "message": "Webhook created successfully"
}
GET /api/v1/network/my-webhooks

List all webhooks created by the currently authenticated user. Returns webhook details including ID, URL, creation date, and request count.

Request Parameters

No request parameters required.

Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/my-webhooks" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/my-webhooks', {
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE'
  }
});

const data = await response.json();
console.log(data);
Example Response
200 OK
{
  "success": true,
  "data": {
    "total": 3,
    "webhooks": [
      {
        "id": 1,
        "webhook_id": "a1b2c3d4e5f6g7h8",
        "webhook_url": "https://devsly.io/webhook/a1b2c3d4e5f6g7h8",
        "request_count": 15,
        "created_at": "2025-10-05T10:30:00Z"
      },
      {
        "id": 2,
        "webhook_id": "x9y8z7w6v5u4t3s2",
        "webhook_url": "https://devsly.io/webhook/x9y8z7w6v5u4t3s2",
        "request_count": 5,
        "created_at": "2025-10-05T11:15:00Z"
      }
    ]
  }
}
GET /api/v1/network/my-webhook-requests

Retrieve all HTTP requests received by a specific webhook. Returns detailed information including headers, body, method, IP address, and timestamp. Only returns requests for webhooks owned by the authenticated user.

Parameters
Parameter Type Required Description
webhook_id string Required Webhook ID to retrieve requests for
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/network/my-webhook-requests?webhook_id=a1b2c3d4e5f6g7h8" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/my-webhook-requests?webhook_id=a1b2c3d4e5f6g7h8', {
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE'
  }
});

const data = await response.json();
console.log(data);
Example Response
200 OK
{
  "success": true,
  "webhook_id": "a1b2c3d4e5f6g7h8",
  "data": {
    "total": 2,
    "requests": [
      {
        "id": 45,
        "method": "POST",
        "headers": {
          "Content-Type": "application/json",
          "User-Agent": "curl/7.68.0",
          "Accept": "*/*"
        },
        "body": "{\"event\":\"user.created\",\"user_id\":12345}",
        "query_params": null,
        "ip_address": "192.168.1.100",
        "user_agent": "curl/7.68.0",
        "created_at": "2025-10-05T12:30:45Z"
      },
      {
        "id": 44,
        "method": "GET",
        "headers": {
          "User-Agent": "Mozilla/5.0",
          "Accept": "text/html"
        },
        "body": null,
        "query_params": "{\"test\":\"true\"}",
        "ip_address": "192.168.1.101",
        "user_agent": "Mozilla/5.0",
        "created_at": "2025-10-05T12:25:30Z"
      }
    ]
  }
}
POST /api/v1/network/my-webhook-delete

Delete a webhook and all its associated requests. Requires authentication and ownership of the webhook.

Request Body Parameters
Parameter Type Required Description
webhook_id string Required Webhook ID to delete
Example Request
cURL
curl -X POST "https://devsly.io/api/v1/network/my-webhook-delete" \
  -H "X-API-Key: YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"webhook_id": "a1b2c3d4e5f6g7h8"}'
JavaScript
const response = await fetch('https://devsly.io/api/v1/network/my-webhook-delete', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY_HERE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    webhook_id: 'a1b2c3d4e5f6g7h8'
  })
});

const data = await response.json();
console.log(data);
Example Response
200 OK
{
  "success": true,
  "message": "Webhook deleted successfully",
  "webhook_id": "a1b2c3d4e5f6g7h8"
}
POST /api/v1/load-testing/start

Start a new load test to evaluate your application's performance under concurrent user load. Simulate real-world traffic patterns with customizable parameters.

Request Body Parameters
Parameter Type Required Description
targetUrl string Required Target URL to test
httpMethod string Required HTTP method: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
concurrentUsers integer Required Number of concurrent users (1-10000)
testDuration integer Required Test duration in seconds (10-3600)
rampUpTime integer Optional Ramp-up time in seconds (default: 10)
requestsPerSecond integer Optional Target requests per second (default: 0 = unlimited)
authType string Optional Authentication type: none, basic, bearer, apikey (default: none)
Example Request
cURL
curl -X POST "https://devsly.io/api/v1/load-testing/start" \
  -H "X-API-Key: YOUR_API_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "targetUrl": "https://api.example.com/endpoint",
    "httpMethod": "GET",
    "concurrentUsers": 100,
    "testDuration": 60,
    "rampUpTime": 10
  }'
Example Response
200 OK
{
  "success": true,
  "test_id": "load_test_abc123xyz",
  "status": "pending",
  "message": "Load test has been queued",
  "config": {
    "target_url": "https://api.example.com/endpoint",
    "concurrent_users": 100,
    "test_duration": 60
  }
}
GET /api/v1/load-testing/status/{test_id}

Get real-time status of a running or completed load test including progress, metrics, and current statistics.

URL Parameters
Parameter Type Required Description
test_id string Required Test ID returned from start endpoint
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/load-testing/status/load_test_abc123xyz" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "test_id": "load_test_abc123xyz",
  "status": "running",
  "progress": 45,
  "metrics": {
    "total_requests": 4500,
    "successful_requests": 4450,
    "failed_requests": 50,
    "avg_response_time": 125.5,
    "throughput": 75.2,
    "error_rate": 1.1
  },
  "started_at": "2025-10-04T12:00:00Z",
  "estimated_completion": "2025-10-04T12:01:00Z"
}
POST /api/v1/load-testing/stop/{test_id}

Stop a running load test immediately and retrieve partial results.

URL Parameters
Parameter Type Required Description
test_id string Required Test ID of the running test
Example Request
cURL
curl -X POST "https://devsly.io/api/v1/load-testing/stop/load_test_abc123xyz" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "test_id": "load_test_abc123xyz",
  "status": "stopped",
  "message": "Load test has been stopped",
  "partial_results": {
    "total_requests": 2500,
    "successful_requests": 2480,
    "failed_requests": 20,
    "avg_response_time": 130.2
  }
}
GET /api/v1/load-testing/results/{test_id}

Get complete results of a finished load test including detailed metrics, response time distribution, and performance analysis.

URL Parameters
Parameter Type Required Description
test_id string Required Test ID of the completed test
Example Request
cURL
curl -X GET "https://devsly.io/api/v1/load-testing/results/load_test_abc123xyz" \
  -H "X-API-Key: YOUR_API_KEY_HERE"
Example Response
200 OK
{
  "success": true,
  "test_id": "load_test_abc123xyz",
  "status": "completed",
  "results": {
    "total_requests": 10000,
    "successful_requests": 9950,
    "failed_requests": 50,
    "avg_response_time": 125.5,
    "min_response_time": 45.2,
    "max_response_time": 850.3,
    "p50_response_time": 120.1,
    "p75_response_time": 145.8,
    "p90_response_time": 185.2,
    "p95_response_time": 225.5,
    "p99_response_time": 385.7,
    "throughput": 166.7,
    "error_rate": 0.5,
    "total_bytes_sent": 2048000,
    "total_bytes_received": 10240000
  },
  "started_at": "2025-10-04T12:00:00Z",
  "completed_at": "2025-10-04T12:01:00Z"
}

🚧 More Endpoints Coming Soon

We're continuously adding new endpoints. Check back soon for:

  • API Tester endpoint
  • WebSocket Testing endpoint
  • Developer Tools endpoints (Dockerfile Scan, etc.)