# Kraken

> Read Kraken's public market data. Get a live price for any of the 1,400-plus pairs it trades, pull candles for a chart or a moving average, look into the order book, follow the trades and the spread, and check whether the exchange is up before you rely on the figures. Kraken's derivatives platform is here too: contract terms, prices, order books, fills, funding rates, and an alert for any contract not trading normally. No API key, no account and no sign-up - and every action reads, so nothing can reach an account or move money.

App · Cryptocurrency · 14 actions. Web page: https://docs.lodol.com/docs/integrations/kraken

## Actions

### Check for unusual futures activity

Ask Kraken which futures contracts are not trading normally right now - one whose price has come adrift of its index, or one moving violently enough for Kraken to have raised the margin behind it. Only the flagged contracts come back, so a scheduled check can branch on 'unusual_activity' instead of reading through several hundred contracts that are fine.

**Inputs**: None.

**Outputs**

- `alert_count` (number)
- `alerts` (list)
- `checked_at` (text)
- `contracts_checked` (number)
- `message` (text)
- `unusual_activity` (true/false)

**Example output**

```json
{
  "alert_count": 0,
  "alerts": [],
  "checked_at": "2026-09-02T22:18:01Z",
  "contracts_checked": 294,
  "message": "All 294 Kraken futures contracts are trading normally.",
  "unusual_activity": false
}
```

### Check Kraken's status

Check whether Kraken is trading, how quickly it is answering, and what maintenance it has announced. This is the one action that reports a problem as a value instead of failing the step, so a workflow can decide what to do about it - skip a report, wait, or say the figures are stale - rather than dying halfway through.

**Inputs**: None.

**Outputs**

- `checked_at` (text)
- `clock_offset_seconds` (number)
- `maintenance_count` (number)
- `message` (text)
- `online` (true/false)
- `reachable` (true/false)
- `response_time_ms` (number)
- `server_time` (text)
- `server_time_epoch` (number)
- `status` (text)
- `status_description` (text)
- `upcoming_maintenance` (list)

**Example output**

```json
{
  "checked_at": "2026-09-02T22:13:47Z",
  "clock_offset_seconds": -0.3,
  "maintenance_count": 1,
  "message": "Kraken is fully operational. Kraken Website and API Maintenance is scheduled for 2026-09-03T07:01:00Z.",
  "online": true,
  "reachable": true,
  "response_time_ms": 143.7,
  "server_time": "2026-09-02T22:13:47Z",
  "server_time_epoch": 1788387227,
  "status": "online",
  "status_description": "Kraken is fully operational.",
  "upcoming_maintenance": [
    {
      "affected_services": [
        "spot_trading",
        "spot_rest"
      ],
      "ends_at": "2026-09-03T07:16:00Z",
      "more_info_url": "https://stspg.io/9f3sdrwg5949",
      "recommended_action": "continue",
      "starts_at": "2026-09-03T07:01:00Z",
      "starts_in_hours": 8.8,
      "title": "Kraken Website and API Maintenance"
    }
  ]
}
```

### Get a futures order book

See the buy and sell orders waiting on one futures contract, best price first, with the spread and the resting size on each side worked out. Kraken publishes the whole book on the derivatives platform - often more than a thousand levels a side - so 'Price levels' decides how much of the top of it you get back.

**Inputs**

- Futures contract (`symbol`, text, required): Which contract's order book to read.
- Price levels (`depth`, number): How many price levels to return on each side, starting from the best price. From 1 to 500. Default: `10`.

**Outputs**

- `ask_size` (number)
- `asks` (list)
- `best_ask` (number)
- `best_bid` (number)
- `bid_size` (number)
- `bids` (list)
- `contract` (text)
- `contract_type` (text)
- `depth` (number)
- `pair` (text)
- `retrieved_at` (text)
- `settled_in` (text)
- `spread` (number)
- `spread_percent` (number)
- `symbol` (text)

**Example output**

