Api Endpoint

Agent Output Verifier

Free during launch. Independent verification of AI agent output before you pay: an invoice or deliverable against your JSON Schema and rules. Pass/fail, % passed, fix hints, signed attestation and receipt. $0.02 USDC after, no signup, x402 v2.

Open interactive test console

Offering

Provider
verify.sarnai.dev
Method
POST
Offering type
Api Endpoint
Transport type
http
Category
Development
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://verify.sarnai.dev/verify/schema
MIME type
Not provided
First seen
2026-10-16T01:50:24.663Z
Last seen
Tags
json-schema, output-validation, attestation, invoice, X402

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.02 USDC
Atomic price: 20000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Payment option 2
0.02 USDC
Atomic price: 20000 · Network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "20000",
    "payTo": "0x42a3c399f83BCcC3b9eEf81e65954a715D54855E"
  },
  {
    "scheme": "exact",
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "amount": "20000",
    "payTo": "38Fmaf3MWTR6AWPWrtrdXoqn6iqfVcUBHMFRhiUAEjFb"
  }
]

Observed health

Status
Reachable
Latest latency
122 ms
Average latency
695 ms
HTTP status
405
Last checked
Reachability
100% over 10 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "additionalProperties": false,
  "properties": {
    "body": {
      "properties": {
        "agent_id": {
          "description": "Optional label identifying the AI agent that produced submitted_output (for example, the seller), used for /reputation and the trust score: records and scores belong to the producer, not to whoever calls this endpoint. It is an unauthenticated label. agent_ids starting with 'test-' are reserved for testing: the verification runs normally but is never recorded, so it cannot affect any reputation or trust score. 1-200…",
          "type": [
            "string",
            "null"
          ]
        },
        "bounds": {
          "description": "Optional per-field min/max, keyed by dotted path with '[]' array wildcard (e.g. 'items[].price'). Numbers or ISO-8601 dates. Violations are reported as informational flags unless enforce_rules is true.",
          "type": [
            "object",
            "null"
          ]
        },
        "detail": {
          "description": "'full' (default) returns everything; 'compact' returns only the summary, next actions, receipt and signature. Use compact inside verify-repair loops to save tokens. 'compact' fields: summary, next_actions, result, the receipt fields (verification_id, task_id, agent_id, output_hash, schema_hash, rules_hash, verified_at, verifier_version, enforce_rules, strict_content_check), verify and attestation - errors, errors_de…",
          "enum": [
            "full",
            "compact"
          ],
          "type": "string"
        },
        "enforce_rules": {
          "description": "Opt-in. When true, every configured bound and consistency rule must hold, or the result is 'fail' (like strict_content_check), with an 'enforce_rules: ...' entry in errors. That includes a rule or bound that cannot run (its path is missing, a value is not comparable, a value has nothing to be compared against): it fails rather than passing silently, so omitting a field, in the whole path or in any array element the…",
          "type": "boolean"
        },
        "expected_schema": {
          "description": "Required. The JSON Schema (draft-04 to 2020-12) that submitted_output must satisfy: your own requirements, as a JSON object.",
          "type": "object"
        },
        "rules": {
          "description": "Optional cross-field rules: sum_equals, gte, lte, exists_in, unique (duplicate detection). Violations are reported as informational flags unless enforce_rules is true.",
          "items": {
            "properties": {
              "equals": {
                "type": [
                  "integer",
                  "number",
                  "null"
                ]
              },
              "equals_field": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "field": {
                "type": "string"
              },
              "if_present": {
                "type": "boolean"
              },
              "in_field": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "other_field": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tolerance": {
                "type": "number"
              },
              "type": {
                "type": "string"
              },
              "value": {
                "type": [
                  "integer",
                  "number",
                  "string",
                  "null"
                ]
              },
              "values": {
                "type": [
                  "array",
                  "null"
                ]
              }
            },
            "required": [
              "type",
              "field"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "strict_content_check": {
          "description": "Opt-in. When true, any string in submitted_output containing control characters (e.g. null bytes) or embedded HTML/script markup makes the result 'fail'. When false (default) this is not checked at all.",
          "type": "boolean"
        },
        "submitted_output": {
          "description": "Required. The output being checked: any JSON value (object, array, string, number, boolean or null), exactly as the AI agent produced it."
        },
        "task_id": {
          "description": "Your own identifier for this verification. 1-200 printable characters, no control characters and no lone Unicode surrogate; a request outside that range is rejected (422), not truncated.",
          "type": "string"
        }
      },
      "required": [
        "task_id",
        "expected_schema",
        "submitted_output"
      ],
      "type": "object"
    },
    "bodyType": {
      "enum": [
        "json",
        "form-data",
        "text"
      ],
      "type": "string"
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH"
      ],
      "type": "string"
    },
    "type": {
      "const": "http",
      "type": "string"
    }
  },
  "required": [
    "type",
    "method",
    "bodyType",
    "body"
  ],
  "type": "object"
}

