Developers

Developer guide

Every Checkpoint402 service is a plain HTTPS GET that returns JSON. There are no accounts or API keys: requests are paid one at a time with x402, the open HTTP payment standard, in USDC on Base.

Endpoints

Base URL https://api.checkpoint402.com. The full machine-readable spec is at /openapi.json.

EndpointServicePrice
GET /v1/tx-explainTransaction Explainer$0.03
GET /v1/defi-yieldsBest DeFi Yield Finder$0.05
GET /v1/new-tokensNew Token Safety Feed$0.10
GET /v1/company-eventsCompany Events (SEC 8-K)$0.10
GET /v1/sanctions-screenSanctions Screening$0.05

Free, unpaid endpoints: / (service list with parameters), /health and /openapi.json.

How payment works

  1. You call an endpoint without payment. It answers 402 Payment Required with a PAYMENT-REQUIRED header stating the exact price, network and receiving wallet.
  2. Your client signs a USDC transfer authorization for that amount. This is a signature only; no gas is needed.
  3. You repeat the call with the signature in a PAYMENT-SIGNATURE header.
  4. We run the request. Only if it succeeds is the payment settled on-chain, and the transaction is returned in the PAYMENT-RESPONSE header. Invalid input (400) and source outages (502) are never charged.

The x402 client libraries do all of this for you in one call.

TypeScript example

// npm i @x402/fetch @x402/evm viem
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const wallet = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY);
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(wallet));

const fetchPaid = wrapFetchWithPayment(fetch, client);
const res = await fetchPaid(
  "https://api.checkpoint402.com/v1/sanctions-screen?address=0x098B716B8Aaf21512996dC57EB0615e2383E2f96"
);
console.log(await res.json());

Use a dedicated agent wallet holding only a small USDC balance. Python, Go and other clients are listed at x402.org.

Try it without code

The Try it page runs the same flow with your browser wallet.

Errors

400Invalid or missing input. The body explains what to fix.Charged: No
402Payment required, or the payment could not be accepted.Charged: No
405Only GET is supported on service endpoints.Charged: No
502An upstream data source is unavailable. Retry shortly.Charged: No
500Unexpected error on our side.Charged: No

Rules

Payments from wallets on the US sanctions list are refused automatically. Please don't hammer the endpoints. Data is for information only; see the Terms of Service. Questions or a service you'd like added? Contact us.