API reference

Eight paid endpoints - four category checks, three AI bundles, and compare - plus two free GET endpoints. Paid endpoints are gated by x402, settled in USDC on Algorand. Every price is per call, not multiplied by targets or retries.

EndpointPriceAI verdict
/v1/validate/security$0.05no
/v1/validate/trust$0.05no
/v1/validate/web$0.06no
/v1/validate/engineering$0.08no
/v1/validate/ai$0.15yes
/v1/validate/compare$0.15no
/v1/validate/quick$0.20yes
/v1/validate/full$0.35yes
POST/v1/validate/securityrequires payment

TLS certificate, security headers, SPF, DMARC, MX. No AI, no crawl - just network/DNS checks.

curl -X POST https://api.validex.space/v1/validate/security \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
POST/v1/validate/trustrequires payment

HTTPS, domain age, MX records, privacy policy, terms, contact page. No AI. The last three crawl the site itself, so this one is slower than a pure DNS/TLS check.

curl -X POST https://api.validex.space/v1/validate/trust \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
POST/v1/validate/webrequires payment

Pricing, documentation, about, blog, careers, changelog. No AI.

curl -X POST https://api.validex.space/v1/validate/web \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
POST/v1/validate/engineeringrequires payment

GitHub activity, contributors, release cadence, issue and PR activity, repository age and popularity. No AI.

curl -X POST https://api.validex.space/v1/validate/engineering \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
POST/v1/validate/airequires payment

Runs every category, then returns an AI-forward report: the verdict object (recommendation, executiveSummary, insights, suggestions, opportunities, riskFlags, categoryNarrative) appears before summary in the response. See response shape below.

curl -X POST https://api.validex.space/v1/validate/ai \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
POST/v1/validate/comparerequires payment

Runs the full pipeline against 2-5 targets in parallel, no AI, and returns them ranked by overall score. One failing target never fails the others - it's reported under failed instead. Persists a Comparison row you can retrieve later by id.

curl -X POST https://api.validex.space/v1/validate/compare \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"targets": ["stripe.com", "github.com"]}'
POST/v1/validate/quickrequires payment

Security and trust checks with AI analysis - includes a light crawl of the privacy policy, terms, and contact pages (see trust above), so it's not purely network-level. Scores-first response shape, with summary.executiveSummary mirrored from verdict for backward compatibility.

curl -X POST https://api.validex.space/v1/validate/quick \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com", "refresh": false}'
POST/v1/validate/fullrequires payment

Every category with AI analysis - the complete report. Same scores-first shape as quick.

curl -X POST https://api.validex.space/v1/validate/full \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <your-payment-token>" \
  -d '{"target": "stripe.com"}'
GET/v1/validate/:analysisIdfree

Retrieves a previously generated report by the analysisId any of the single-target endpoints above returns. No payment required.

curl https://api.validex.space/v1/validate/val_thpqccyhgviwf52o4o7g1eld

Returns 200 with the stored report once completed or partial:

{ "success": true, "data": { "analysisId": "val_...", "status": "running" } }

or 404 if the id doesn't exist:

{ "success": false, "error": "Analysis not found." }
GET/v1/validate/compare/:comparisonIdfree

Retrieves a previously generated comparison by the comparisonId a compare call returns. No payment required.

curl https://api.validex.space/v1/validate/compare/cmp_thpqccyhgviwf52o4o7g1eld
{
  "success": true,
  "data": {
    "comparisonId": "cmp_...",
    "targets": ["stripe.com", "github.com"],
    "targetCount": 2,
    "ranking": [ /* same ranking array as the POST response */ ],
    "analysisIds": ["val_...", "val_..."],
    "createdAt": "2026-09-09T19:27:15.000Z"
  }
}

or 404 if the id doesn't exist:

{ "success": false, "error": "Comparison not found." }

Response shape

security, trust, web, engineering, quick, and full all share this shape. verdict is only present on AI-enabled tiers (ai, quick, full) - the others omit it entirely and make no call to the AI layer at all. recommendation is always derived deterministically from the overall score (>=70 integrate, 40-69 caution, <40 avoid) - the AI never invents or overrides it, only writes prose around it. If Groq is unavailable, the prose fields come back null but recommendation and the full deterministic scores are still returned.

