> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bestinslot.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Runes

> API endpoints for Runes protocol data on Best in Slot.

<Note>
  Testnet4 and Signet are supported — use `https://testnet.api.bestinslot.xyz` or `https://signet_api.bestinslot.xyz`.
</Note>

## Terminology

The Runes API uses field names that differ from the official Runes protocol terminology. The table below maps each API field to its Runes equivalent.

| API field             | Runes term                                  | Description                                                          |
| --------------------- | ------------------------------------------- | -------------------------------------------------------------------- |
| `rune_name`           | Non-spaced unique Rune Name                 | Unique identifier for the rune                                       |
| `deploy_txid`         | etching                                     | Transaction that created the rune                                    |
| `decimals`            | divisibility                                | Number of decimal places                                             |
| `per_mint_amount`     | terms.amount                                | Amount minted per mint event                                         |
| `mint_cnt`            | mints                                       | Count of mint events so far                                          |
| `mint_cnt_limit`      | terms.cap                                   | Maximum allowed mint events                                          |
| `premined_supply`     | premine                                     | Amount mined at deploy time                                          |
| `total_minted_supply` | premine + mint\_cnt × per\_mint\_amount     | Total ever minted                                                    |
| `circulating_supply`  | total - burned                              | Currently in circulation                                             |
| `mintable`            | mint\_cnt \< mint\_cnt\_limit & block range | Whether minting is currently open                                    |
| `auto_upgrade`        | turbo                                       | Auto opt-in to new Runes features                                    |
| `event_type`          | —                                           | Possible values: `input`, `new-allocation`, `mint`, `output`, `burn` |

**Additional conventions:**

* `output` is formatted as `txid:vout` (e.g., `314e5e53...:1`).
* `pkscript` refers to the Bitcoin `scriptPubKey`.
* `avg_unit_price_in_sats` is the median unit price of sales in the last 6 hours, falling back to recent sales if volume is low. This value is scaled by `decimals` to make ordering more meaningful. Returns `null` if there is insufficient data.

***

## Runes testnet faucet

*Basic, Pro, Dedicated — testnet only*

`GET https://testnet.api.bestinslot.xyz/v3/runes/testnet_faucet`

Mints 1.0 (1\_0000\_0000 base units) of a test rune to a target address on testnet. Limited to 10 requests per 24 hours per API key.

<ParamField query="address" type="string" required>
  Testnet Bitcoin wallet address to receive the test rune.
</ParamField>

```bash theme={null}
curl 'https://testnet.api.bestinslot.xyz/v3/runes/testnet_faucet?address=tb1qvhl8k0xu0stk956tjqx6q5ujp6tdyh24xcz0qq' \
  --header 'x-api-key: YOUR_API_KEY'
```

```json theme={null}
{
  "mint_txid": "43cec273ded990afcc681eb64da2e4884f7dc8518db01f82620dff98beaa0e49"
}
```

***

## Runes tickers

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/tickers`

Returns information about runes tickers in the requested order.

<Note>
  `avg_unit_price_in_sats` is scaled by `decimals` for ordering purposes. Sorting by `avg_unit_price_in_sats`, `min_listed_unit_price_in_sats`, `min_listed_unit_price_unisat`, `listed_supply`, `listed_supply_ratio`, `marketcap`, and `total_volume` requires a Pro key.
</Note>

<ParamField query="sort_by" type="string" required>
  Sort field. Options: `rune_id`, `rune_number`, `rune_name`, `mint_cnt`, `total_minted_supply`, `burned_supply`, `circulating_supply`, `mint_progress`, `deploy_ts`, `holder_count`, `event_count`. Pro tier adds: `avg_unit_price_in_sats`, `min_listed_unit_price_in_sats`, `min_listed_unit_price_unisat`, `listed_supply`, `listed_supply_ratio`, `marketcap`, `total_volume`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–300`.
</ParamField>

<ParamField query="minting_status" type="string">
  Filter by minting state. Set to `not_complete` to return only tickers where `mintable = true`; set to `completed` for tickers where `mintable = false`. Omit to include all tickers.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/tickers?sort_by=rune_number&order=asc&offset=0&count=100' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes ticker count

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/ticker_cnt`

Returns the total count of all runes tickers and the count of currently mintable runes tickers.

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/ticker_cnt' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes ticker info

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/ticker_info`

Returns detailed information about a specific rune. You must provide exactly one of `rune_name`, `rune_id`, or `rune_number`.

<Note>
  `avg_unit_price_in_sats`, `min_listed_unit_price_in_sats`, `listed_supply`, `listed_supply_ratio`, `marketcap`, and `total_sale_info` are only available on Pro tier.
</Note>

