Free tier + anonymous OFAC endpoint: PaladinFi v0.11.78a
v0.11.77 (free anonymous OFAC) shipped: 2026-05-23. v0.11.78a (free-tier signup + auth platform) shipped: 2026-05-23.
Two evaluation paths went live this week and changed the cost of trying
PaladinFi from "sign a contract" to "curl in a terminal."
Both are real-data, both are on Base mainnet, and both let a builder
validate API shape and uptime before any commercial conversation.
The anonymous path is for the five-minute first look. The free-tier signup is for builders ready to wire the full composite trust check or quote routing into an agent loop without paying anything until they cross 1,000 requests in a month.
Five-minute look — /v1/trust-check/ofac (anonymous)
The OFAC SDN wallet screen now runs as a standalone free endpoint. No
signup, no API key, no x-payment header. Rate-limited at one
request per second per IP with a small burst, declared as a separate
nginx zone (trustcheck_ofac_free) so abuse of the free path
can't impact paid traffic.
Try it now (replace the address with whatever wallet you want to screen):
curl -X POST https://swap.paladinfi.com/v1/trust-check/ofac \
-H 'content-type: application/json' \
-d '{"address":"0xeA8C33d018760D034384e92D1B2a7cf0338834b4","chainId":8453}'
Response shape (clean wallet, returns allow):
{
"address": "0xeA8C33d018760D034384e92D1B2a7cf0338834b4",
"chainId": 8453,
"trust": {
"recommendation": "allow",
"factors": [
{ "source": "ofac", "signal": "not_listed", "weight": 0, "real": true }
],
"version": "1.1",
"_real": true,
"_scope": "ofac-only (wallet-address screen; use /v1/trust-check for full composition)",
"_ofac_list_updated_at": "2026-05-25T04:27:01Z",
"_ofac_sdn_count": 93
},
"_paid_endpoint_info": {
"url": "https://swap.paladinfi.com/v1/trust-check",
"method": "POST",
"auth": "x402 (USDC EIP-3009 transferWithAuthorization on Base)",
"price_usdc": "0.001",
"plugins": { "elizaos": "...", "agentkit": "..." },
"docs": "https://paladinfi.com/trust-check/"
}
}
Two fields worth pointing at. _ofac_list_updated_at is the
timestamp the SDN list was last rotated server-side — if you build a
monitor that worries about list staleness, this is the field to read.
_ofac_sdn_count is the current entry count, which surfaces
both in this response and in /health as a freshness signal.
Scope of the free OFAC endpoint
The Treasury OFAC SDN list contains roughly 93 wallet addresses (mostly
EOA addresses sanctioned for specific incidents). It is a hard
compliance floor, not a full risk picture. The endpoint screens against
that list and that list only — it does not evaluate
contract-source verification, honeypot patterns, fresh-deploy heuristics,
or destination-address lookalike checks. Those layers live on the paid
/v1/trust-check endpoint and in the free-tier signup path
below.
Free-tier signup — paladinfi.com/signup
1,000 requests/month free. Email verification only; the address is used for the verify magic link and account-critical notices, nothing else. Issues an API key that authenticates the full composite paths:
/v1/quote— best-of-N swap quote across 0x AllowanceHolder + Velora Augustus v6.2 on Base, with ready-to-execute calldata and integrated fee handling/v1/trust-check— composite trust evaluation: OFAC + GoPlus contract risk signals + Etherscan source verification + anomaly heuristics + destination-address lookalike detection/v1/trust-check/preview— sample-fixture mode for CI / shape testing (_real: false)
The signup flow: email, Cloudflare Turnstile CAPTCHA, email-verify magic link, key issued. Verification links are HMAC-signed and one-shot (single redemption).
/v1/account/* call returns 503 until
disengaged. The OFAC anonymous path is unaffected. The operational
primitive is surfaced in the runbook so the failure mode is named
upfront.
What the auth stack actually does
Brief tour for anyone who wants to know what runs behind
/v1/account/* before pointing an agent at it.
- FastAPI service on a private port, fronted by the
existing
swap.paladinfi.comnginx with dedicated rate-limit zones for signup, verify, and the general account surface. - RDS Multi-AZ Postgres with IAM authentication — no
stored password. Tokens minted per connection via the AWS SDK; passed
through a psycopg3 keyword callback rather than the libpq conninfo
string, so the token never appears in
pg_stat_activityor libpq tracing. - Four secrets in SSM Parameter Store as KMS-encrypted SecureStrings: the CAPTCHA secret, an API-key pepper for hashing stored keys, a log pepper for correlation-id hashing (separated so audit-log rotation is independent of key-material rotation), and an admin ops bearer for internal endpoints.
- HMAC-SHA-256 server pepper for hashing API keys at rest — the database holds hashes, not keys. Rotating the pepper is a documented procedure with a dual-pepper overlap window (queued as a followup item; see below).
- Signup defense-in-depth: disposable-domain block,
case-insensitive email uniqueness (via the
citextPostgres extension on the accounts table), per-IP and per-email rate limits backed by a dedicated rate-limit table, plus the Turnstile widget on top. - systemd hardening:
ProtectHome=read-only,ProtectSystem=strict, narrowReadWritePaths,NoNewPrivileges=true,MemoryMax=512M.
The review process behind the ship
v0.11.78a went through a full Tier-1 three-adversary review on the code (Security in audit-mode framing, Maintainer for operational posture, plus a Maintainer Tier-2 amendment-coherence pass). Findings across HIGH, MED, and CRITICAL severity tiers were addressed in code before deploy. Six items cleared as ship-safe deferrals — each one tracked, each one non-CRITICAL per the Security re-review.
What's on the followup list:
- DB-level
CHECKconstraints on the runtime-config JSONB values used as caps - Full transactional layer with explicit
BEGIN/COMMITframing around multi-statement flows (today each insert is its own transaction; for the current operations the boundaries are safe, but consolidating is ergonomic cleanup) - ECDSA P-256 migration for the GitHub Secret Scanning Partner webhook — the endpoint returns 503 today; the HMAC-SHA256 path is deprecated by GitHub, and the partner-program application is in queue
- Per-call connection acquisition optimization (verifier currently opens three connections where one would suffice; correctness intact, perf optimization deferred)
- A wrapper script for the kill-switch curl invocation, so operating it under stress doesn't require copy-pasting JSON bodies
- A documented pepper-rotation runbook with the dual-pepper overlap procedure
What's not in v0.11.78a (deliberately)
Paid tiers, Stripe, invoicing, and tax handling are queued as v0.11.78b. They depend on SES production access landing (request submitted; AWS is reviewing) and on the first paid customer pipeline maturing enough to shape the right tier structure. The engineering shape is locked in the plan doc; the SES dependency gates the ship date.
Why ship a free tier at all
Most trust APIs gate evaluation behind a sales conversation. The cost of
that for an agent builder is real: a week of back-and-forth before you
know whether the response shape fits your loop. The OFAC anonymous
endpoint compresses that to a single curl; the free-tier
signup compresses the full composite to an afternoon.
The value isn't in writing the integration code — that's a few-hundred-line job either way. The value is the trust-data composition, the uptime, and the operational discipline behind the endpoint. Free evaluation paths are how a builder can verify those before any commercial conversation.
Verify
- Anonymous OFAC endpoint (no auth):
swap.paladinfi.com/v1/trust-check/ofac (POST with
{address, chainId}) - Signup: paladinfi.com/signup/
- Live health (returns
version: 0.11.78a): swap.paladinfi.com/health - Account health (returns
db_reachable: truewhen the IAM-auth Postgres path is alive): swap.paladinfi.com/v1/account/health/db - SDKs that wrap the paid
/v1/trust-checkendpoint for agent frameworks:@paladinfi/eliza-plugin-trust(ElizaOS) and@paladinfi/agentkit-actions(Coinbase AgentKit) - MCP Registry handle:
io.github.paladinfi/paladin-swap
Integration paths: if you're working in ElizaOS or
Coinbase AgentKit, the npm plugins above are the
fastest path. If you're calling HTTP directly from a custom agent,
signup → email-verify → key in env → first
/v1/trust-check call is roughly ten minutes end-to-end for
anyone already working on Base.
Questions, repro cases, integration questions: dev@paladinfi.com.