{
  "success": true,
  "data": {
    "meta": {
      "analysisId": "val_...",
      "algorithmVersion": "1.0.0",
      "generatedAt": "2026-09-04T01:25:05.230Z",
      "cached": false,
      "tier": "quick"
    },
    "company": {
      "domain": "stripe.com",
      "canonicalUrl": "https://stripe.com",
      "companyName": "Stripe",
      "githubRepo": null
    },
    "summary": {
      "score": 96.9,
      "grade": "A+",
      "confidence": 96.9,
      "executiveSummary": "..."   // AI endpoints only
    },
    "categories": {
      "trust": { "score": 100, "confidence": 97.3, "validatorsEvaluated": 3,
                 "validatorsUnavailable": 0, "weight": 25 }
      // ... security, engineering, product, growth, website
    },
    "strengths": ["..."],
    "weaknesses": ["..."],
    "validators": [ /* ValidationResult[] */ ],
    "sources": [{ "name": "...", "url": "..." }],
    "verdict": {                 // present on ai/quick/full only
      "recommendation": "integrate", // deterministic: score-derived, never AI-invented
      "executiveSummary": "...",     // null if Groq unavailable
      "insights": ["..."],           // null if Groq unavailable
      "suggestions": ["..."],        // null if Groq unavailable
      "opportunities": ["..."],      // null if Groq unavailable
      "riskFlags": ["..."],          // null if Groq unavailable
      "categoryNarrative": { "security": "...", "trust": "..." } // null if Groq unavailable
    }
  }
}

AI-forward shape (ai endpoint only)

Same fields, reordered so verdict comes before summary - the AI content is the primary output, not an addendum.

{
  "success": true,
  "data": {
    "meta": { "analysisId": "val_...", "tier": "ai", /* ... */ },
    "company": { "domain": "stripe.com", /* ... */ },
    "verdict": {
      "recommendation": "integrate",
      "executiveSummary": "...",
      "insights": ["..."],
      "suggestions": ["..."],
      "opportunities": ["..."],
      "riskFlags": ["..."],
      "categoryNarrative": { "security": "...", "trust": "...", /* ... */ }
    },
    "summary": { "score": 96.9, "grade": "A+", "confidence": 96.9 },
    "categories": { /* ... */ },
    "validators": [ /* ValidationResult[] */ ],
    "strengths": ["..."],
    "weaknesses": ["..."],
    "sources": [ /* ... */ ]
  }
}

Compare shape

results holds a full report per target (the same shape above, no verdict - compare never runs AI), in ranked order.

{
  "success": true,
  "data": {
    "meta": { "comparisonId": "cmp_...", "generatedAt": "...", "targetCount": 2 },
    "ranking": [
      { "rank": 1, "domain": "stripe.com", "score": 96.9, "grade": "A+",
        "confidence": 96.1, "analysisId": "val_..." },
      { "rank": 2, "domain": "github.com", "score": 91.2, "grade": "A",
        "confidence": 94.0, "analysisId": "val_..." }
    ],
    "results": [ /* full report per target, in ranked order - see above */ ],
    "failed": [ /* { "target": "...", "error": "..." } for any target whose
                    pipeline threw - never fails the whole call */ ]
  }
}

Paying with x402

Every paid endpoint above is gated by the x402 payment protocol. Call it without a PAYMENT-SIGNATURE header and you get back 402 with the exact payment requirements to satisfy, both in the JSON body and on a PAYMENT-REQUIRED response header (what spec-compliant x402 clients actually read from). amount matches that endpoint's price from the table above - this example shows security's:

{
  "x402Version": 2,
  "error": "Payment required",
  "accepts": [{
    "scheme": "exact",
    "network": "algorand:...",
    "amount": "50000",
    "asset": "10458941",
    "payTo": "...",
    "maxTimeoutSeconds": 300,
    "extra": { "decimals": 6 }
  }],
  "extensions": {
    "bazaar": { /* Bazaar discovery metadata, per-endpoint */ },
    "x402-merchant": { /* merchant identity - name, website, logo */ }
  }
}

Sign and broadcast that payment, then retry the same request with the resulting token in PAYMENT-SIGNATURE. AI agents don't need to do this by hand - @x402/axios and @x402/fetch intercept the 402, pay, and retry automatically.

Discovery

Every endpoint above is individually listed, with its own price and description, at /.well-known/x402 - the manifest x402 Bazaar crawlers read without making any request or payment. Agent-oriented docs are also available at /llms.txt and /agents.md.

AlgorandBuilt for the x402 Global Challenge

© 2026 Validex. All rights reserved.