VectorCiteVectorCite
Public API · v1

Public REST API/api/v1/grade

Programmatic access to the same grader that powers /grade. Free, no auth, IP-rate-limited. Output is stable JSON; the v1 contract won't break.

EndpointGET /api/v1/grade
AuthNone. IP-rate-limited only.
CORSOpen. Use from any origin.
Cache24h per-domain at the CDN edge. Stale-while-revalidate 7d.
Rate limitGenerous per-IP daily cap (same tier as the public audit).
CostFree.

Request

curl
curl https://vectorcite.digiocular.com/api/v1/grade?domain=stripe.com

Response

json (200)
{
  "version": "v1",
  "grade": {
    "domain": "stripe.com",
    "fetchedAt": "2026-06-01T10:42:00.000Z",
    "httpStatus": 200,
    "score": 92,
    "letter": "A",
    "checks": [
      {
        "key": "https",
        "label": "HTTPS",
        "status": "pass",
        "detail": "TLS responds correctly…",
        "weight": 10
      },
      …
    ],
    "summary": "stripe.com is well-positioned for AI citation…"
  },
  "links": {
    "report": "https://vectorcite.digiocular.com/grade/stripe.com",
    "badge": "https://vectorcite.digiocular.com/badge/stripe.com",
    "fullAudit": "https://vectorcite.digiocular.com/audit?url=https://stripe.com"
  }
}

Code samples

node.js
// Node 18+
const res = await fetch("https://vectorcite.digiocular.com/api/v1/grade?domain=stripe.com");
if (!res.ok) throw new Error(`API returned ${res.status}`);
const { grade } = await res.json();
console.log(`${grade.domain}: ${grade.letter} (${grade.score}/100)`);
console.log(`Failing: ${grade.checks.filter(c => c.status === "fail").map(c => c.label).join(", ")}`);
python
import requests

res = requests.get(
    "https://vectorcite.digiocular.com/api/v1/grade",
    params={"domain": "stripe.com"},
)
res.raise_for_status()
grade = res.json()["grade"]
print(f"{grade['domain']}: {grade['letter']} ({grade['score']}/100)")

Error envelope

json (4xx / 5xx)
{
  "error": "rate_limited" | "missing_parameter" | "unreachable",
  "message": "Human-readable reason",
  "retryAfterMs": 86400000   // only on 429
}

Versioning

The v1 response shape is stable. New optional fields may be added; existing fields keep their key + type. Breaking changes ship at /api/v2/.

Try it now.

One curl. Real grade.

/api/v1/grade?domain=stripe.com