Getting started

Quickstart

Sandbox key to a first scored address in about ten minutes, with the fixtures you need to write a test suite that actually tests something.

1 · Get a sandbox key

Request access and you will have a sandbox key the same business day. Sandbox keys are prefixed ftai_test_, are never billed, and are rate-limited to 10 requests per second — enough for a test suite, not enough for a load test.

2 · Screen an address

The fixture below is a sandbox address that always returns an elevated score with mixer proximity, so you can assert on a known shape.

curl -s https://sandbox.fin-techai.com/v1/screen/address \
  -H "Authorization: Bearer $FTAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "chain": "ethereum",
    "address": "0x0000000000000000000000000000000000000bad"
  }'
→ 200 OK
{
  "risk_score": 71,
  "band": "elevated",
  "reasons": [
    { "code": "MIXER_PROXIMITY", "weight": 34, "hops": 2,
      "cluster": "tornado-router" },
    { "code": "HIGH_VELOCITY_FUNNEL", "weight": 22 },
    { "code": "NEW_ADDRESS", "weight": 15 }
  ],
  "sanctions": { "match": false, "lists": ["OFAC","EU","UK","UN"] },
  "as_of_block": 20914773,
  "coverage": { "chains": ["ethereum"], "stale": [], "excluded": [] },
  "evidence_url": "https://sandbox.fin-techai.com/v1/evidence/ev_3f…"
}

3 · Read it correctly

4 · Sandbox fixtures

These addresses behave deterministically in the sandbox, so your tests do not depend on live chain state.

FixtureReturns
0x…0badScore 71, elevated, mixer proximity at 2 hops
0x…0sancSanctions match on OFAC, score withheld
0x…0newScore 15, clear, thin history
0x…0thinCreditGraph thin_file: true
0x…0stalecoverage.stale populated — exercise your staleness path
0x…0slowResponds in 6s — exercise your timeout path

Full-length fixture addresses are in the sandbox welcome email; the abbreviations above are for reading.

5 · Subscribe to deterioration

A one-time score is a point-in-time answer. Register a webhook and you will be told when an address you have already cleared gets worse.

curl -s https://sandbox.fin-techai.com/v1/webhooks \
  -H "Authorization: Bearer $FTAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://yourapp.example/hooks/ftai",
        "events": ["screen.deteriorated", "screen.sanctions_match"] }'

Signature verification is not optional — see webhooks for the exact scheme.

6 · Move to production

  1. Swap the base URL to api.fin-techai.com and the key to ftai_live_.
  2. Pin a scoring version if you have tuned thresholds: X-FTAI-Scoring-Version: 4.
  3. Handle 429 with Retry-After and 5xx with jittered backoff. See errors and limits.
  4. Set an alert on coverage.stale being non-empty for more than a few minutes.
Before production, run a backfill: send a slice of history you already know the outcome of and compare. It is the only evaluation that tells you anything, and it is free.