```json
{
  "ask_size": 0.0271,
  "asks": [
    {
      "price": 77113.0,
      "size": 0.0271,
      "value": 2089.7623
    }
  ],
  "best_ask": 77113.0,
  "best_bid": 77112.0,
  "bid_size": 0.0261,
  "bids": [
    {
      "price": 77112.0,
      "size": 0.0261,
      "value": 2012.6232
    }
  ],
  "contract": "BTC/USD perpetual",
  "contract_type": "perpetual",
  "depth": 1,
  "pair": "BTC/USD",
  "retrieved_at": "2026-09-02T22:18:00Z",
  "settled_in": "USD",
  "spread": 1.0,
  "spread_percent": 0.001297,
  "symbol": "PF_XBTUSD"
}
```

### Get a futures price

Get what one or more futures contracts are trading at, with the two numbers only a derivatives market has: the funding rate, which says which side is paying the other to hold the position, and the open interest, which says how much is riding on it. The mark price - what positions are valued and liquidated at - comes back beside the last traded price.

**Inputs**

- Futures contracts (`symbols`, list, required): Which contracts to price. Pick as many as you need; they are fetched together, so ten cost the same as one. At most 20 at a time.

**Outputs**

- `count` (number)
- `prices` (list)
- `retrieved_at` (text)

**Example output**

```json
{
  "count": 1,
  "prices": [
    {
      "ask": 77114.0,
      "ask_size": 0.0271,
      "bid": 77113.0,
      "bid_size": 0.0326,
      "change_24h": -157.0,
      "change_percent_24h": -0.2,
      "contract": "BTC/USD perpetual",
      "contract_type": "perpetual",
      "funding_rate_absolute": 0.404140164454,
      "funding_rate_percent": 0.00052407,
      "high_24h": 77768.0,
      "index_price": 77113.84,
      "last_trade_size": 0.0002,
      "last_trade_time": "2026-09-02T22:14:12Z",
      "low_24h": 76197.0,
      "mark_price": 77115.57218147644,
      "open_24h": 77272.0,
      "open_interest": 1917.3661,
      "pair": "BTC/USD",
      "post_only": false,
      "predicted_funding_rate_percent": 0.00043938,
      "price": 77115.0,
      "settled_in": "USD",
      "spread": 1.0,
      "spread_percent": 0.001297,
      "suspended": false,
      "symbol": "PF_XBTUSD",
      "volume_24h": 6853.5365,
      "volume_quote_24h": 528233773.2481,
      "vwap_24h": 77074.62756609
    }
  ],
  "retrieved_at": "2026-09-02T22:14:13Z"
}
```

### Get a price

Get what one or more pairs are trading at right now: the last traded price, the best bid and ask, and the day's high, low, volume and change. This is the action for a price alert, a morning summary or a figure to drop into a message. Pick several pairs and they come back in one request.

**Inputs**

- Trading pairs (`pairs`, list, required): Which pairs to price. Pick as many as you need; they are fetched together, so ten pairs cost the same as one. At most 20 at a time.

**Outputs**

- `count` (number)
- `prices` (list)
- `retrieved_at` (text)

**Example output**

```json
{
  "count": 1,
  "prices": [
    {
      "ask": 77126.8,
      "ask_volume": 1.0,
      "base": "BTC",
      "bid": 77126.7,
      "bid_volume": 1.0,
      "change_percent_today": -0.3507,
      "change_today": -271.4,
      "high_24h": 77736.2,
      "high_today": 77736.2,
      "kraken_pair": "XXBTZUSD",
      "last_trade_volume": 1.946e-05,
      "low_24h": 76236.9,
      "low_today": 76236.9,
      "open_today": 77398.1,
      "pair": "BTC/USD",
      "pair_id": "XBTUSD",
      "price": 77126.7,
      "quote": "USD",
      "spread": 0.1,
      "spread_percent": 0.000129,
      "trades_24h": 103253,
      "trades_today": 96524,
      "volume_24h": 2175.77514972,
      "volume_today": 2057.45745294,
      "vwap_24h": 77106.97115,
      "vwap_today": 77096.17108
    }
  ],
  "retrieved_at": "2026-09-02T22:13:47Z"
}
```

