> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://docs.ampdb.io/api/mcp` to find what you need.

# Provider Configuration Reference

Every field you can set in a provider's configuration, by provider kind. To learn how provider configurations work, how to keep secrets out of them with environment variables, and how to register one, see [Providers](/providers). The fields of export destinations, the ADBC kinds, are in [PostgreSQL Configuration](/managing-amp/pipelines/postgresql) and [Snowflake Configuration](/managing-amp/pipelines/snowflake).

## `evm-rpc`

The fields of [EVM RPC](/providers/evm-rpc) providers.

### `kind`

Always `"evm-rpc"`.

* **Type**: string
* **Required**

```toml
kind = "evm-rpc"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `url`

The URL of the EVM RPC endpoint (HTTP, HTTPS, WebSocket, or IPC).

This single endpoint is used for RPC requests.

Supported schemes: `http://`, `https://`, `ws://`, `wss://`, and IPC socket paths.

* **Type**: string
* **Required**

```toml
url = "${RPC_URL}"
```

### `auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` as a raw header instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
auth_header = "Drpc-Key"
```

### `auth_token`

Authentication token for RPC requests.

Default: sent as `Authorization: Bearer <token>`. With `auth_header`: sent as `<auth_header>: <token>`.

The token value is redacted in logs and debug output to prevent credential leakage.

* **Type**: string
* **Default**: none

```toml
auth_token = "${RPC_TOKEN}"
```

### `rate_limit_per_minute`

Optional rate limit for requests per minute.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional limit on the number of concurrent requests.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `1024`

```toml
concurrent_request_limit = 1024
```

### `fetch_receipts_per_tx`

Whether to use `eth_getTransactionReceipt` to fetch receipts for each transaction or `eth_getBlockReceipts` to fetch all receipts for a block in one call.

* **Type**: boolean
* **Default**: `false`

```toml
fetch_receipts_per_tx = false
```

### `timeout_secs`

Request timeout in seconds.

Maximum time to wait for an RPC request to complete (including connection establishment and response). Requests exceeding this duration will be cancelled and treated as errors.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

## `solana` (Experimental)

The fields of [Solana](/providers/solana) providers.

### `kind`

Always `"solana"`.

* **Type**: string
* **Required**

```toml
kind = "solana"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `rpc_provider_info`

The main RPC endpoint. Amp reads recent slots from it, and everything else that isn't in the archive.

* **Type**: table
* **Required**

### `rpc_provider_info.url`

The URL of the Solana RPC endpoint.

* **Type**: string
* **Required** when the table is set

```toml
[rpc_provider_info]
url = "${SOLANA_RPC_URL}"
```

### `rpc_provider_info.auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` as a raw header instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
[rpc_provider_info]
auth_header = "x-api-key"
```

### `rpc_provider_info.auth_token`

Authentication token for RPC requests.

Default: sent as `Authorization: Bearer <token>`. With `auth_header`: sent as `<auth_header>: <token>`.

* **Type**: string
* **Default**: none

```toml
[rpc_provider_info]
auth_token = "${SOLANA_RPC_TOKEN}"
```

### `fallback_rpc_provider_info`

A second RPC endpoint, used only to fill in log messages that came back cut short. Some RPC endpoints, and the archive, truncate long transaction logs: point this to an endpoint with a higher limit on log messages, or none, or it can't fill them in.

* **Type**: table
* **Default**: none

### `fallback_rpc_provider_info.url`

The URL of the Solana RPC endpoint.

* **Type**: string
* **Required** when the table is set

```toml
[fallback_rpc_provider_info]
url = "${SOLANA_FALLBACK_RPC_URL}"
```

### `fallback_rpc_provider_info.auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` as a raw header instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
[fallback_rpc_provider_info]
auth_header = "x-api-key"
```

### `fallback_rpc_provider_info.auth_token`

Authentication token for RPC requests.

Default: sent as `Authorization: Bearer <token>`. With `auth_header`: sent as `<auth_header>: <token>`.

* **Type**: string
* **Default**: none

```toml
[fallback_rpc_provider_info]
auth_token = "${SOLANA_FALLBACK_RPC_TOKEN}"
```

### `max_rpc_calls_per_second`

