Wallets
Register crypto wallet addresses, link them to identities, and pull risk and sanctions enrichment.
A wallet is a crypto address you want to monitor. Each wallet is identified
by its address and chain, can be linked to one or more
identities, and carries risk
enrichment (categories, sanctions, a risk score) fetched from Seqlense's
intelligence provider.
Like identities, wallets are scoped to your organization, resolved from the API key on the request. Deletes are soft: a wallet is deactivated, never hard-deleted.
Address and chain
The pair (address, chain) is unique within the platform: creating a
wallet that already exists fails. A few rules:
addressis 10 to 128 characters, made of letters, digits, and_ - :.chainis an uppercase identifier of letters and digits, max 20 characters (for exampleETH,BTC,SOL,TRX,TON,DOGE,BSC,POLYGON).labelis an optional human-readable name, max 100 characters.
Create a wallet
POST /v1/wallet/ with an address and chain. Seqlense enriches the new
wallet in the background, so its risk data is usually ready by the time you fetch
it (see Enrichment).
curl -X POST "https://api.seqlense.com/v1/wallet/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"address": "0xABC0000000000000000000000000000000000001",
"chain": "ETH",
"label": "Treasury"
}'{ "status": "ok", "id": "b1d3f0a2-0000-4000-8000-000000000001" }List, search, and paginate
GET /v1/wallet/ returns your active wallets, 20 per page, newest first. Filter
by chain, search address or label with q, and page with page.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.seqlense.com/v1/wallet/?chain=ETH&q=treasury&page=1"{
"wallets": [
{
"id": "b1d3f0a2-0000-4000-8000-000000000001",
"address": "0xABC0000000000000000000000000000000000001",
"chain": "ETH",
"label": "Treasury",
"created_at": "2026-07-27T10:00:00Z",
"updated_at": "2026-07-27T10:00:00Z"
}
]
}The list response is a plain wallets array (no pagination envelope). Walk pages
by incrementing page until you get fewer than 20 results. For a full dump, use
Export instead.
Use GET /v1/wallet/detail?id=… for a single wallet plus the identities linked
to it.
Update
PUT /v1/wallet/ is a partial update of label and/or chain. The
address cannot be changed; delete the wallet and recreate it to move to a
different address.
curl -X PUT "https://api.seqlense.com/v1/wallet/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "id": "b1d3f0a2-0000-4000-8000-000000000001", "label": "Cold storage" }'Delete
DELETE /v1/wallet/?id=… soft-deletes a wallet (is_active = false).
Bulk create
POST /v1/wallet/bulk registers up to 500 wallets in one call. The array key
is wallets, and the response reports created and failed counts (an item
fails on an invalid address or chain, or a duplicate).
curl -X POST "https://api.seqlense.com/v1/wallet/bulk" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"wallets": [
{ "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH" },
{ "address": "bc1qxy2000000000000000000000000000000000", "chain": "BTC", "label": "Ops" }
]
}'{ "status": "ok", "created": 2, "failed": 0 }Export
GET /v1/wallet/export returns up to 10,000 wallets, as JSON (default) or CSV.
It takes the same chain and q filters as the list endpoint. Pass
format=csv for a downloadable file.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.seqlense.com/v1/wallet/export?format=csv" -o wallets.csvEnrichment
GET /v1/wallet/enrich returns risk and intelligence data for a wallet:
address type, behavioural categories, off-chain labels, sanctions screening, and
a risk score and level.
Address it either by id, when you hold the wallet's UUID, or by address,
when you only have the address itself. Exactly one of the two is required.
Results are cached. A fresh cached result is returned unless you pass
force=true to force a new lookup.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.seqlense.com/v1/wallet/enrich?id=b1d3f0a2-0000-4000-8000-000000000001"{
"status": "ok",
"type": "EOA",
"categories": ["exchange"],
"labels": ["Acme Exchange hot wallet"],
"sanctions": {},
"risk_score": 12,
"risk_level": "LOW",
"enriched_at": "2026-07-27 10:00:00",
"cached": true
}Enrichment is best-effort. If the upstream provider is unavailable, the endpoint
still returns HTTP 200 with an error envelope: { "status": "error", "error": "..." }. Check status before reading the risk fields.
Link identities
Wallets connect to the people and entities that control them. Both the wallet and the identity must belong to your organization.
POST /v1/wallet/link-identitywith{ "wallet_id": "…", "identity_id": "…" }.DELETE /v1/wallet/link-identity?wallet_id=…&identity_id=…to unlink.
Linked identities are returned inline by GET /v1/wallet/detail.
Recurring work
A wallet can carry work that repeats, so you do not have to trigger it yourself each time. Today that means a recurring market abuse scan.
POST /v1/wallet/schedules
{ "wallet_id": "…", "kind": "MABU", "interval_days": 7, "enabled": true }interval_days runs from 1 to 90: daily at the tightest, quarterly at the
loosest. Enabling a schedule makes its first run due immediately.
GET /v1/wallet/schedules?wallet_id=…lists what a wallet has, along with the kinds available and the interval bounds.DELETE /v1/wallet/schedules?wallet_id=…&kind=MABUremoves one.
A wallet holds at most one schedule per kind, and posting the same kind twice changes it rather than failing.
kind names what recurs, so this endpoint is not tied to market abuse: other
kinds of recurring work will use these same three calls. MABU is the only kind
today.
A schedule keeps its cadence even when a launch fails: the reason is kept in
last_error and the next occurrence still stands, because one failed launch is
not a reason to stop watching a wallet.
Full reference
Every endpoint, parameter, schema, and a live "try it" console are in the API Reference.