### Get futures funding rates

See what holding a perpetual contract has cost, hour by hour. Funding is the payment that keeps a perpetual near the spot price: every hour one side pays the other, and a positive rate means the people who are long are paying the people who are short. The average is also given annualised, which is the figure that makes an hourly rate of 0.0005% mean something. Dated futures do not pay funding, and choosing one says so.

**Inputs**

- Futures contract (`symbol`, text, required): Which perpetual contract's funding to read. A dated future has none.
- How many (`limit`, number): How many of the most recent hourly rates to return. A day is 24 and a week is 168. From 1 to 500. Default: `24`.

**Outputs**

- `annualised_rate_percent` (number)
- `average_rate_percent` (number)
- `contract` (text)
- `contract_type` (text)
- `count` (number)
- `first_rate_time` (text)
- `highest_rate_percent` (number)
- `last_rate_time` (text)
- `latest_rate_percent` (number)
- `longs_paying_shorts` (true/false)
- `lowest_rate_percent` (number)
- `pair` (text)
- `rates` (list)
- `retrieved_at` (text)
- `settled_in` (text)
- `symbol` (text)

**Example output**

```json
{
  "annualised_rate_percent": 4.5820056,
  "average_rate_percent": 0.00052306,
  "contract": "BTC/USD perpetual",
  "contract_type": "perpetual",
  "count": 1,
  "first_rate_time": "2026-09-02T22:00:00Z",
  "highest_rate_percent": 0.00052306,
  "last_rate_time": "2026-09-02T22:00:00Z",
  "latest_rate_percent": 0.00052306,
  "longs_paying_shorts": true,
  "lowest_rate_percent": 0.00052306,
  "pair": "BTC/USD",
  "rates": [
    {
      "rate_absolute": 0.404140164454,
      "rate_percent": 0.00052306,
      "time": "2026-09-02T22:00:00Z",
      "time_epoch": 1788386400.0
    }
  ],
  "retrieved_at": "2026-09-02T22:19:46Z",
  "settled_in": "USD",
  "symbol": "PF_XBTUSD"
}
```

### Get price history

Get a pair's price as candles - the open, high, low and close of each minute, hour, day or week - for charting, for a moving average, or for comparing today against last month. Kraken is always still filling in the most recent candle, so each one says whether its period has closed: read 'complete' before treating a candle as settled.

**Inputs**

- Trading pair (`pair`, text, required): Which pair's history to read.
- Candle size (`interval`, number): How much time each candle covers. Kraken keeps around 720 of them per pair, so an hourly candle reaches back about a month and a daily one about two years. One of: `1` (1 minute), `5` (5 minutes), `15` (15 minutes), `30` (30 minutes), `60` (1 hour), `240` (4 hours), `1440` (1 day), `10080` (1 week), `21600` (15 days). Default: `60`.
- How many (`limit`, number): How many of the most recent candles to return. From 1 to 720. Default: `100`.
- Start from (`since`, date and time): Only candles from this moment onwards. Leave it empty for the most recent ones, which is what a chart or a running average wants.

**Outputs**

- `base` (text)
- `candles` (list)
- `complete_count` (number)
- `count` (number)
- `first_candle_time` (text)
- `interval` (text)
- `interval_minutes` (number)
- `kraken_pair` (text)
- `last_candle_time` (text)
- `last_complete_candle_time` (text)
- `next_since` (number)
- `pair` (text)
- `pair_id` (text)
- `quote` (text)
- `retrieved_at` (text)

**Example output**