Optional rate limit for RPC calls per second.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
max_rpc_calls_per_second = 50
```

### `old_faithful_archive`

Where the provider reads historical slots from. By default, it downloads them from the public Old Faithful archive; set `local_dir` to read files you downloaded instead.

* **Type**: table
* **Default**: the remote archive, with its fields' defaults

### `old_faithful_archive.local_dir`

A local directory of Old Faithful CAR files, the archive's files of historical blocks, to read instead of the remote archive. The files must keep the names the archive gives them.

* **Type**: string
* **Default**: none

```toml
[old_faithful_archive]
local_dir = "/data/solana/car"
```

### `old_faithful_archive.max_concurrent_requests`

The most requests the provider sends the remote archive at once. The public archive limits clients that open too many connections, so the provider halves its requests when it's limited, and raises them again as requests succeed, up to this ceiling. Ignored when `local_dir` is set.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `64`

```toml
[old_faithful_archive]
max_concurrent_requests = 16
```

### `commitment`

The commitment level Amp requests blocks at: `finalized`, `confirmed`, or `processed`. It doesn't change which slots Amp extracts, or how soon: whatever it's set to, Amp follows the chain's latest finalized slot, and extracts only up to it. Leave it at its default. See [Commitment](/providers/solana#commitment).

* **Type**: "processed", "confirmed", or "finalized"
* **Default**: `"finalized"`

```toml
commitment = "finalized"
```

### `transaction_encoding`

How the RPC endpoint sends each transaction. Under `json`, the endpoint decodes each transaction and sends it as verbose JSON, which is slower and several times larger. Under `base64`, it sends the transaction's binary form and Amp decodes it. The extracted rows are the same either way.

* **Type**: "json" or "base64"
* **Default**: `"json"`

```toml
transaction_encoding = "base64"
```

### `ws_provider_info`

A WebSocket endpoint to follow the chain's latest finalized slot with, instead of polling the RPC endpoint. It's usually a different host or path than the RPC endpoint, not the same URL with `wss://`. With one, Amp learns of each newly finalized slot as the endpoint reports it, and polls the RPC endpoint only while the subscription is quiet. Amp still extracts blocks over HTTP, and only up to the finalized slot.

* **Type**: table
* **Default**: none

### `ws_provider_info.url`

The URL of the Solana WebSocket endpoint.

* **Type**: string
* **Required** when the table is set

```toml
[ws_provider_info]
url = "${SOLANA_WS_URL}"
```

### `ws_provider_info.auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` as a raw header on the handshake instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
[ws_provider_info]
auth_header = "x-api-key"
```

### `ws_provider_info.auth_token`

Authentication token for the handshake.

Endpoints that carry the key in the URL itself need no token here.

* **Type**: string
* **Default**: none

```toml
[ws_provider_info]
auth_token = "${SOLANA_WS_TOKEN}"
```

### `chain_head_refresh_interval_ms`

How often, in milliseconds, Amp checks for the chain's latest finalized slot. Without `ws_provider_info`, it's how long a newly finalized slot can wait before Amp extracts it: lowering it shortens that wait, at the cost of one more RPC call per interval, which counts against `max_rpc_calls_per_second`. With `ws_provider_info`, the subscription reports newly finalized slots, and Amp polls at this interval only while the subscription is quiet.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: `1000`

```toml
chain_head_refresh_interval_ms = 1000
```

## `tempo`

The fields of [Tempo](/providers/tempo) providers.

### `kind`

Always `"tempo"`.

* **Type**: string
* **Required**

```toml
kind = "tempo"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `url`

The URL of the Tempo RPC endpoint (HTTP, HTTPS, WebSocket, or IPC).

* **Type**: string
* **Required**

```toml
url = "${TEMPO_RPC_URL}"
```

