Daily Snapshot · Data through 13-Jul-2026 · Published 14-Jul-2026 15:49 UTC
Developer platform

AfriFlux API documentation

Exact-address intelligence for products operating across African digital-asset markets. Start with deterministic synthetic fixtures; production data requires reviewed access and purchased credits.

Quickstart

Create an af_test_ key in the developer dashboard, then call the same routes used in production.

curl "https://staging.afriflux.xyz/v1/labels/base/0x0000000000000000000000000000000000000001" \
  -H "Authorization: Bearer af_test_YOUR_KEY"

Authentication

Send API keys as Bearer credentials. Test keys are permanently sandbox-routed; live keys require an active, approved account. Keys can only read selected scopes.

Authorization: Bearer af_live_YOUR_KEY

Synthetic sandbox

Sandbox calls never query production labels or consume credits. The Base address below is a deterministic match; any other valid address is unmatched.

Matched fixture
base / 0x0000000000000000000000000000000000000001

Simulated 500 header
X-AfriFlux-Sandbox-Scenario: server_error

Wallet Labels API

v1

Resolve a chain and wallet address to a curated AfriFlux entity attribution.

GET/v1/labels/{chain}/{address}Billable: unique chain/address

Look up one wallet label

Returns the current attribution for an exact chain/address pair. Valid unmatched requests are billable.

Example response
{
  "address": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3",
  "chain": "base",
  "matched": true,
  "entity": "Binance",
  "category": "exchange",
  "role": "cex_bridge",
  "confidence": "high",
  "as_of": "2026-04-25",
  "valid_until": "2026-07-20T12:00:00.000Z",
  "attribution_id": "attr_01J...",
  "license_fingerprint": "afl_9dc8..."
}
POST/v1/labels/batchBillable: unique chain/address

Look up a batch of wallet labels

Deduplicates identical chain/address pairs before applying limits and credits.

Request body
{
  "wallets": [
    {
      "chain": "base",
      "address": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3"
    }
  ]
}
Example response
{
  "data": [
    {
      "address": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3",
      "chain": "base",
      "matched": true,
      "entity": "Binance",
      "category": "exchange",
      "role": "cex_bridge",
      "confidence": "high",
      "as_of": "2026-04-25",
      "valid_until": "2026-07-20T12:00:00.000Z",
      "attribution_id": "attr_01J...",
      "license_fingerprint": "afl_9dc8..."
    }
  ]
}
JavaScript
const response = await fetch(API + "/v1/labels/batch", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.AFRIFLUX_API_KEY,
    "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({ wallets: [{ chain: "base", address: "0x..." }] })
});
const labels = await response.json();
Python
import os, requests
response = requests.post(
    API + "/v1/labels/batch",
    headers={"Authorization": f"Bearer {os.environ['AFRIFLUX_API_KEY']}"},
    json={"wallets": [{"chain": "base", "address": "0x..."}]},
    timeout=30,
)
response.raise_for_status()
GET/v1/usage

View account usage

Returns recent billable usage and aggregate credit consumption.

Example response
{
  "credits_used": 320,
  "requests": 281,
  "period_start": "2026-07-01T00:00:00.000Z"
}
GET/v1/credits

View credit balance and expiry

Returns the unexpired balance and credit-lot expiry schedule.

Example response
{
  "balance": 4680,
  "lots": [
    {
      "remaining": 4680,
      "expires_at": "2027-07-13T00:00:00.000Z"
    }
  ]
}
GET/v1/health

Check API availability

Confirms that the published API product and serving database are available.

Example response
{
  "status": "ok",
  "product": "wallet_labels",
  "version": 1
}

Credits, caching and limits

  • Credits used = operation weight × unique billable quantity.
  • Valid unmatched lookups consume credits; invalid input does not.
  • Batch duplicates are billed once and retries can use an Idempotency-Key.
  • Matched results are valid for seven days; unmatched results for 24 hours. Repeats during that window are not charged again.
  • RPS, batch and daily unique-address limits apply across all account keys.
  • Credit and pricing information is returned in X-AfriFlux-* headers.

Errors

400Invalid request, chain or address
401Missing, invalid, revoked or expired key
402Insufficient credits
403Scope, account or live-access restriction
404API is not published
413Batch limit exceeded
429RPS or daily unique limit exceeded
500Internal error; charged usage is refunded

Storage and licensing

Standard access permits internal/product enrichment, individual display, caching until valid_until, and historical audit records. It prohibits raw redistribution, resale, a competing label API or database, systematic enumeration, model training, key sharing, and serving expired labels as current. Responses include a customer-specific license fingerprint. Attributions are analytical signals, not proof of legal ownership, sanctions or criminal conduct.