Beta

Scan API

Check any domain's AI agent readiness score programmatically. No authentication required. Free and rate-limited.

This API is in beta. Response format may change. Pin to the current shape if you depend on specific fields.

POST /api/scan

Scans a domain and returns a NOD Score (0–100) with per-category breakdowns across 75 checks in 7 categories. Results for leaderboard domains are returned instantly from cache. Other domains trigger a live scan (up to 60 seconds).

Request Body

urlstringrequired
The domain to scan. Can include or omit the protocol and www prefix — all are normalized.

Example Request

curl -X POST https://opennod.ai/api/scan \
  -H "Content-Type: application/json" \
  -d '{"url": "stripe.com"}'

Example Response

{
  "url": "https://stripe.com",
  "nod_score": 42.5,
  "label": "Visible",
  "scanned_at": "2026-03-28T18:00:00.000Z",
  "scan_duration_seconds": 8.2,
  "cached": true,
  "categories": {
    "structured_data": {
      "name": "Structured Data & Schema",
      "weight": "25%",
      "normalized_score": 65.2,
      "weighted_contribution": 16.3,
      "checks": [
        {
          "name": "json_ld_present",
          "score": 2,
          "max_score": 2,
          "details": "Found and valid"
        }
      ]
    }
  }
}

Response Fields

nod_scorenumber
Composite score from 0 to 100
labelstring
Human-readable grade (v2.0): Invisible (0–9), Fragile (10–24), Visible (25–39), Capable (40–59), Ready (60–79), Agent Optimized (80–100)
urlstring
Canonical URL that was scanned
scanned_atstring
ISO 8601 timestamp of the scan
cachedboolean
Whether the result came from cache or a live scan
categoriesobject
Per-category breakdown with normalized scores, weights, and individual check results

Rate Limits

The API is free but rate-limited to protect infrastructure costs.

Per IPhourly
5 requests per hour
Per IPdaily
20 requests per day
Globalhourly
200 requests per hour across all users

Rate limit state is returned in response headers:

X-RateLimit-Limit: 5
X-RateLimit-Remaining: 3
X-RateLimit-Reset: 1711648800

Need higher limits? Pro monitoring subscribers will get elevated API access. Contact us →

Error Handling

All errors return JSON with an error field.

200OK
Scan completed successfully
400Bad Request
Missing or invalid URL parameter
404Not Found
Domain not in leaderboard and live scanning unavailable
429Too Many Requests
Rate limit exceeded — includes Retry-After header
504Gateway Timeout
Live scan timed out (site may block automated requests)
500Server Error
Unexpected failure

Error Response Example

{
  "error": "Rate limit exceeded. Free scans are limited to 5 per hour. Need more? Contact us about our Pro plan."
}

Machine-readable spec: /.well-known/openapi.json