{"openapi":"3.1.0","info":{"title":"Token Due Diligence API","version":"1.0.0","description":"Independent API for Base Mainnet token due diligence: contract analysis, DEX liquidity inspection, holder concentration analysis, permission inspection, honeypot checks, and security reports using public JSON-RPC, Uniswap factories, DeFiLlama, and Honeypot.is. Paid with x402 exact USDC on Base. No account is required.","contact":{"email":"support@brainiac.software"},"x-guidance":"BRAINIAC.software is a pay-per-call API for software agents. No account or API key is required.\nPayment uses the x402 protocol with exact USDC on Base (chain id 8453). Each POST operation has a fixed USD price.\nHow to call an operation:\n1. POST a JSON body matching the operation's requestBody schema to the operation path. Include an Idempotency-Key header (64 hex characters, 32 random bytes).\n2. If you have not paid, the server responds 402 with payment requirements in the body. Pay the exact amount to the payTo address on Base.\n3. Retry the identical request with the same Idempotency-Key and add a payment-signature header containing the x402 payment payload. On success (200) the operation result is returned.\n4. Reuse the same Idempotency-Key only for retries of the same operation and request body; it will not be charged twice.\nAll outputs are compliance prechecks, drafts, or data lookups for human review. They are not official determinations, legal advice, identity confirmation, or certified filings. Verify time-sensitive or official data with the cited source before acting."},"servers":[{"url":"https://www.brainiac.software"}],"paths":{"/api/v1/token-due-diligence/analyze":{"post":{"operationId":"analyze_token_contract","summary":"Analyze token contract","description":"Analyze a token contract on Base Mainnet including bytecode, ERC-20 metadata, owner, proxy status, and privileges.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["tokenAddress"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"chainId":{"type":"number"},"analysis":{"type":"object","properties":{"hasCode":{"type":"boolean"},"bytecode":{"type":"string"},"bytecodeLength":{"type":"number"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"totalSupply":{"type":"string"},"owner":{"type":"null"},"paused":{"type":"boolean"},"isProxy":{"type":"boolean"},"implementation":{"type":"null"},"beacon":{"type":"null"},"admin":{"type":"null"},"mintable":{"type":"boolean"},"burnable":{"type":"boolean"},"priceUsd":{"type":"number"}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","chainId":8453,"analysis":{"hasCode":true,"bytecode":"0x608060405234801561001057600080fd5b50600436106100...","bytecodeLength":2456,"name":"USD Coin","symbol":"USDC","decimals":6,"totalSupply":"1000000000000000000000000000","owner":null,"paused":false,"isProxy":false,"implementation":null,"beacon":null,"admin":null,"mintable":false,"burnable":true,"priceUsd":1},"sources":[{"source":"Base JSON-RPC","url":"https://mainnet.base.org","retrievedAt":"2026-10-29T12:00:00.000Z"},{"source":"DeFiLlama","url":"https://api.llama.fi/prices/current","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Contract analysis is based on standard ERC-20 methods and EIP-1967 proxy slots.","Unsupported methods do not imply safety.","Proxy detection is based on EIP-1967 standard slots only."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/token-due-diligence/liquidity":{"post":{"operationId":"inspect_dex_liquidity","summary":"Inspect DEX liquidity","description":"Inspect supported DEX liquidity pools on Base Mainnet using official Uniswap V2 and V3 factories.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["tokenAddress"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"chainId":{"type":"number"},"liquidity":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"address":{"type":"string"},"token0":{"type":"string"},"token1":{"type":"string"},"token0Symbol":{"type":"string"},"token1Symbol":{"type":"string"},"reserve0":{"type":"string"},"reserve1":{"type":"string"},"token0Amount":{"type":"number"},"token1Amount":{"type":"number"},"price":{"type":"number"},"quoteToken":{"type":"string"},"liquidityValueUsd":{"type":"number"}},"additionalProperties":true}},"poolCount":{"type":"number"},"supportedPools":{"type":"boolean"},"priceUsd":{"type":"number"}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","chainId":8453,"liquidity":{"pools":[{"type":"V2","address":"0x1234567890123456789012345678901234567890","token0":"0x4200000000000000000000000000000000000006","token1":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","token0Symbol":"WETH","token1Symbol":"USDC","reserve0":"100000000000000000000","reserve1":"500000000000","token0Amount":100,"token1Amount":500000,"price":5000,"quoteToken":"0x4200000000000000000000000000000000000006","liquidityValueUsd":1250000}],"poolCount":1,"supportedPools":true,"priceUsd":1},"sources":[{"source":"Base JSON-RPC","url":"https://mainnet.base.org","retrievedAt":"2026-10-29T12:00:00.000Z"},{"source":"DeFiLlama","url":"https://api.llama.fi/prices/current","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Liquidity inspection is limited to official Uniswap V2 and V3 factories.","Only WETH and native USDC quote tokens are checked.","Other DEXs and liquidity pools are not included."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/token-due-diligence/holders":{"post":{"operationId":"analyze_holder_concentration","summary":"Analyze holder concentration","description":"Analyze holder concentration from transfer events when complete transfer history is available on Base Mainnet.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"deploymentBlock":{"type":"integer","minimum":0,"maximum":9007199254740991},"fromBlock":{"type":"integer","minimum":0,"maximum":9007199254740991},"toBlock":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["tokenAddress"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","deploymentBlock":18000000}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"fromBlock":{"type":"number"},"toBlock":{"type":"number"},"currentBlock":{"type":"number"},"scannedBlockRange":{"type":"string"},"holders":{"type":"object","properties":{"totalTransfers":{"type":"number"},"holderCount":{"type":"number"},"top10":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"balance":{"type":"string"}},"additionalProperties":true}},"top20":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"balance":{"type":"string"}},"additionalProperties":true}},"top10Percentage":{"type":"number"},"top20Percentage":{"type":"number"},"burnHoldings":{"type":"string"},"zeroMintCount":{"type":"number"},"totalSupply":{"type":"string"},"supplyMatch":{"type":"boolean"}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","fromBlock":18000000,"toBlock":18001000,"currentBlock":18001000,"scannedBlockRange":"18000000-18001000","holders":{"totalTransfers":1523,"holderCount":842,"top10":[{"address":"0x1234567890123456789012345678901234567890","balance":"100000000000000000000000"},{"address":"0xabcdef1234567890abcdef1234567890abcdef12","balance":"50000000000000000000000"}],"top20":[{"address":"0x1234567890123456789012345678901234567890","balance":"100000000000000000000000"},{"address":"0xabcdef1234567890abcdef1234567890abcdef12","balance":"50000000000000000000000"}],"top10Percentage":15,"top20Percentage":22,"burnHoldings":"0","zeroMintCount":0,"totalSupply":"1000000000000000000000000000","supplyMatch":true},"sources":[{"source":"Base JSON-RPC","url":"https://mainnet.base.org","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Block range is limited to 10000 blocks.","Supply deployment block for complete holder history.","Partial history may not represent complete distribution."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]}}},"/api/v1/token-due-diligence/permissions":{"post":{"operationId":"inspect_contract_permissions","summary":"Inspect contract permissions","description":"Inspect contract ownership and privileged controls on Base Mainnet including owner, admin, and upgradeability.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["tokenAddress"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"chainId":{"type":"number"},"permissions":{"type":"object","properties":{"owner":{"type":"null"},"paused":{"type":"boolean"},"implementation":{"type":"null"},"beacon":{"type":"null"},"admin":{"type":"null"},"mintable":{"type":"boolean"},"burnable":{"type":"boolean"},"hasOwner":{"type":"boolean"},"hasAdmin":{"type":"boolean"},"hasUpgradeability":{"type":"boolean"},"privileges":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","chainId":8453,"permissions":{"owner":null,"paused":false,"implementation":null,"beacon":null,"admin":null,"mintable":false,"burnable":true,"hasOwner":false,"hasAdmin":false,"hasUpgradeability":false,"privileges":["burnable"]},"sources":[{"source":"Base JSON-RPC","url":"https://mainnet.base.org","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Permission inspection is based on standard ERC-20 methods and EIP-1967 proxy slots.","Owner and admin depend on standard naming conventions.","Missing methods do not imply absence of privileges."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/token-due-diligence/honeypot":{"post":{"operationId":"check_honeypot_status","summary":"Check honeypot status","description":"Check if a token is a honeypot using Honeypot.is simulation, including buy/sell tax, gas information, and contract verification.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"pairAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["tokenAddress"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"honeypot":{"type":"object","properties":{"token":{"type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"address":{"type":"string"},"totalHolders":{"type":"number"}},"additionalProperties":true},"summary":{"type":"object","properties":{"risk":{"type":"string"},"riskLevel":{"type":"number"}},"additionalProperties":true},"simulationSuccess":{"type":"boolean"},"honeypotResult":{"type":"object","properties":{"isHoneypot":{"type":"boolean"}},"additionalProperties":true},"simulationResult":{"type":"object","properties":{"buyTax":{"type":"number"},"sellTax":{"type":"number"},"transferTax":{"type":"number"},"buyGas":{"type":"string"},"sellGas":{"type":"string"}},"additionalProperties":true},"flags":{"type":"array","items":{}},"contractCode":{"type":"object","properties":{"openSource":{"type":"boolean"},"rootOpenSource":{"type":"boolean"},"isProxy":{"type":"boolean"},"hasProxyCalls":{"type":"boolean"}},"additionalProperties":true}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","honeypot":{"token":{"name":"USD Coin","symbol":"USDC","decimals":6,"address":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","totalHolders":1755847},"summary":{"risk":"very_low","riskLevel":0},"simulationSuccess":true,"honeypotResult":{"isHoneypot":false},"simulationResult":{"buyTax":0,"sellTax":0,"transferTax":0,"buyGas":"154591","sellGas":"107886"},"flags":[],"contractCode":{"openSource":true,"rootOpenSource":true,"isProxy":false,"hasProxyCalls":false}},"sources":[{"source":"Honeypot API","url":"https://api.honeypot.is/v2/IsHoneypot","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Honeypot simulation results are not guarantees of safety.","Simulation results may not reflect actual market conditions.","Contract verification depends on source code availability."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/token-due-diligence/security-report":{"post":{"operationId":"generate_security_report","summary":"Generate security report","description":"Generate a combined security report using Honeypot checks.","tags":["token-due-diligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"pairAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"includeHoneypot":{"default":true,"type":"boolean"},"includeMarketActivity":{"default":true,"type":"boolean"}},"required":["tokenAddress","includeHoneypot","includeMarketActivity"],"additionalProperties":false},"example":{"tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","includeHoneypot":true}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"retrievedAt":{"type":"string"},"tokenAddress":{"type":"string"},"findings":{"type":"object","properties":{"honeypot":{"type":"object","properties":{"summary":{"type":"object","properties":{"risk":{"type":"string"},"riskLevel":{"type":"number"}},"additionalProperties":true},"simulationSuccess":{"type":"boolean"},"honeypotResult":{"type":"object","properties":{"isHoneypot":{"type":"boolean"}},"additionalProperties":true}},"additionalProperties":true}},"additionalProperties":true},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"url":{"type":"string"},"retrievedAt":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"retrievedAt":"2026-10-29T12:00:00.000Z","tokenAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bdA02913","findings":{"honeypot":{"summary":{"risk":"very_low","riskLevel":0},"simulationSuccess":true,"honeypotResult":{"isHoneypot":false}}},"sources":[{"source":"Honeypot API","url":"https://api.honeypot.is/v2/IsHoneypot","retrievedAt":"2026-10-29T12:00:00.000Z"}],"limitations":["Security report combines multiple sources with different coverage.","Honeypot simulation results are not guarantees of safety.","This report does not guarantee the safety of any token."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]}}}},"components":{"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}