{"contract": "dolihi-api-regression-24h-v1", "name": "Dolihi API Regression — 24-hour prepaid report", "description": "Prepaid public JSON API regression report: one HTTPS GET endpoint, up to six observations at four-hour intervals within 24 hours after activation. Fixed first valid JSON baseline, supplied schema/OpenAPI response checks, shape drift and portable reproduction pack. First observation normally within one minute of confirmed payment. Private reports via Bearer access token, retained seven days after the observation window. No upstream payments, credentials, redirects, webhook, automatic renewal, guaranteed uptime or full compatibility certification. Baseline requires a successful JSON sample <=16 KiB/2000 nodes/depth 12. Unavailable, larger or contract-failing responses produce diagnostic findings, not a certified baseline.", "selling_enabled": true, "purchase_url": "https://dolihi-preflight.onrender.com/v1/api-regression/paid", "method": "POST", "price_usdc": 1, "payment": {"protocol": "x402-v2", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount_atomic": "1000000", "payTo": "0x3e68fE23dE33D713c74487df76D816fC9AE51867"}, "inputSchema": {"type": "object", "required": ["check"], "additionalProperties": false, "properties": {"check": {"type": "object", "required": ["url"], "additionalProperties": false, "properties": {"geojson_check": {"type": "boolean", "description": "Check bounded GeoJSON structure, coordinates and ring closure."}, "url": {"type": "string", "description": "Public HTTPS endpoint; no credentials."}, "method": {"type": "string", "enum": ["GET"], "default": "GET"}, "expected_fields": {"type": "array", "maxItems": 20, "items": {"type": "string"}, "description": "Required top-level JSON keys."}, "expected_paths": {"type": "object", "maxProperties": 30, "description": "JSON Pointer to expected type, e.g. /Results/0/Make: string."}, "expected_status": {"type": "integer", "minimum": 100, "maximum": 599, "description": "Expected HTTP status for this response."}, "expected_content_type": {"type": "string", "description": "Expected media type without parameters, e.g. application/json."}, "openapi_spec": {"type": "object", "description": "Inline JSON OpenAPI 3.0/3.1 document slice, <=24 KiB; selected JSON response only. Local references only."}, "openapi_path": {"type": "string", "description": "Optional path template from the supplied OpenAPI document."}, "response_schema": {"type": "object", "description": "Bounded subset: type, properties, required, items, additionalProperties, enum, const, numeric and string/array/object size bounds; formats uuid, date, strict date-time (uppercase T/Z, 1-6 fractional digits, no leap seconds). Bounded anyOf/oneOf/allOf (1–6 branches), type unions. No references or user patterns."}, "x402_check": {"type": "boolean", "description": "Inspect selected x402 v2 HTTP payment advertisement fields without payment or indexing claims."}, "data_rules": {"type": "array", "minItems": 1, "maxItems": 20, "description": "Declared JSON invariants: count_equals_length, unique item keys, ordered item keys, compare scalar fields. Bounded to 1000 items per array and 10000 inspected items.", "items": {"oneOf": [{"type": "object", "additionalProperties": false, "required": ["array_path", "count_path", "kind"], "properties": {"array_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "kind": {"const": "count_equals_length"}, "count_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}}}, {"type": "object", "additionalProperties": false, "required": ["array_path", "key_path", "kind"], "properties": {"key_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "array_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "kind": {"const": "unique"}}}, {"type": "object", "additionalProperties": false, "required": ["array_path", "direction", "key_path", "kind"], "properties": {"key_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "array_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "kind": {"const": "ordered"}, "direction": {"enum": ["ascending", "descending"]}}}, {"type": "object", "additionalProperties": false, "required": ["kind", "left_path", "operator", "right_path"], "properties": {"left_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "right_path": {"type": "string", "maxLength": 128, "description": "JSON Pointer; empty string selects the root."}, "operator": {"enum": ["eq", "lt", "le", "gt", "ge"]}, "kind": {"const": "compare"}}}]}}}}}}, "example": {"check": {"url": "https://httpbin.org/json", "expected_fields": ["slideshow"]}}, "reports_url": "https://dolihi-preflight.onrender.com/v1/api-regression/reports", "buyer_flow": ["Read the live unpaid 402 challenge", "Submit check with buyer-signed PAYMENT-SIGNATURE", "Save returned access_token privately", "Poll reports_url with Bearer token; no further payment", "For unknown payment, use /v1/preflight/recover with request_id and original authorization signature; do not pay twice"]}