Wallets
Crypto wallet management.
Returns the active wallets of your workspace, newest first (created_at descending). Filter by chain, search the address or label with q, and page with page and limit. The response is a plain wallets array with no total: keep requesting the next page until you get fewer than limit items.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
Exact chain code to filter on (for example ETH). Ignored when empty or longer than 20 characters.
length <= 20Substring search on address or label. Ignored when empty or longer than 100 characters. ' and % are stripped.
length <= 1001-based page number, clamped to 1..10000.
1 <= value <= 100001Page size, clamped to 10..100 (a value below 10 becomes 10, above 100 becomes 100).
10 <= value <= 10020Response Body
application/json
application/json
curl -X GET "https://example.com/v1/wallet/"{ "wallets": [ { "id": "b1d3f0a2-0000-4000-8000-000000000001", "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH", "label": "Treasury", "created_at": "2026-07-27 10:00:00", "updated_at": "2026-07-27 10:00:00" } ]}Registers a wallet and attaches it to your workspace. address and label are trimmed; chain is trimmed and uppercased. The address is checked for length and characters only, not against the chain's own address format.
The pair (address, chain) is unique across the whole platform, so creating a pair that already exists fails with 400 Failed to create wallet (address+chain may already exist).
An enrichment lookup (risk score, categories, sanctions) starts in the background right after creation; read it with Enrich a wallet.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/wallet/" \ -H "Content-Type: application/json" \ -d '{ "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH", "label": "Treasury" }'{ "status": "ok", "id": "b1d3f0a2-0000-4000-8000-000000000001"}Soft-deletes a wallet: it disappears from lists, detail, export and schedules, but stays in the trash (List deleted wallets) and can be brought back with Restore a wallet. Its identity links and schedules are kept; schedules do not run while the wallet is deleted.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
UUID of the wallet to delete.
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/wallet/?id=497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "ok"}Partial update of a wallet's label and/or chain; a field you leave out (or send as a non-string) keeps its current value. chain is uppercased. Send label: "" to clear the label. The address cannot be changed: delete the wallet and create a new one instead. Returns 404 when the wallet is not an active wallet of your workspace.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/wallet/" \ -H "Content-Type: application/json" \ -d '{ "id": "b1d3f0a2-0000-4000-8000-000000000001", "label": "Cold storage" }'{ "status": "ok"}Registers 1 to 500 wallets in one call. Each item follows the same rules as Create a wallet and is validated on its own: an item with an invalid address, chain or label, or a pair that already exists, is counted in failed and the rest go through. The response does not say which items failed. Bulk-created wallets are not enriched immediately: the background enrichment sweep picks them up.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/wallet/bulk" \ -H "Content-Type: application/json" \ -d '{ "wallets": [ { "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH" }, { "address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh", "chain": "BTC", "label": "Ops" } ] }'{ "status": "ok", "created": 2, "failed": 0}The trash: soft-deleted wallets of your workspace, newest first. Same filters and paging as List wallets. total is the number of wallets in the trash (it ignores the chain and q filters) and page echoes the page served. Restricted to workspace admins; an API key qualifies while the admin who created it still is one.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
Exact chain code to filter on. Ignored when empty or longer than 20 characters.
length <= 20Substring search on address or label. Ignored when empty or longer than 100 characters.
length <= 1001-based page number, clamped to 1..10000.
1 <= value <= 100001Page size, clamped to 10..100.
10 <= value <= 10020Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/wallet/deleted"{ "wallets": [ { "id": "b1d3f0a2-0000-4000-8000-000000000001", "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH", "label": "Treasury", "created_at": "2026-07-27 10:00:00", "updated_at": "2026-08-02 09:12:44" } ], "total": 1, "page": 1}Returns one active wallet with the active identities linked to it, most recently linked first. A deleted wallet returns 404.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
UUID of the wallet.
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/wallet/detail?id=497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "b1d3f0a2-0000-4000-8000-000000000001", "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH", "label": "Treasury", "created_at": "2026-07-27 10:00:00", "updated_at": "2026-07-27 10:00:00", "identities": [ { "id": "7c2e9a10-0000-4000-8000-000000000002", "type": "PERSON", "display_name": "Jane Doe", "country": "FR" } ]}Returns risk and intelligence data for one of your wallets: address type, categories, labels, sanctions, and a risk score and level, from Seqlense's crypto intelligence provider.
Address the wallet by id (takes precedence) or by exact address. With id, only active wallets are found; with address, the first wallet of your workspace with that address is used, whatever its chain.
Results are stored and reused for 30 days (cached: true). After that, or with force=true, a fresh lookup runs and replaces the stored result. A background sweep also refreshes wallets that were never enriched and results older than 30 days, so most wallets already have data.
If the provider is unreachable or rejects the lookup, the response is still HTTP 200 with {"status": "error", "error": "Enrichment API unavailable"}. Check status before reading the risk fields.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
UUID of the wallet. Provide this or address. A malformed value returns 400 Invalid id parameter.
uuidExact wallet address (trimmed), when you do not have the id. Used only when id is absent.
length <= 190true skips the 30-day cache and runs a fresh lookup. Any other value is treated as false.
falseResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/wallet/enrich"{ "status": "ok", "wallet_id": "b1d3f0a2-0000-4000-8000-000000000001", "type": "wallet", "categories": [ "exchange" ], "labels": [ "Acme Exchange hot wallet" ], "sanctions": {}, "risk_score": 12, "risk_level": "low", "enriched_at": "2026-07-27 10:00:05", "cached": true}Exports up to 10,000 active wallets, newest first, with the same chain and q filters as List wallets. JSON by default; format=csv returns a text/csv; charset=utf-8 file attachment named wallets-export.csv, with the header row id,address,chain,label,created_at,updated_at and every value in double quotes (quotes inside a label are doubled). Any format other than csv returns JSON.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
Exact chain code to filter on.
Substring search on address or label.
Output format.
"json"Value in
- "json"
- "csv"
Response Body
application/json
curl -X GET "https://example.com/v1/wallet/export"{ "wallets": [ { "id": "b1d3f0a2-0000-4000-8000-000000000001", "address": "0xABC0000000000000000000000000000000000001", "chain": "ETH", "label": "Treasury", "created_at": "2026-07-27 10:00:00", "updated_at": "2026-07-27 10:00:00" } ], "total": 1}Associates an identity with a wallet. Both must belong to your workspace, otherwise the call returns 400 Wallet not found or no access or 400 Identity not found or no access. Linking a pair that is already linked succeeds and changes nothing.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/wallet/link-identity" \ -H "Content-Type: application/json" \ -d '{ "wallet_id": "b1d3f0a2-0000-4000-8000-000000000001", "identity_id": "7c2e9a10-0000-4000-8000-000000000002" }'{ "status": "ok"}Removes the link between a wallet and an identity. Returns 404 when the wallet is not in your workspace; unlinking a pair that was not linked still returns ok.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
uuiduuidResponse Body
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/wallet/link-identity?wallet_id=497f6eca-6276-4993-bfeb-53cbbbba6f08&identity_id=497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "status": "ok"}Brings a soft-deleted wallet back from the trash, with its identity links and schedules. Returns 404 when the id is not a deleted wallet of your workspace (including a wallet that is not deleted). Restricted to workspace admins; an API key qualifies while the admin who created it still is one.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/wallet/restore" \ -H "Content-Type: application/json" \ -d '{ "id": "b1d3f0a2-0000-4000-8000-000000000001" }'{ "status": "ok"}Recurring work attached to a wallet, ordered by kind, plus the kinds available and the interval bounds a schedule must respect. kind names what recurs; MABU (a recurring market abuse scan) is the only kind today. Returns 404 when the wallet is not an active wallet of your workspace.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/wallet/schedules?wallet_id=497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "schedules": [ { "id": "3f7a1c22-0000-4000-8000-000000000003", "company": "acme", "wallet_id": "b1d3f0a2-0000-4000-8000-000000000001", "kind": "MABU", "interval_days": 7, "enabled": true, "last_run_at": "2026-07-27 10:00:31", "next_run_at": "2026-08-03 10:00:31", "last_error": "", "created_by": 0, "created_at": "2026-07-27 10:00:00", "updated_at": "2026-07-27 10:00:31" } ], "kinds": [ "MABU" ], "min_interval_days": 1, "max_interval_days": 90}Upsert: a wallet holds at most one schedule per kind, so posting a kind that already exists changes its interval and enabled state instead of failing, and clears last_error. The response id is the schedule's id (unchanged on update).
A new enabled schedule is due immediately: the scheduler checks every minute and launches the first run within about a minute. Re-enabling keeps an already planned next run; disabling (enabled: false) parks the schedule without deleting it (next_run_at becomes empty).
A MABU schedule is refused with 400 Market abuse scans do not cover <CHAIN> when the wallet's chain is not one the scanner reads (ETH, BTC, SOL, BSC, POLYGON, ARBITRUM, OPTIMISM, BASE). Other 400s: Unknown kind - must be one of: MABU and interval_days must be between 1 and 90.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/wallet/schedules" \ -H "Content-Type: application/json" \ -d '{ "wallet_id": "b1d3f0a2-0000-4000-8000-000000000001", "kind": "MABU", "interval_days": 7, "enabled": true }'{ "status": "ok", "id": "3f7a1c22-0000-4000-8000-000000000003"}Deletes the schedule of one kind from a wallet. Returns ok even when there was no such schedule.
Authorization
ApiKeyAuth Send your API key as a bearer token: Authorization: Bearer sq_YOUR_API_KEY.
In: header
Query Parameters
uuidCase-insensitive.
Value in
- "MABU"
Response Body
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/wallet/schedules?wallet_id=497f6eca-6276-4993-bfeb-53cbbbba6f08&kind=MABU"{ "status": "ok"}