Pay-per-Verify: an agent pays $0
Pay-per-Verify: an agent pays $0.01 to verify a post-quantum (ML-DSA-65 / Dilithium-3 or Dilithium-2, NIST FIPS 204; scheme auto-detected by size) signature over a message against a public key. A generic machine-to-machine PQC proof primitive for autonomous agents. x402-native.
10000 (raw units)
price
1
calls / 30d
1
unique payers
2026-09-15
updated
Provider
fractalai.net.co · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xC13789e82661635d9Cea38a53A0390CF9939ef4f",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xC13789e82661635d9Cea38a53A0390CF9939ef4f",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"body": {
"message_b64": "BASE64_BYTES",
"public_key": "BASE64_PK",
"signature": "BASE64_SIG"
},
"bodyType": "json",
"description": "Pay-per-Verify: an agent pays $0.01 to verify a post-quantum (ML-DSA-65 / Dilithium-3 or Dilithium-2, NIST FIPS 204; scheme auto-detected by size) signature over a message against a public key. A generic machine-to-machine PQC proof primitive for autonomous agents. x402-native.",
"info": {
"input": {
"body": {
"message_b64": "BASE64_BYTES",
"public_key": "BASE64_PK",
"signature": "BASE64_SIG"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"algorithm": "ml-dsa-65",
"valid": true,
"verified_algorithm": "dilithium2"
},
"type": "json"
}
},
"method": "POST",
"output": {
"example": {
"algorithm": "ml-dsa-65",
"valid": true,
"verified_algorithm": "dilithium2"
},
"schema": {
"properties": {
"algorithm": {
"description": "ml-dsa-65 — algorithm of THIS route's attestation signature over the verdict (NOT necessarily the client input scheme; see verified_algorithm).",
"type": "string"
},
"algorithm_label": {
"description": "ML-DSA-65 / Dilithium-3 (NIST FIPS 204)",
"type": "string"
},
"attestation_digest": {
"description": "sha256 hex over JSON({valid, verified_algorithm, message_b64, message_hash, signature: input_signature, public_key: input_public_key}) — reconstructible from this response.",
"type": "string"
},
"input_public_key": {
"description": "The exact base64 client public key that was verified (echoed for attestation_digest reconstruction).",
"type": "string"
},
"input_signature": {
"description": "The exact base64 client signature that was verified (echoed so a third party can recompute attestation_digest from this response alone).",
"type": "string"
},
"message_b64": {
"description": "The exact base64 bytes that were verified (echoed for reproducibility).",
"type": "string"
},
"payment": {
"description": "Settlement receipt (scheme, network, asset, txHash, payer, settled).",
"type": "object"
},
"public_key": {
"description": "Base64 ML-DSA-65 public key (1952 bytes) that verifies the attestation signature. Null if the served signer was unavailable.",
"type": "string"
},
"served_signature_error": {
"description": "Present only if the served attestation signer failed; the verdict is still authoritative and paid.",
"type": "string"
},
"signature": {
"description": "Base64 ML-DSA-65 / Dilithium-3 (NIST FIPS 204) signature (3309 bytes) by this server over the EXACT bytes echoed in `signed_message` = FRACTALAI-x402-served-v1\\nx402-verify-proof\\n<attestation_digest> (route-separated, 3 lines), attesting the verdict. Verify offline: ml_dsa65.verify(b64(signature), utf8(signed_message), b64(public_key)). Null (with served_signature_error) if the served signer was momentarily unavailable — the paid verdict is still served.",
"type": "string"
},
"signed_message": {
"description": "The EXACT UTF-8 bytes the served signature covers (FRACTALAI-x402-served-v1\\nx402-verify-proof\\n<attestation_digest>). Pass verbatim to ml_dsa65.verify — do not reconstruct it yourself.",
"type": "string"
},
"valid": {
"description": "True iff the supplied client signature (ML-DSA-65 or Dilithium-2, auto-detected) is valid over the message for the public key.",
"type": "boolean"
},
"verified_algorithm": {
"description": "The DETECTED scheme of the CLIENT input signature that was verified: ml-dsa-65 or dilithium2.",
"type": "string"
},
"verified_algorithm_label": {
"description": "Human label of verified_algorithm, e.g. \"ML-DSA-65 / Dilithium-3 (NIST FIPS 204)\" or \"Dilithium-2 (NIST FIPS 204)\".",
"type": "string"
}
},
"required": [
"valid",
"algorithm",
"verified_algorithm",
"input_signature",
"input_public_key"
],
"type": "object"
},
"type": "json"
},
"route_key": "POST /api/x402/verify-proof",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"headers": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"queryParams": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
},
"serviceName": "FractalAI Verify",
"tags": [
"verify",
"signature",
"post-quantum",
"primitive",
"ml-dsa-65"
],
"type": "http"
}
}Use it
curl
curl "https://fractalai.net.co/api/x402/verify-proof" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://fractalai.net.co/api/x402/verify-proof");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://fractalai.net.co/api/x402/verify-proof")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/7697.json, and this resource appears in /discovery/resources and /discovery/search.