{"openapi":"3.1.0","info":{"title":"Synthetic Dataset Commerce API","version":"0.1.0"},"servers":[{"url":"https://threat-perception-preview.onrender.com"}],"components":{"securitySchemes":{"purchaseToken":{"type":"http","scheme":"bearer","description":"Client-generated secret X-Purchase-Token from original purchase; an order ID is not sufficient."}}},"paths":{"/v1/catalog":{"get":{"summary":"Discover datasets, exact terms, price, schema, sample and release status","responses":{"200":{"description":"Public allowlisted metadata"}}}},"/v1/purchases/{dataset_id}/{version}":{"post":{"summary":"Buy one immutable version using x402 v2 exact USDC","description":"Read catalogue price/terms before purchase. Persist a random idempotency key and separate secret purchase token across all retries. No second payment for pending settlements. Empty x402 probes receive 402 metadata without creating an order.","parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{32,128}$"}},{"name":"X-Purchase-Token","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{32,128}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"},"description":"Official x402 v2 base64 payment payload, generated by a configured payment client."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"terms_version":{"type":"string"}},"required":["terms_version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Order receipt or Checkout URL","content":{"application/json":{"schema":{"type":"object","required":["order_id","status"],"properties":{"order_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["quoted","payment_pending","settlement_pending","paid","failed","expired","revoked"]},"download_endpoint":{"type":["string","null"]}}}}}},"202":{"description":"Settlement pending; do not pay again","content":{"application/json":{"schema":{"type":"object","required":["order_id","status"],"properties":{"order_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["quoted","payment_pending","settlement_pending","paid","failed","expired","revoked"]},"download_endpoint":{"type":["string","null"]}}}}}},"402":{"description":"Payment required; PAYMENT-REQUIRED header is an x402 v2 challenge","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"}}}},"409":{"description":"Unapproved release, terms/idempotency conflict, or revoked order"},"503":{"description":"Payment/storage unavailable or not configured"}}}},"/v1/checkouts/{dataset_id}/{version}":{"post":{"summary":"Create a Stripe-hosted Checkout Session","description":"Read catalogue price/terms before purchase. Persist a random idempotency key and separate secret purchase token across all retries. No second payment for pending settlements. Empty x402 probes receive 402 metadata without creating an order.","parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{32,128}$"}},{"name":"X-Purchase-Token","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{32,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"terms_version":{"type":"string"}},"required":["terms_version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Order receipt or Checkout URL","content":{"application/json":{"schema":{"type":"object","required":["order_id","status"],"properties":{"order_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["quoted","payment_pending","settlement_pending","paid","failed","expired","revoked"]},"download_endpoint":{"type":["string","null"]}}}}}},"202":{"description":"Settlement pending; do not pay again","content":{"application/json":{"schema":{"type":"object","required":["order_id","status"],"properties":{"order_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["quoted","payment_pending","settlement_pending","paid","failed","expired","revoked"]},"download_endpoint":{"type":["string","null"]}}}}}},"402":{"description":"Payment required; PAYMENT-REQUIRED header is an x402 v2 challenge","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"}}}},"409":{"description":"Unapproved release, terms/idempotency conflict, or revoked order"},"503":{"description":"Payment/storage unavailable or not configured"}}}},"/v1/orders/{order_id}":{"get":{"summary":"Authenticated order status and receipt","security":[{"purchaseToken":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Order","content":{"application/json":{"schema":{"type":"object","required":["order_id","status"],"properties":{"order_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["quoted","payment_pending","settlement_pending","paid","failed","expired","revoked"]},"download_endpoint":{"type":["string","null"]}}}}}},"404":{"description":"Not found or credential mismatch"}}}},"/v1/orders/{order_id}/download":{"get":{"summary":"Issue a fresh 60-second download link without charging again","security":[{"purchaseToken":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Private bearer URL and checksum"},"403":{"description":"No active entitlement"}}}}}}