Output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "body": {
          "properties": {
            "agent_id": {
              "description": "Optional label identifying the AI agent that produced submitted_output (for example, the seller), used for /reputation and the trust score: records and scores belong to the producer, not to whoever calls this endpoint. It is an unauthenticated label. agent_ids starting with 'test-' are reserved for testing: the verification runs normally but is never recorded, so it cannot affect any reputation or trust score. 1-200…",
              "type": [
                "string",
                "null"
              ]
            },
            "bounds": {
              "description": "Optional per-field min/max, keyed by dotted path with '[]' array wildcard (e.g. 'items[].price'). Numbers or ISO-8601 dates. Violations are reported as informational flags unless enforce_rules is true.",
              "type": [
                "object",
                "null"
              ]
            },
            "detail": {
              "description": "'full' (default) returns everything; 'compact' returns only the summary, next actions, receipt and signature. Use compact inside verify-repair loops to save tokens. 'compact' fields: summary, next_actions, result, the receipt fields (verification_id, task_id, agent_id, output_hash, schema_hash, rules_hash, verified_at, verifier_version, enforce_rules, strict_content_check), verify and attestation - errors, errors_de…",
              "enum": [
                "full",
                "compact"
              ],
              "type": "string"
            },
            "enforce_rules": {
              "description": "Opt-in. When true, every configured bound and consistency rule must hold, or the result is 'fail' (like strict_content_check), with an 'enforce_rules: ...' entry in errors. That includes a rule or bound that cannot run (its path is missing, a value is not comparable, a value has nothing to be compared against): it fails rather than passing silently, so omitting a field, in the whole path or in any array element the…",
              "type": "boolean"
            },
            "expected_schema": {
              "description": "Required. The JSON Schema (draft-04 to 2020-12) that submitted_output must satisfy: your own requirements, as a JSON object.",
              "type": "object"
            },
            "rules": {
              "description": "Optional cross-field rules: sum_equals, gte, lte, exists_in, unique (duplicate detection). Violations are reported as informational flags unless enforce_rules is true.",
              "items": {
                "properties": {
                  "equals": {
                    "type": [
                      "integer",
                      "number",
                      "null"
                    ]
                  },
                  "equals_field": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "field": {
                    "type": "string"
                  },
                  "if_present": {
                    "type": "boolean"
                  },
                  "in_field": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "other_field": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tolerance": {
                    "type": "number"
                  },
                  "type": {
                    "type": "string"
                  },
                  "value": {
                    "type": [
                      "integer",
                      "number",
                      "string",
                      "null"
                    ]
                  },
                  "values": {
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "required": [
                  "type",
                  "field"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "strict_content_check": {
              "description": "Opt-in. When true, any string in submitted_output containing control characters (e.g. null bytes) or embedded HTML/script markup makes the result 'fail'. When false (default) this is not checked at all.",
              "type": "boolean"
            },
            "submitted_output": {
              "description": "Required. The output being checked: any JSON value (object, array, string, number, boolean or null), exactly as the AI agent produced it."
            },
            "task_id": {
              "description": "Your own identifier for this verification. 1-200 printable characters, no control characters and no lone Unicode surrogate; a request outside that range is rejected (422), not truncated.",
              "type": "string"
            }
          },
          "required": [
            "task_id",
            "expected_schema",
            "submitted_output"
          ],
          "type": "object"
        },
        "bodyType": {
          "enum": [
            "json",
            "form-data",
            "text"
          ],
          "type": "string"
        },
        "method": {
          "enum": [
            "POST",
            "PUT",
            "PATCH"
          ],
          "type": "string"
        },
        "type": {
          "const": "http",
          "type": "string"
        }
      },
      "required": [
        "type",
        "method",
        "bodyType",
        "body"
      ],
      "type": "object"
    },
    "output": {
      "properties": {
        "example": {
          "properties": {
            "agent_id": {
              "description": "Echo of the agent_id label supplied in the request; null if none",
              "type": [
                "string",
                "null"
              ]
            },
            "attestation": {
              "description": "Ed25519 signature over this response (every field above, including the receipt fields) plus the timestamp and…",
              "type": "object"
            },
            "enforce_rules": {
              "description": "Whether the request had enforce_rules on: true means every rule and bound had to hold (violations and unrunna…",
              "type": "boolean"
            },
            "errors": {
              "description": "Every violation (schema, then strict-content, then enforce_rules), capped at the first 100 schema-validation…",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "errors_detail": {
              "description": "The structured form of the leading entries in `errors`, same order, so a caller can act (check, path, expecte…",
              "items": {
                "properties": {
                  "check": {
                    "type": "string"
                  },
                  "expected": {
                    "type": "string"
                  },
                  "found": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  }
                },
                "required": [
                  "check",
                  "path",
                  "expected",
                  "found",
                  "message"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "errors_detail_omitted": {
              "description": "errors_total minus errors_detail_total; 0 when every error has a structured form",
              "type": "integer"
            },
            "errors_detail_total": {
              "description": "How many entries in `errors` have a structured form available",
              "type": "integer"
            },
            "errors_omitted": {
              "description": "errors_total minus len(errors); 0 when nothing was cut off",
              "type": "integer"
            },
            "errors_total": {
              "description": "How many errors exist in total",
              "type": "integer"
            },
            "flags": {
              "description": "Integrity findings (placeholder text, possible truncation, bounds and consistency-rule violations)",
              "items": {
                "properties": {
                  "check": {
                    "type": "string"
                  },
                  "detail": {
                    "type": "string"
                  },
                  "field": {
                    "type": "string"
                  },
                  "severity": {
                    "type": "string"
                  }
                },
                "required": [
                  "check",
                  "field",
                  "detail"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "flags_omitted": {
              "description": "Integrity flags beyond the 100 returned; 0 when nothing was cut off",
              "type": "integer"
            },
            "flags_total": {
              "description": "How many flags exist in total (flags holds at most the first 100, plus a flags_truncated marker when there ar…",
              "type": "integer"
            },
            "hints": {
              "description": "Machine-actionable, template-based fix hints: one per schema validation failure (first, in the same order as…",
              "items": {
                "properties": {
                  "check": {
                    "type": "string"
                  },
                  "expected": {
                    "type": "string"
                  },
                  "found": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "source": {
                    "type": "string"
                  }
                },
                "required": [
                  "source",
                  "check",
                  "path",
                  "expected",
                  "found"
                ],
                "type": "object"
              },
              "type": "array"
            },
            "hints_omitted": {
              "description": "hints_total minus len(hints)",
              "type": "integer"
            },
            "hints_total": {
              "description": "How many hints exist in total (hints holds at most the first 20)",
              "type": "integer"
            },
            "integrity_checks": {
              "description": "Integrity checks that passed out of those evaluated (per string: placeholder and truncation, plus strict cont…",
              "type": "object"
            },
            "next_actions": {
              "description": "What to do next, machine-readable",
              "items": {
                "type": "object"
              },
              "type": "array"
            },
            "output_hash": {
              "description": "SHA-256 (64 lowercase hex chars = 32 bytes; add 0x to use it as a bytes32) of the JCS canonical JSON of submi…",
              "type": [
                "string",
                "null"
              ]
            },
            "overall": {
              "description": "A pooled count across both groups: (schema_compliance.passed + integrity_checks.passed) / (schema_compliance.…",
              "type": "object"
            },
            "request_hash": {
              "description": "SHA-256 (64 lowercase hex chars, no 0x prefix) of the RFC 8785 (JCS) canonical JSON of the request as parsed:…",
              "type": [
                "string",
                "null"
              ]
            },
            "result": {
              "enum": [
                "pass",
                "fail"
              ],
              "type": "string"
            },
            "rules_hash": {
              "description": "SHA-256 (64 lowercase hex chars) of the RFC 8785 (JCS) canonical JSON of {\"bounds\": <the bounds you supplied…",
              "type": [
                "string",
                "null"
              ]
            },
            "schema_compliance": {
              "description": "JSON Schema assertions that passed out of those evaluated (each keyword such as type/required/minimum, at eac…",
              "type": "object"
            },
            "schema_hash": {
              "description": "SHA-256 (64 lowercase hex chars) of the JCS canonical JSON of expected_schema",
              "type": [
                "string",
                "null"
              ]
            },
            "strict_content_check": {
              "description": "Whether the request had strict_content_check on: true means control characters and embedded HTML/script marku…",
              "type": "boolean"
            },
            "summary": {
              "description": "Compact digest of the verdict: the same `result`, and `blocking_checks` (the distinct check codes that caused…",
              "type": "object"
            },
            "task_id": {
              "type": "string"
            },
            "verification_id": {
              "description": "Unique UUID (v4) for this verification",
              "type": "string"
            },
            "verified_at": {
              "description": "ISO-8601 UTC time this service ran the verification",
              "type": "string"
            },
            "verifier_version": {
              "type": "string"
            },
            "verify": {
              "description": "How to verify this attestation and receipt without any other lookup than this response and public_key_url: ca…",
              "type": "object"
            }
          },
          "required": [
            "summary",
            "next_actions",
            "result",
            "verification_id",
            "task_id",
            "agent_id",
            "output_hash",
            "schema_hash",
            "rules_hash",
            "request_hash",
            "verified_at",
            "verifier_version",
            "enforce_rules",
            "strict_content_check",
            "errors",
            "errors_total",
            "errors_omitted",
            "errors_detail_total",
            "errors_detail_omitted",
            "flags_total",
            "flags_omitted",
            "hints",
            "hints_total",
            "hints_omitted",
            "schema_compliance",
            "integrity_checks",
            "overall",
            "verify",
            "attestation"
          ],
          "type": "object"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    }
  },
  "required": [
    "input"
  ],
  "type": "object"
}