API REFERENCE

Nexus Trinity API

One endpoint. Send a contract or wallet address, get back the same analysis the free Contract Reader shows on the web — as JSON, for your own scripts, bots, or dashboards. Real value against bank-priced compliance tools like Chainalysis or Elliptic — and unlike most APIs at this price, going over your daily limit never cuts you off (see Rate limits below). This page is the technical reference; the legal terms are at /legal/api-terms.

Getting a key

API access is a $29/month subscription via Stripe checkout. On successful payment you get one API key by email, shown exactly once — we store only a hash of it, so we can't re-display it if you lose it. Contact security@nexustrinity.io to revoke and reissue.

Authentication

Send your key as a bearer token on every request:

Authorization: Bearer ntk_...

A missing or inactive key returns 401.

Make a request

POST /api/v1/check against https://nexustrinity.io. Body is JSON: address (required) and chain (optional, defaults to ethereum). The same endpoint handles both contracts and wallets — you don't need to tell it which; it works that out from the address itself, same as the free tool.

curl -X POST https://nexustrinity.io/api/v1/check \
  -H "Authorization: Bearer ntk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "chain": "ethereum"}'

Response — contract address

kind: "contract". analysis carries the capability findings (owner powers, rug vectors, notable code, scope, and limitations) — same shape and depth as the free web tool.

{
  "success": true,
  "kind": "contract",
  "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
  "chain": "Ethereum",
  "explorer": "etherscan.io/address/0xC02...#code",
  "analysis": {
    "tokenName": "Wrapped Ether",
    "observations": [ { "id": "...", "title": "...", "finding": "PRESENT | ABSENT | UNDETERMINED", "evidence": "...", "whyItMatters": "..." } ],
    "rugVectors": [ { "id": "...", "title": "...", "present": "YES | NO | UNDETERMINED", "severity": "HIGH | MEDIUM", "howItRugsYou": "...", "evidence": "..." } ],
    "analysisScope": { "isProxy": false, "sourceTruncated": false },
    "notableCode": [ "..." ],
    "limitations": [ "..." ]
  },
  "remaining": 99,
  "timestamp": "2026-08-15T00:00:00.000Z"
}

Response — wallet address

kind: "wallet". Pure on-chain facts — no score, no scam-list check, nothing inferred beyond what's on-chain. historyUnavailable: true means the underlying chain data couldn't be confirmed either way — never treat that the same as "confirmed empty."

{
  "success": true,
  "kind": "wallet",
  "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "chain": "Ethereum",
  "nativeSymbol": "ETH",
  "explorer": "etherscan.io/address/0xd8d...",
  "wallet": {
    "nativeBalance": "12.4",
    "txCount": 842,
    "firstSeenAt": "2018-05-02T10:14:22.000Z",
    "lastActiveAt": "2026-08-10T03:41:09.000Z",
    "ageDays": 3028,
    "recentTransactions": [ { "hash": "0x...", "direction": "in | out", "counterparty": "0x...", "valueFormatted": "0.5", "timestamp": "..." } ],
    "recentTokenTransfers": [ { "hash": "0x...", "tokenSymbol": "USDC", "tokenName": "USD Coin", "direction": "in | out", "counterparty": "0x...", "valueFormatted": "100", "timestamp": "..." } ],
    "historyConfirmedEmpty": false,
    "historyUnavailable": false
  },
  "remaining": 98,
  "timestamp": "2026-08-15T00:00:00.000Z"
}

Deep reports over the API