```json
{
  "base": "BTC",
  "candles": [
    {
      "close": 77253.7,
      "complete": true,
      "high": 77403.6,
      "low": 77215.5,
      "open": 77374.3,
      "time": "2026-09-02T21:00:00Z",
      "time_epoch": 1788382800,
      "trades": 2935,
      "volume": 38.45774901,
      "vwap": 77287.8
    },
    {
      "close": 77126.7,
      "complete": false,
      "high": 77266.0,
      "low": 77062.8,
      "open": 77253.7,
      "time": "2026-09-02T22:00:00Z",
      "time_epoch": 1788386400,
      "trades": 796,
      "volume": 10.57925493,
      "vwap": 77137.9
    }
  ],
  "complete_count": 1,
  "count": 2,
  "first_candle_time": "2026-09-02T21:00:00Z",
  "interval": "1 hour",
  "interval_minutes": 60,
  "kraken_pair": "XXBTZUSD",
  "last_candle_time": "2026-09-02T22:00:00Z",
  "last_complete_candle_time": "2026-09-02T21:00:00Z",
  "next_since": 1788382800,
  "pair": "BTC/USD",
  "pair_id": "XBTUSD",
  "quote": "USD",
  "retrieved_at": "2026-09-02T22:13:50Z"
}
```

### Get spread history

See how the gap between the best bid and the best ask on one pair has moved over the last few minutes, with the narrowest, widest and average across the window. A widening spread is how thin liquidity shows up before it shows up in the price, so this is the one to watch before trading size.

**Inputs**

- Trading pair (`pair`, text, required): Which pair's spreads to read.
- How many (`limit`, number): How many of the most recent quote changes to return. From 1 to 500. Default: `50`.
- Start from (`since`, date and time): Only quotes from this moment onwards. Leave it empty for the most recent ones.

**Outputs**

- `average_spread` (number)
- `base` (text)
- `count` (number)
- `first_quote_time` (text)
- `kraken_pair` (text)
- `last_quote_time` (text)
- `narrowest_spread` (number)
- `next_since` (number)
- `pair` (text)
- `pair_id` (text)
- `quote` (text)
- `retrieved_at` (text)
- `spreads` (list)
- `widest_spread` (number)

**Example output**

```json
{
  "average_spread": 0.1,
  "base": "BTC",
  "count": 1,
  "first_quote_time": "2026-09-02T22:13:36Z",
  "kraken_pair": "XXBTZUSD",
  "last_quote_time": "2026-09-02T22:13:36Z",
  "narrowest_spread": 0.1,
  "next_since": 1788387216,
  "pair": "BTC/USD",
  "pair_id": "XBTUSD",
  "quote": "USD",
  "retrieved_at": "2026-09-02T22:13:55Z",
  "spreads": [
    {
      "ask": 77126.8,
      "bid": 77126.7,
      "spread": 0.1,
      "spread_percent": 0.000129,
      "time": "2026-09-02T22:13:36Z",
      "time_epoch": 1788387216
    }
  ],
  "widest_spread": 0.1
}
```

### Get the order book

See the buy and sell orders waiting to be filled on one pair, best price first - what it would actually cost to trade a given size, rather than what the last trade happened to go at. The spread between the best bid and the best ask is worked out for you, along with how much is resting on each side.

**Inputs**

- Trading pair (`pair`, text, required): Which pair's order book to read.
- Price levels (`depth`, number): How many price levels to return on each side. Ten is enough to see the top of the book; raise it to weigh a larger order against the resting size. From 1 to 500. Default: `10`.

**Outputs**

- `ask_volume` (number)
- `asks` (list)
- `base` (text)
- `best_ask` (number)
- `best_bid` (number)
- `bid_volume` (number)
- `bids` (list)
- `depth` (number)
- `kraken_pair` (text)
- `pair` (text)
- `pair_id` (text)
- `quote` (text)
- `retrieved_at` (text)
- `spread` (number)
- `spread_percent` (number)

**Example output**

```json
{
  "ask_volume": 0.768,
  "asks": [
    {
      "price": 77126.8,
      "time": "2026-09-02T22:13:47Z",
      "value": 59233.3824,
      "volume": 0.768
    }
  ],
  "base": "BTC",
  "best_ask": 77126.8,
  "best_bid": 77126.7,
  "bid_volume": 0.154,
  "bids": [
    {
      "price": 77126.7,
      "time": "2026-09-02T22:13:48Z",
      "value": 11877.5118,
      "volume": 0.154
    }
  ],
  "depth": 1,
  "kraken_pair": "XXBTZUSD",
  "pair": "BTC/USD",
  "pair_id": "XBTUSD",
  "quote": "USD",
  "retrieved_at": "2026-09-02T22:13:48Z",
  "spread": 0.1,
  "spread_percent": 0.000129
}
```

