Kraken
Reads a Kraken account’s spot balances, ledger entries and trade history, so reconciliation and reporting agents can check them against the books. It is read-only, and it is built to refuse a key that can withdraw or trade. It reads in place, in your deployment; only ids, hashes and counts reach LightHouse.
At a glance
Section titled “At a glance”| Collector | Kraken, version 1.0.0 |
|---|---|
| Reads | Kraken: Kraken Spot REST API (the vendor's documentation) |
| Family | Finance |
| Kind | Exchange |
| Ways to connect | Access token |
| Scopes |
|
| Read only | Yes, except: [object Object]; [object Object]; [object Object]; [object Object] |
| Vendor's API can move money | Yes |
| Personal data | Financial |
| Hosts it may contact | api.kraken.com, {host} |
| Vendor API versions | Spot REST API (/0/private) |
| Lowest engine version | 0.46.0 |
What it reads
Section titled “What it reads”- Spot balances: one record per asset, rewritten only when it changes and removed when the asset disappears.
- Ledger entries: amount, fee and balance after, with the reference, type, sub-type and asset class.
- Trade history: pair, side, order type, price, volume, cost and fee in the quote currency.
- Ledgers and trades are read oldest first from the last cursor, paged by
offset. The first read goes back
history_days(default 90, at most 3,650).
It does not read futures, open orders, staking or funding addresses.
How to connect
Section titled “How to connect”- In Kraken, make an API key with only Query Funds, Query Ledger Entries and Query Closed Orders & Trades, and an IP allowlist of your deployment’s egress addresses.
- In LightHouse, open Setup and admin, Connectors and choose Kraken.
- Paste the API key and the private key. Your browser seals it to your deployment; LightHouse never sees it.
The credential is JSON in the variable the source names (AAL_KRAKEN by
default): api_key and api_secret.
Permissions
Section titled “Permissions”This collector is read-only in what it does. Kraken’s private endpoints
accept only POST, so every request is a signed POST, but the collector
makes exactly four calls, all of which read: GetApiKeyInfo, Balance,
Ledgers and TradesHistory (the manifest lists them under
read_operations; the read-only test fails on any other call). Nothing is
placed, cancelled or withdrawn.
- Refused by the code: Kraken states a key’s permissions
(
POST /0/private/GetApiKeyInfo, which needs no permission). Before every read, and in the health check, a key whosepermissionsinclude any of these six names is refused, naming it:withdraw-funds,modify-trades,close-trades,earn-funds,add-withdraw-address,update-withdraw-address. The error isKraken: refused: the credential can \<permissions>; make a view-only one. - Not refused by the code: every other permission name, because the code refuses only those six. A permission that moves funds or trades under a name not on that list would pass. Make the key with only the three query permissions above.
- IP allowlist: the check reports whether the key has one; a key without one is told to pin it to your egress addresses (it is not refused).
- Signing: each request carries HMAC-SHA512 of the path and the SHA-256 of nonce and body, under the base64-decoded secret; the nonce always increases. The secret never leaves your store.
- Hosts: only
api.kraken.com, over https; redirects are never followed.
Limits
Section titled “Limits”- Spot only.
- Requests are paced one second apart and retried on 429 and 5xx with back-off.
- Amounts are exact decimals; a number that arrives as a float is refused.
- Each record is keyed by Kraken’s own id, so one read twice is still one record.
Data handling
Section titled “Data handling”- Records hold financial data: balances, ledger amounts and trades. Documents
carry the
labelyou give the source (defaultconfidential). - Content is read in place, in your deployment. LightHouse receives ids, hashes and counts, never the records, and never opens the credential.
- Errors carry a status and fixed text, never a provider’s body.
- The data is audit-ready for your own agents; nothing here certifies anyone against any regulation.
Troubleshooting
Section titled “Troubleshooting”| What you see | What it means | What to do |
|---|---|---|
Kraken: refused: the credential can withdraw-funds; make a view-only one |
The key holds a fund-moving permission (the one named) | Make a key with only the three query permissions |
Kraken answered HTTP 401 (the key or signature was refused) |
EAPI:Invalid key or a bad signature |
Check the key and the private key |
Kraken answered HTTP 403 (permission denied) |
The key lacks a query permission | Add Query Funds, Query Ledger Entries or Query Closed Orders & Trades |
Kraken refused Balance: EService:Unavailable |
Kraken reported an error (its code is shown) | Try again later |
Kraken answered HTTP 429 |
Rate limit | Nothing; the collector backs off and continues |
Certification
Section titled “Certification”Each entry is a run by Atlantic Agentic Labs, newest first. Only a run against the vendor’s sandbox or a client environment certifies a collector; a certification lasts six months, or less if the vendor publishes an API version the collector does not list. See How collectors are certified.
| Date | Collector | Engine | Vendor API | Method | Expires |
|---|---|---|---|---|---|
| 10 November 2026 | 1.0.0 | 0.46.0 | Spot REST API (/0/private) | Fixtures only: built, not certified | Not applicable |
Security posture
Section titled “Security posture”From the collector’s last scan on the default branch. What each line means, and what blocks a release: Security posture.
| Last scanned | 10 November 2026 |
|---|---|
| Critical findings | 0 |
| High findings | 0 |
| Medium findings | 0 |
| Low findings | 0 |
| Info findings | 0 |
| Release blocked | No |
| Network allow-list check | Pass |
| Read-only behavioural test | Pass |
| SBOM (CycloneDX) | Produced |
| Dependency licences | Pass |
| Scanners | bandit 1.9.4, semgrep 1.181.1, pip-audit 2.10.1, osv-scanner 2.7.0, cyclonedx-py 7.5.0, pip-licenses 5.5.5, gitleaks repository job aal-secrets, hosts_check tools/hosts_check.py, read-only test pytest -m read_only |