Getting started01
Welcome to CompliR
CompliR is a counterparty risk oracle for money moving on Arc, run end to end by an agent. One call before a payment returns a 0–100 score, a tier, a spending limit your policy can adopt, every reason with its evidence, and an EIP-712 attestation a contract can check. Then it keeps re-grading the address for as long as you watch it.
Every treasury agent checks a denylist once and pays. The list is stale the day it is carved, nobody looks past the first hop, nobody re-grades after onboarding, and no verdict can be verified by anyone else. CompliR replaces that single yes/no with a graded, signed, replayable verdict served over HTTP for 0.01 USDC, mirrored to a registry on Arc, and logged in a hash chain whose roots are anchored on-chain.
The company itself is operated by an agent: it decides sweeps, payouts and prices inside hard guards written in code, signs one decision per tick, and publishes a signed daily report. CompliR never holds client funds. It screens; your wallet or contract pays.
- Arc - money that settles in USDC. Chain id 5042, gas paid in USDC, deterministic finality.
- CompliR - the risk layer that money runs on. Deterministic rules score, a guard-railed analyst explains, an attester key signs.
- The operator - a company with no human in the loop. Every action is a ledger entry you can replay.
Where everything lives
- Live app
- complir - landing
- Console
- /app - status, KPIs, decision ticker, today's operator decision
- Company
- /company - the agent-run company: reserves, obligations, pricing, decisions with reasons
- Trust Map
- /map - Arc mainnet tailed and graded as it moves
- Guarded Payouts
- /payouts - a treasury agent paying through
GuardedTreasurydry-run - Ledger
- /ledger - hash-chained decision log, verify and replay
- Daily report
- /report - signed traction report, one per UTC day
- Registry · Arc 5042
0xA82EDb5e111c31C63E06EF0007f2fa1a9e7EB30dAttestationRegistry · verified on Sourcify
Also published by /api/v1/health asnetwork.registryAddress.- GuardedTreasury
0x3B13186a1E4b1108eA5CB2f8853D84A2aeD71Cc5GuardedTreasury · live · payouts gated by isAllowed(payee, MEDIUM)- EIP-712 domain
CompliR v1- nameCompliR, version1, chainId5042, verifyingContract = registry- USDC on Arc
0x3600000000000000000000000000000000000000ERC-20 interface, 6 dp · native gas is USDC- MCP
@complir/mcp- screen, watch, verify and replay as agent tools- SDK
@complir/sdk- TypeScript client with the x402 payment loop built in
Quickstart
The same verdict, three ways in. Replace https://trycomplir.xyz with your deployment; the hosted URL is pending and a local npm run dev answers on http://localhost:3000 with x402 disabled.
curl
# Screen one payee. Over x402 the first call answers 402 + PAYMENT-REQUIRED; an x402 client
# (the SDK, the MCP server) signs 0.01 USDC and retries. With X402_DISABLED=1 (local dev) it is free.
curl -s -X POST https://trycomplir.xyz/api/v1/screen \
-H 'Content-Type: application/json' \
-d '{ "address": "0x098b716b8aaf21512996dc57eb0615e2383e2f96", "amountUsdc": 120 }' | jq '{tier, score, recommendedLimits}'
# ↑ a real sanctioned wallet (Ronin Bridge exploiter, OFAC SDN + JP MOF): expect tier HIGH, score 100, limits 0/0
# Free: the latest signed attestation for any address
curl -s https://trycomplir.xyz/api/v1/attestation/0x098b716b8aaf21512996dc57eb0615e2383e2f96TypeScript
import { CompliR } from "@complir/sdk";
import { privateKeyToAccount } from "viem/accounts";
const c = new CompliR({ baseUrl: "https://trycomplir.xyz", account: privateKeyToAccount(PAYER_KEY) });
const v = await c.screen("0xPayee", { amountUsdc: 120, payeeBook: myPayees }); // 0.01 USDC via x402
if (v.tier === "HIGH") hold();
else pay(Math.min(120, v.recommendedLimits.maxPerTxUsdc));
await CompliR.verifyAttestation(v.attestation); // offline EIP-712 check, no networkSolidity
Copy contracts/src/ICompliR.sol and add one line to your treasury. isAllowed is true only while a non-expired attestation at or below the tier is stored in the registry.
require(ICompliR(registry).isAllowed(payee, ICompliR.Tier.MEDIUM), "CompliR: payee tier too high");Next: how a screen runs, the endpoint table, or the MCP server for agents that pay.
What is live today
Everything on this site reads from the same code paths an API client hits. Where a loop is waiting on a key or a deploy, the pages say so and so do these docs.
- Live - screening, attestations (signed off-chain), watch and webhooks, shadow reports, badge, Trust Map tailer, hash-chained ledger, operator ticks, tip market, signed daily report, MCP server and SDK.
- Dry-run - Guarded Payouts (verdicts and ledger are real, transfers simulated), USYC sweep (plans logged), Circle wallets and Gas Station relay (reported as dry-run without credentials), auto-refunds without a signer.
- Pending -
AttestationRegistryandGuardedTreasuryon Arc mainnet, x402 charging (X402_DISABLED=1by default), ERC-8004 registration, the hosted URL. The mainnet checklist lists the exact keys that flip each.