<ParamField query="rune_name" type="string">
  Non-spaced Rune name (e.g., `UNCOMMONGOODS`).
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID (e.g., `840000:3`).
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/ticker_info?rune_name=UNCOMMONGOODS' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes holders

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/holders`

Returns holder balances for a given rune. You must provide exactly one of `rune_name`, `rune_id`, or `rune_number`.

<Note>
  The maximum value of `count` is 500 on standard keys and 5000 on Pro keys.
</Note>

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `balance`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–500` (up to `5000` for Pro keys).
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/holders?rune_name=UNCOMMONGOODS&sort_by=balance&order=desc&count=500&offset=0' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes output info

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/output_info`

Returns runes data for a specific Bitcoin output (UTXO).

<ParamField query="output" type="string" required>
  Outpoint to query, formatted as `txid:vout` (e.g., `314e5e53...:1`).
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/output_info?output=314e5e53024ec5860bd2fa2a4e85db2fc9097fcf58caa63f253bb4f86ad4b412:1' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes batch output info

*Basic, Pro, Dedicated*

`POST https://api.bestinslot.xyz/v3/runes/batch_output_info`

Returns runes data for up to 100 Bitcoin outputs in a single request.

<ParamField body="queries" type="string[]" required>
  Array of outpoint strings formatted as `txid:vout`. Maximum 100 entries.
</ParamField>

```bash theme={null}
curl --request POST \
  --url 'https://api.bestinslot.xyz/v3/runes/batch_output_info' \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: YOUR_API_KEY' \
  --data '{
    "queries": [
      "314e5e53024ec5860bd2fa2a4e85db2fc9097fcf58caa63f253bb4f86ad4b412:1",
      "0979edfb33fa380fb8c80e53809e9d865169ac6857688b31446d577d5f6df869:1",
      "200380702f43b2a6403bd9576c48e74e7cf184d5ead280eaa25a2d71be9cb2c8:1"
    ]
  }'
```

***

## Runes wallet balances

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/wallet_balances`

Returns runes balances for a Bitcoin wallet. Provide either `address` or `pkscript`.

<Note>
  `avg_unit_price_in_sats` and `min_listed_unit_price_in_sats` in the response are scaled by `decimals`.
</Note>

<ParamField query="address" type="string">
  Bitcoin wallet address.
</ParamField>

<ParamField query="pkscript" type="string">
  Bitcoin scriptPubKey.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/wallet_balances?address=tb1pd368q84tuark4naym2u5382p59jkd27nw5vu5s44uz8dwdlrcwhqzdl2l2' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes wallet valid outputs

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/wallet_valid_outputs`

Returns unspent outputs (UTXOs) that contain runes for a given wallet. Provide either `address` or `pkscript`.

<ParamField query="address" type="string">
  Bitcoin wallet address.
</ParamField>

<ParamField query="pkscript" type="string">
  Bitcoin scriptPubKey.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `output`, `min_price`, or `unisat_price`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/wallet_valid_outputs?pkscript=51206c74701eabe7476acfa4dab9489d41a16566abd37519ca42b5e08ed737e3c3ae&sort_by=output&order=asc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes wallet valid outputs for a single rune

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/wallet_valid_outputs_single_rune`

Returns unspent outputs for a wallet filtered to a single rune. You must provide one of `rune_name`, `rune_id`, or `rune_number`, and one of `address` or `pkscript`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="address" type="string">
  Bitcoin wallet address.
</ParamField>

<ParamField query="pkscript" type="string">
  Bitcoin scriptPubKey.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `output`, `min_price`, or `unisat_price`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/wallet_valid_outputs_single_rune?address=bc1paa9fl7ae5cnlf9dr7gj0p4egga5fqxvgz0vhjd07h0znnf9xvz8qfsw3e8&rune_id=840000:3&sort_by=min_price&order=asc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes valid outputs

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/valid_outputs`

Returns all unspent outputs for a given rune ticker. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `output`, `amount`, `min_price`, `min_unit_price`, `unisat_price`, or `unisat_unit_price`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/valid_outputs?rune_name=UNCOMMONGOODS&sort_by=output&order=asc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes activity on transaction

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/events_on_tx`

Returns all runes activity events in a given Bitcoin transaction.

<ParamField query="txid" type="string" required>
  Bitcoin transaction ID.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/events_on_tx?txid=e49f0912f94b915c0dd12b7970083b348945c2fc7bc01a21e0bfa403827607cf' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Runes historical total supply

*Basic, Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/historical_total_supply`

Returns the total supply of a rune at the start of a specific block height. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="block_height" type="integer" required>
  Bitcoin block height to query.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/historical_total_supply?rune_name=UNCOMMONGOODS&block_height=860000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Pro and Dedicated endpoints

The following endpoints require a Pro or Dedicated API key.

### Get Runes sales information

*Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/sales_info`

Returns sales count and volume data for a specific rune. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="marketplace_type" type="string">
  Filter to a single marketplace. See the Constants page for allowed values.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/sales_info?rune_name=SATOSHINAKAMOTO&marketplace_type=unisat' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

### Get Runes market information

*Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/market_info`

Returns market data for a specific rune. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/market_info?rune_name=SATOSHINAKAMOTO' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

### Runes listings

*Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/listings`

Returns active listing information for a given rune. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `output`, `min_price`, or `unisat_price`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–100`.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/listings?rune_id=840000:3&sort_by=min_price&order=asc&offset=0&count=100' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

### Runes wallet activity

*Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/wallet_activity`

Returns runes activity for a given wallet. By default, if the wallet is involved in a runes transaction, all events in that transaction are returned — even events affecting other wallets. You must provide one of `address` or `pkscript`.

You can optionally filter to a single rune by providing one of `rune_name`, `rune_id`, or `rune_number`. In this case, only transactions where an event involves both the specified wallet and rune are returned.

Set `runes_filter_only_wallet` to `true` to return only the events that directly involve the specified wallet, rather than all events in the matching transactions.

<ParamField query="address" type="string">
  Bitcoin wallet address.
</ParamField>

<ParamField query="pkscript" type="string">
  Bitcoin scriptPubKey.
</ParamField>

<ParamField query="rune_name" type="string">
  Non-spaced Rune name (optional rune filter).
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID (optional rune filter).
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number (optional rune filter).
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `ts` (timestamp).
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

<ParamField query="runes_filter_only_wallet" type="string">
  Set to `"true"` to return only runes events that directly involve the specified wallet. Defaults to `"false"`, which returns all events in matching transactions.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/wallet_activity?pkscript=51206c74701eabe7476acfa4dab9489d41a16566abd37519ca42b5e08ed737e3c3ae&sort_by=ts&order=desc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

### Runes activity for a ticker

*Pro, Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/activity`

Returns activity for a given rune ticker. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `output` or `amount`.
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/activity?rune_name=UNCOMMONGOODS&sort_by=output&order=desc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Enterprise and Dedicated endpoints

The following endpoints require an Enterprise or Dedicated (with Enterprise Endpoints) API key.

### Runes activity on block

*Enterprise, Dedicated with Enterprise Endpoints*

`GET https://api.bestinslot.xyz/v3/runes/activity_on_block`

Returns all runes activity events in a given Bitcoin block.

<ParamField query="block_height" type="integer" required>
  Bitcoin block height to query.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/activity_on_block?block_height=840000' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

### Runes all ID-name pairs

*Enterprise, Dedicated with Enterprise Endpoints*

`GET https://api.bestinslot.xyz/v3/runes/all_id_name_pairs`

Returns all rune ID and name pairs.

When `send_urls` is set to `true`, the response also includes icon URL fields. The response will contain `render_prefix`, `render_suffix`, `content_prefix`, `content_suffix`, and per-rune `r` and `ic` fields. The `r` field indicates whether a render is available, and icon URLs are constructed as `prefix + ic + suffix`.

<ParamField query="send_urls" type="string">
  Set to `"true"` to include icon URL fields in the response.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/all_id_name_pairs' \
  --header 'x-api-key: YOUR_API_KEY'
```

***

## Dedicated-only endpoints

The following endpoint requires a Dedicated API key.

### Runes historical prices

*Dedicated*

`GET https://api.bestinslot.xyz/v3/runes/historical_prices`

Returns historical price data for a given rune. You must provide one of `rune_name`, `rune_id`, or `rune_number`.

When `granularity` is set to `1d`, the response returns the average price per day rather than individual data points.

<ParamField query="rune_name" type="string">
  Non-spaced Rune name.
</ParamField>

<ParamField query="rune_id" type="string">
  Rune ID.
</ParamField>

<ParamField query="rune_number" type="integer">
  Rune number.
</ParamField>

<ParamField query="sort_by" type="string" required>
  Sort field: `ts` (timestamp).
</ParamField>

<ParamField query="order" type="string" required>
  Sort direction: `asc` or `desc`.
</ParamField>

<ParamField query="offset" type="integer" required>
  Pagination offset. Must be `>= 0`.
</ParamField>

<ParamField query="count" type="integer" required>
  Number of results. Range: `20–2000`.
</ParamField>

<ParamField query="granularity" type="string">
  Time bucket size: `"1h"` for hourly or `"1d"` for daily averages. Omit for raw data points.
</ParamField>

```bash theme={null}
curl 'https://api.bestinslot.xyz/v3/runes/historical_prices?rune_id=1:0&sort_by=ts&order=desc&offset=0&count=2000' \
  --header 'x-api-key: YOUR_API_KEY'
```
