{"openapi":"3.1.0","info":{"title":"Tikpema DD — on-chain due diligence","version":"0.3.0","summary":"POST an address, pay per call over x402, and receive one signed due-diligence report whose coverage manifest — inside the signed payload, so it cannot be stripped — states exactly what was and was not checked.","description":"Paid per call over x402, settled through CIRCLE GATEWAY (batched), not against the USDC token. Three consequences for a payer: the authorization is signed against the GatewayWallet contract named in `accepts[0].extra.verifyingContract`, so a plain token-domain EIP-3009 receiveWithAuthorization payer CANNOT pay this endpoint; the price is pulled from a Circle Gateway balance you must have DEPOSITED BEFOREHAND, not from your wallet's USDC; and the batched header requires ecrecover(sig) == from, so the payer must be an EOA that both holds that balance and signs — a smart account paying via a delegate cannot satisfy it. POST without payment to receive the 402 challenge, which carries the full terms: what you are buying, the coverage floor, why the price does not scale with coverage, and a subjectPreview telling you BEFORE you pay whether the subject has contract code at all.\n\n⚠️ THE REPORT IS A COVERAGE MANIFEST, NOT A CLEAN BILL. A report that could check little still settles and is still the product: it states exactly what was and was not checked, and that manifest is inside the signed payload so it cannot be stripped.","x-guidance":"Use this before you put funds into a contract on Arc testnet, to find out what its owner can still do to you afterwards. Arc testnet only — not a mainnet service.\n\nIt answers questions like: can this contract's owner withdraw or sweep my deposit? Can they pause the contract so I can't get out? Can they upgrade the code after I've deposited, so what I audited is not what runs? Can they blacklist my address or block my withdrawal? Can they raise the fees once I'm in? Is there a delay before I can withdraw? Who actually controls it — a multisig, a timelock, or one person's private key? Has ownership really been renounced, or does it just look that way?\n\nGive it a contract address on Arc testnet. You get back a signed report naming which of those powers the contract actually has, who holds them, and — for each power — whether it was confirmed present, confirmed absent, or could not be determined.\n\nIt does not tell you a contract is safe. It tells you what was checked and what was not. A report where little could be checked still costs the same and is still the answer: the list of what it could not determine is part of the signed payload and cannot be stripped out. Absence of a finding is never reported as absence of risk.\n\nScope: Arc testnet contracts, read-only, one address per call, $0.06 USDC. It does not audit source code, simulate transactions, price tokens, or score anything out of ten.","contact":{"name":"Tikpema","email":"hello@tikpema.xyz","url":"https://app.tikpema.xyz/dd"}},"externalDocs":{"url":"https://app.tikpema.xyz/dd","description":"Human-readable service page: what you are buying, the coverage floor, and a runnable curl."},"servers":[{"url":"https://app.tikpema.xyz"}],"paths":{"/api/dd-analyze":{"post":{"operationId":"analyzeAddress","summary":"Buy one signed due-diligence report","x-payment-info":{"price":{"mode":"fixed","currency":"USDC","amount":"0.060000"},"protocols":[{"x402":{}}]},"description":"Costs $0.06 USDC (60000 atomic USDC). Call WITHOUT an X-PAYMENT header to receive the 402 challenge and the full terms.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","chain"],"properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"the subject: a 0x-prefixed 20-byte address"},"chain":{"type":"string","enum":["arc-testnet"],"description":"⚠️ REQUIRED. An address alone does not identify a chain — the same address holds different code on different chains."}},"additionalProperties":false},"example":{"address":"0x3600000000000000000000000000000000000000","chain":"arc-testnet"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","description":"The signed report. ⚠️ A COVERAGE MANIFEST, NOT A CLEAN BILL — `coverage.notChecked` is as load-bearing as `coverage.checked`, and absence of a finding is never absence of risk.","properties":{"schemaVersion":{"type":"string","description":"report schema version; changes when the shape changes"},"severityMeaning":{"type":"object","description":"⭐ SCOPE, NOT RANK: severity describes what a power CAN DO. It is never a score and does not order risks."},"subject":{"type":"object","description":"the address, chain and block the report is about"},"sanctions":{"type":"object","description":"⭐ DETERMINISTIC OFAC SDN SCREEN of the subject against a PINNED, in-report list version (carries its snapshot date). Tri-state: `listed` (on the SDN snapshot — a legal block, not a risk score), `not-listed`, or `unreadable` (the address was malformed — NOT a clearance). ⚠️ A `not-listed` result against a snapshot with `listComplete:false` is NOT a clearance. A FACT, not a verdict — the STOP decision is the caller's; sanctions is a hard block a policy cannot override."},"shape":{"type":"object","description":"how the subject was classified (proxy, diamond, plain, unknown) and the evidence for it"},"powers":{"type":"array","description":"each power group the catalogue knows about, and what was observed for it"},"coverage":{"type":"object","description":"⭐ THE LOAD-BEARING FIELD. `checked` / `notChecked` / `totals` / `summary`, generated from what actually ran. Every group in the catalogue appears in exactly one list — a group that is neither run nor skipped makes the report INVALID rather than clean."},"reads":{"type":"array","description":"the RPC reads performed, with endpoint and retry counts — the audit trail behind the manifest"},"refusal":{"type":["object","null"],"description":"non-null when the request was refused before or during analysis; the reason is stated, never implied by an empty result"},"attestation":{"type":"object","description":"ERC-1271 signature verifiable against the on-chain owner of ERC-8004 agentId 851891, or {status:\"unsigned\"} — an unsigned report is NEVER charged for"}}}}},"description":"The signed report. Carries `coverage` (checked / notChecked / totals / summary), `severityMeaning` (scope-not-rank: severity describes what a power CAN DO, it is never a score), a deterministic `sanctions` OFAC SDN screen of the subject against a pinned list version (tri-state; a `not-listed` against an incomplete snapshot is NOT a clearance), and an ERC-1271 `attestation` verifiable against the on-chain owner of ERC-8004 agentId 851891."},"400":{"description":"Refused before analysis. Returned AS A REPORT with an empty coverage manifest — not an error envelope."},"402":{"description":"Payment required. Body carries `accepts`, `whatYouAreBuying` and `subjectPreview`."},"405":{"description":"Wrong method. Carries `howToCall` with a runnable example; returns HTML instead if the request Accepts text/html."},"503":{"description":"Refusing to serve: the deployed code hash has no canary attestation yet, or the service is not published."}}},"get":{"operationId":"describeService","summary":"Discovery — how to call this endpoint","description":"Returns 405 (the method IS unsupported) carrying `howToCall`. With `Accept: text/html` it returns a human-readable page instead of JSON.","responses":{"405":{"description":"howToCall, as JSON or HTML by content negotiation."}}}}},"x-tikpema":{"resource":"https://app.tikpema.xyz/api/dd-analyze","openApiUrl":"https://app.tikpema.xyz/openapi.json","openApiUrlLegacy":"https://app.tikpema.xyz/api/dd-openapi","docsUrl":"https://app.tikpema.xyz/dd","price":"$0.06 USDC","priceAtomicUsdc":"60000","priceIsFlat":"deliberately does not scale with coverage — a coverage-scaled price would pay us more for CLAIMING more coverage","paymentProtocol":"x402 over Circle Gateway (batched settlement) on Arc. The authorization is signed against the GatewayWallet contract in accepts[0].extra.verifyingContract, NOT the USDC token, and spends a Gateway balance the payer must have deposited beforehand. Requires ecrecover(sig) == from: an EOA that both holds the balance and signs. A plain token-domain EIP-3009 payer cannot pay this endpoint.","attestation":"ERC-1271 against the on-chain owner of ERC-8004 agentId 851891","supportedChains":["arc-testnet"]}}