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.
| Endpoint | Price | AI verdict |
|---|---|---|
/v1/validate/security | $0.05 | no |
/v1/validate/trust | $0.05 | no |
/v1/validate/web | $0.06 | no |
/v1/validate/engineering | $0.08 | no |
/v1/validate/ai | $0.15 | yes |
/v1/validate/compare | $0.15 | no |
/v1/validate/quick | $0.20 | yes |
/v1/validate/full | $0.35 | yes |
/v1/validate/securityrequires paymentTLS 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"}'/v1/validate/trustrequires paymentHTTPS, 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"}'/v1/validate/webrequires paymentPricing, 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"}'/v1/validate/engineeringrequires paymentGitHub 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"}'/v1/validate/airequires paymentRuns 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"}'/v1/validate/comparerequires paymentRuns 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"]}'/v1/validate/quickrequires paymentSecurity 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}'/v1/validate/fullrequires paymentEvery 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"}'/v1/validate/:analysisIdfreeRetrieves 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_thpqccyhgviwf52o4o7g1eldReturns 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." }/v1/validate/compare/:comparisonIdfreeRetrieves 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.