### `auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` as a raw header instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
auth_header = "Drpc-Key"
```

### `auth_token`

Authentication token for RPC requests.

Default: sent as `Authorization: Bearer <token>`. With `auth_header`: sent as `<auth_header>: <token>`.

The token value is redacted in logs and debug output to prevent credential leakage.

* **Type**: string
* **Default**: none

```toml
auth_token = "${RPC_TOKEN}"
```

### `rate_limit_per_minute`

Optional rate limit for requests per minute.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional limit on the number of concurrent requests.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `1024`

```toml
concurrent_request_limit = 1024
```

### `fetch_receipts_per_tx`

Whether to use `eth_getTransactionReceipt` to fetch receipts for each transaction or `eth_getBlockReceipts` to fetch all receipts for a block in one call.

* **Type**: boolean
* **Default**: `false`

```toml
fetch_receipts_per_tx = false
```

### `timeout_secs`

Request timeout in seconds.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

## `bittensor` (Experimental)

The fields of [Bittensor](/providers/bittensor) providers.

### `kind`

Always `"bittensor"`.

* **Type**: string
* **Required**

```toml
kind = "bittensor"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`. Bittensor's main network is `finney`.

* **Type**: string
* **Required**

```toml
network = "finney"
```

### `url`

The Subtensor JSON-RPC endpoint URL. HTTP(S) and WebSocket endpoints are supported.

* **Type**: string
* **Required**

```toml
url = "${BITTENSOR_RPC_URL}"
```

### `auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` instead of the default `Authorization: Bearer <auth_token>`.

* **Type**: string
* **Default**: none

```toml
auth_header = "x-api-key"
```

### `auth_token`

Authentication token for RPC requests.

* **Type**: string
* **Default**: none

```toml
auth_token = "${RPC_TOKEN}"
```

### `rate_limit_per_minute`

Optional override for JSON-RPC requests per minute.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional override for the number of concurrent JSON-RPC requests.

Defaults to the number of requests normally needed to extract one block.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `5`

```toml
concurrent_request_limit = 5
```

### `timeout_secs`

Request timeout in seconds.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

## `bitcoin-rpc`

The fields of [Bitcoin RPC](/providers/bitcoin-rpc) providers.

### `kind`

Always `"bitcoin-rpc"`.

* **Type**: string
* **Required**

```toml
kind = "bitcoin-rpc"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`. Bitcoin's are `mainnet`, `testnet`, and `signet`, for example.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `url`

The URL of the Bitcoin RPC endpoint (HTTP or HTTPS).

* **Type**: string
* **Required**

```toml
url = "${BITCOIN_RPC_URL}"
```

### `auth_header`

Custom header name for authentication.

When set alongside `auth_token`, sends `<auth_header>: <auth_token>` instead of the default `Authorization: Bearer <auth_token>`. Ignored if `auth_token` is not set.

* **Type**: string
* **Default**: none

```toml
auth_header = "x-api-key"
```

### `auth_token`

Authentication token for RPC requests.

Default: sent as `Authorization: Bearer <token>`. With `auth_header`: sent as `<auth_header>: <token>`.

The token value is redacted in logs and debug output to prevent credential leakage.

* **Type**: string
* **Default**: none

```toml
auth_token = "${RPC_TOKEN}"
```

### `rate_limit_per_minute`

Optional rate limit for requests per minute.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional limit on the number of concurrent requests.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `8`

```toml
concurrent_request_limit = 8
```

### `confirmations`

How many blocks must follow a block before Amp treats it as final. A Bitcoin block can be replaced until enough blocks are built on it; more confirmations make that less likely.

* **Type**: integer
* **Default**: `6`

```toml
confirmations = 6
```

### `timeout_secs`

Request timeout in seconds.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

## `eth-beacon`

The fields of [Ethereum Beacon](/providers/eth-beacon) providers.

### `kind`

Always `"eth-beacon"`.

* **Type**: string
* **Required**

```toml
kind = "eth-beacon"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `url`

The Beacon REST endpoint URL (HTTP or HTTPS).

* **Type**: string
* **Required**

```toml
url = "${BEACON_API_URL}"
```

### `auth_header`

Custom header name for authentication.

* **Type**: string
* **Default**: none

```toml
auth_header = "x-api-key"
```

### `auth_token`

Authentication token for REST requests.

* **Type**: string
* **Default**: none

```toml
auth_token = "${BEACON_API_TOKEN}"
```

### `rate_limit_per_minute`

Optional requests-per-minute rate limit.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional limit on the number of concurrent requests.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: none (no limit)

```toml
concurrent_request_limit = 16
```

### `timeout_secs`

Request timeout in seconds.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

### `genesis_validators_root`

The genesis validators root you expect the endpoint's chain to have, as a hex string. It identifies the chain, so when it's set, Amp checks it against the endpoint's and refuses an endpoint that serves another chain.

* **Type**: string
* **Default**: none

```toml
genesis_validators_root = "0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95"
```

### `genesis_fork_version`

The genesis fork version you expect the endpoint's chain to have, as a hex string. Like `genesis_validators_root`, Amp refuses an endpoint whose chain doesn't match it.

* **Type**: string
* **Default**: none

```toml
genesis_fork_version = "0x00000000"
```