### List currencies

See the coins and currencies Kraken lists, whether each is currently enabled, how many decimal places it holds, and the code it goes by. Worth running once while building: Kraken's API calls bitcoin XBT and dogecoin XDG, and this is where that mapping is visible.

**Inputs**

- Currencies (`currencies`, list): Only these currencies. Leave it empty to list every one Kraken holds, which runs to several hundred.
- How many (`limit`, number): How many currencies to return, in alphabetical order. From 1 to 500. Default: `50`.

**Outputs**

- `count` (number)
- `currencies` (list)
- `retrieved_at` (text)
- `total_matching` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 1,
  "currencies": [
    {
      "code": "XBT",
      "collateral_value": 0.99,
      "currency": "BTC",
      "decimals": 10,
      "display_decimals": 5,
      "enabled": true,
      "kraken_code": "XXBT",
      "margin_rate": 0.01,
      "status": "enabled"
    }
  ],
  "retrieved_at": "2026-09-02T22:13:55Z",
  "total_matching": 1,
  "truncated": false
}
```

### List futures contracts

See what Kraken's derivatives platform lists and the terms of each contract: its size, its price increment, when it was listed, and - for a dated future - when it stops trading. Filter to perpetuals, which run indefinitely and pay funding, or to dated futures, which expire on a set day.

**Inputs**

- Futures contracts (`symbols`, list): Only these contracts. Leave it empty to list every one Kraken offers.
- Contract type (`contract_type`, text): Which kind to include. A perpetual never expires and pays funding every hour; a dated future settles on a fixed day and does not. One of: `all` (Every contract), `perpetual` (Perpetuals only), `dated` (Dated futures only). Default: `all`.
- How many (`limit`, number): How many contracts to return, in alphabetical order. From 1 to 500. Default: `50`.

**Outputs**

- `contracts` (list)
- `count` (number)
- `retrieved_at` (text)
- `total_matching` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "contracts": [
    {
      "base": "BTC",
      "category": "Layer 1",
      "contract": "BTC/USD perpetual",
      "contract_size": 1.0,
      "contract_type": "perpetual",
      "expired": false,
      "isin": "GB00BQ84JX13",
      "last_trading_time": null,
      "listed_at": "2022-03-22T13:15:36Z",
      "max_position_size": 1200.0,
      "pair": "BTC/USD",
      "post_only": false,
      "quote": "USD",
      "settled_in": "USD",
      "symbol": "PF_XBTUSD",
      "tick_size": 1.0,
      "tradable": true,
      "underlying": null
    }
  ],
  "count": 1,
  "retrieved_at": "2026-09-02T22:14:13Z",
  "total_matching": 1,
  "truncated": false
}
```

### List recent futures trades

List the fills that have actually happened on one futures contract, oldest first, each with its price, size, side and time. Kraken returns the hundred most recent; to walk further back, set 'Up to' to the earliest time you were given and run it again.

**Inputs**

- Futures contract (`symbol`, text, required): Which contract's fills to read.
- How many (`limit`, number): How many of the most recent fills to return. From 1 to 100. Default: `50`.
- Up to (`before`, date and time): Only fills from before this moment, for stepping back through the history. Leave it empty for the most recent ones.

**Outputs**

- `buy_count` (number)
- `contract` (text)
- `contract_type` (text)
- `count` (number)
- `first_trade_time` (text)
- `last_trade_time` (text)
- `pair` (text)
- `retrieved_at` (text)
- `sell_count` (number)
- `settled_in` (text)
- `symbol` (text)
- `trades` (list)
- `volume` (number)

**Example output**

