DD — on-chain due diligence
POST an address, pay $0.06 USDC over x402, and get one signed report with a coverage manifest that says exactly what was and was not checked. The manifest is inside the signed payload, so it cannot be stripped.
Live on Arc testnet. You sent a GET — this endpoint takes
POST, and here is how to call it.
Try it — this costs nothing
A POST without payment returns the 402 challenge and the full terms.
curl -sS -X POST https://app.tikpema.xyz/api/dd-analyze \
-H 'Content-Type: application/json' \
-d '{"address":"0x3600000000000000000000000000000000000000","chain":"arc-testnet"}'
What you get
| Price | $0.06 USDC per report, paid over x402 — Circle Gateway batched settlement on Arc |
| Artifact | one signed on-chain due-diligence report about the address and chain you name |
| Attestation | ERC-1271, verifiable against the on-chain owner of ERC-8004 agentId 851891 |
| Chains | arc-testnet |
How payment works — read this before you build a payer
This endpoint settles over Circle Gateway, not against the USDC token. Until 2026-08-27 this
page and the OpenAPI both said “EIP-3009 on Arc”, which is not enough to build a working
payer and omits a prerequisite entirely. What the
402 actually declares is
extra.name: "GatewayWalletBatched", and three things follow from it:
- The signature is against the GatewayWallet contract, not the USDC token. A plain
token-domain EIP-3009
receiveWithAuthorizationpayer cannot pay this endpoint — wrong verifying contract. The address to sign against is in the challenge, asaccepts[0].extra.verifyingContract. - You must already hold a Circle Gateway balance. The authorization pulls the price from a balance you deposited beforehand; it does not move USDC out of your wallet. No deposit, no payment — and this is the step the old copy left out, so a buyer who fixed only the rail would still be stuck.
- The payer must be an EOA that both holds the balance and signs. The batched header
requires
ecrecover(sig) == from; there is no depositor/signer split, so a smart account paying through a delegate cannot satisfy it.
⚠️ It is a coverage manifest, not a clean bill. The report states exactly what was and was not
checked, and that manifest is inside the signed payload so it cannot be stripped.
The floor is low, real and predictable: for an address with no contract code, the report can
come back with a single checked item — at the same full price. That is not a degraded case; it is
the deterministic answer for such an address, and the
subjectPreview in the 402 tells
you in advance whether you are in it.
Why the price does not scale with coverage. A coverage-scaled price would pay us more for
reporting more coverage — an incentive to overstate what we actually checked, on the one number you
cannot independently audit before you buy. A flat price removes that incentive entirely.
Machine-readable
Same endpoint returns JSON to any client that does not ask for HTML. OpenAPI description.
Elsewhere
DD is one of several things built here. What else exists — each with what it actually is right now, which is not always much.