## `stellar`

The fields of [Stellar](/providers/stellar) providers.

### `kind`

Always `"stellar"`.

* **Type**: string
* **Required**

```toml
kind = "stellar"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`. Like `stellar-mainnet` or `stellar-testnet`.

* **Type**: string
* **Required**

```toml
network = "stellar-mainnet"
```

### `url`

The URL of the Stellar RPC endpoint (HTTP or HTTPS).

* **Type**: string
* **Required**

```toml
url = "${STELLAR_RPC_URL}"
```

### `auth_header`

Custom header name for authentication.

Ignored unless `auth_token` is also set.

* **Type**: string
* **Default**: none

```toml
auth_header = "x-api-key"
```

### `auth_token`

Authentication token for RPC requests.

Sent as `Authorization: Bearer <token>` unless `auth_header` is set.

* **Type**: string
* **Default**: none

```toml
auth_token = "${RPC_TOKEN}"
```

### `rate_limit_per_minute`

Optional rate limit for requests per minute.

* **Type**: integer
* **Allowed**: at least 1
* **Default**: none (no limit)

```toml
rate_limit_per_minute = 600
```

### `concurrent_request_limit`

Optional limit on the number of concurrent requests.

* **Type**: integer
* **Allowed**: at least 1 and at most 65535
* **Default**: `8`

```toml
concurrent_request_limit = 8
```

### `timeout_secs`

Request timeout in seconds.

* **Type**: integer
* **Default**: `30`

```toml
timeout_secs = 30
```

## `phaser` (In development)

The fields of [Phaser](/providers/phaser) providers.

### `kind`

Always `"phaser"`.

* **Type**: string
* **Required**

```toml
kind = "phaser"
```

### `network`

The network the provider serves, like `mainnet`: lowercase letters, digits, and hyphens. A raw dataset extracts through the providers whose kind and network match its own, so use the same name as its manifest's `network`.

* **Type**: string
* **Required**

```toml
network = "mainnet"
```

### `bridge_url`

The URL of the Phaser bridge endpoint.

* **Type**: string
* **Required**

```toml
bridge_url = "http://127.0.0.1:8090"
```

### `segment_size`

How many blocks, or positions, each segment covers. The job splits the chain into segments, and extracts them separately.

* **Type**: integer
* **Default**: `500000`

```toml
segment_size = 500000
```

### `bridge_metadata`

Amp accepts this field, but doesn't use it yet.

* **Type**: table
* **Default**: `{}`

```toml
bridge_metadata = {}
```

### `max_workers`

Amp accepts this field, but doesn't use it yet. Set how many segments a job extracts at once with `ampctl dataset deploy --parallelism`.

* **Type**: integer
* **Allowed**: at most 65535
* **Default**: `10`

```toml
max_workers = 10
```

### `batch_size`

Amp accepts this field, but doesn't use it yet.

* **Type**: integer
* **Default**: `500`

```toml
batch_size = 500
```

### `segment_selection_policy`

Amp accepts this field, but doesn't use it yet. The bridge sets each table's policy when you register the dataset: see [Segment selection policy](/providers/phaser#segment-selection-policy).

* **Type**: "hash-linked" or "ordered"
* **Default**: `"hash-linked"`

```toml
segment_selection_policy = "hash-linked"
```

### `enable_traces`

Amp accepts this field, but doesn't use it yet.

* **Type**: boolean
* **Default**: `true`

```toml
enable_traces = true
```

### `record_batch_bytes_target`

Amp accepts this field, but doesn't use it yet. The worker's [`[writer]` settings](/running-amp/configuration-reference#writer) set how a job writes its files.

* **Type**: integer
* **Default**: `67108864`

```toml
record_batch_bytes_target = 67108864
```

## `static` (In development)

The fields of [Static](/providers/static) providers.

### `kind`

Always `"static"`.

* **Type**: string
* **Required**

```toml
kind = "static"
```

### `object_store_root`

The URL of the directory that holds the CSV files, in a local directory (`file://`), Amazon S3 (`s3://`), Google Cloud Storage (`gs://`), or Azure Blob Storage (`az://`). Its last path segment is the provider's routing token: a static dataset's table whose path starts with that segment reads its file from this provider. You can change the rest of the URL, like the bucket, without changing any dataset.

* **Type**: string
* **Required**

```toml
object_store_root = "s3://bucket/eth_labels"
```
