{"openapi":"3.1.0","info":{"title":"Madhouse Wallet KYC Attestation API","version":"2.0.0","description":"x402 SIWX-gated KYC attestation service. Pay $0.05 USDC to start identity verification, open the returned URL to complete Stripe Identity, then poll /status for $0.01 USDC to confirm on-chain attestation. Supports Base, Polygon, Arbitrum, Optimism, Avalanche, and Solana.","x-guidance":"Pay with USDC via x402. POST /api/public/kyc/start for $0.05 to get a verification URL. Open kycUrl in a browser to complete Stripe Identity. Attestation writes on-chain automatically. Poll GET /api/public/kyc/status?wallet=<address> for $0.01 -- use verified:true to gate access.","contact":{"name":"Madhouse Wallet","url":"https://madhousewallet.com"}},"servers":[{"url":"https://kyc.madhousewallet.com","description":"Production"}],"paths":{"/api/public/kyc/start":{"post":{"operationId":"startKyc","summary":"Start KYC session (Base / Polygon / Arbitrum)","description":"Begin Stripe Identity KYC for the calling wallet. Costs $0.05 USDC. Returns a hosted verification URL (open in browser) and the bound wallet address. Once the user completes identity verification, the EAS or SAS attestation is written on-chain automatically via Stripe webhook -- no second API call needed. Poll /status to confirm. Use verified:true to gate access to KYC-required services.","x-payment-info":{"pricingMode":"fixed","price":"0.05","currency":"USD","protocols":["x402"],"network":"eip155:8453"},"x-payment-networks":[{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"network":"eip155:137","asset":"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},{"network":"eip155:42161","asset":"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"}],"responses":{"200":{"description":"Session created","content":{"application/json":{"schema":{"type":"object","required":["kycUrl","walletAddress"],"properties":{"kycUrl":{"type":"string","description":"Hosted Stripe Identity verification URL. Open in a browser to complete document and selfie verification. EAS or SAS attestation is written automatically once verification completes."},"walletAddress":{"type":"string","description":"Lowercase wallet address extracted from the x402 payment header and bound to this KYC session."}}},"example":{"kycUrl":"https://kyc.madhousewallet.com/verify/vs_1TajwgBbHYAruVQWKekyDXiN","walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7"}}}},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/start/op":{"post":{"operationId":"startKycOp","summary":"Start KYC session (Optimism)","description":"Begin Stripe Identity KYC for the calling wallet. Costs $0.05 USDC. Returns a hosted verification URL (open in browser) and the bound wallet address. Once the user completes identity verification, the EAS or SAS attestation is written on-chain automatically via Stripe webhook -- no second API call needed. Poll /status to confirm. Use verified:true to gate access to KYC-required services. Accepts $0.05 USDC on Optimism Mainnet via Dexter Facilitator.","x-payment-info":{"pricingMode":"fixed","price":"0.05","currency":"USD","protocols":["x402"],"network":"eip155:10"},"x-payment-networks":[{"network":"eip155:10","asset":"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"}],"responses":{"200":{"description":"Session created","content":{"application/json":{"schema":{"type":"object","required":["kycUrl","walletAddress"],"properties":{"kycUrl":{"type":"string","description":"Hosted Stripe Identity verification URL. Open in a browser to complete document and selfie verification. EAS or SAS attestation is written automatically once verification completes."},"walletAddress":{"type":"string","description":"Lowercase wallet address extracted from the x402 payment header and bound to this KYC session."}}},"example":{"kycUrl":"https://kyc.madhousewallet.com/verify/vs_1TajwgBbHYAruVQWKekyDXiN","walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7"}}}},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/start/avax":{"post":{"operationId":"startKycAvax","summary":"Start KYC session (Avalanche)","description":"Begin Stripe Identity KYC for the calling wallet. Costs $0.05 USDC. Returns a hosted verification URL (open in browser) and the bound wallet address. Once the user completes identity verification, the EAS or SAS attestation is written on-chain automatically via Stripe webhook -- no second API call needed. Poll /status to confirm. Use verified:true to gate access to KYC-required services. Accepts $0.05 USDC on Avalanche C-Chain via Dexter Facilitator.","x-payment-info":{"pricingMode":"fixed","price":"0.05","currency":"USD","protocols":["x402"],"network":"eip155:43114"},"x-payment-networks":[{"network":"eip155:43114","asset":"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}],"responses":{"200":{"description":"Session created","content":{"application/json":{"schema":{"type":"object","required":["kycUrl","walletAddress"],"properties":{"kycUrl":{"type":"string","description":"Hosted Stripe Identity verification URL. Open in a browser to complete document and selfie verification. EAS or SAS attestation is written automatically once verification completes."},"walletAddress":{"type":"string","description":"Lowercase wallet address extracted from the x402 payment header and bound to this KYC session."}}},"example":{"kycUrl":"https://kyc.madhousewallet.com/verify/vs_1TajwgBbHYAruVQWKekyDXiN","walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7"}}}},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/start/solana":{"post":{"operationId":"startKycSolana","summary":"Start KYC session (Solana)","description":"Begin Stripe Identity KYC for the calling wallet. Costs $0.05 USDC. Returns a hosted verification URL (open in browser) and the bound wallet address. Once the user completes identity verification, the EAS or SAS attestation is written on-chain automatically via Stripe webhook -- no second API call needed. Poll /status to confirm. Use verified:true to gate access to KYC-required services. Accepts $0.05 USDC on Solana Mainnet via CDP Facilitator. Attestation written to Solana Attestation Service (SAS).","x-payment-info":{"pricingMode":"fixed","price":"0.05","currency":"USD","protocols":["x402"],"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},"x-payment-networks":[{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}],"responses":{"200":{"description":"Session created","content":{"application/json":{"schema":{"type":"object","required":["kycUrl","walletAddress"],"properties":{"kycUrl":{"type":"string","description":"Hosted Stripe Identity verification URL. Open in a browser to complete document and selfie verification. EAS or SAS attestation is written automatically once verification completes."},"walletAddress":{"type":"string","description":"Lowercase wallet address extracted from the x402 payment header and bound to this KYC session."}}},"example":{"kycUrl":"https://kyc.madhousewallet.com/verify/vs_1TajwgBbHYAruVQWKekyDXiN","walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7"}}}},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/status":{"get":{"operationId":"getKycStatus","summary":"KYC attestation status (Base / Polygon / Arbitrum)","description":"Check KYC attestation status for any wallet address. Costs $0.01 USDC. Queries MongoDB and cross-checks the live on-chain EAS or SAS attestation. Returns verified (bool), chain, txHash, easUID, and verifiedAt. Use verified:true to confirm a wallet has passed identity verification.","x-payment-info":{"pricingMode":"fixed","price":"0.01","currency":"USD","protocols":["x402"],"network":"eip155:8453"},"x-payment-networks":[{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"network":"eip155:137","asset":"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"},{"network":"eip155:42161","asset":"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"}],"parameters":[{"name":"wallet","in":"query","required":true,"description":"EVM wallet address (0x + 40 hex chars) or Solana public key (base58, 32-44 chars) to look up.","example":"0xef616c29859b101167f3ea6bb69faee733d573f7","schema":{"type":"string"}}],"responses":{"200":{"description":"KYC status","content":{"application/json":{"schema":{"type":"object","required":["walletAddress","verified"],"properties":{"walletAddress":{"type":"string","description":"The queried wallet address."},"verified":{"type":"boolean","description":"True if the wallet has a valid, non-revoked on-chain attestation. Use this to gate access to KYC-required services."},"chain":{"type":"string","description":"Chain the attestation was written to: base, optimism, arbitrum, polygon, avalanche, or solana. Null if not yet attested."},"attestationHash":{"type":"string","description":"keccak256 hash of the attestation payload. Null if not yet attested."},"txHash":{"type":"string","description":"Transaction hash of the EAS write on EVM chains. Null for Solana or if not yet attested."},"easUID":{"type":"string","description":"EAS attestation UID (bytes32 hex). Null for Solana or if not yet attested."},"sasAttestationAddress":{"type":"string","description":"SAS attestation PDA address on Solana. Null for EVM chains."},"verifiedAt":{"type":"number","description":"Unix timestamp when Stripe verification completed. Null if not yet attested."},"verificationMethods":{"type":"object","description":"documentType (passport, driving_license, id_card) and selfieCheck (verified, unverified, failed). Null if not yet attested."},"riskScore":{"type":"string","description":"Stripe risk score: low, high, or null."}}},"example":{"walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7","verified":true,"chain":"base","attestationHash":"0xabc123def456abc123def456abc123def456abc123def456abc123def456abc1","txHash":"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef","easUID":"0x1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid12","sasAttestationAddress":null,"verifiedAt":1716500000,"verificationMethods":{"documentType":"passport","selfieCheck":"verified"},"riskScore":"low"}}}},"400":{"description":"Bad request. Missing or invalid wallet query parameter."},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/status/op":{"get":{"operationId":"getKycStatusOp","summary":"KYC attestation status (Optimism)","description":"Check KYC attestation status for any wallet address. Costs $0.01 USDC. Queries MongoDB and cross-checks the live on-chain EAS or SAS attestation. Returns verified (bool), chain, txHash, easUID, and verifiedAt. Use verified:true to confirm a wallet has passed identity verification. Accepts $0.01 USDC on Optimism Mainnet via Dexter Facilitator.","x-payment-info":{"pricingMode":"fixed","price":"0.01","currency":"USD","protocols":["x402"],"network":"eip155:10"},"x-payment-networks":[{"network":"eip155:10","asset":"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"}],"parameters":[{"name":"wallet","in":"query","required":true,"description":"EVM wallet address (0x + 40 hex chars) or Solana public key (base58, 32-44 chars) to look up.","example":"0xef616c29859b101167f3ea6bb69faee733d573f7","schema":{"type":"string"}}],"responses":{"200":{"description":"KYC status","content":{"application/json":{"schema":{"type":"object","required":["walletAddress","verified"],"properties":{"walletAddress":{"type":"string","description":"The queried wallet address."},"verified":{"type":"boolean","description":"True if the wallet has a valid, non-revoked on-chain attestation. Use this to gate access to KYC-required services."},"chain":{"type":"string","description":"Chain the attestation was written to: base, optimism, arbitrum, polygon, avalanche, or solana. Null if not yet attested."},"attestationHash":{"type":"string","description":"keccak256 hash of the attestation payload. Null if not yet attested."},"txHash":{"type":"string","description":"Transaction hash of the EAS write on EVM chains. Null for Solana or if not yet attested."},"easUID":{"type":"string","description":"EAS attestation UID (bytes32 hex). Null for Solana or if not yet attested."},"sasAttestationAddress":{"type":"string","description":"SAS attestation PDA address on Solana. Null for EVM chains."},"verifiedAt":{"type":"number","description":"Unix timestamp when Stripe verification completed. Null if not yet attested."},"verificationMethods":{"type":"object","description":"documentType (passport, driving_license, id_card) and selfieCheck (verified, unverified, failed). Null if not yet attested."},"riskScore":{"type":"string","description":"Stripe risk score: low, high, or null."}}},"example":{"walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7","verified":true,"chain":"base","attestationHash":"0xabc123def456abc123def456abc123def456abc123def456abc123def456abc1","txHash":"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef","easUID":"0x1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid12","sasAttestationAddress":null,"verifiedAt":1716500000,"verificationMethods":{"documentType":"passport","selfieCheck":"verified"},"riskScore":"low"}}}},"400":{"description":"Bad request. Missing or invalid wallet query parameter."},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/status/avax":{"get":{"operationId":"getKycStatusAvax","summary":"KYC attestation status (Avalanche)","description":"Check KYC attestation status for any wallet address. Costs $0.01 USDC. Queries MongoDB and cross-checks the live on-chain EAS or SAS attestation. Returns verified (bool), chain, txHash, easUID, and verifiedAt. Use verified:true to confirm a wallet has passed identity verification. Accepts $0.01 USDC on Avalanche C-Chain via Dexter Facilitator.","x-payment-info":{"pricingMode":"fixed","price":"0.01","currency":"USD","protocols":["x402"],"network":"eip155:43114"},"x-payment-networks":[{"network":"eip155:43114","asset":"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}],"parameters":[{"name":"wallet","in":"query","required":true,"description":"EVM wallet address (0x + 40 hex chars) or Solana public key (base58, 32-44 chars) to look up.","example":"0xef616c29859b101167f3ea6bb69faee733d573f7","schema":{"type":"string"}}],"responses":{"200":{"description":"KYC status","content":{"application/json":{"schema":{"type":"object","required":["walletAddress","verified"],"properties":{"walletAddress":{"type":"string","description":"The queried wallet address."},"verified":{"type":"boolean","description":"True if the wallet has a valid, non-revoked on-chain attestation. Use this to gate access to KYC-required services."},"chain":{"type":"string","description":"Chain the attestation was written to: base, optimism, arbitrum, polygon, avalanche, or solana. Null if not yet attested."},"attestationHash":{"type":"string","description":"keccak256 hash of the attestation payload. Null if not yet attested."},"txHash":{"type":"string","description":"Transaction hash of the EAS write on EVM chains. Null for Solana or if not yet attested."},"easUID":{"type":"string","description":"EAS attestation UID (bytes32 hex). Null for Solana or if not yet attested."},"sasAttestationAddress":{"type":"string","description":"SAS attestation PDA address on Solana. Null for EVM chains."},"verifiedAt":{"type":"number","description":"Unix timestamp when Stripe verification completed. Null if not yet attested."},"verificationMethods":{"type":"object","description":"documentType (passport, driving_license, id_card) and selfieCheck (verified, unverified, failed). Null if not yet attested."},"riskScore":{"type":"string","description":"Stripe risk score: low, high, or null."}}},"example":{"walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7","verified":true,"chain":"base","attestationHash":"0xabc123def456abc123def456abc123def456abc123def456abc123def456abc1","txHash":"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef","easUID":"0x1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid12","sasAttestationAddress":null,"verifiedAt":1716500000,"verificationMethods":{"documentType":"passport","selfieCheck":"verified"},"riskScore":"low"}}}},"400":{"description":"Bad request. Missing or invalid wallet query parameter."},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}},"/api/public/kyc/status/solana":{"get":{"operationId":"getKycStatusSolana","summary":"KYC attestation status (Solana)","description":"Check KYC attestation status for any wallet address. Costs $0.01 USDC. Queries MongoDB and cross-checks the live on-chain EAS or SAS attestation. Returns verified (bool), chain, txHash, easUID, and verifiedAt. Use verified:true to confirm a wallet has passed identity verification. Accepts $0.01 USDC on Solana Mainnet via CDP Facilitator.","x-payment-info":{"pricingMode":"fixed","price":"0.01","currency":"USD","protocols":["x402"],"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},"x-payment-networks":[{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}],"parameters":[{"name":"wallet","in":"query","required":true,"description":"EVM wallet address (0x + 40 hex chars) or Solana public key (base58, 32-44 chars) to look up.","example":"0xef616c29859b101167f3ea6bb69faee733d573f7","schema":{"type":"string"}}],"responses":{"200":{"description":"KYC status","content":{"application/json":{"schema":{"type":"object","required":["walletAddress","verified"],"properties":{"walletAddress":{"type":"string","description":"The queried wallet address."},"verified":{"type":"boolean","description":"True if the wallet has a valid, non-revoked on-chain attestation. Use this to gate access to KYC-required services."},"chain":{"type":"string","description":"Chain the attestation was written to: base, optimism, arbitrum, polygon, avalanche, or solana. Null if not yet attested."},"attestationHash":{"type":"string","description":"keccak256 hash of the attestation payload. Null if not yet attested."},"txHash":{"type":"string","description":"Transaction hash of the EAS write on EVM chains. Null for Solana or if not yet attested."},"easUID":{"type":"string","description":"EAS attestation UID (bytes32 hex). Null for Solana or if not yet attested."},"sasAttestationAddress":{"type":"string","description":"SAS attestation PDA address on Solana. Null for EVM chains."},"verifiedAt":{"type":"number","description":"Unix timestamp when Stripe verification completed. Null if not yet attested."},"verificationMethods":{"type":"object","description":"documentType (passport, driving_license, id_card) and selfieCheck (verified, unverified, failed). Null if not yet attested."},"riskScore":{"type":"string","description":"Stripe risk score: low, high, or null."}}},"example":{"walletAddress":"0xef616c29859b101167f3ea6bb69faee733d573f7","verified":true,"chain":"base","attestationHash":"0xabc123def456abc123def456abc123def456abc123def456abc123def456abc1","txHash":"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef","easUID":"0x1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid1234uid12","sasAttestationAddress":null,"verifiedAt":1716500000,"verificationMethods":{"documentType":"passport","selfieCheck":"verified"},"riskScore":"low"}}}},"400":{"description":"Bad request. Missing or invalid wallet query parameter."},"402":{"description":"Payment required. Use x402 protocol with USDC on the indicated network."}}}}}}