---
title: "Create a new blockchain"
method: POST
path: "/blockchain_link/blockchains"
tags: ["Blockchain link (Beta)"]
---

# Create a new blockchain

`POST /blockchain_link/blockchains`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/blockchain_link/blockchains`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/blockchain_link/blockchains/post.ts> (a function with typed inputs; its response is checked against the schema)

Registers a new tenant-managed blockchain from the supplied declared properties. The blockchain starts in the CREATED state and must be activated separately before it can be used.

## Headers

- `Idempotency-Key` string

## Request body

- CreateBlockchainRequest: Create blockchain request. tenant_id is derived from the JWT token context.
  - `declaredProperties` BlockchainDeclaredProperties, required: Declared properties for blockchain configuration (create/update API and response) Only the fields sent by the API and returned in list/create/update responses.
    - `chainName` string, required: Human-readable name of the blockchain.
    - `chainId` number, required: EVM chain ID of the blockchain.
    - `symbolName` string, required: Native asset symbol of the blockchain.
    - `decimals` number: Number of decimals for the native asset.
    - `rpcUrls` string[], required: RPC endpoint URLs for the blockchain.
    - `environmentType` 'ENVIRONMENT_TYPE_MAINNET' | 'ENVIRONMENT_TYPE_TESTNET', required: Network environment (mainnet or testnet).
    - `blockExplorerUrl` string: Base URL of the block explorer.
    - `blockExplorerTransactionPath` string: Path template for a transaction on the block explorer.
    - `blockExplorerAddressPath` string: Path template for an address on the block explorer.
    - `networkId` number: EVM network ID of the blockchain.
    - `hasFee` boolean: Whether the blockchain charges transaction fees.
    - `isPoa` boolean: Whether the blockchain uses proof-of-authority consensus.
    - `hasLayeredFee` boolean: Whether the blockchain uses a layered fee model.
    - `nodeType` 'NODE_TYPE_CORE_GETH' | 'NODE_TYPE_FANTOM' | 'NODE_TYPE_ERIGON' | 'NODE_TYPE_PARITY' | 'NODE_TYPE_BESU': Node client type for the blockchain.
    - `transactionFormat` number: Transaction format identifier.
    - `baseAssetTenantIds` string[]: Tenant IDs that share this base asset.
    - `explorerApiUrl` string: Block explorer API base URL.
    - `explorerApiKey` string: API key for the block explorer API.
    - `isTraceEnabled` boolean: Whether trace/debug RPC methods are enabled.
    - `rpcAuth` BlockchainRpcAuth: Discriminated RPC auth payload. Sent on create/update so backend can distinguish "no auth" from "field unchanged" on PUT updates. Credential values are stored inside declaredProperties and fetched at activation time; they are deliberately not carried through workflow context.
      - `type` 'RPC_AUTH_BASIC' | 'RPC_AUTH_BEARER' | 'RPC_AUTH_CUSTOM_HEADER', required: Authentication scheme used when calling the RPC endpoint.
      - `username` string: Username for RPC_AUTH_BASIC authentication.
      - `password` string: Password for RPC_AUTH_BASIC authentication.
      - `token` string: Bearer token for RPC_AUTH_BEARER authentication.
      - `headerName` string: Header name for RPC_AUTH_CUSTOM_HEADER authentication.
      - `headerValue` string: Header value for RPC_AUTH_CUSTOM_HEADER authentication.

## Response `200`

OK

- CreateBlockchainResponse
  - `blockchain` Blockchain, required: Blockchain entity
    - `id` string, required: Unique blockchain identifier.
    - `blockchainState` 'BLOCKCHAIN_STATE_CREATED' | 'BLOCKCHAIN_STATE_ACTIVATING' | 'BLOCKCHAIN_STATE_ACTIVATED' | 'BLOCKCHAIN_STATE_DEACTIVATING' | 'BLOCKCHAIN_STATE_DEACTIVATED' | 'BLOCKCHAIN_STATE_TECHNICAL_FAILURE', required: Current lifecycle state of the blockchain.
    - `declaredProperties` BlockchainDeclaredProperties, required: Declared properties for blockchain configuration (create/update API and response) Only the fields sent by the API and returned in list/create/update responses.
      - `chainName` string, required: Human-readable name of the blockchain.
      - `chainId` number, required: EVM chain ID of the blockchain.
      - `symbolName` string, required: Native asset symbol of the blockchain.
      - `decimals` number: Number of decimals for the native asset.
      - `rpcUrls` string[], required: RPC endpoint URLs for the blockchain.
      - `environmentType` 'ENVIRONMENT_TYPE_MAINNET' | 'ENVIRONMENT_TYPE_TESTNET', required: Network environment (mainnet or testnet).
      - `blockExplorerUrl` string: Base URL of the block explorer.
      - `blockExplorerTransactionPath` string: Path template for a transaction on the block explorer.
      - `blockExplorerAddressPath` string: Path template for an address on the block explorer.
      - `networkId` number: EVM network ID of the blockchain.
      - `hasFee` boolean: Whether the blockchain charges transaction fees.
      - `isPoa` boolean: Whether the blockchain uses proof-of-authority consensus.
      - `hasLayeredFee` boolean: Whether the blockchain uses a layered fee model.
      - `nodeType` 'NODE_TYPE_CORE_GETH' | 'NODE_TYPE_FANTOM' | 'NODE_TYPE_ERIGON' | 'NODE_TYPE_PARITY' | 'NODE_TYPE_BESU': Node client type for the blockchain.
      - `transactionFormat` number: Transaction format identifier.
      - `baseAssetTenantIds` string[]: Tenant IDs that share this base asset.
      - `explorerApiUrl` string: Block explorer API base URL.
      - `explorerApiKey` string: API key for the block explorer API.
      - `isTraceEnabled` boolean: Whether trace/debug RPC methods are enabled.
      - `rpcAuth` BlockchainRpcAuth: Discriminated RPC auth payload. Sent on create/update so backend can distinguish "no auth" from "field unchanged" on PUT updates. Credential values are stored inside declaredProperties and fetched at activation time; they are deliberately not carried through workflow context.
        - `type` 'RPC_AUTH_BASIC' | 'RPC_AUTH_BEARER' | 'RPC_AUTH_CUSTOM_HEADER', required: Authentication scheme used when calling the RPC endpoint.
        - `username` string: Username for RPC_AUTH_BASIC authentication.
        - `password` string: Password for RPC_AUTH_BASIC authentication.
        - `token` string: Bearer token for RPC_AUTH_BEARER authentication.
        - `headerName` string: Header name for RPC_AUTH_CUSTOM_HEADER authentication.
        - `headerValue` string: Header value for RPC_AUTH_CUSTOM_HEADER authentication.
    - `createdAtUtc` number, required: Creation timestamp (epoch milliseconds, UTC).
    - `updatedAtUtc` number, required: Last update timestamp (epoch milliseconds, UTC).
    - `validationSessionId` string: Validation session data (optional - only present if validation session exists)
    - `validationStatus` 'VALIDATION_STATUS_PENDING' | 'VALIDATION_STATUS_IN_PROGRESS' | 'VALIDATION_STATUS_SUCCEEDED' | 'VALIDATION_STATUS_FAILED' | 'VALIDATION_STATUS_TECHNICAL_FAILURE': Status of the latest validation session.
    - `validationCreatedAtUtc` number: Validation session creation timestamp (epoch milliseconds, UTC).
    - `validationUpdatedAtUtc` number: Validation session last update timestamp (epoch milliseconds, UTC).
    - `validationCompletedAtUtc` number: Validation session completion timestamp (epoch milliseconds, UTC).
    - `validationFailureReasons` string[], required: Reasons the latest validation failed, if any.
    - `failedStep` 'FAILED_STEP_CONFIGURATION' | 'FAILED_STEP_RESOURCES_ALLOCATION' | 'FAILED_STEP_TEST_TX_EXTERNAL_TO_FIREBLOCKS' | 'FAILED_STEP_TEST_TX_FIREBLOCKS_TO_FIREBLOCKS': Business step at which the activation flow failed. Absent when no failure has been recorded.
  - `message` string, required: Human-readable result message.

## Other responses

- `default`: Error Response

---

[API](https://skmtc.dev/fireblocks/apis/fireblocks-api.md) - [All operations](https://skmtc.dev/fireblocks/apis/fireblocks-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireblocks/apis/fireblocks-api/revisions/4eba9965659a?raw)