POST /api/v1/deep-report — same key, same auth header, but a different product and a different billing model entirely. This runs the full-depth analysis (Claude Sonnet 5, not the free tool's Groq model): a bigger source budget, extra capability categories, and a written summary — same depth as the one-off $19 web purchase. It doesn't draw from your daily_limit at all. Instead, every subscription includes a metered line item that only bills when you actually call this endpoint — $19 per successful call, charged after the analysis completes, never for a failed one. Nothing to provision or pre-purchase; call it and it's on your next invoice.

curl -X POST https://nexustrinity.io/api/v1/deep-report \
  -H "Authorization: Bearer ntk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "chain": "ethereum"}'

Response shape mirrors /api/v1/check's contract response, with analysis carrying the extra deep-report fields (summary, feeStructure, ownerTransfer, blacklistExceptions, externalDependencies). No remaining field — there's no daily cap to count down. Wallet addresses aren't supported here (a deep report is a contract product) — pass a contract address.

  • 400Missing/malformed address, or an unsupported chain slug.
  • 401Missing, invalid, or inactive API key.
  • 402Key isn't set up for per-call billing — contact support.
  • 404Source isn't verified on that chain, so it can't be analyzed.
  • 500Analysis failed — not billed. Retry.

Sanctions screening over the API

POST /api/v1/screen — same key, same auth header, but its own quota (tracked independently from Contract Reader checks — see Rate limits below). Direct-match screening against OFAC's published Specially Designated Nationals digital-currency address list, refreshed daily. Works on any address — a contract or a plain wallet — no chain parameter needed.

curl -X POST https://nexustrinity.io/api/v1/screen \
  -H "Authorization: Bearer ntk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"address": "0x..."}'

{
  "success": true,
  "address": "0x...",
  "sanctioned": false,
  "matches": [],
  "source": "OFAC Specially Designated Nationals (SDN) List — digital currency addresses",
  "listLastSynced": "2026-09-01T07:45:00.000Z",
  "scope": "Direct-match screening against OFAC's published SDN list only...",
  "remaining": 499,
  "timestamp": "2026-09-01T12:00:00.000Z"
}

If sanctioned is true, matches lists every currency/entity pairing the address is listed under — an address can legitimately match more than one.

Errors

Every error response is { "error": "..." } with one of these statuses (this table is for /api/v1/check and /api/v1/screen — the deep-report endpoint has its own set above):

  • 400Missing/malformed address, or an unsupported chain slug.
  • 401Missing, invalid, or inactive API key.
  • 404Address is a contract, but its source isn't verified on that chain — nothing to analyze (check only).
  • 413Contract is too large to analyze right now (check only).
  • 500Analysis or lookup failed — retry.

Note what's not in that list: going over your daily limit is not an error. See Rate limits below.

Rate limits

Your key has two independently-tracked daily limits, shown at checkout and in your welcome email — one for Contract Reader checks, one for sanctions screenings. Each is a rolling 24-hour window from each counted request, not a fixed calendar reset.

Going over your limit never returns an error. The request still succeeds — remaining in the response just reads 0 once you're at capacity. We get notified automatically and follow up to raise your limit; you're never blocked while that happens. If you're integrating this and want to watch for it yourself, remaining: 0 is the signal — not a 429.

If our usage-tracking system itself is unreachable, the request is rejected rather than let through unchecked — that failure mode (infrastructure being down) is different from a plan limit, and the API fails closed on it, same principle as everything else we build.

Supported chains (23)

Pass the slug on the left as chain. Full, live list — this is generated from the same config the API itself reads, so it can't drift out of sync.

ethereum — Ethereum (ETH)
base — Base (ETH)
arbitrum — Arbitrum (ETH)
optimism — Optimism (ETH)
polygon — Polygon (POL)
bsc — BNB Chain (BNB)
avalanche — Avalanche (AVAX)
linea — Linea (ETH)
blast — Blast (ETH)
gnosis — Gnosis (xDAI)
mantle — Mantle (MNT)
celo — Celo (CELO)
opbnb — opBNB (BNB)
sonic — Sonic (S)
unichain — Unichain (ETH)
abstract — Abstract (ETH)
berachain — Berachain (BERA)
sei — Sei (SEI)
bittorrent — BitTorrent Chain (BTT)
fraxtal — Fraxtal (frxETH)
xdc — XDC (XDC)
apechain — ApeChain (APE)
worldchain — World Chain (ETH)
✉️Email us