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

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 GuardedTreasury dry-run
Ledger
/ledger - hash-chained decision log, verify and replay
Daily report
/report - signed traction report, one per UTC day
Registry · Arc 5042
0xA82EDb5e111c31C63E06EF0007f2fa1a9e7EB30d AttestationRegistry · verified on Sourcify
Also published by /api/v1/health as network.registryAddress.
GuardedTreasury
0x3B13186a1E4b1108eA5CB2f8853D84A2aeD71Cc5 GuardedTreasury · live · payouts gated by isAllowed(payee, MEDIUM)
EIP-712 domain
CompliR v1 - name CompliR, version 1, chainId 5042, verifyingContract = registry
USDC on Arc
0x3600000000000000000000000000000000000000 ERC-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

sh
# 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/0x098b716b8aaf21512996dc57eb0615e2383e2f96

TypeScript

ts
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 network

Solidity

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.

solidity
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 - AttestationRegistry and GuardedTreasury on Arc mainnet, x402 charging (X402_DISABLED=1 by default), ERC-8004 registration, the hosted URL. The mainnet checklist lists the exact keys that flip each.