```json
{
  "buy_count": 0,
  "contract": "BTC/USD perpetual",
  "contract_type": "perpetual",
  "count": 1,
  "first_trade_time": "2026-09-02T22:18:00Z",
  "last_trade_time": "2026-09-02T22:18:00Z",
  "pair": "BTC/USD",
  "retrieved_at": "2026-09-02T22:18:01Z",
  "sell_count": 1,
  "settled_in": "USD",
  "symbol": "PF_XBTUSD",
  "trades": [
    {
      "price": 77119.0,
      "side": "sell",
      "size": 0.0002,
      "time": "2026-09-02T22:18:00Z",
      "time_epoch": 1788387480.772,
      "trade_id": 3,
      "type": "fill",
      "value": 15.4238
    }
  ],
  "volume": 0.0002
}
```

### List recent trades

List the trades that have actually happened on one pair, oldest first, each with its price, size, side and time. This is what really changed hands, as opposed to what is being asked for in the order book. To follow a pair over time, feed 'next_since' from one run into 'Start from' on the next and you pick up exactly where you left off.

**Inputs**

- Trading pair (`pair`, text, required): Which pair's trades to read.
- How many (`limit`, number): How many of the most recent trades to return. From 1 to 1000. Default: `50`.
- Start from (`since`, date and time): Only trades from this moment onwards. Leave it empty for the most recent ones.

**Outputs**

- `base` (text)
- `buy_count` (number)
- `count` (number)
- `first_trade_time` (text)
- `kraken_pair` (text)
- `last_trade_time` (text)
- `next_since` (text)
- `pair` (text)
- `pair_id` (text)
- `quote` (text)
- `retrieved_at` (text)
- `sell_count` (number)
- `trades` (list)
- `volume` (number)

**Example output**

```json
{
  "base": "BTC",
  "buy_count": 0,
  "count": 1,
  "first_trade_time": "2026-09-02T22:14:11Z",
  "kraken_pair": "XXBTZUSD",
  "last_trade_time": "2026-09-02T22:14:11Z",
  "next_since": "1788387251454017328",
  "pair": "BTC/USD",
  "pair_id": "XBTUSD",
  "quote": "USD",
  "retrieved_at": "2026-09-02T22:14:12Z",
  "sell_count": 1,
  "trades": [
    {
      "order_type": "limit",
      "price": 77119.0,
      "side": "sell",
      "time": "2026-09-02T22:14:11Z",
      "time_epoch": 1788387251.4540174,
      "trade_id": 106648624,
      "value": 28.04201078,
      "volume": 0.00036362
    }
  ],
  "volume": 0.00036362
}
```

### List trading pairs

See what Kraken trades and on what terms: the smallest order it accepts, the smallest order value, the price increment, the standard maker and taker fees, and whether the pair is trading normally or restricted. Filter to one currency to see everything it trades against.

**Inputs**

- Trading pairs (`pairs`, list): Only these pairs. Leave it empty to list everything Kraken trades, which is well over a thousand pairs - so use 'How many' or the currency filter with it.
- Involving this currency (`currency`, text): Only pairs with this currency on either side: choose USD for every dollar market, or BTC for everything quoted in or against bitcoin.
- How many (`limit`, number): How many pairs to return, in alphabetical order. From 1 to 500. Default: `50`.

**Outputs**

- `count` (number)
- `pairs` (list)
- `retrieved_at` (text)
- `total_matching` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 1,
  "pairs": [
    {
      "base": "BTC",
      "kraken_pair": "XXBTZUSD",
      "maker_fee_percent": 0.25,
      "margin_available": true,
      "max_leverage": 10,
      "minimum_cost": 0.5,
      "minimum_order": 5e-05,
      "pair": "BTC/USD",
      "pair_id": "XBTUSD",
      "price_decimals": 1,
      "quote": "USD",
      "status": "online",
      "taker_fee_percent": 0.4,
      "tick_size": 0.1,
      "tradable": true,
      "volume_decimals": 8
    }
  ],
  "retrieved_at": "2026-09-02T22:13:55Z",
  "total_matching": 1,
  "truncated": false
}
```
