# Contact Us
Source: https://docs.developer.gomaestro.org/account/contact-us
Get in touch with the Maestro team for assistance through email or Discord support channels.
If you need assistance, please reach out to the Maestro team using one of the following methods:
* **E-mail:** [info@gomaestro.org](mailto:info@gomaestro.org)
* **Discord:** [Join our Discord](https://discord.com/channels/950173135838273556/1266961548967018558) and create a ticket in the #create-a-ticket channel.
We're here to help! Let us know how we can assist you.
# Manage Billing
Source: https://docs.developer.gomaestro.org/account/manage-billing
Guide to manage billing information, view invoices, update payment methods, and track subscription usage in your Maestro account.
**Manage Payment and Billing**
You can manage your billing information, view invoices, and update payment methods directly through the platform. Follow the instructions below to ensure your payment details are up-to-date and view your billing history.
***
## Prerequisites
Before managing your subscription, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org) if you don’t already have one
***
## 1. View Billing Information:
* Navigate to the `Billing` tab from the main dashboard.
***
## 2. View Invoice History
* Here, you can see all your **invoices** and billing history, including detailed payment information.
***
## 3. Update Credit Card Information:
1. Go to `Subscriptions` and select `Overview`.
2. Scroll to the **Payment Method** section.
3. Add or update your **credit card information** as needed.
***
## 4. Pay with Stablecoins
You can also pay your subscription with stablecoins by connecting a wallet and setting it as your default payment method.
* **Currently supported:** USDC on Base and Polygon
* **Coming soon:** USDC and USDT on Ethereum
Follow the full setup guide here: [Stablecoin Payments](./stablecoin-payments).
***
## 5. Threshold Billing
**Billing Frequency:** Maestro may charge you on a regular cycle, e.g., monthly, or may charge when your account has accrued a certain amount of charges. Additionally, Maestro reserves the right to bill more frequently if Maestro reasonably determines the customer is at risk of non-payment or is potentially fraudulent.
**Key Points:**
* **Billing thresholds are monetary values that trigger a new bill whenever your account activity exceeds the threshold amount.** In addition to monthly subscription billing, you receive a bill whenever API usage fees, recurring charges, and other outstanding charges exceed your account's threshold.
* **Monthly subscription fees are included in your running total but not in threshold bills.** This ensures that your regular subscription fees are only charged on your scheduled monthly billing date, while usage-based charges trigger threshold billing.
* **You can be charged multiple times in the same month if your account repeatedly reaches the billing threshold.** The amount charged could exceed the payment threshold if your account accrues costs very quickly between billing cycles.
* If you have no API usage fees or other charges during a billing cycle, your threshold amount does not display and you are only billed on your regular monthly date.
If a payment fails, the platform will attempt to charge your default payment method up to 3 times within two weeks. If all attempts are unsuccessful:
* **Your account will be suspended.**
* **All associated project keys will be deleted.**
For any issues with billing, please reach out to **Support****.**
# Stablecoin Payments
Source: https://docs.developer.gomaestro.org/account/stablecoin-payments
Pay your Maestro subscription with stablecoins by connecting a wallet and setting it as your default payment method.
**Supported Networks**
* **Available now:** USDC on Base and Polygon
* **Coming soon:** USDC and USDT on Ethereum
***
## How to Set It Up
### 1. Open the billing payment section
Go to: Billing Payment Settings
***
### 2. Select crypto and connect your wallet
Choose the crypto payment option and connect your wallet.
***
### 3. Set the wallet as default payment method
Set your connected crypto wallet as the default payment method for subscription charges.
**Recommendation**
USDC from your connected wallet will be automatically withdrawn at the end of your billing cycle.
We recommend using a dedicated wallet with enough USDC to cover recurring Maestro charges.
Regularly check this wallet and top up USDC to cover future payments. You can also use tools like [this low-balance alert](https://cryptocurrencyalerting.com/wallet-balance-alert.html?coin=USDC) to get notified when funds are running low.
***
For billing support, contact **Support**.
# Subscriptions
Source: https://docs.developer.gomaestro.org/account/subscription
Manage your Maestro subscription plan, view usage metrics, and upgrade your tier. Transparent pricing without hidden fees.
**Managing Your Subscription**
Learn how to view, manage, and upgrade your subscription plan on our platform. Our adaptive subscription options are designed to grow with your needs, providing transparent pricing without hidden fees.
Choose from **capped **or** pay-as-you-go** plans, and take advantage of\*\* volume-based \*\*discounts to get the best value. You can also view the most recent pricing plans by viewing the pricing page.
***
## Overview
Our platform provides subscription plans tailored to a range of users, from students and hobbyists to professionals and enterprises. The subscription management feature allows users to:
* [Access details about their current plan](./view)
* [Upgrade or modify plans as needed](./upgrade)
* [Manage Billing](./manage-billing)
Enjoy transparent pricing and volume discounts that scale as your project grows.
***
## Subscription Plans and Features
We offer various packages designed to cater to different user needs:
| **Package** | **Description** |
| --------------------- | --------------------------------------------------------------------------------------------- |
| **Artist Package** | Ideal for students and hobbyists, offering capped monthly credits. |
| **Conductor Package** | Designed for professionals who require consistent, scalable use with pay-as-you-go billing. |
| **Virtuoso Package** | Perfect for enterprises, with pay-as-you-go billing and additional enterprise-grade features. |
For further details on the features of each package, see the Plans and Pricing section.
***
## Included Package Services
Each subscription package offers a set of services tailored to different needs:
| **Service** | **Description** |
| --------------------------- | ------------------------------------------------------------------------------------- |
| **Blockchain Indexer** | High-performance Cardano Web3 API for real-time on-chain data access. |
| **Transaction Manager** | Monitor transaction state transitions in real-time through the dashboard or webhooks. |
| **Turbo Transactions** | Accelerate transaction confirmation times with our optimized propagation system. |
| **Market Price Feeds** | Access to real-time financial metrics and pricing data. |
| **Wallet Manager** | Generate key pairs and addresses securely and efficiently. |
| **Managed Smart Contracts** | APIs and white-label UI plugins for seamless smart contract integration. |
***
## How Volume-Based Pricing Tiers Works
As your usage grows, you can benefit from **volume-based pricing tiers**. These discounts start at **4%** and can go up to **40%** for customers who commit to higher usage volumes. The more you use, the greater the discount.
For additional details, visit the **Pricing Page**.
**Note:**
* **Upgrading Plans**: You can upgrade your plan at any time; changes are applied immediately.
* **Monthly Capped Plans**: Ideal for smaller projects, prototyping, or educational use.
* **Pay-As-You-Go Plans**: Best for scalable, continuous use, with no credit limits and volume discounts.
* **Monitor Your Usage**: Regularly check your usage to ensure you have enough credits or are billed accurately based on consumption.
For more information, contact **Support**.
# Teams
Source: https://docs.developer.gomaestro.org/account/teams
Guide to set up and manage multi-user teams in Maestro for collaborative project management and shared subscription access.
**Setting Up Teams**
Learn how to invite, manage, and interact with team members on Maestro for collaborative project management. Maestro supports multi-user teams, allowing organizations to manage projects and subscriptions collectively. This feature is especially beneficial for teams relying on the dashboard to streamline workflows.
***
# Team Roles and Permissions
| **Role / Permissions** | ✔ **Owner** | ✔ **Admin** | ✔ **Developer** | ✔ **Member** |
| ---------------------- | ----------- | ----------- | --------------- | ------------ |
| Projects (Full Access) | ✔ | ✔ | ✔ | Read-Only |
| Webhooks | ✔ | ✔ | ✔ | ✘ |
| Subscriptions | ✔ | ✔ | ✘ | ✘ |
| Manage Team Members | ✔ | ✔ | ✘ | ✘ |
| View Team Members | ✔ | ✔ | ✔ | ✔ |
| Manage Account | ✔ | ✔ | ✘ | ✘ |
| Delete Account | ✔ | ✘ | ✘ | ✘ |
| Enable/Require MFA | ✔ | ✔ | ✘ | ✘ |
***
## Prerequisites
Before creating teams, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org) if you don’t already have one.
***
## Steps to Create a Team
### 1. **Log in to Your Maestro Account:**
* Use your credentials to access the Maestro Dashboard.
***
### 2. **Access Account Settings:**
* Click your **profile icon** at the top-right corner.
* Select `Settings` from the dropdown menu.
* Select `Team` on the left panel.
* In the Teams section, enter a `Team Name`\*\* \*\*and click `Save `to create your team.
You can rename your team later if needed.
***
## Steps to **Invite Team Members**
* On the **Teams** page, enter the email address of the person you wish to invite.
* Choose a **Role** (Admin, Developer, or Member) from the dropdown.
* Click `Invite`.
* Click `Add`
***The user will receive an email invitation, which they must accept to join the team.***
***
## **Steps to Manage Team Members:**
* The **Team** page lists all current team members, along with their roles and Multi-Factor Authentication (MFA) status.
* You can **Edit, Resend an Invitation, or** **Delete** users using the buttons in the \*\*Manage \*\*column.
***
**Notes**
* Only the **Owner** can delete the team or transfer ownership.
* **Admins** can manage users but cannot change the team name or delete the team.
* **Invites expire after 7 days if not accepted. Users will need a new invitation after expiration.**
* Team members cannot change their own roles; this must be configured by the **Owner** or **Admin**.
# Upgrade
Source: https://docs.developer.gomaestro.org/account/upgrade
Guide to upgrade your Maestro subscription plan with more credits, flexible pay-as-you-go options, and immediate plan switching.
**Upgrade Your Subscription**
Easily upgrade your subscription plan to better suit your usage needs directly from the Maestro Dashboard. Whether you need more credits or prefer a flexible, pay-as-you-go option, you can switch plans at any time with immediate effect. This guide will walk you through the process of upgrading your subscription and explain the available options.
***
## Prerequisites
Before managing your subscription, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org) if you don’t already have one
***
### 1. How to Upgrade
On the **Subscription Details** page, click `Upgrade `to explore different subscription options.
You can choose from:
1. **Monthly Capped Plans**: Suitable for limited use, with a fixed amount of credits each month.
2. **Pay-As-You-Go Plans**: Best for continuous use, charging based on actual usage without credit limits.
Changes to your \*\*plan take effect immediately, \*\*and billing will be adjusted accordingly. ***You can switch between plans at any time.***
For any issues with billing, please reach out to **Support****.**
# View
Source: https://docs.developer.gomaestro.org/account/view
Guide to view and review your Maestro subscription details, usage metrics, billing information, and plan type from the dashboard.
**View Your Subscription**
Easily access and review the details of your subscription plan directly from the Maestro Dashboard. Whether you're on a capped monthly plan or a pay-as-you-go plan, you can quickly check your plan type, current usage, and billing information.
This guide will walk you through how to navigate to your subscription details and understand key elements of your plan, helping you stay informed and manage your account effectively.
## Prerequisites
Before managing your subscription, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org) if you don’t already have one
***
### 1. Log in to Your Maestro Account:
* Use your credentials to access the Maestro Dashboard.
***
### 2. Access Account Settings:
* Click your **profile icon** at the top-right corner.
* Select `Settings` from the dropdown menu.
* Select `Subscription`
You will be redirected to the **Subscription Overview** page, where you can view the following:
* **Plan Type**: The subscription you currently use (e.g., **Artist**, **Conductor**, **Virtuoso**).
* **Price Per Month**: The cost of your current plan.
* **Credits Information**: Number of credits included, credits used, and time remaining until reset.
* **Rate**: Applicable rates based on your current usage.
For any issues with billing, please reach out to **Support****.**
# ClawHub
Source: https://docs.developer.gomaestro.org/agentic-integrations/clawhub
Discover and integrate Maestro's Bitcoin blockchain capabilities through the ClawHub AI skill marketplace.
# ClawHub
[ClawHub](https://clawhub.ai/Vardominator/maestro-skill) is a platform for hosting, discovering, and managing AI agent skills. It provides a registry where developers publish skills that AI agents can discover and use — similar to a package registry for agent capabilities.
***
## Maestro Skill
The **Maestro skill** on ClawHub provides comprehensive Bitcoin blockchain interaction through Maestro's APIs:
* **7 API services** with **119 endpoints**
* Bitcoin blockchain indexing and querying
* Esplora API compatibility
* Direct RPC access to Bitcoin nodes
* Event management and webhook support
* Real-time market price data
* Mempool monitoring
* Wallet operations and UTXO management
* Metaprotocol support: **BRC-20**, **Runes**, and **Ordinals**
***
## Learn More
View the full Maestro skill listing, capabilities, and integration details.
# ERC-8004
Source: https://docs.developer.gomaestro.org/agentic-integrations/erc-8004
Maestro's Bitcoin agent registered on-chain via ERC-8004 for trustless discovery, reputation tracking, and verification by any AI agent.
# ERC-8004
[ERC-8004](https://www.8004scan.io/agents/ethereum/22763) ("Trustless Agents") is an Ethereum standard that defines a blockchain-based protocol for **agent discovery and trust establishment** across organizational boundaries. It enables AI agents to discover, evaluate, and interact with other agents without pre-existing trust relationships — creating the foundation for open agent economies.
While existing standards like MCP and A2A handle agent communication, ERC-8004 adds the missing layer: **discovery and trust**.
***
## How It Works
ERC-8004 defines three on-chain registries:
| Registry | Purpose |
| :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Identity** | ERC-721-based registry assigning each agent a globally unique identifier and an `agentURI` pointing to its registration file. Agents are browsable and transferable as NFTs. |
| **Reputation** | Collects feedback signals from clients. Core data stored on-chain, detailed feedback off-chain. Supports filtering, revocation, and response appending. |
| **Validation** | Enables independent verification of agent work. Validators respond with outcomes on a 0–100 scale. |
***
## Maestro on ERC-8004
Maestro's Bitcoin agent is registered on the Ethereum mainnet as **token #22763**, providing:
* **7 API services** with **119 endpoints** covering blockchain indexing, Esplora compatibility, Node RPC, event management, market pricing, mempool monitoring, and transaction processing
* **MCP endpoint** at `https://xbt-mainnet.gomaestro-api.org/v0/mcp`
* **x402 payment support** for autonomous, wallet-based access
Any AI agent on the network can discover Maestro's capabilities, verify its identity, and check its reputation — all through the decentralized registry.
***
## Learn More
View Maestro's full agent registration, service endpoints, and reputation on the ERC-8004 explorer.
# MCP
Source: https://docs.developer.gomaestro.org/agentic-integrations/mcp
Connect LLMs and AI agents to Bitcoin blockchain data through Maestro's MCP server — query blocks, transactions, mempool, and more via natural language.
# Model Context Protocol (MCP)
The [Maestro MCP Server](https://github.com/maestro-org/maestro-mcp-server) is a **Model Context Protocol** implementation that enables AI agents and LLMs to interact with Bitcoin blockchain data through the Maestro API. It acts as a bridge, translating natural language queries into blockchain API calls via a standardized streamable HTTP protocol.
***
## Available Services
The MCP server exposes five Maestro API service categories:
| Service | Description |
| :--------------------- | :---------------------------------------------------- |
| **Blockchain Indexer** | Query blocks, transactions, and historical chain data |
| **Mempool Monitoring** | Track pending and unconfirmed transactions |
| **Market Price** | Access real-time Bitcoin pricing information |
| **Wallet** | Address lookups, balance queries, and UTXO management |
| **Node RPC** | Direct Bitcoin node interaction capabilities |
***
## Setup
### Prerequisites
* [Bun](https://bun.sh/) v1.0 or higher
* A [Maestro API key](https://dashboard.gomaestro.org/signup)
### Installation
```bash theme={null}
git clone https://github.com/maestro-org/maestro-mcp-server.git
cd maestro-mcp-server
bun install
bun run build
```
### Configuration
```bash theme={null}
cp .env.example .env
```
Edit `.env` to add your Maestro API key and select a network:
| Network | Base URL |
| :----------- | :----------------------------------------- |
| **Mainnet** | `https://xbt-mainnet.gomaestro-api.org/v0` |
| **Testnet4** | `https://xbt-testnet.gomaestro-api.org/v0` |
### Launch
```bash theme={null}
bun run start:http
```
The MCP endpoint is accessible at `http://localhost:3000/mcp`.
***
## Client Examples
The [maestro-mcp-client-examples](https://github.com/maestro-org/maestro-mcp-client-examples) repository provides working integration examples:
| Example | Description |
| :------------------------------ | :----------------------------------------------------------------- |
| **basic-streamablehttp-client** | Raw streamable HTTP transport connection to the MCP server |
| **Claude** | Integration with Claude AI for natural language blockchain queries |
| **Cursor** | Configuration for using Maestro MCP in the Cursor editor |
***
## Resources
Source code, full documentation, and setup instructions.
Working examples for Claude, Cursor, and raw HTTP clients.
# Overview
Source: https://docs.developer.gomaestro.org/agentic-integrations/overview
Maestro's suite of AI agent integrations for autonomous blockchain interaction — x402 payments, MCP servers, on-chain agent registries, and skill marketplaces.
# Agentic Integrations
In the agentic world, most data consumption will come from **AI agents** operating on behalf of humans and other AI agents. As autonomous systems increasingly interact with blockchain networks, they need reliable, standards-based infrastructure to query on-chain data, submit transactions, and pay for services — all without human intervention.
**Maestro provides a complete set of tools for agents to seamlessly interact with the blockchain.**
Maestro's agentic integrations span the full lifecycle of autonomous blockchain access:
* **Payment** — Agents pay for API access using crypto wallets via the x402 protocol
* **Communication** — LLMs and agents query blockchain data through Model Context Protocol (MCP) servers
* **Discovery** — Agents find and verify Maestro's services through on-chain registries (ERC-8004) and skill platforms (ClawHub)
***
# Integrations
Autonomous API access via crypto payments. Agents pay with stablecoins over HTTP — no API keys or accounts required.
Connect LLMs and AI agents to Bitcoin blockchain data through a standardized MCP server.
Maestro's Bitcoin agent registered on-chain for trustless discovery and verification via the ERC-8004 standard.
Discover and integrate Maestro's blockchain capabilities through the ClawHub AI skill marketplace.
# x402 Payments
Source: https://docs.developer.gomaestro.org/agentic-integrations/x402
Access all Maestro APIs via x402 crypto payments — autonomous, wallet-based API access for AI agents with no API keys or user account required.
✨ **AI Agent Integration**
Use the Maestro skill file below to teach your agent how to query Maestro APIs and pay with x402.
## Provide the Maestro skill directly
```text theme={null}
https://raw.githubusercontent.com/maestro-org/maestro-skill/refs/heads/main/SKILL.md
```
## Install the Maestro skill with npx
```bash theme={null}
npx skills add maestro-org/maestro-skill
```
***
## What is x402?
[x402](https://www.x402.org/) is an open protocol that uses HTTP `402 Payment Required` for API-native crypto payments, so agents can request Maestro APIs, complete a wallet challenge, and pay only when credits are needed.
***
## How to Use and Pay with x402
Send a Maestro API request. If authentication or credits are missing, the gateway returns HTTP `402`.
Use the `extensions.sign-in-with-x` challenge data from the `402` response, sign it, and retry with `Sign-In-With-X`.
The gateway returns `Authorization: Bearer ` (valid for about 1 hour) and, when needed, purchase details.
When prompted, choose an amount, sign the payment authorization, and retry with:
* `Authorization: Bearer `
* `X-PAYMENT: `
Responses include remaining credits and payment metadata, and the JWT can be reused until it expires.
## Payment Requirements and Limits
**Supported chains:** Ethereum, Base\
**Supported currency:** USDC\
**Single credit cost:** \$0.000025 per credit
**Purchase limits**
* **Min purchase:** \$0.10 = 4,000 credits
* **Max purchase:** \$50.00 = 2,000,000 credits
***
## Key Benefits for Agents
* **No API keys or accounts** — A crypto wallet is all an agent needs to authenticate and pay
* **Stablecoin payments** — Pay with USDC on Base or Ethereum
* **Reusable paid access** — Buy credits once, then spend them across requests
* **Idempotent** — Safe to retry requests without risk of duplicate charges
***
## Learn More
Read the full x402 specification, explore SDKs (TypeScript, Python, Go), and view integration guides.
# API Usage
Source: https://docs.developer.gomaestro.org/bitcoin/api-usage
Bitcoin API usage guide with authentication, pagination, rate limits, and best practices for Maestro's Bitcoin blockchain APIs.
# Authentication
You will need an `api-key` to access the Maestro API. You can obtain this key from the Maestro dApp Platform Dashboard.
## Examples
### GET Request
Example GET request for retrieving the chain tip:
```sh Curl theme={null}
curl -X GET \
-H "api-key: " \
https://xbt-mainnet.gomaestro-api.org/v0/rpc/general/info
```
### POST Request
Example request for submitting a transaction:
```sh Curl theme={null}
curl -X POST \
-H "Content-Type: application/cbor" \
-H "api-key: " \
--data @tx.signed \
https://xbt-mainnet.gomaestro-api.org/v0/rpc/transaction/submit
```
***
# Security
To ensure the security of your API usage, follow these best practices:
* **Keep your API key private**: Never share it publicly (e.g., on GitHub, client-side code).
* **Prevent unauthorized usage**: Loss or misuse of your API key can result in the overuse of your account's available credits.
* **Secure your API key**: Implement proper methods for storing and accessing your `api-key`, especially in production environments.
***
# Cursor-based Pagination
Some Maestro endpoints use **Cursor-based Pagination to break large datasets into smaller, more manageable responses.** This method is particularly relevant when returning all the data in a single response would be inefficient or slow.
* **Improved data integrity and accuracy** when fetching multiple pages.
* **Prevents duplicates**, even when new blocks are processed between queries.
* **Optimized for infinite scroll**, enabling a smooth user experience by loading content as the user scrolls.
When using this method, responses will include a `next_cursor` string. This value should be passed as the `cursor` parameter in your next request to retrieve the next page of results.
## Example
* **Initial Response**: When you make an initial API call, the response might include a `"next_cursor": "AAAAAALfeKF8btdzaVvkGaetSS7e1AAF"`. This indicates that there are more results to retrieve.
* **Using** `next_cursor`: To get the next page of data, you need to include the `next_cursor` value in your next API request by adding it as a query parameter (`cursor`).
* **Modifying the Query**: Append the cursor value to your API request URL, like this:
```none Text theme={null}
?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF
```
* **Result**: The API will return the next set of results when this value is provided.
* **End of Data:** If the response includes `"next_cursor": null`, the requested dataset's end has been reached.
**Other relevant query parameters are:**
| Parameter | Default | Description |
| --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `count` | `100` | Defines the maximum number of results per pagination page |
| `order` | `asc` | Specifies the sort order of the results. Acceptable values are `asc` (ascending) or `desc` (descending). This option is available only for specific endpoints. |
**Example**
```sh Curl theme={null}
curl -L -X GET 'https://xbt-mainnet.gomaestro-api.org/v0/addresses/bc1q9p8ls7wzwsr8397x6gj92zwm27qlzrhjhahd79/utxos?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF' \
--header 'Accept: application/json' \
--header 'api-key: your-api-key'
```
***
# Computer Credits
Maestro uses **Compute Credits** to measure the computational resources consumed by your applications on its platform, similar to traditional cloud providers like Google Cloud or AWS. The number of credits assigned to each operation or method is based on the global average duration of that process, **taking into account factors like complexity and computational intensity.**
Learn more about how Compute Credits are allocated by exploring the **Subscription breakdown.**
Compute Credits provide a **fair, usage-based pricing model**, meaning you only pay for the computational resources your application actually uses, making it both **cost-efficient** and **flexible**.
***
# Request Limits
Maestro enforces two types of API rate limits:
* **Per day**: a set amount of credits consumed per day based on your [subscription](https://www.gomaestro.org/pricing) plan.
* **Per second**: a set amount of requests per second based on your [subscription](https://www.gomaestro.org/pricing) plan.
*For example, the ****Artist plan**** supports up to 10 requests per second.*
For more details on available packages or to upgrade your plan, refer to the [Pricing page](https://www.gomaestro.org/pricing). If your organization needs higher limits, [contact us](mailto:info@gomaestro.org) to discuss **Enterprise solutions**.
***
# Response Headers
Maestro includes the following headers in API responses to help manage usage:
| Header | Description |
| -------------------------------- | ------------------------------------------------------ |
| X-RateLimit-Limit-Second | Maximum allowed requests per second. |
| **X-RateLimit-Remaining-Second** | **Remaining allowed requests for the current second.** |
| X-Maestro-Credits-Limit | Total allowed credits for the day. |
| **X-Maestro-Credits-Remaining** | **Remaining credits for the day.** |
Be sure to monitor these values (in **bold**) and adjust your request rate accordingly to avoid hitting rate limits.
***
# Errors
Maestro follows standard HTTP response codes to indicate the success or failure of API requests:
| 2xx | Success |
| --- | ------------------------------------------------------------ |
| 4xx | Client-side errors, such as missing or incorrect parameters. |
| 5xx | Server-side errors with Maestro. |
Refer to the [API Reference](/general/platform-overview) for detailed response codes for each endpoint.
***
# Address Statistics
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/address-statistics
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/statistics
Get comprehensive statistics for a Bitcoin address including balance, transaction count, and activity metrics.
# BRC20 by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/brc20-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/brc20
Get all BRC-20 token balances and holdings for a specific Bitcoin address with current amounts.
# BRC20 Transfer Inscriptions by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/brc20-transfer-inscriptions-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/brc20/transfer_inscriptions
Get BRC-20 transfer inscriptions for a Bitcoin address with transfer amounts and token details.
# (deprecated) Rune UTxOs by Address and Rune
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/deprecated-rune-utxos-by-address-and-rune
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/runes/{rune}
Return all UTxOs controlled by the specified address or script pubkey which contain runes, with the option to filter by a specific rune kind.
# Historical Satoshi Balance by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/historical-satoshi-balance-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/balance/historical
Get historical Bitcoin balance for an address at specific timestamps or block heights.
# Inscription Activity by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/inscription-activity-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/inscriptions/activity
Get inscription activity history for a Bitcoin address including creations, transfers, and updates.
# Inscriptions by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/inscriptions-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/inscriptions
Get all Bitcoin Ordinals inscriptions associated with a specific address, including inscription details and metadata.
# Rune Activity by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/rune-activity-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/runes/activity
Get Bitcoin Runes activity history for an address including mints, transfers, and burns.
# Rune UTxOs by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/rune-utxos-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/runes/utxos
Get unspent transaction outputs containing Bitcoin Runes tokens for a specific address.
# Runes by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/runes-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/runes
Get all Bitcoin Runes tokens held by a specific address, including balances and token metadata.
# Satoshi Activity by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/satoshi-activity-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/activity
Get comprehensive activity history for a Bitcoin address including transactions, inscriptions, and Runes.
# Satoshi Balance by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/satoshi-balance-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/balance
Get the current satoshi balance for a specific Bitcoin address, including confirmed and unconfirmed amounts.
# Transactions by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/transactions-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/txs
Get paginated transaction history for a Bitcoin address with detailed input and output information.
# UTxOs by Address
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/addresses/utxos-by-address
bitcoin/blockchain-indexer-api/openapi.json get /addresses/{address}/utxos
Retrieves all UTXOs associated with a Bitcoin address or script pubkey. Ideal for wallet views, dust filtering, or balance calculations. Can be tailored to exclude certain categories of UTXOs such as those used in metaprotocols.
# Block Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/blocks/block-info
bitcoin/blockchain-indexer-api/openapi.json get /blocks/{height_or_hash}
Get detailed Bitcoin block information by block height or hash including transactions, size, and mining details.
# Inscription Activity by Block
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/blocks/inscription-activity-by-block
bitcoin/blockchain-indexer-api/openapi.json get /blocks/{height_or_hash}/inscriptions/activity
Get inscription activity that occurred within a specific Bitcoin block including new inscriptions and transfers.
# Transactions by Block
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/blocks/transactions-by-block
bitcoin/blockchain-indexer-api/openapi.json get /blocks/{height_or_hash}/transactions
Get all transactions included in a specific Bitcoin block by height or hash with detailed transaction data.
# BRC20 Holders
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/brc20/brc20-holders
bitcoin/blockchain-indexer-api/openapi.json get /assets/brc20/{ticker}/holders
Get list of addresses holding a specific BRC-20 token with their balance amounts and distribution statistics.
# BRC20 Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/brc20/brc20-info
bitcoin/blockchain-indexer-api/openapi.json get /assets/brc20/{ticker}
Get detailed information about a specific BRC-20 token including supply, decimals, and deployment data.
# List BRC20
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/brc20/list-brc20
bitcoin/blockchain-indexer-api/openapi.json get /assets/brc20
Get comprehensive list of all BRC-20 tokens with their metadata, supply, and market information.
# Activity by Inscription
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/activity-by-inscription
bitcoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}/activity
Get activity history for a specific Bitcoin inscription including transfers, sales, and ownership changes.
# Collection Metadata by Collection Symbol
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/collection-metadata-by-collection-symbol
bitcoin/blockchain-indexer-api/openapi.json get /assets/collections/{collection_symbol}/metadata
Get comprehensive metadata for a Bitcoin inscription collection including description, creator, and attributes.
# Collection Metadata by Inscription
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/collection-metadata-by-inscription
bitcoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}/collection
Get collection metadata for a Bitcoin inscription including collection name, symbol, and associated traits.
# Collection Stats by Collection Symbol
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/collection-stats-by-collection-symbol
bitcoin/blockchain-indexer-api/openapi.json get /assets/collections/{collection_symbol}/stats
Get statistical data for a Bitcoin inscription collection including floor price, volume, and holder count.
# Content by Inscription ID
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/content-by-inscription-id
bitcoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}/content_body
Get the raw content data of a Bitcoin inscription including images, text, or other embedded media.
# Inscription IDs by Collection Symbol
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/inscription-ids-by-collection-symbol
bitcoin/blockchain-indexer-api/openapi.json get /assets/collections/{collection_symbol}/inscriptions
Get list of all inscription IDs belonging to a specific Bitcoin inscription collection with pagination support.
# Inscription Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/inscription-info
bitcoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}
Get detailed information about a specific Bitcoin inscription including content, metadata, and ownership details.
# Token Metadata by Inscription
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/inscriptions/token-metadata-by-inscription
bitcoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}/metadata
Get comprehensive metadata for a Bitcoin inscription including content type, creator, and associated token information.
# Bitcoin - Blockchain Indexer API
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/overview
Bitcoin Blockchain Indexer API with real-time UTXO data, rollback protection, and metaprotocol support including BRC20, Runes, and Inscriptions.
This API provides core indexer endpoints with support for Bitcoin metaprotocols by delivering real-time, rollback-protected access to Bitcoin's UTXO data, enabling developers to build responsive and reliable blockchain applications without managing complex infrastructure.
## Key Features
* **Real-Time Data with Rollback Protection:** Ensures data accuracy by handling chain reorganizations gracefully, providing live data without sacrificing integrity.
* **Comprehensive UTXO Indexing:** Specialized pipelines extract, match, and process on-chain information, including handling rollbacks, to provide accurate and up-to-date data.
## Key Benefits for Developers
By abstracting the complexities of blockchain data retrieval and processing, Maestro's Bitcoin Indexer API empowers developers to focus on building innovative applications with confidence in fast and reliable access to historical chain data.
# Activity by Rune
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/runes/activity-by-rune
bitcoin/blockchain-indexer-api/openapi.json get /assets/runes/{rune}/activity
Get activity history for a specific Bitcoin Rune including mints, burns, and transfer transactions.
# Holders by Rune
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/runes/holders-by-rune
bitcoin/blockchain-indexer-api/openapi.json get /assets/runes/{rune}/holders
Get list of addresses holding a specific Bitcoin Rune token with their balance amounts and distribution data.
# List Runes
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/runes/list-runes
bitcoin/blockchain-indexer-api/openapi.json get /assets/runes
Get comprehensive list of Bitcoin Runes tokens with metadata, supply information, and trading statistics.
# Runes Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/runes/runes-info
bitcoin/blockchain-indexer-api/openapi.json get /assets/runes/{rune}
Get detailed information about a specific Bitcoin Rune including supply, divisibility, and metadata.
# UTxOs by Runes
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/runes/utxos-by-runes
bitcoin/blockchain-indexer-api/openapi.json get /assets/runes/{rune}/utxos
Get unspent transaction outputs containing a specific Bitcoin Rune token with amounts and holder information.
# Inscription Activity by Transaction
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/transactions/inscription-activity-by-transaction
bitcoin/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/inscriptions/activity
Get inscription activity and metadata for Bitcoin inscriptions within a specific transaction.
# Transaction Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/transactions/transaction-info
bitcoin/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}
Get detailed Bitcoin transaction information including inputs, outputs, fees, and confirmation status by transaction hash.
# Transaction Info with Metaprotocols
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/transactions/transaction-info-with-metaprotocols
bitcoin/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/metaprotocols
Get Bitcoin transaction information with metaprotocol data including Runes, Inscriptions, and BRC-20 token activities.
# Transaction Output Info
Source: https://docs.developer.gomaestro.org/bitcoin/blockchain-indexer-api/transactions/transaction-output-info
bitcoin/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/outputs/{output_index}
Get detailed information about a specific output of a Bitcoin transaction including value and scripts.
# Changelog
Source: https://docs.developer.gomaestro.org/bitcoin/changelog
Bitcoin API changelog with version updates, new features, improvements, and breaking changes for Maestro's Bitcoin services.
## Added
**New Indexer Endpoints**
`/assets/collections/{collection_symbol}/stats`
* Collection Stats by Collection Symbol
`/transactions/{tx_hash}/metaprotocols`
* Transaction Info with Metaprotocols
**New Market Price API Endpoints**
`/markets/btc/prices/batch`
* Fetch BTC prices by timestamp
`/btc/prices/{timestamp}`
* Fetch BTC price by timestamp
**New Mempool API Endpoints**
`/mempool/transactions/{tx_hash}/metaprotocols`
* Transaction Info with Metaprotocols (Mempool-aware)
**New Wallet API Endpoints**
`/wallet/addresses/{address}/activity`
* Wallet Satoshi Activity by Address (Mempool-aware)
`/wallet/addresses/{address}/activity/metaprotocols`
* Metaprotocol Activity by Address
`/wallet/addresses/{address}/balance/historical`
* Historical Satoshi Balance by Address
`/wallet/addresses/{address}/inscriptions/activity`
* Inscription Activity by Address (Mempool-aware)
`/wallet/addresses/{address}/runes/activity`
* Rune Activity by Address (Mempool-aware)
`/wallet/addresses/{address}/statistics`
* Address Statistics (Mempool-aware)
## Added
**New Indexer Endpoints**
`/addresses/{address}/brc20/transfer_inscriptions`
* List of all BRC-20 transfer inscriptions at a specific address
**New Market Price API Endpoints**
`/markets/dexs`
* List of all available DEXes
`/markets/dexs/ohlc/{dex}/{symbol}`
* Historical market activity (in candlestick OHLC format) for a specific DEX and Rune
`/markets/dexs/trades/{dex}/{symbol}`
* Historical trades with price (in satoshis) for a specific DEX and Rune
`/markets/runes`
* List of available Rune registries
## Added
**New Indexer Endpoints**
`/addresses/{address}/balance`
* Total Bitcoin balance (in Satoshi) at specified address
`/transactions/{tx_hash}/outputs/{output_index}`
* UTXO information including metaprotocol data
`/addresses/{address}/txs`
* new confirmation filter in Transasction by address
**New Mempool-Aware Endpoints**
\`/mempool/addresses/\{address}/balance
* Total Bitcoin balance (in Satoshi) at specified address
`/mempool/assets/runes/{rune}/holders`
* Total Runes balance at specified address
## Added
**New Collection Endpoints**
`/assets/collections/{collection_symbol}/inscriptions`
* Inscription IDs by Collection Symbol
`/assets/collections/{collection_symbol}/metadata`
* Collection Metadata by Collection Symbol
`/assets/inscriptions/{inscription_id}/collection`
* Collection Metadata by Inscription
**New Inscription Endpoints**
`/assets/inscriptions/{inscription_id}/activity`
* List of all transactions that the inscription was involved in, starting with the reveal tx.
`/assets/inscriptions/{inscription_id}/metadata`
* Metadata specific to an inscription.
**New Block Endpoints**
`/blocks/{height_or_hash}`
* Information about a block, including a flag to indicate if it involved metaprotocols.
`/blocks/{height_or_hash}/transactions`
* List of transactions in the block, providing overall information for each.
**New Transaction Endpoints**
`/transactions/{tx_hash}`
* Information about a transaction, including a flag to indicate if the transaction involved metaprotocols.
`/transactions/{tx_hash}/metaprotocols`
* Information about a transaction, including info about metaprotocols in inputs and outputs.
**New Mempool Block Fee Rates Endpoint**
`/mempool/fee_rates`
* Statistics regarding fee rates of transactions within estimated mempool blocks
**New RPC Endpoints**
`/block/recent`
* Recent block info"
`/transaction/batch`
* Transaction info batch by hash array
`/transaction/hex`
* Transaction info by hex
`/transaction/recent`
* Recent transactions
## Improved
**Updated Runes and Inscription Info endpoints**
`/assets/inscriptions/{inscription_id}`
* Updates response schema. Backward compatible
`/assets/runes/{rune}`
* removed field: `data.total_utxos`
**Updated Inscription Activity Endpoints**
`/blocks/{height_or_hash}/inscriptions/activity`
* Updates response schema. Backward compatible
`/transactions/{tx_hash}/inscriptions/activity`
* Updates response schema. Backward compatible
**Updated Mempool Block Limit**
`/mempool/addresses/{address}/runes`
* Changed mempool\_blocks\_limit in query
`/mempool/addresses/{address}/utxos`
* Changed mempool\_blocks\_limit in query
## Added
**New Inscription Activity Endpoints**
`/blocks/{height_or_hash}/inscriptions/activity`
* List of all inscription activity in the block
`/transactions/{tx_hash}/inscriptions/activity`
* List of all inscription activity in a transaction
**New Block Volume and Miner Info**
`/block/{height_or_hash}/miner`
* Block Miner information
`/block/{height_or_hash}/volume`
* Block volume in Satoshis
**New Transaction Decode Endpoint**
`rpc/transaction/decode`
* Decode Raw transaction
**New Recent Transactions Endpoint**
`rpc/transaction/recent/{count}`
* List of ordered recent transactions
## Improved
**Updated path url for PSBT Decode Endpoint**
`/transaction/psbt/decode`
* Decode PSBT transaction
## Added
**New Inscription Endpoints**
`/addresses/{address}/inscriptions`
* List of all inscriptions which reside at a specific address of script pubkey
`/assets/inscriptions/{inscription_id}`
* Information about an inscription
`/assets/inscriptions/{inscription_id}/content_body`
* Paginated response of inscription content body byte array
## Improved
**Node RPC moved to dedicated folder**
`/rpc/block/*`
* endpoints moved to Node RPC folder
`/rpc/mempool/*`
* endpoints moved to Node RPC folder
`/rpc/transaction/*`
* endpoints moved to Node RPC folder
***
## Added
**Filter UTxO without Runes and Inscriptions**
`/addresses/{address}/utxos`
* `exclude_metaprotocols` flag to allow excluding metaprotocol UTxOs in Runes and inscriptions. To use, append the full query parameter `?exclude_metaprotocols=true`
## Improved
**Divisibility field added to represent Runes fractional balances.**
* `/assets/runes/{rune}/holders`
* `/assets/runes/{rune}`
* `/addresses/{address}/runes/{rune}`
* `/addresses/{address}/runes`
* `/assets/runes/{rune}/utxos`
## Added
**Adding Runes Circulating supply**
`/assets/runes/{rune}`;
* Added `circulating_supply` to provide the current amount of a specific Rune in circulation.
***
## Added
**Ignore dust UTxO filter**
`/addresses/{address}/utxos`
* Added the `filter_dust_threshold` option to ignore UTxOs below a specified number of satoshis.
# Address
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/addresses/address
bitcoin/esplora-api/openapi.json get /address/{address}
Get detailed information about a Bitcoin address including balance, transaction count, and UTXO statistics.
# Address Transactions
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/addresses/address-transactions
bitcoin/esplora-api/openapi.json get /address/{address}/txs
Get complete transaction history for a Bitcoin address including both confirmed and mempool transactions.
# Address Transactions Chain
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/addresses/address-transactions-chain
bitcoin/esplora-api/openapi.json get /address/{address}/txs/chain
Get paginated confirmed transaction history for a Bitcoin address excluding mempool transactions.
# Address Transactions Mempool
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/addresses/address-transactions-mempool
bitcoin/esplora-api/openapi.json get /address/{address}/txs/mempool
Get unconfirmed transactions for a Bitcoin address currently in the mempool awaiting confirmation.
# Address UTXOs
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/addresses/address-utxos
bitcoin/esplora-api/openapi.json get /address/{address}/utxo
Get all unspent transaction outputs (UTXOs) for a specific Bitcoin address with values and confirmations.
# Block
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block
bitcoin/esplora-api/openapi.json get /block/{hash}
Get detailed information about a specific Bitcoin block including header data, transactions, and statistics.
# Block Header
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-header
bitcoin/esplora-api/openapi.json get /block/{hash}/header
Get the raw block header data for a Bitcoin block in hexadecimal format for protocol-level analysis.
# Block Height
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-height
bitcoin/esplora-api/openapi.json get /block-height/{height}
Get the block hash for a Bitcoin block at a specific height in the blockchain.
# Block Raw
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-raw
bitcoin/esplora-api/openapi.json get /block/{hash}/raw
Get the raw binary data of a Bitcoin block in hexadecimal format for parsing and analysis.
# Block Status
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-status
bitcoin/esplora-api/openapi.json get /block/{hash}/status
Get confirmation status and chain position information for a specific Bitcoin block.
# Block Tip Hash
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-tip-hash
bitcoin/esplora-api/openapi.json get /blocks/tip/hash
Get the hash of the current Bitcoin block at the tip of the longest chain.
# Block Tip Height
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-tip-height
bitcoin/esplora-api/openapi.json get /blocks/tip/height
Get the current height of the latest Bitcoin block at the tip of the blockchain.
# Block Transaction ID
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-transaction-id
bitcoin/esplora-api/openapi.json get /block/{hash}/txid/{index}
Get transaction ID at a specific index position within a Bitcoin block for direct transaction access.
# Block Transaction IDs
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/block-transaction-ids
bitcoin/esplora-api/openapi.json get /block/{hash}/txids
Get list of all transaction IDs included in a specific Bitcoin block for efficient block analysis.
# Blocks
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/blocks
bitcoin/esplora-api/openapi.json get /blocks/{start_height}
Get list of Bitcoin blocks starting from a specific height with pagination support for blockchain exploration.
# Get block transactions
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/blocks/get-block-transactions
bitcoin/esplora-api/openapi.json get /block/{hash}/txs/{start_index}
Get paginated list of transactions in a Bitcoin block starting from a specific index position.
# Mempool
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/mempool/mempool
bitcoin/esplora-api/openapi.json get /mempool
Get current Bitcoin mempool statistics including transaction count, fees, and memory usage.
# Mempool Recent
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/mempool/mempool-recent
bitcoin/esplora-api/openapi.json get /mempool/recent
Get list of recently submitted Bitcoin transactions in the mempool ordered by arrival time.
# Mempool Transaction IDs
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/mempool/mempool-transaction-ids
bitcoin/esplora-api/openapi.json get /mempool/txids
Get list of all Bitcoin transaction IDs currently in the mempool awaiting confirmation.
# Bitcoin - Esplora API
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/overview
The Bitcoin Esplora API offers fast, read-optimized access to Bitcoin blockchain data—covering blocks, transactions, addresses, mempool state, UTXOs, fees, and more. Based on the widely adopted Esplora interface from [Blockstream](https://blockstream.com), it is designed for developers building explorers, wallets, payment processors, or analytics platforms who need structured blockchain data without managing their own indexing infrastructure.
With this API, you can retrieve address information, trace transaction statuses, monitor mempool activity, and fetch granular data like outspend status, block headers, and raw binary or hex representations of transactions and blocks.
## Key Features
* **Address-Level Insights**: Retrieve balances, chain statistics, mempool stats, UTXOs, and complete transaction history (confirmed and unconfirmed) for any Bitcoin address.
* **Block Data Access**: Get full block metadata, transaction IDs, raw blocks, block headers, status, and block ranges by height or hash.
* **Transaction Lookups**: Query full transaction details, hex serialization, raw binary data, merkle proofs, outspend data, and RBF timelines.
* **Mempool Monitoring**: Access mempool statistics, transaction IDs, recent transactions, and fee distribution histograms.
* **Broadcast Transactions**: Push signed transactions to the Bitcoin network in raw hex format for propagation.
* **Multi-Network Support**: Available on both Bitcoin Mainnet and Testnet environments.
## Key Benefits for Developers
The Esplora API allows developers to access production-grade Bitcoin blockchain data with low latency and without the operational overhead of running a full archival node or Esplora indexer. Its familiar, REST-friendly endpoints return well-structured JSON, making it straightforward to plug into existing applications, trading systems, or analytics pipelines. Whether you need real-time mempool monitoring, forensic transaction analysis, or historical block data, this API delivers a complete toolkit for Bitcoin-powered development across both test and production environments.
Refer to Maestro's [Mempool.space Migration Guide](../tutorials-and-guides/mempool-space-migration-guide) for a comprehensive resource to assist in replacing your existing Esplora provider with Maestro for the same functionality and supported interface at a fraction of the cost.
# Transaction
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction
bitcoin/esplora-api/openapi.json get /tx/{txid}
Get detailed information about a specific Bitcoin transaction including inputs, outputs, and fees.
# Transaction
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-1
bitcoin/esplora-api/openapi.json post /tx
Broadcast a signed Bitcoin transaction to the network for confirmation and inclusion in the blockchain.
# Transaction Hex
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-hex
bitcoin/esplora-api/openapi.json get /tx/{txid}/hex
Get the raw hexadecimal representation of a Bitcoin transaction for parsing and analysis.
# Transaction Merkle Proof
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-merkle-proof
bitcoin/esplora-api/openapi.json get /tx/{txid}/merkle-proof
Get Merkle proof for a Bitcoin transaction to verify its inclusion in a specific block.
# Transaction Merkleblock Proof
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-merkleblock-proof
bitcoin/esplora-api/openapi.json get /tx/{txid}/merkleblock-proof
Get Merkle block proof for a Bitcoin transaction in serialized format for SPV verification.
# Transaction Outspend
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-outspend
bitcoin/esplora-api/openapi.json get /tx/{txid}/outspend/{vout}
Get information about how a specific Bitcoin transaction output was spent in subsequent transactions.
# Transaction Outspends
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-outspends
bitcoin/esplora-api/openapi.json get /tx/{txid}/outspends
Get information about how all outputs of a Bitcoin transaction were spent in subsequent transactions.
# Transaction Raw
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-raw
bitcoin/esplora-api/openapi.json get /tx/{txid}/raw
Get the raw hex-encoded Bitcoin transaction data for a specific transaction ID.
# Transaction RBF Timeline
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-rbf-timeline
bitcoin/esplora-api/openapi.json get /tx/{txid}/rbf
Get Replace-by-Fee (RBF) timeline and history for a Bitcoin transaction including fee bumps and replacements.
# Transaction Status
Source: https://docs.developer.gomaestro.org/bitcoin/esplora-api/transactions/transaction-status
bitcoin/esplora-api/openapi.json get /tx/{txid}/status
Get the confirmation status of a Bitcoin transaction including block height and confirmation count.
# Get Event Log
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/logs/get-event-log
bitcoin/event-manager-api/openapi.json get /logs/{id}
Get detailed information about a specific Bitcoin event log by its ID including trigger data and execution details.
# List Event Logs
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/logs/list-event-logs
bitcoin/event-manager-api/openapi.json get /logs
Get list of all event logs from Bitcoin event triggers with filtering and pagination options.
# Bitcoin - Event Manager API
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/overview
Bitcoin Event Manager API for real-time blockchain monitoring with programmable webhooks, granular triggers, and customizable event notifications.
Maestro's Bitcoin Event Manager API provides a programmable webhook infrastructure for tracking Bitcoin events like transactions, address activity, and related on-chain changes. It allows developers to configure event managers and attach triggers that define what blockchain events to listen for, delivering relevant data to a specified webhook in real time. This API is ideal for alerting systems, real-time monitoring dashboards, and backend processes that need to react to blockchain state changes.
## Key Features
* **Granular Triggers**: Set up address-based triggers for sender, receiver, or transaction events with optional filters for additional precision.
* **Real-Time Webhook Delivery**: Events are pushed to your provided webhook URL the moment matching transactions are detected.
* **Structured Logging**: Access detailed logs for each event fired, including payload, status, and webhook response.
* **Flexible Lifecycle Control**: Fully manage, update, or delete event managers and their triggers via API endpoints.
## Key Benefits for Developers
Developers can automate transaction monitoring and event handling without running full nodes or maintaining custom indexers. The Event Manager API streamlines webhook setup for Bitcoin applications, enabling responsive, event-driven architectures. The Event Manager API is especially valuable for wallet notifications, transaction confirmations, backend synchronization, and building reactive user experiences without polling the chain.
# Create Trigger
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/create-trigger
bitcoin/event-manager-api/openapi.json post /triggers
Create a new event trigger to monitor Bitcoin blockchain events with customizable filters and webhook notifications.
# Delete Trigger
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/delete-trigger
bitcoin/event-manager-api/openapi.json delete /triggers/{id}
Delete a Bitcoin event trigger by its ID to stop receiving notifications for the configured conditions.
# Get Trigger
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/get-trigger
bitcoin/event-manager-api/openapi.json get /triggers/{id}
Get detailed information about a specific Bitcoin event trigger by its ID including conditions and actions.
# List Trigger Condition Options
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/list-trigger-condition-options
bitcoin/event-manager-api/openapi.json get /triggers/trigger-condition-options
Get list of available trigger condition options for creating Bitcoin event triggers with supported parameters.
# List Triggers
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/list-triggers
bitcoin/event-manager-api/openapi.json get /triggers
List all active event triggers configured for your account, with details about filters, webhooks, and trigger status.
# Update Trigger
Source: https://docs.developer.gomaestro.org/bitcoin/event-manager-api/triggers/update-trigger
bitcoin/event-manager-api/openapi.json put /triggers/{id}
Update an existing Bitcoin event trigger with new conditions, actions, or configuration parameters.
# Overview
Source: https://docs.developer.gomaestro.org/bitcoin/index
Bitcoin blockchain APIs and services from Maestro. Access Blockchain Indexer, Event Manager, Market Price feeds, and more for Bitcoin development.
The **Bitcoin blockchain** is the original decentralized ledger that powers peer-to-peer transactions without needing a trusted third party. Bitcoin uses a [**Proof-of-Work (PoW)**](https://en.wikipedia.org/wiki/Proof_of_work) consensus mechanism to validate and record transactions, offering robust security and transparency. As the most widely recognized and utilized cryptocurrency, Bitcoin has become a cornerstone of the digital financial landscape.
***
## Available Services
Maestro provides the following services, accessible across multiple Bitcoin networks:
## Available Networks
The service is available on the following Bitcoin networks:
| ***Network*** | ***Base URL*** |
| ------------- | ------------------------------------------ |
| **Mainnet** | `https://xbt-mainnet.gomaestro-api.org/v0` |
| **Testnet4** | `https://xbt-testnet.gomaestro-api.org/v0` |
The Maestro API is currently versioned at `v0`. When making a query, `v0 `must be included in your base URL.
# Rune OHLC data
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/dex/rune-ohlc-data
bitcoin/market-price-api/openapi.json get /dexs/ohlc/{dex}/{symbol}
Get OHLC (Open, High, Low, Close) price data for Bitcoin Runes trading pairs on DEXs with historical candles.
# Rune Registry
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/dex/rune-registry
bitcoin/market-price-api/openapi.json get /runes
Get comprehensive registry of all Bitcoin Runes available for trading with metadata and market information.
# Rune Trades for DEX
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/dex/rune-trades-for-dex
bitcoin/market-price-api/openapi.json get /dexs/trades/{dex}/{symbol}
Get recent trade data for Bitcoin Runes on a specific DEX with price, volume, and transaction details.
# Supported DEX options
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/dex/supported-dexs
bitcoin/market-price-api/openapi.json get /dexs
Get list of all supported Bitcoin DEXs for Runes trading with their metadata and trading pairs.
# Bitcoin - Market Price API
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/overview
Maestro’s Market Price API delivers real-time, rollback-protected DEX trading activity alongside historical price mapping for both Bitcoin and Rune assets in USD. It combines deep network-level indexing with robust trade tracking, abstracting away the complexity of UTXO handling.
## Key Features
* **Mempool Awareness:** Provides insight into the latest trades from the mempool for the most dynamic price discovery.
* **Multi-DEX Support:** Query data from supported decentralized exchanges—including Magic Eden and Dotswap—individually or in aggregate.
* **Rollback Protection:** Ensures price accuracy by tracking chain reorganizations and updating data accordingly—no stale or orphaned block data.
* **Dual-Pipeline Indexing:** Separately indexes UTXOs and trades for accuracy and real-time responsiveness.
* **Real-Time DEX Price Feeds:** Continuously updated trade and price data, optimized for wallets, traders, and analytics platforms.
* **Historical Price Mapping:** Access time-series price data (USD) for both Bitcoin and Rune assets, enabling historical analysis and charting.
## Key Benefits for Developers
* Track accurate, chain-verified prices without maintaining your own indexers.
* Build DEX-integrated wallets and apps with reliable, real-time market signals.
* Identify and act on price trends immediately, with confidence the data won’t be invalidated by reorgs.
# BTC price by timestamp
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/prices/btc-price-by-timestamp
bitcoin/market-price-api/openapi.json get /prices/{timestamp}
Get historical Bitcoin price data at a specific timestamp for market analysis and portfolio tracking.
# BTC prices by timestamp
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/prices/btc-prices-by-timestamp
bitcoin/market-price-api/openapi.json post /prices/batch
Get Bitcoin prices for multiple timestamps in a single batch request for historical price analysis.
# Rune price by timestamp
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/prices/rune-price-by-timestamp
bitcoin/market-price-api/openapi.json get /prices/runes/{rune_id}/{timestamp}
Get historical price data for a specific Bitcoin Rune at a particular timestamp for market analysis.
# Rune prices by timestamp
Source: https://docs.developer.gomaestro.org/bitcoin/market-price-api/prices/rune-prices-by-timestamp
bitcoin/market-price-api/openapi.json post /prices/runes/batch
Get historical price data for multiple Bitcoin Runes at specific timestamps in a single batch request.
# Rune UTxOs by Address (mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/addresses/rune-utxos-by-address-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/addresses/{address}/runes/utxos
Get Bitcoin Runes UTXOs for an address with mempool awareness including pending Runes transactions.
# Runes by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/addresses/runes-by-address-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/addresses/{address}/runes
Get Bitcoin Runes holdings for an address with mempool awareness including pending Runes transactions.
# Satoshi Balance by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/addresses/satoshi-balance-by-address-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/addresses/{address}/balance
Get Bitcoin address balance with mempool awareness including pending transactions and real-time updates.
# UTxOs by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/addresses/utxos-by-address-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/addresses/{address}/utxos
Get UTXOs for a Bitcoin address with real-time mempool awareness including pending transactions.
# Mempool Block Fee Rates
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/general/mempool-block-fee-rates
bitcoin/mempool-monitoring-api/openapi.json get /mempool/fee_rates
Get current Bitcoin mempool fee rates across different confirmation targets for optimal transaction pricing.
# Bitcoin - Mempool Monitoring API
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/overview
Maestro's Bitcoin Mempool Monitoring API offers core indexer endpoints with mempool awareness, providing real-time visibility into unconfirmed transactions, enabling developers to build responsive, fee-optimized, and mempool-aware applications without managing their own node infrastructure.
## Key Features
* **Real-Time Transaction Monitoring:** Track unconfirmed transactions instantly as they enter the mempool, providing immediate insights for enhanced user experience.
* **Optimal Fee Estimation:** Analyze current mempool conditions to help users set appropriate transaction fees, ensuring timely confirmations and cost efficiency.
* **Network Health Analysis:** Monitor mempool size and state to detect network congestion and anomalies, aiding in informed decision-making regarding transaction timing.
* **Custom Transaction Selection for Miners:** Utilize mempool data to prioritize transactions with higher fees, maximizing profits during block construction.
* **Global Mempool Synchronization:** Access a unified view of Bitcoin's mempool by aggregating data from multiple nodes worldwide, providing comprehensive network coverage and reducing regional blind spots.
## Global Mempool Infrastructure
Maestro's Global Mempool Sync infrastructure connects to multiple Bitcoin nodes across different geographic regions to provide a unified, comprehensive view of the Bitcoin mempool. This advanced synchronization system offers:
* **Multi-Node Aggregation:** Collects mempool data from geographically distributed Bitcoin nodes.
* **Enhanced Network Coverage:** Provides a more complete picture of unconfirmed transactions across the network.
* **Reduced Blind Spots:** Eliminates regional mempool inconsistencies for accurate global transaction visibility.
* **Real-Time Synchronization:** Continuously updates the unified mempool state for optimal accuracy.
**Performance Benchmark:** Maestro's Global Mempool infrastructure delivers
on average a **5x+ increase** in the number of Bitcoin mempool transactions
that can be indexed compared to traditional single-node approaches, ensuring
comprehensive network coverage and superior data accuracy.
### Global Transaction Propagation
The [Transaction Propagator](/bitcoin/mempool-monitoring-api/transactions/transaction-propagator) endpoint leverages this infrastructure to broadcast transactions to a globally distributed network of peers. This ensures:
* **Faster Network Propagation:** Transactions reach miners worldwide more quickly.
* **Enhanced Reliability:** Multi-node broadcasting reduces the risk of transaction delays or failures.
* **Global Visibility:** Immediate visibility across different geographic regions for optimal confirmation times.
## Key Benefits for Developers
Developers can enhance their applications and improve user experience through real-time blockchain insights and optimized transaction processing. This infrastructure ensures developers have access to the most comprehensive and accurate mempool data available, enabling better decision-making for fee estimation, transaction timing, and network analysis.
# Holders by Rune (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/runes/holders-by-rune-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/assets/runes/{rune}/holders
Get Bitcoin Runes holders with mempool awareness including pending transfers and real-time balance updates.
# Transaction Info with Metaprotocols (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/transactions/transaction-info-with-metaprotocols-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/transactions/{tx_hash}/metaprotocols
Get Bitcoin transaction information with metaprotocol data including Runes and inscriptions, mempool-aware.
# Transaction Output Info (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/transactions/transaction-output-info-mempool-aware
bitcoin/mempool-monitoring-api/openapi.json get /mempool/transactions/{tx_hash}/outputs/{output_index}
Get Bitcoin transaction output information with mempool awareness including pending and confirmed states.
# Transaction Propagator
Source: https://docs.developer.gomaestro.org/bitcoin/mempool-monitoring-api/transactions/transaction-propagator
bitcoin/mempool-monitoring-api/openapi.json post /mempool/transactions/send
Propagates a hex-encoded transaction to a globally distributed network of peers using Maestro's Global Mempool (MGM) system.
# Block Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/block-info
bitcoin/node-rpc-api/openapi.json get /block/{height_or_hash}
Get comprehensive information about a specific Bitcoin block by height or hash including all transaction details.
# Block Miner Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/block-miner-info
bitcoin/node-rpc-api/openapi.json get /block/{height_or_hash}/miner
Get miner information for a specific Bitcoin block including mining pool and coinbase transaction details.
# Block Range Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/block-range-info
bitcoin/node-rpc-api/openapi.json get /block/range/{start_height}/{end_height}
Get information about a range of Bitcoin blocks between specified start and end heights for historical analysis.
# Block Volume
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/block-volume
bitcoin/node-rpc-api/openapi.json get /block/{height_or_hash}/volume
Get Bitcoin block transaction volume data including total value transferred and fee information for the specified block.
# Latest Block
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/latest-block
bitcoin/node-rpc-api/openapi.json get /block/latest
Get detailed information about the latest confirmed Bitcoin block including transactions and metadata.
# Latest Block Height
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/latest-block-height
bitcoin/node-rpc-api/openapi.json get /block/latest/height
Get the current Bitcoin blockchain height (block number) at the chain tip for quick synchronization checks.
# Recent Block Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/recent-block-info
bitcoin/node-rpc-api/openapi.json get /block/recent
Get information about the most recent Bitcoin blocks with default configuration for blockchain monitoring.
# Recent Block Info Count
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/blocks/recent-block-info-count
bitcoin/node-rpc-api/openapi.json get /block/recent/{count}
Get information about the most recent Bitcoin blocks with configurable count limit for blockchain analysis.
# Blockchain Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/general/blockchain-info
bitcoin/node-rpc-api/openapi.json get /general/info
Get Bitcoin blockchain general information including network stats, block height, difficulty, and node status.
# Mempool Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/mempool/mempool-info
bitcoin/node-rpc-api/openapi.json get /mempool/info
Get Bitcoin mempool information including size, bytes, usage, and fee statistics for transaction queue management.
# Mempool Transaction Ancestors
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/mempool/mempool-transaction-ancestors
bitcoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}/ancestors
Get ancestor transactions of a specific Bitcoin transaction in the mempool for dependency analysis.
# Mempool Transaction Descendants
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/mempool/mempool-transaction-descendants
bitcoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}/descendants
Get descendant transactions of a specific Bitcoin transaction in the mempool for dependency tracking.
# Mempool Transaction Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/mempool/mempool-transaction-info
bitcoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}
Get detailed information about a specific Bitcoin transaction in the mempool including fees and dependencies.
# Mempool Transactions
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/mempool/mempool-transactions
bitcoin/node-rpc-api/openapi.json get /mempool/transactions
Get comprehensive list of all transactions currently in the Bitcoin mempool with detailed transaction information.
# Bitcoin - Node RPC API
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/overview
Bitcoin Node RPC API for direct blockchain access with low-latency mempool queries, transaction broadcasting, and full JSON-RPC protocol support.
This API offers direct, low-latency access to Bitcoin full nodes via API (JSON-RPC protocol), giving developers reliable mempool visibility, transaction relay capabilities, and chain data without the hassle of running their own infrastructure.
## Key Features
* **Full JSON-RPC Support:** Access core Bitcoin functionality through RPC calls like getblock, getrawtransaction, sendrawtransaction, etc.
* **Blockchain Data Retrieval:** Developers can fetch detailed information about blocks, transactions, and addresses.
* **Mempool Insight:** Query unconfirmed transactions for faster, more responsive, real-time data access.
* **High-Availability:** Enterprise-grade infrastructure ensures uptime, sync accuracy and fast transaction relay.
## Key Benefits for Developers
* Skip the operational complexity and computational overhead of maintaining self-hosted Bitcoin nodes.
* Query mempool and chain data to power wallets, explorers, and backends with minimal latency.
* Broadcast and verify transactions with trusted relay endpoints.
* Build production-ready Bitcoin apps without worrying about node health, bandwidth, or reorg handling.
# Decode PSBT
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/decode-psbt
bitcoin/node-rpc-api/openapi.json post /transaction/psbt/decode
Decode a Partially Signed Bitcoin Transaction (PSBT) to analyze inputs, outputs, and signing requirements.
# Decode Transaction
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/decode-transaction
bitcoin/node-rpc-api/openapi.json post /transaction/decode
Decode a raw Bitcoin transaction hex string to analyze inputs, outputs, and transaction structure.
# Estimate Fee
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/estimate-fee
bitcoin/node-rpc-api/openapi.json get /transaction/estimatefee/{blocks}
Estimate Bitcoin transaction fee for confirmation within a specified number of blocks for optimal pricing.
# Recent Transactions
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/recent-transactions
bitcoin/node-rpc-api/openapi.json get /transaction/recent
Get list of recent Bitcoin transactions from the blockchain with transaction details and metadata.
# Recent Transactions Count
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/recent-transactions-count
bitcoin/node-rpc-api/openapi.json get /transaction/recent/{count}
Get a specified number of recent Bitcoin transactions from the blockchain with configurable limit.
# Send Transaction
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/send-transaction
bitcoin/node-rpc-api/openapi.json post /transaction/submit
Submit a signed Bitcoin transaction to the network for processing and inclusion in the blockchain.
# Transaction Hex
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/transaction-hex
bitcoin/node-rpc-api/openapi.json get /transaction/{tx_hash}/hex
Get the raw hex-encoded Bitcoin transaction data by transaction hash for low-level transaction analysis.
# Transaction Info
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/transaction-info
bitcoin/node-rpc-api/openapi.json get /transaction/{tx_hash}
Get detailed Bitcoin transaction information including inputs, outputs, fees, and confirmation status by transaction hash.
# Transaction Info Batch
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/transaction-info-batch
bitcoin/node-rpc-api/openapi.json post /transaction/batch
Get detailed information for multiple Bitcoin transactions in a single batch request for efficient processing.
# Transaction Info Hex
Source: https://docs.developer.gomaestro.org/bitcoin/node-rpc-api/transactions/transaction-info-hex
bitcoin/node-rpc-api/openapi.json post /transaction/hex
Get Bitcoin transaction information from raw hexadecimal transaction data for detailed analysis.
# Open Source Tools
Source: https://docs.developer.gomaestro.org/bitcoin/open-source-tools
Explore Maestro's open-source Bitcoin infrastructure tools including our MCP server, Symphony indexer, Esplora proxy, and metaprotocols canister.
At Maestro, we believe in the power of open source to accelerate Bitcoin development and foster innovation across the ecosystem. Our commitment to open source extends beyond just providing APIs—we actively contribute tools, libraries, and infrastructure that help developers build faster and more efficiently on Bitcoin.
### **Maestro MCP Server**
A [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that enables AI language models to interact directly with Bitcoin blockchain data through natural language. Perfect for building Bitcoin agents and AI-powered applications.
* **Repository**: [maestro-mcp-server](https://github.com/maestro-org/maestro-mcp-server)
* **Key Features**: Streamable HTTP MCP server, API key authentication, multi-API support
* **Use Cases**: AI agents, LLM-powered Bitcoin applications, conversational blockchain interfaces
* **Networks**: Bitcoin mainnet and testnet4
* **Tutorial**: [MCP: Interact with Bitcoin via an LLM](/bitcoin/tutorials-and-guides/mcp-interact-with-bitcoin-via-an-llm)
### **Maestro MCP Client Examples**
Ready-to-use client implementations and examples for integrating the Maestro MCP server with popular AI platforms and development tools.
* **Repository**: [maestro-mcp-client-examples](https://github.com/maestro-org/maestro-mcp-client-examples)
* **Supported Clients**: Claude Desktop, Cursor IDE, basic HTTP clients
* **Key Features**: Drop-in configurations, authentication handling, debugging tools
* **Documentation**: Complete setup guides for each supported platform
### **Maestro Symphony**
A fast, mempool-aware, and extensible Bitcoin indexer and API server. Symphony provides a framework for indexing UTXOs, metaprotocols, and any other onchain activity with custom indexing capabilities and continuously updated state snapshots for reducing node sync times.
* **Repository**: [maestro-symphony](https://github.com/maestro-org/maestro-symphony)
* **Key Features**: Custom indexers, mempool awareness, rollback handling, extensible framework
* **Built-in Indexers**: Runes, UTXOs by address, transaction counts
* **Networks**: Bitcoin mainnet, testnet4, and regtest
* **Tutorial**:
* [How to Add a Custom Index in Maestro Symphony](/bitcoin/tutorials-and-guides/how-to-add-a-custom-index-in-maestro-symphony)
* [How to Use Pre-Synced Snapshots in Maestro Symphony](/bitcoin/tutorials-and-guides/how-to-use-pre-synced-snapshots-in-maestro-symphony)
### **Maestro Esplora Proxy**
An authenticated proxy server that enables BDK (Bitcoin Development Kit) applications and other Esplora clients to seamlessly connect to Maestro's [Esplora API](/bitcoin/esplora-api/overview) with automatic API key injection.
* **Repository**: [maestro-esplora-proxy](https://github.com/maestro-org/maestro-esplora-proxy)
* **Key Features**: Transparent API key injection, BDK compatibility, local proxy server
* **Use Cases**: BDK wallet integration, [Mempool.space](https://mempool.space) migration
* **Tutorial**: [Mempool.space Migration Guide](/bitcoin/tutorials-and-guides/mempool-space-migration-guide)
### **Bitcoin Metaprotocols Canister**
An [Internet Computer](https://internetcomputer.org/) (ICP) canister that provides indexing services for Bitcoin metaprotocols, specifically focused on Bitcoin inscriptions and ordinals data.
* **Repository**: [maestro-bitcoin-metaprotocols-canister](https://github.com/maestro-org/maestro-bitcoin-metaprotocols-canister)
* **Key Features**: Address inscriptions lookup, UTXO inscriptions and collection metadata
* **Integration**: Leverages Maestro's APIs for Bitcoin metaprotocol data
* **Platform**: Internet Computer Protocol (ICP)
* **Tutorial**: [Metaprotocols Canister Usage Guide](/bitcoin/tutorials-and-guides/metaprotocols-canister-usage-guide)
## Community & Collaboration
### **Developer Resources**
All our open-source projects include:
* 📚 Comprehensive documentation and setup guides
* 🛠️ Working examples and tutorials
* 🐛 Issue tracking and community support
* 📄 Open source licenses (Apache 2.0)
### **Getting Involved**
We welcome contributions from the global developer community:
* **Star our repositories** to stay updated on new releases
* **Submit issues** for bugs, feature requests, or questions
* **Contribute code** through pull requests
* **Join our Discord** for real-time community support
* **Share your projects** built with Maestro's open-source tools.
***
Open source is fundamental to Bitcoin's ethos of decentralization, transparency, and community-driven innovation. By contributing our tools and infrastructure to the open-source ecosystem, we help:
* **Lower barriers to entry** for Bitcoin developers
* **Accelerate innovation** through shared tools and libraries
* **Build trust** through transparent, auditable code
* **Foster collaboration** across the Bitcoin development community
* **Enable customization** for specific use cases and requirements
Join us in building the future of Bitcoin infrastructure. Explore our repositories, contribute to our projects, and help us create better tools for the entire Bitcoin ecosystem.
# SDKs
Source: https://docs.developer.gomaestro.org/bitcoin/sdks
Bitcoin SDKs and client libraries for multiple programming languages to integrate Maestro's Bitcoin APIs into your applications.
Maestro is dedicated to empowering developer communities by offering SDKs in multiple programming languages. We continually expand and refine these SDKs, and we welcome contributions from developers to help shape Maestro's capabilities. Your insights and feedback are invaluable in ensuring our tools meet language-specific needs and unlock new possibilities.
***
## Available SDKs
Currently, Maestro offers SDKs in the following languages:
| **SDK** | |
| -------------- | ------------------------------------------------------------- |
| **Haskell** | Coming Soon |
| **TypeScript** | Coming Soon |
| **Go** | [View](https://github.com/maestro-org/maestro-bitcoin-go-sdk) |
| **Rust** | Coming Soon |
| **Python** | Coming Soon |
***
## Community Call for Contributors
Our SDKs are constantly evolving to keep pace with the rapid expansion of Maestro's services, and we rely on community support to maintain and enhance them. We welcome contributions to add new API integrations, improve existing features, and ensure our tools stay up-to-date.
These SDKs are open-source, reflecting our commitment to building a vibrant ecosystem of tools and APIs that enhance the Maestro developer experience. Your contributions play a crucial role in making this possible.
**Contribute Now:** [github.com/maestro-org](https://github.com/maestro-org)
# Best in Slot Migration Guide
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/best-in-slot-migration-guide
Complete migration guide from Best in Slot (BiS) to Maestro with endpoint mapping, request structure changes, and code examples.
This guide will walk you through migrating from [Best in Slot (BiS)](https://bestinslot.xyz) to Maestro.
Transitioning from BiS involves mapping endpoints to their Maestro counterparts and adjusting request structures accordingly.
Table of Contents:
* [Prerequisites](#prerequisites)
* [Base URL](#base-url)
* [Headers](#headers)
* [Endpoints](#endpoints)
* [Key Differences](#key-differences)
## Prerequisites
1. Obtain a Maestro [API key](https://dashboard.gomaestro.org).
2. Review [Bitcoin API documentation](/bitcoin).
### Base URL
| **Network** | **BiS** | **Maestro** |
| ----------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
| Mainnet | [https://api.bestinslot.xyz/v3](https://api.bestinslot.xyz/v3) | [https://xbt-mainnet.gomaestro-api.org/v0](https://xbt-mainnet.gomaestro-api.org/v0) |
| Testnet4 | [https://testnet.api.bestinslot.xyz](https://testnet.api.bestinslot.xyz) | [https://xbt-testnet.gomaestro-api.org/v0](https://xbt-testnet.gomaestro-api.org/v0) |
| Signet | [https://signet.api.bestinslot.xyz](https://signet.api.bestinslot.xyz) | Not currently supported |
### Headers
| **BiS** | **Maestro** |
| ----------- | ----------- |
| `x-api-key` | `api-key` |
### Examples
```sh Bash theme={null}
# Maestro
curl -s 'https://xbt-mainnet.gomaestro-api.org/v0/assets/inscriptions/6d1cefe69ad686d6153bd1a6d34c6d55c6e3162cb2fac9b58a8d9d9e9fda13c6i0' \
--header 'Accept: application/json' \
--header 'api-key: '
# BiS
curl -s 'https://api.bestinslot.xyz/v3/inscription/single_info_id?inscription_id=6d1cefe69ad686d6153bd1a6d34c6d55c6e3162cb2fac9b58a8d9d9e9fda13c6i0' \
--header 'Accept: application/json' \
--header 'x-api-key: '
```
### Endpoints
This section details endpoint mapping by the following *categories*:
* [BIP-322]()
* [Bitmap]()
* [BRC-20]()
* [Collections]()
* [Inscriptions]()
* [Mempool]()
* [Runes]()
* [Sats Routes]()
* [Wallets]()
### BIP-322
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/bip-322)
| | BiS | Maestro |
| ----- | ------------------------- | ------- |
| Title | Verify BIP-322 Signatures | - |
| Route | `/v3/bip322/verify` | - |
### Bitmap
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap)
| | BiS | Maestro |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
| Title | [Get Bitmap Holders](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-holders) | - |
| Route | `/v3/bitmap/holders` | - |
| Title | [Get Bitmap Inscriptions](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-inscriptions) | - |
| Route | `/v3/bitmap/inscription` | - |
| Title | [Get Bitmap Sales Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-sales-information) | - |
| Route | `/v3/bitmap/sales_info?marketplace_type=...` | - |
| Title | [Get Bitmap Market Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-market-information) | - |
| Route | `/v3/bitmap/market_info` | - |
| Title | [Get Bitmap Listings](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-listings) | - |
| Route | `/v3/bitmap/listings` | - |
| Title | [Get Bitmap Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/bitmap#get-bitmap-activity) | - |
| Route | `/v3/bitmap/activity` | - |
### BRC-20
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/brc-20)
| | BiS | Maestro |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Title | [BRC-20 Balances of Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#brc-20-balances-of-wallet) | [BRC20 by Address](/bitcoin/blockchain-indexer-api/addresses/brc20-by-address) |
| Route | `/v3/brc20/wallet_balances?address=...` | `/addresses/:address/brc20` |
| Title | [Get BRC-20 Tickers](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-tickers) | [List BRC20](/bitcoin/blockchain-indexer-api/brc20/list-brc20) |
| Route | `/v3/brc20/tickers` | `/assets/brc20` |
| Title | [Get BRC-20 Minting Ticker Count](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-minting-ticker-count) | - |
| Route | `/v3/brc20/ticker_cnt` | - |
| Title | [Get BRC-20 Ticker Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-ticker-information) | [BRC20 Info](/bitcoin/blockchain-indexer-api/brc20/brc20-info) |
| Route | `/v3/brc20/ticker_info?ticker=...` | `/assets/brc20/:ticker` |
| Title | [Get BRC-20 Valid Transfer Notes](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-valid-transfer-notes) | - |
| Route | `/v3/brc20/validtxnotes?ticker=...` | - |
| Title | [Get BRC-20 Valid Transfer Notes of a Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-valid-transfer-notes-of-a-wallet) | [BRC20 Transfer Inscriptions by Address](/bitcoin/blockchain-indexer-api/addresses/brc20-transfer-inscriptions-by-address) |
| Route | `/v3/brc20/validtxnotes_wallet?address=...` | `/addresses/:address/brc20/transfer_inscriptions` |
| Title | [BRC-20 Validity Check](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#brc-20-validity-check) | - |
| Route | `/v3/brc20/single_info?inscription_id=...` | - |
| Title | [BRC-20 Batch Validity Check](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#brc-20-batch-validity-check) | - |
| Route | `/v3/brc20/batch_info` | - |
| Title | [Get BRC-20 Ticker Holders](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-ticker-holders) | [BRC20 Holders](/bitcoin/blockchain-indexer-api/brc20/brc20-holders) |
| Route | `/v3/brc20/holders?ticker=...` | `/assets/brc20/:ticker/holders` |
| Title | [Get BRC-20 Event from TxId](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-event-from-txid) | - |
| Route | `/v3/brc20/event_from_txid?txid=...` | - |
| Title | [Get BRC-20 Sales Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-sales-information) | - |
| Route | `/v3/brc20/sales_info?ticker=...` | - |
| Title | [Get BRC-20 Market Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-market-information) | - |
| Route | `/v3/brc20/market_info?ticker=...` | - |
| Title | [Get BRC-20 Listings](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-listings) | - |
| Route | `/v3/brc20/listings?ticker=...` | - |
| Title | [Get BRC-20 Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-activity) | [Activity by Inscription](/bitcoin/blockchain-indexer-api/inscriptions/activity-by-inscription) |
| Route | `/v3/brc20/activity?ticker=...` | `/assets/inscriptions/:inscription_id/activity` |
| Title | [Get BRC-20 Wallet Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-wallet-activity) | [Inscriptions by Address](/bitcoin/blockchain-indexer-api/addresses/inscriptions-by-address) |
| Route | `/v3/brc20/wallet_activity?wallet_addr=...` | `/addresses/:address/inscriptions` |
| Title | [Get BRC-20 Activity on Block](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-activity-on-block) | [Inscription Activity by Block](/bitcoin/blockchain-indexer-api/blocks/inscription-activity-by-block) |
| Route | `/v3/brc20/activity_on_block?block_height=...` | `/blocks/:height_or_hash/inscriptions/activity` |
| Title | [Get BRC-20 Balance on Block](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-balance-on-block) | - |
| Route | `/v3/brc20/balance_on_block?block_height=...` | - |
| Title | [Get BRC-20 Balance on Block Batch](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-balance-on-block-batch) | - |
| Route | `/v3/brc20/batch_balance_on_block` | - |
| Title | [Get BRC-20 All Valid Tx Notes](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-all-valid-tx-notes) | - |
| Route | `/v3/brc20/all_validtxnotes` | - |
| Title | [Get BRC-20 All Balances](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/brc-20#get-brc-20-all-balances) | - |
| Route | `/v3/brc20/all_balances` | - |
### Collections
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections)
| | BiS | Maestro |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Title | [Get collections](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collections) | - |
| Route | `/v3/collection/collections` | - |
| Title | [Get Collection Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-information) | [Collection Metadata by Collection Symbol](/bitcoin/blockchain-indexer-api/inscriptions/collection-metadata-by-collection-symbol) |
| Route | `/v3/collection/info?slug=...` | `/assets/collections/:collection_symbol/metadata` |
| Title | [Get Collection Holders](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-holders) | - |
| Route | `/v3/collection/holders?slug=...` | - |
| Title | [Get Collection Inscriptions](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-inscriptions) | [Inscription IDs by Collection Symbol](/bitcoin/blockchain-indexer-api/inscriptions/inscription-ids-by-collection-symbol) |
| Route | `/v3/collection/inscriptions?slug=...` | `/assets/collections/:collection_symbol/inscriptions` |
| Title | [Get Collection Sales Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-sales-information) | - |
| Route | `/v3/collection/sales_info?slug=...` | - |
| Title | [Get Collection Market Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-market-information) | - |
| Route | `/v3/collection/market_info?slug=...` | - |
| Title | [Get Collection Listings](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-listings) | - |
| Route | `/v3/collection/listings?slug=...` | - |
| Title | [Get Collection Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/collections#get-collection-activity) | - |
| Route | `/v3/collection/activity?slug=...` | - |
### Inscriptions
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/inscriptions)
| | BiS | Maestro |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Title | [Get Inscription Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-inscription-information) | [Inscription Info](/bitcoin/blockchain-indexer-api/inscriptions/inscription-info) |
| Route | `/v3/inscription/single_info_id?inscription_id=...` | `/assets/inscriptions/:inscription_id` |
| Title | [Get Batch Inscription Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-batch-inscription-information) | - |
| Route | `/v3/inscription/batch_info` | - |
| Title | [Get Global Inscription Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-global-inscription-information) | - |
| Route | `/v3/inscription/global_info` | - |
| Title | [Request Render Refresh](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#request-render-refresh) | - |
| Route | `/v3/inscription/render_refresh?inscription_id=...` | - |
| Title | [Get Inscription Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-inscription-activity) | [Activity by Inscription](/bitcoin/blockchain-indexer-api/inscriptions/activity-by-inscription) |
| Route | `/v3/inscription/activity?inscription_id=...` | `/assets/inscriptions/:inscription_id/activity` |
| Title | [Get Inscriptions in Transaction](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-inscriptions-in-transaction) | [Inscription Activity by Transaction](/bitcoin/blockchain-indexer-api/transactions/inscription-activity-by-transaction) |
| Route | `/v3/inscription/in_transaction?tx_id=...` | `/transactions/:tx_hash/inscriptions/activity` |
| Title | [Get Inscription Activity in Block](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-inscription-activity-in-block) | [Inscription Activity by Block](/bitcoin/blockchain-indexer-api/blocks/inscription-activity-by-block) |
| Route | `/v3/inscription/activity_on_block?block_height=...` | `/blocks/:height_or_hash/inscriptions/activity` |
| Title | [Get New Inscriptions in Block](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/inscriptions#get-new-inscriptions-in-block) | - |
| Route | `/v3/inscription/new_inscriptions_in_block?block_height=...` | - |
### Mempool
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/mempool)
| | BiS | Maestro |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Title | [Get All UTXOs of Bitcoin Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-all-utxos-of-bitcoin-wallet) | [UTxOs by Address (Mempool-aware)](/bitcoin/mempool-monitoring-api/addresses/utxos-by-address-mempool-aware) |
| Route | `/v3/mempool/all_utxos_of_wallet?wallet_addr=...` | `/mempool/addresses/:address/utxos` |
| Title | [Get Cardinal UTXOs of Bitcoin Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-cardinal-utxos-of-bitcoin-wallet) | - |
| Route | `/v3/mempool/cardinal_utxos_of_wallet?wallet_addr=...` | - |
| Title | [Get Ordinal UTXOs of Bitcoin Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-ordinal-utxos-of-bitcoin-wallet) | - |
| Route | `/v3/mempool/ordinal_utxos_of_wallet?wallet_addrs=...` | - |
| Title | [Get Runic UTXOs of Bitcoin Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-runic-utxos-of-bitcoin-wallet) | [Rune UTxOs by Address and Rune (Mempool-aware)](/bitcoin/mempool-monitoring-api/addresses/rune-utxos-by-address-mempool-aware) |
| Route | `/v3/mempool/runic_utxos_of_wallet?wallet_addr=...` | `/mempool/addresses/:address/runes/utxos` |
| Title | [Get Cardinal Balance of Bitcoin Wallet](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-cardinal-balance-of-bitcoin-wallet) | - |
| Route | `/v3/mempool/cardinal_balance_of_wallet?wallet_addr=...` | - |
| Title | [Get All Cardinal UTXOs in Mempool](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-all-cardinal-utxos-in-mempool) | - |
| Route | `/v3/mempool/all_cardinal_utxos` | - |
| Title | [Get All Ordinal UTXOs in Mempool](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-all-ordinal-utxos-in-mempool) | Access Mempool Transactions |
| Route | `/v3/mempool/all_ordinal_utxos` | - |
| Title | [Get All Runic UTXOs in Mempool](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-all-runic-utxos-in-mempool) | Access Mempool Transactions |
| Route | `/v3/mempool/all_runic_utxos` | - |
| Title | [Get All Runes Events in Mempool](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/mempool#get-all-runes-events-in-mempool) | - |
| Route | `/v3/mempool/transactions` | - |
### Runes
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/runes)
| | BiS | Maestro |
| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Title | [Runes Testnet4 Faucet (only on testnet)](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-testnet4-faucet-only-on-testnet) | - |
| Route | `/v3/runes/testnet_faucet?address=...` | - |
| Title | [Runes Tickers](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-tickers) | [List Runes](/bitcoin/blockchain-indexer-api/runes/list-runes) |
| Route | `/v3/runes/tickers` | `/assets/runes` |
| Title | [Runes Ticker Count](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-ticker-count) | - |
| Route | `/v3/runes/ticker_cnt` | - |
| Title | [Runes Single Ticker Info](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-single-ticker-info) | [Runes Info](/bitcoin/blockchain-indexer-api/runes/runes-info) |
| Route | `/v3/runes/ticker_info?rune_Route=...` | `/assets/runes/:rune` |
| Title | [Get Runes Sales Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#get-runes-sales-information) | [Rune Trades for DEX](/bitcoin/market-price-api/dex/rune-trades-for-dex) |
| Route | `/v3/runes/sales_info?rune_Route=...` | `/markets/dexs/trades/:dex/:symbol` |
| Title | [Get Runes Market Information](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#get-runes-market-information) | - |
| Route | `/v3/runes/market_info?rune_Route=...` | - |
| Title | [Runes Listings](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-listings) | - |
| Route | `/v3/runes/listings?rune_id=...` | - |
| Title | [Runes Holders](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-holders) | [Holders by Rune](/bitcoin/blockchain-indexer-api/runes/holders-by-rune) |
| Route | `/v3/runes/holders?rune_Route=...` | `/assets/runes/:rune/holders` |
| Title | [Runes Single Output Info](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-single-output-info) | - |
| Route | `/v3/runes/output_info?output=...` | - |
| Title | [Runes Batch Output Info](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-batch-output-info) | - |
| Route | `/v3/runes/batch_output_info` | - |
| Title | [Runes Wallet Balances](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-wallet-balances) | [Runes by Address](/bitcoin/blockchain-indexer-api/addresses/runes-by-address) |
| Route | `/v3/runes/wallet_balances?address=...` | `/addresses/:address/runes` |
| Title | [Runes Wallet Valid Outputs](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-wallet-valid-outputs) | [Rune UTXOs by Address](/bitcoin/blockchain-indexer-api/addresses/rune-utxos-by-address) |
| Route | `/v3/runes/wallet_valid_outputs?address=...` | `/addresses/:address/runes/utxos` |
| Title | [Runes Wallet Valid Outputs Single Rune](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-wallet-valid-outputs-single-rune) | [Rune UTXOs by Address](/bitcoin/blockchain-indexer-api/addresses/rune-utxos-by-address) |
| Route | `/v3/runes/wallet_valid_outputs_single_rune?address=...&rune_id=...` | `/addresses/:address/runes/utxos?rune=...` |
| Title | [Runes Valid Outputs](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-valid-outputs) | - |
| Route | `/v3/runes/valid_outputs?rune_Route=...` | - |
| Title | [Runes Wallet Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-wallet-activity) | - |
| Route | `/v3/runes/wallet_activity?address=...` | - |
| Title | [Runes Activity of a Ticker](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-activity-of-a-ticker) | [Activity by Inscription](/bitcoin/blockchain-indexer-api/inscriptions/activity-by-inscription) |
| Route | `/v3/runes/activity?rune_Route=...` | `/assets/inscriptions/:inscription_id/activity` |
| Title | [Runes Activity in a Single Tx](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-activity-in-a-single-tx) | [Inscription Activity by Transaction](/bitcoin/blockchain-indexer-api/transactions/inscription-activity-by-transaction) |
| Route | `/v3/runes/events_on_tx?txid=...` | `/transactions/:tx_hash/inscriptions/activity` |
| Title | [Runes Historical Total Supply](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-historical-total-supply) | [Runes Info](/bitcoin/blockchain-indexer-api/runes/runes-info) |
| Route | `/v3/runes/historical_total_supply?rune_Route=...` | `/assets/runes/:rune` |
| Title | [Runes All Activity on Block Height](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-all-activity-on-block-height) | [Inscription Activity by Block](/bitcoin/blockchain-indexer-api/blocks/inscription-activity-by-block) |
| Route | `/v3/runes/activity_on_block?block_height=...` | `/blocks/:height_or_hash/inscriptions/activity` |
| Title | [Runes All ID Route Pairs](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-all-id-Route-pairs) | [List Runes](/bitcoin/blockchain-indexer-api/runes/list-runes) |
| Route | `/v3/runes/all_id_Route_pairs` | `/assets/runes` |
| Title | [Runes Historical Prices](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/runes#runes-historical-prices) | [Rune OHLC Data](/bitcoin/market-price-api/dex/rune-ohlc-data) |
| Route | `/v3/runes/historical_prices` | `/markets/dexs/ohlc/:dex/:symbol` |
### Sats Routes
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/sats-Routes)
| | BiS | Maestro |
| ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| Title | [Sats Validity Check](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/sats-Routes#sats-validity-check) | - |
| Route | `/v3/sats/validity_check?inscription_id=...` | - |
| Title | [Sats Forward Lookup](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/sats-Routes#sats-forward-lookup) | - |
| Route | `/v3/sats/forward_lookup?sats_Route=...` | - |
| Title | [Sats Reverse Lookup](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/sats-Routes#sats-reverse-lookup) | - |
| Route | `/v3/sats/reverse_lookup?address=...` | - |
| Title | [Get Sats Activity](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/sats-Routes#get-sats-activity) | - |
| Route | `/v3/sats/activity` | - |
### Wallets
[BiS Reference](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet%2Btestnet%2Bsignet/wallets)
[Maestro Reference](/bitcoin/wallet-api/overview)
| | BiS | Maestro |
| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| Title | [BTC Testnet4 Faucet (only on testnet)](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#btc-testnet4-faucet-only-on-testnet) | - |
| Route | `/v3/wallet/testnet_faucet` | - |
| Title | [Get Wallet Inscriptions](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-inscriptions) | [Inscriptions by Address](/bitcoin/blockchain-indexer-api/addresses/inscriptions-by-address) |
| Route | `/v3/wallet/inscriptions?address=...` | `/addresses/:address/inscriptions` |
| Title | [Get Batch Wallet Inscriptions](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-batch-wallet-inscriptions) | - |
| Route | `/v3/wallet/inscriptions_batch` | - |
| Title | [Get Wallet Collections](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-collections) | - |
| Route | `/v3/wallet/collections` | - |
| Title | [Get Wallet Verified Sats](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-verified-sats) | - |
| Route | `/v3/wallet/sats_Routes` | - |
| Title | [Get Wallet Listings](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-listings) | - |
| Route | `/v3/wallet/listings?address=...` | - |
| Title | [Get Wallet Activity (Inscriptions Only)](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-activity-inscriptions-only) | - |
| Route | `/v3/wallet/activity?address=...` | - |
| Title | [Get Wallet Global Activity (Inscriptions, BRC20 and Runes)](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-global-activity-inscriptions-brc20-and-runes) | - |
| Route | `/v3/wallet/global_activity?address=...` | - |
| Title | [Get Wallet Metadata](https://docs.bestinslot.xyz/reference/api-reference/ordinals-and-brc-20-and-runes-and-bitmap-v3-api-mainnet+testnet+signet/wallets#get-wallet-metadata) | - |
| Route | `/v3/wallet/metadata?address=...` | - |
### Key Differences
* **API Structure**: BiS uses RESTful endpoints with specific paths, while Maestro offers both RESTful as well as *JSON-RPC* interfaces.
* **Data Representation**: Maestro's responses may differ in structure; ensure to adapt your data parsing logic accordingly.
***
## 🎉 You’re Done!
You now have walked through a guide on how to migrate from Best-in-Slot to Maestro as your de-facto on-chain data provider.
### **Additional Resources**
* **Maestro Documentation**: [https://docs.developer.gomaestro.org](https://docs.developer.gomaestro.org)
* **BiS Documentation**: [https://docs.bestinslot.xyz](https://docs.bestinslot.xyz)
Be sure to review Maestro's rate limits and [pricing tiers](https://www.gomaestro.org/pricing) to select the plan that best fits your application's needs.
***
**Support**
If you are experiencing any trouble with the above, reach out on Discord.
# How to Add a Custom Index in Maestro Symphony
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/how-to-add-a-custom-index-in-maestro-symphony
Step-by-step guide to create custom Bitcoin indexing logic in Maestro Symphony for UTXOs, metaprotocols, and onchain activity.
The [Maestro Symphony](https://github.com/maestro-org/maestro-symphony) is a fast, mempool-aware, and extensible Bitcoin indexer and API server. It provides a framework for indexing UTXOs, metaprotocols, and any other onchain activity.
This guide explains how to construct and integrate custom logic to be extracted and persisted during transaction processing by the Maestro Symphony indexer.
## Steps
### 1. Create a New Indexer Project and Initialize it
After [forking](https://github.com/maestro-org/maestro-symphony/fork) the repo, create a file or module in the `/custom` subdirectory.
*Setup a new project directory*
```sh Bash theme={null}
mkdir -p src/sync/stages/index/indexers/custom/my_proj
```
*Create the files (plus any extra that you need)*
```sh Bash theme={null}
touch mod.rs indexer.rs tables.rs
```
*Generate the* `mod.rs` (and add your related files)
```sh Bash theme={null}
pub mod indexer;
pub mod tables;
```
It is recommended to split logic across multiple files (see the `runes` indexer for reference).
***
### 2. Register a New Enum Variant
Create a new `TransactionIndexerType` enum variant:
```txt Text theme={null}
src/sync/stages/index/indexers/custom/my_proj/mod.rs
```
Add your variant **only at the end**. Example:
```rust Rust theme={null}
/// Unique u8 for each transaction indexer, used in the key encodings. Do not modify, only add new
/// variants.
#[derive(Clone, Copy, Encode, Decode, PartialEq, Eq, std::hash::Hash, Debug)]
#[repr(u8)]
pub enum TransactionIndexerType {
TxCountByAddress = 0,
Runes = 1,
UtxosByAddress = 2,
MyProjIndexer = 3, // my_proj indexer
}
```
⚠️ **Do not reorder or delete existing variants**. They are encoded as u8 and reused in key encodings. Any change will corrupt existing indexed data unless starting from a clean state.
***
### 3. Define the Indexer Object
Implement a struct that represents your indexer and implements the `ProcessTransaction` trait.
```rust Rust theme={null}
pub struct MyProjIndexer {
start_height: u64,
track_inputs: bool,
}
impl ProcessTransaction for MyProjIndexer {
fn process_tx(
&mut self,
task: &mut IndexerTask,
tx: &Transaction,
ctx: &IndexerContext,
) -> Result<(), Error> {
...
}
}
```
Where:
* `task`: read/write interface to storage
* `tx`: the transaction being processed
* `ctx`: context with input resolver, block height, hash, network, arbitrary data to outputs, etc.
A *resolver* lets you provide a transcation input UTXO reference and receive the corresponding transaction output UTXO.
Reference:
[`runes/indexer.rs#L41-L61`](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/runes/indexer.rs#L41-L61)
***
### 4. Implement and Handle Config
Your indexer should expose a `new()` function that takes a configuration struct and returns an instance of the indexer.
This enables configuration-driven behavior such as start\_height, track\_inputs, or custom logic.
```rust Rust theme={null}
impl MyProjIndexer {
pub fn new(config: MyProjIndexerConfig) -> Result {
let start_height = config.start_height;
let track_inputs = config.track_inputs;
Ok(Self {
start_height,
track_inputs,
})
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct MyProjIndexerConfig {
#[serde(default)]
pub start_height: u64,
#[serde(default)]
pub track_inputs: bool,
}
```
The `MyProjIndexerConfig` struct should define fields relevant to your indexer.
[Reference](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/runes/indexer.rs#L41-L72)
### 5. Define Storage Tables
Define custom key-value tables for storing the new data using the `define_indexer_table!` macro.
```txt Text theme={null}
src/sync/stages/index/indexers/custom/my_proj/tables.rs
```
Example:
```rust Rust theme={null}
define_indexer_table! {
name: MyProjIndexerKV,
key_type: ScriptPubKey,
value_type: u64,
indexer: TransactionIndexer::MyProjIndexer,
table: 0
}
```
```rust Rust theme={null}
// key-value:
address => tx_count
```
Each table must:
* Have a unique `table` ID
* Use your new enum variant
* Use key/value types that implement `Encode` and `Decode`
Reference:
[`tx_count_by_address.rs#L20-L26`](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/tx_count_by_address.rs#L20-L26)
***
### 6. Implement `ProcessTransaction`
Process each transaction by:
* Iterating over inputs, ouputs, resolving UTXOs, etc.
* Reading/writing to storage with
```rust Rust theme={null}
impl ProcessTransaction for MyProjIndexer {
fn process_tx(
&mut self,
task: &mut IndexerTask,
tx: &Transaction,
ctx: &IndexerContext,
) -> Result<(), Error> {
let TransactionWithId { tx, .. } = tx;
...
// retrieve value from KV store
task.get::(&key)?;
...
// set value in KV store
task.put::(&key, &value)?;
...
}
}
```
Example:
[`tx_count_by_address.rs#L38-L76`](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/tx_count_by_address.rs#L38-L76)
***
### 7. Register Module and Add to Factory
Add your `my_proj` module in `custom/mod.rs`:
```rust Rust theme={null}
pub mod id;
pub mod runes;
pub mod tx_count_by_address;
pub mod utxos_by_address;
pub mod my_proj; // my_proj indexer
```
[**Reference**](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/mod.rs#L11C1-L14C26)
Next, add your variant to:
* The `TransactionIndexerFactory` enum
* The `create_indexer` function
```rust Rust theme={null}
#[derive(Clone, Debug, Deserialize)]
#[serde(tag = "type")]
pub enum TransactionIndexerFactory {
TxCountByAddress,
Runes(RunesIndexerConfig),
UtxosByAddress,
MyProjIndexer(MyProjIndexerConfig),
}
impl TransactionIndexerFactory {
pub fn create_indexer(self) -> Result, Error> {
match self {
Self::TxCountByAddress => Ok(Box::new(TxCountByAddressIndexer::new())),
Self::Runes(c) => Ok(Box::new(RunesIndexer::new(c)?)),
Self::UtxosByAddress => Ok(Box::new(UtxosByAddressIndexer::new())),
Self::MyProjIndexer(c) => Ok(Box::new(MyProjIndexer::new(c)?)),
}
}
}
```
***
### 8. (Optional) Attach Metadata to UTXOs
To persist data across transactions using UTXOs (e.g., inscriptions, runes), you can attach metadata during output processing:
```rust Rust theme={null}
task.attach_metadata_to_output(vout, &data)?;
```
Later, during input resolution:
```rust Rust theme={null}
let meta = ctx.resolver.resolve_input(input)?.metadata::()?;
```
Examples:
* [**Attach metadata**](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/runes/indexer.rs#L256-L260)
* [**Retrieve metadata**](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/runes/indexer.rs#L318-L321)
*This saves storage and avoids manually tracking UTXOs elsewhere.*
***
For working examples, refer to:
* [`runes`](https://github.com/maestro-org/maestro-symphony/tree/main/src/sync/stages/index/indexers/custom/runes)
* [`tx_count_by_address`](https://github.com/maestro-org/maestro-symphony/blob/main/src/sync/stages/index/indexers/custom/tx_count_by_address.rs)
## 🎉 You’re Done!
You have now walked through a guide on how to index a custom piece of data and add an API endpoint using the [Maestro Symphony](https://github.com/maestro-org/maestro-symphony).
Be sure to check out [Maestro's additional services](https://www.gomaestro.org/chains/bitcoin) for further assisting your development of building on Bitcoin.
***
**Support**
If you are experiencing any trouble with the above, reach out on [Discord](https://discord.gg/ES2rDhBJt3).
# How to Use Pre-Synced Snapshots in Maestro Symphony
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/how-to-use-pre-synced-snapshots-in-maestro-symphony
Learn how to bootstrap Maestro Symphony with pre-synced snapshots of Bitcoin Core and Symphony indexer data, reducing setup time by skipping the full blockchain sync.
This guide explains how to use pre-synced snapshots to quickly set up Maestro Symphony and Bitcoin Core, avoiding the time-consuming initial chain synchronization.
## Overview
Snapshots allow you to bootstrap your Symphony indexer with pre-synchronized data:
* **Bitcoin node snapshots**: Pre-synced Bitcoin Core blockchain data
* **Symphony snapshots**: Pre-indexed blockchain data and database state
## Prerequisites
* [Bitcoin Core (22+)](https://hub.docker.com/r/bitcoin/bitcoin) with RPC and P2P access
* [lz4](https://github.com/lz4/lz4)
* Sufficient disk space (see [deployment requirements](https://github.com/maestro-org/maestro-symphony?tab=readme-ov-file#deployment-requirements))
## Available Snapshots
**Networks supported:**
* mainnet
* testnet4
* regtest
**Snapshots**
#### Bitcoin
Mainnet: [https://snapshots.gomaestro.org/bitcoin-node/mainnet/snapshots/20250826.tar.lz4](https://snapshots.gomaestro.org/bitcoin-node/mainnet/snapshots/20250826.tar.lz4)
Testnet: [https://snapshots.gomaestro.org/bitcoin-node/testnet/snapshots/20250827.tar.lz4](https://snapshots.gomaestro.org/bitcoin-node/testnet/snapshots/20250827.tar.lz4)
#### Symphony
Mainnet: [https://snapshots.gomaestro.org/symphony/mainnet/snapshots/20250927.tar.lz4](https://snapshots.gomaestro.org/symphony/mainnet/snapshots/20250927.tar.lz4)
Testnet: [https://snapshots.gomaestro.org/symphony/testnet/snapshots/20250927.tar.lz4](https://snapshots.gomaestro.org/symphony/testnet/snapshots/20250927.tar.lz4)
## Testnet setup example
### 1. Clone Repository and Prepare Directories
*The following are to be excuted within maestro-symphony repo directory*.
First, let's clone the Symphony repo:
```bash theme={null}
git clone https://github.com/maestro-org/maestro-symphony.git && cd maestro-symphony
```
Next, let's create two new directories to house the snapshot data.
```bash theme={null}
mkdir -p ./tmp/{symphony-data,bitcoin-data}
```
### 2. Download Snapshots
Bitcoin node snapshot:
```bash theme={null}
curl -L https://snapshots.gomaestro.org/bitcoin-node/testnet/snapshots/20250827.tar.lz4 | \
lz4 -d | tar -xf - -C ./tmp/bitcoin-data
```
Symphony snapshot:
```bash theme={null}
curl -L https://snapshots.gomaestro.org/symphony/testnet/snapshots/20250927.tar.lz4 | \
lz4 -d | tar -xf - -C ./tmp/symphony-data
```
### 3. Start Services
```bash theme={null}
make COMPOSE_FILE=docker-compose.yml compose-up
```
## Verification
Once the services are started, verify the setup:
### Check Symphony Status
```bash theme={null}
curl http://localhost:8080/addresses/tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx/utxos | jq '.indexer_info'
```
### Stop Services
When you are finished interacting with Symphony, be sure to stop the services as well.
```bash theme={null}
make compose-down
```
## Troubleshooting
### Disk Space
Ensure sufficient disk space:
* Testnet: \~1GB for Symphony + \~50GB for Bitcoin node
* Mainnet: \~24GB for Symphony + \~600GB for Bitcoin node
### Snapshot Age
If snapshots are older than expected:
* Symphony will automatically sync missing blocks
* Bitcoin Core will resume from snapshot point
* Initial startup may take longer for older snapshots
## Updating Snapshots
Snapshots are updated regularly. To use a newer snapshot:
1. Stop Docker services
2. Backup any important data
3. Remove old data directories
4. Download and extract new snapshots
5. Restart Docker services
**Note:** Ensure that no other bitcoin node containers are running as this may cause conflicts.
***
## 🎉 You’re Done!
You have now walked through a guide on how to load both a [Symphony](https://github.com/maestro-org/maestro-symphony) and Bitcoin snapshot.
Be sure to check out [Maestro's additional services](/bitcoin) for further assisting your development of building on Bitcoin.
***
## Support
For issues with snapshots:
* Open an [issue](https://github.com/maestro-org/maestro-symphony/issues)
* Join the [Discord community](https://discord.gg/SJgkEje7)
# Integrating Maestro Event Manager into Your Application
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/integrating-event-manager-into-your-application
This guide for understanding the [Event Manager](/general/event-manager) can be viewed in conjunction with our [Bitcoin Wallet Insight Demo](https://github.com/maestro-org/maestro-replit-templates/tree/main/maestro-wallet-demo) - an example Bitcoin application showcasing the Wallet API and Event Manager capabilities for wallet insights and state monitoring.
You can deploy [this demo](https://replit.com/@roethke/Maestro-Replit-Templates?v=1) to see the Event Manager in action, as well as how it is integrated, before implementing it in your own application to:
1. Set up automated monitoring for Bitcoin wallet activities, transactions, and blockchain events
2. Create triggers that fire when specific conditions are met (e.g., large transactions, new inscriptions)
3. Receive real-time notifications via webhooks to keep your application responsive
## Overview
The [Event Manager](/general/event-manager) is a powerful service that allows you to monitor Bitcoin blockchain events and receive notifications when specific conditions are met. Unlike user-facing features, the Event Manager is designed as an **admin-only service** that operates behind the scenes to keep your application informed of important blockchain activities.
Key benefits:
* **Real-time monitoring** of wallet addresses, transactions, and blockchain state
* **Automated notifications** via webhooks when triggers activate
* **Flexible trigger conditions** for various blockchain events
***
## Architecture Overview
```mermaid theme={null}
graph TB
A[Your Application] --> B[Maestro Dashboard]
B --> C[Event Manager API]
C --> D[Bitcoin Blockchain]
C --> E[Webhook Endpoint]
E --> F[Application Backend]
F --> G[User Notifications]
F --> H[Database Updates]
F --> I[Business Logic]
style B fill:#ff9999
style C fill:#99ccff
style E fill:#99ff99
```
**Flow Explanation:**
1. **Admin creates triggers** via the [Maestro Dashboard](/general/event-manager#using-the-event-manager)
2. **Event Manager monitors** the blockchain for specified conditions
3. **Webhooks fire** when conditions are met, sending data to your application
4. **Your application processes** the webhook and takes appropriate actions
***
## Prerequisites
* **Node.js** ≥16 and **npm** (or Yarn) installed
* A Maestro [API key](https://dashboard.gomaestro.org/login) with Event Manager access
* An existing application (we'll use our [maestro-replit-templates](https://github.com/maestro-org/maestro-replit-templates) wallet demo as an example)
***
## Complete Event Manager Operations
### Configure and Manage Event Triggers in the Maestro Dashboard
The [Maestro Dashboard](/general/event-manager#using-the-event-manager) provides a user-friendly interface for managing Event Manager operations. Follow these steps to set up monitoring for your Bitcoin applications:
#### Step 1: Access the Event Manager Dashboard
1. **Log in** to your [Maestro Dashboard](https://dashboard.gomaestro.org/login)
2. **Navigate** to the *Events* tab in the top navbar
3. **Create** a new Webhook
#### Step 2: Create Your First Webhook
1. **Click "Create Webhook"** to open the event webhook creation wizard
2. **Configure basic settings:**
* **Chain**: Select "Bitcoin"
* **Network**: Choose "Mainnet" or "Testnet"
* **Webhook URL**: Enter your application's webhook endpoint
* **Set confirmation requirements**: Choose 1-6 confirmations based on your security needs
* **Trigger Type**: Select "Transaction" for monitoring Bitcoin transactions
* **Trigger Name**: Give it a descriptive name (e.g., "Wallet Balance Monitor")
**Testing tip**: Use [webhook.site](https://webhook.site) to generate a test URL for initial setup
4. **Configure trigger conditions** using the filter builder:
* **For wallet monitoring**: Set filter key to "Sender or Receiver" with your Bitcoin address
* **For large transactions**: Set "TotalInputVolume" with operator ">" and value in satoshis
* **For specific addresses**: Use "Sender" or "Receiver" filters as needed
6. **Click "Create"** to activate monitoring
#### Step 3: Test Your Webhook
1. **Send a test transaction** that matches your trigger conditions
2. **Monitor the Event Logs** to see triggered events in real-time
3. **Check your webhook endpoint** to verify you're receiving notifications
4. **Review the payload structure** to understand the data format for your application
#### Step 4: Manage Active Webhooks
1. **View all webhooks** in the dashboard with status indicators (Active/Paused)
2. **Monitor webhook statistics** including event count and last triggered time
3. **Pause/Resume webhooks** as needed for maintenance or testing
4. **Edit webhook settings** to modify filters, webhook URLs, or confirmation requirements
5. **Delete unused webhooks** to stay within your account limits and keep things organized
#### Step 5: Monitor Event Logs
1. **Filter logs** by trigger, date range, or status for easier debugging
2. **Inspect event details** including the full transaction payload and webhook response
3. **Troubleshoot webhook issues** by checking response status codes and error messages
4. **Export logs** for analysis or compliance reporting if needed
*If you'd prefer to manage webhooks/logs programmatically, the [Event Manager API](/bitcoin/event-manager-api/overview) provides comprehensive functionality for this. Available operations shown below.*
**Pro Tips for Dashboard Usage:**
* Start with testnet webhooks to familiarize yourself with the interface
* Use descriptive trigger names that indicate their purpose
* Set up multiple webhooks with different confirmation levels for different use cases
* Regularly review and clean up unused webhooks to optimize performance
### Trigger Management
The following snippets are borrowed from the [Bitcoin Wallet Insight Demo](https://github.com/maestro-org/maestro-replit-templates/tree/main/maestro-wallet-demo).
#### 1. Creating Triggers
Create triggers to monitor Bitcoin transactions based on specific conditions:
```typescript theme={null}
const eventManager = new EventManagerApi('mainnet', 'your-api-key');
const triggerConfig: CreateTriggerRequest = {
name: "High Value Transaction Monitor",
chain: "bitcoin",
network: "mainnet",
type: "transaction",
webhook_url: "https://your-app.com/webhook",
filters: [
{
key: "total_input_volume",
operator: ">",
value: "1000000000" // 10 BTC in satoshis
}
],
confirmations: 6
};
const newTrigger = await eventManager.createTrigger(triggerConfig);
console.log('Created trigger:', newTrigger.id);
```
#### 2. Listing All Triggers
Retrieve all your active triggers:
```typescript theme={null}
const triggers = await eventManager.listTriggers();
triggers.forEach(trigger => {
console.log(`${trigger.name} (${trigger.id}): ${trigger.status}`);
console.log(`Events triggered: ${trigger.event_count}`);
});
```
#### 3. Getting Trigger Details
Fetch detailed information about a specific trigger:
```typescript theme={null}
const triggerId = "your-trigger-id";
const trigger = await eventManager.getTrigger(triggerId);
console.log('Trigger details:', trigger);
```
#### 4. Updating Triggers
Modify existing triggers (name, filters, status, etc.):
```typescript theme={null}
const updates: UpdateTriggerRequest = {
name: "Updated High Value Monitor",
chain: "bitcoin",
network: "mainnet",
type: "transaction",
webhook_url: "https://your-app.com/webhook",
status: "paused", // or "active"
filters: [
{
key: "total_input_volume",
operator: ">",
value: "2000000000" // 20 BTC in satoshis
}
],
confirmations: 6
};
const updatedTrigger = await eventManager.updateTrigger(triggerId, updates);
console.log('Updated trigger:', updatedTrigger);
```
#### 5. Deleting Triggers
Remove triggers that are no longer needed:
```typescript theme={null}
await eventManager.deleteTrigger(triggerId);
console.log('Trigger deleted successfully');
```
### Filter Options
Available filter keys include:
* **sender**: Monitor transactions from specific addresses (operator: `=`)
* **receiver**: Monitor transactions to specific addresses (operator: `=`)
* **sender\_or\_receiver**: Monitor transactions involving specific addresses (operator: `=`)
* **transaction\_id**: Monitor specific transaction IDs (operator: `=`)
* **total\_input\_volume**: Monitor by transaction value (operators: `=`, `>`, `>=`, `<`, `<=`)
* **fee**: Monitor by transaction fee (operators: `=`, `>`, `>=`, `<`, `<=`)
* **size**: Monitor by transaction size in bytes (operators: `=`, `>`, `>=`, `<`, `<=`)
* **weight**: Monitor by transaction weight (operators: `=`, `>`, `>=`, `<`, `<=`)
### Event Log Management
#### 6. Listing Event Logs
View logs of triggered events with optional filtering:
```typescript theme={null}
// List all logs with pagination
const logs = await eventManager.listEventLogs({
page: 1,
limit: 50
});
// Filter logs by trigger
const triggerLogs = await eventManager.listEventLogs({
trigger_id: "your-trigger-id",
page: 1,
limit: 20
});
// Filter by chain and network
const mainnetLogs = await eventManager.listEventLogs({
chain: "bitcoin",
network: "mainnet",
page: 1,
limit: 25
});
logs.forEach(log => {
console.log(`Log ${log.id}: Status ${log.status}`);
console.log(`Response: ${log.response_status} - ${log.response}`);
});
```
#### 7. Getting Specific Event Logs
Retrieve detailed information about a specific event log:
```typescript theme={null}
const logId = "your-log-id";
const eventLog = await eventManager.getEventLog(logId);
console.log('Event log details:', {
id: eventLog.id,
trigger_id: eventLog.trigger_id,
status: eventLog.status,
response_status: eventLog.response_status,
payload: eventLog.payload
});
```
### Advanced Filter Examples
Here are practical examples of different filter configurations:
```typescript theme={null}
// Monitor large transactions (>= 1 BTC)
const largeTransactionTrigger: CreateTriggerRequest = {
name: "Large Transaction Monitor",
chain: "bitcoin",
network: "mainnet",
type: "transaction",
webhook_url: "https://your-app.com/webhook/large-tx",
filters: [{
key: "total_input_volume",
operator: ">=",
value: "100000000" // 1 BTC in satoshis
}],
confirmations: 3
};
// Monitor specific wallet address
const walletMonitor: CreateTriggerRequest = {
name: "Wallet Activity Monitor",
chain: "bitcoin",
network: "mainnet",
type: "transaction",
webhook_url: "https://your-app.com/webhook/wallet",
filters: [{
key: "sender_or_receiver",
operator: "=",
value: "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
}],
confirmations: 1
};
// Monitor high fee transactions
const highFeeTrigger: CreateTriggerRequest = {
name: "High Fee Monitor",
chain: "bitcoin",
network: "mainnet",
type: "transaction",
webhook_url: "https://your-app.com/webhook/high-fee",
filters: [{
key: "fee",
operator: ">",
value: "100000" // 0.001 BTC in satoshis
}],
confirmations: 2
};
// Using the helper function for wallet monitoring
const walletAddress = "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh";
const balanceMonitor = createWalletBalanceMonitoringTrigger(
walletAddress,
"mainnet",
"https://your-app.com/webhook/balance",
1 // confirmations
);
const createdTrigger = await eventManager.createTrigger(balanceMonitor);
```
## Security Considerations
**Important Security Notes:**
1. **Use Maestro Dashboard**: Manage all triggers through the secure [Maestro Dashboard](/general/event-manager#using-the-event-manager) instead of building custom admin interfaces
2. **Webhook Validation**: Verify webhook authenticity using signatures
3. **Rate Limiting**: Consider implementing rate limiting on webhook endpoints
## Common Use Cases
### 1. Wallet Monitoring
* Track activity on specific wallet addresses
* Get notified when funds are received or sent
* Monitor for suspicious activity patterns
### 2. Large Transaction Alerts
* Alert when transactions exceed certain thresholds
* Monitor for whale movements
* Compliance and AML monitoring
### 3. Rune/Inscription Activity
* Track new rune mints or transfers
* Monitor inscription marketplace activity
* Get notified of rare asset movements
### 4. Portfolio Automation
* Automatically update portfolio values
* Trigger rebalancing based on events
* Generate activity reports
See our example [Wallet Insights Demo](https://replit.com/@roethke/Maestro-Replit-Templates?v=1) for a working implementation of wallet monitoring and event management operating together in a single application.
## Best Practices
1. **Test Webhooks**: Use tools like [webhook.site](https://webhook.site/) or [ngrok](https://ngrok.com/) for local webhook testing
2. **Document Triggers**: Keep clear documentation of what each trigger does
3. **Regular Cleanup**: Remove unused triggers to avoid unnecessary API calls and remain below your account's trigger limits
## 🎉 You’re Done!
The Maestro Event Manager transforms your application from reactive to proactive by providing real-time blockchain monitoring capabilities. By implementing the admin-only architecture shown in this guide, you can:
* **Monitor critical wallet activities** without constant manual checking
* **Respond instantly** to important blockchain events
* **Automate business logic** based on on-chain activities
* **Maintain security** by keeping event management admin-only
The integration with your existing wallet demo creates a powerful combination of portfolio visualization and automated monitoring, making your application more responsive and valuable to users.
For more advanced features, explore the full [Event Manager API documentation](/bitcoin/event-manager-api/overview) and consider implementing custom trigger conditions for your specific use case.
Be sure to review Maestro's rate limits, **trigger limits** and [pricing tiers](https://gomaestro.org/pricing) to select the plan that best fits your application's needs.
**Support**
If you are experiencing any trouble with the above, [open an issue](https://github.com/maestro-org/maestro-replit-templates/issues/new) or reach out on Discord.
# Maestro Market Price API & TradingView Lightweight-Charts Tutorial
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/maestro-market-price-api-and-tradingview-lightweight-charts-tutorial
Step-by-step tutorial to build a TypeScript web app using Maestro's Market Price API with TradingView Lightweight Charts for Bitcoin data visualization.
This tutorial walks you through building a small web app in TypeScript that will:
1. Fetch DOGGOTOTHEMOON ("BTC-840000:3") candlestick data from Maestro’s [Market Price API](/bitcoin/market-price-api/overview).
2. Render it as an interactive candlestick chart using the [TradingView](https://www.tradingview.com/) [lightweight-charts](https://github.com/tradingview/lightweight-charts) library.
## Overview
### TradingView - Lightweight Charts™
[TradingView](https://www.tradingview.com/) is a popular web-based platform renowned for its comprehensive and user-friendly charting tools. Users can access a variety of charts for different financial instruments, like stocks, cryptocurrencies, forex, and futures. These charts can be customized with numerous technical indicators and drawing tools to analyze market trends and patterns.
TradingView's [Lightweight Charts](https://tradingview.github.io/lightweight-charts/) is a compact, interactive library designed to create financial charts that are both fast and easy to integrate. Here's a basic guide on how to use it with the Maestro [Market Price API](/bitcoin/market-price-api/overview).
***
## Prerequisites
* **Node.js** ≥14 and **npm** (or Yarn) installed
* A Maestro [API key](https://dashboard.gomaestro.org/login)
* Basic familiarity with TypeScript, `fetch`, and bundling (e.g. with esbuild, webpack, or Vite)
***
## Step-by-Step Instructions
### 1. Bootstrap a New Project
```sh Bash theme={null}
# create & enter project folder
mkdir maestro-chart-tutorial && cd maestro-chart-tutorial
# initialize npm
npm init -y
# install runtime and dev dependencies
npm install --save lightweight-charts
npm install --save-dev typescript esbuild live-server
```
Here's what your initial `package.json` should look like:
```json JSON theme={null}
{
"dependencies": {
"lightweight-charts": "^5.0.6"
},
"name": "maestro-chart-tutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"devDependencies": {
"esbuild": "^0.25.3",
"live-server": "^1.2.2",
"typescript": "^5.8.3",
}
}
```
Next, create a minimal `tsconfig.json`:
```json JSON theme={null}
{
"compilerOptions": {
"target": "es2017",
"module": "esnext",
"moduleResolution": "node",
"strict": true,
"outDir": "dist"
},
"include": ["src/**/*"]
}
```
***
### 2. Project Structure
```text Text theme={null}
maestro-chart-tutorial/
├── package.json
├── src/
│ ├── main.ts ← chart logic
│ └── index.html ← HTML container for the chart
└── tsconfig.json
```
***
### 3. Write the HTML Shell
Create `src/index.html`:
```html HTML theme={null}
DOGGOTOTHEMOON Candlestick Chart
```
***
### 4. Fetch & Transform Candle Data
Create `src/main.ts`:
```ts Text theme={null}
import {
createChart,
CandlestickSeries,
} from 'lightweight-charts';
// ─── Configuration ─────────────────────────────────────────────────────────────
const API_BASE = 'https://xbt-mainnet.gomaestro-api.org/v0/markets';
const DEX = 'magiceden';
const SYMBOL = 'BTC-840000:3'; // DOGGOTOTHEMOON
const RESOLUTION = '1d'; // 1‑day candles
const API_KEY = 'YOUR_API_KEY_HERE'; // ← Replace with your API key
interface Candle {
bucket: string;
open: number;
high: number;
low: number;
close: number;
volume: number;
symbol: string;
}
async function fetchCandles(mempool?: boolean) {
const url = new URL(`${API_BASE}/dexs/ohlc/${DEX}/${SYMBOL}`);
url.searchParams.set('resolution', RESOLUTION);
// for Mempool Market Price data
if (mempool) {
url.searchParams.set('mempool', 'included');
}
const resp = await fetch(url.toString(), {
headers: {
'api-key': API_KEY,
},
});
if (!resp.ok) {
throw new Error(`API error: ${resp.status} ${resp.statusText}`);
}
const json = await resp.json();
const candles = json.data as Candle[];
return candles.map(c => ({
time: Math.floor(new Date(c.bucket).getTime() / 1000) as UTCTimestamp,
open: c.open,
high: c.high,
low: c.low,
close: c.close,
}));
}
```
***
### 5. Initialize & Draw the Chart
Append to `src/main.ts`:
```ts Text theme={null}
async function drawChart() {
// Create chart
const chartOptions = {
layout: {
textColor: 'black',
background: { type: 'solid', color: '#ffffff' },
},
grid: {
vertLines: { color: '#eee' },
horzLines: { color: '#eee' },
},
rightPriceScale: { borderVisible: false },
timeScale: { borderVisible: false, timeVisible: true },
}
const chart = createChart(document.getElementById('chart'), chartOptions);
const series = chart.addSeries(CandlestickSeries, {
upColor: '#26a69a',
downColor: '#ef5350',
borderVisible: false,
wickUpColor: '#26a69a',
wickDownColor: '#ef5350',
});
// Load data & render
try {
// Fetch candlestick data
const candles = await fetchCandles();
// Set candlestick data
series.setData(candles);
// Format for better readability
chart.timeScale().fitContent();
} catch (err) {
console.error(err);
alert('Failed to load candle data; see console.');
}
}
// Run
drawChart();
```
***
### 6. Bundle & Serve
Add these scripts to `package.json`:
```json JSON theme={null}
{
"scripts": {
"build": "esbuild src/main.ts --bundle --outfile=src/main.js --platform=browser",
"start": "npm run build && live-server src"
}
}
```
Then:
```sh Bash theme={null}
npm run start
```
* **esbuild** bundles your code into `main.js`.
* **live-server** serves `src/index.html` at [http://127.0.0.1:8080](http://127.0.0.1:8080).
***
### Interactive TradingView Chart
If you're able to see a chart like this displayed in your browser, then you have successfully fetched data through the API and rendered the chart.
***
### 7. Next Steps & Customization
The following considerations can help you to extend this tutorial to fit more of your application's needs.
* You can make the chart data **mempool-aware**- meaning it returns data about trades that have *not yet been confirmed*- by passing in an optional `boolean` value to `fetchCandles()`, such as `const candles = await fetchCandles(true);`
* **Time Range**: add `from`/`to` (Unix seconds) to `fetchCandles()`
* **Carry**: `url.searchParams.set('carry','true')` fills gaps with synthetic candles
* **Styling**: tweak [`createChart` options](https://github.com/tradingview/lightweight-charts#configuration)
* **Interactivity**: add crosshair, tooltips, mouse events
***
## 🎉 **You’re Done!**
You now have a live candlestick chart of DOGGOTOTHEMOON using Maestro’s [Market Price API](/bitcoin/market-price-api/overview) with the [TradingView](https://www.tradingview.com/) [lightweight-charts](https://github.com/tradingview/lightweight-charts) library.
Customize it further with indicators, multi‑symbol support, or integrate it into your DeFi dashboard.
Be sure to review Maestro's rate limits and [pricing tiers](https://www.gomaestro.org/pricing) to select the plan that best fits your application's needs.
***
**Support**
If you are experiencing any trouble with the above, reach out on [Discord](https://discord.gg/ES2rDhBJt3).
# MCP: Interact with Bitcoin via an LLM
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/mcp-interact-with-bitcoin-via-an-llm
Tutorial guide to use Model Context Protocol (MCP) for Bitcoin blockchain interactions through AI language models and Maestro APIs.
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open standard that enables developers to build secure, two-way connections between their data sources and AI-powered tools.
For additional information about MCP, its origins, and [Claude](https://claude.ai), read more from the creators, [Anthropic](https://www.anthropic.com/news/model-context-protocol).
***
The Maestro MCP server allows for interacting with Bitcoin through the interface of an LLM client.
Maestro MCP transforms how LLMs engage with the Bitcoin network, turning them into powerful, on-chain agents. Bridging Claude (or any LLM client) with our MCP server enables the LLM to query blocks, inspect transactions, analyze addresses, and even take action on behalf of the user.
This server functionality provides the LLM with a set of tools for exploring blocks, transactions, addresses, and other aspects of the Bitcoin blockchain, allowing the LLM to not only retrieve and make infereances on on-chain data, but also to take action on behalf of the user; ie, serve as an [*agent*](https://github.com/resources/articles/ai/what-are-ai-agents).
In this tutorial, we will use Claude Desktop client alongside the **hosted** Maestro MCP server to communicate with the Bitcoin network and start making intelligent, on-chain requests.
*For more client examples, see our *Maestro MCP client examples repo* and refer to our *local setup* if you'd like to understand how to connect Claude Desktop to a locally-running MCP server.*
Some of the MCP server functionality will not work if you are using the **Artist tier**; a **Composer-level subscription or higher** will be needed to access the more advanced MCP features, such as those related to Mempool API activities.
Consult the [pricing page](https://www.gomaestro.org/pricing) for more information.
***
## Requirements
* Obtain a Maestro API key
## Configuration
1. Download Claude Desktop [here](https://claude.ai/download).
2. Open Claude Desktop settings.
3. Select `Edit Config`.
4. Open the Claude Desktop App configuration file located at:
* **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
* **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
Copy the below contents into this config file.
Be sure to replace the `
```json claude_desktop_config.json theme={null}
{
"mcpServers": {
"maestro-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://xbt-mainnet.gomaestro-api.org/v0/mcp",
"--header",
"Authorization:${AUTH_HEADER}",
"--transport",
"http-only"
],
"env": {
"AUTH_HEADER": "Bearer "
}
}
}
}
```
## Usage
* Restart Claude after any change to either the `claude_desktop_config.json` or the source code.
1. Launch Claude Desktop.
2. Locate the tools icon.
3. Select `maestro-mcp-server`.
4. View available MCP tools.
5. Prompt Claude.
*Examples*:
* "Fetch the latest Bitcoin block"
* "Get the blockchain info for Bitcoin"
* "Fetch all UTXOs for this address: `bc1prqpwzqqcfzlrtjz3at5kuz4zevqsmvxc5xjuzvg58y48leu67x0q0kvy85`"
* "Fetch metaprotocol activity for this address:
`bc1qcx7ys0ahvtfqcc63sfn6axls0qrhkadnslpd94`"
You may need to approve the request within Claude.
***
## 🎉 You’re Done!
You now have communicated with the Bitcoin Network via the Maestro MCP. This is just the beginning of a new development frontier- one where creativity reigns and the only limitation to building new applications leveraging Bitcoin data is your imagination.
Be sure to review Maestro's rate limits and [pricing tiers](https://www.gomaestro.org/pricing) to select the plan that best fits your application's needs.
***
## Debugging
The following tools are useful for debugging a locally-running MCP server.
* inspector
* mcp-cli
**Support**
If you are experiencing any trouble with the above, [open an issue](https://github.com/maestro-org/maestro-mcp/issues/new) or reach out on Discord.
# Mempool.space Migration Guide
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/mempool-space-migration-guide
Complete migration guide from Mempool.space to Maestro's Esplora-compatible Bitcoin API with endpoint mapping and cost savings.
This guide will walk you through migrating from [Mempool.space](https://mempool.space) to [Maestro's Esplora API](/bitcoin/esplora-api/overview) service.
Maestro provides an **Esplora-compatible REST API** for querying Bitcoin data: addresses, transactions, blocks, and the mempool. This enables users currently relying on Mempool.space for their Bitcoin data to utilize Maestro as their provider and enjoy significant savings with minimal switching cost.
Transitioning from Mempool.space involves mapping endpoints to their Maestro counterparts and adjusting the URL and request structures accordingly.
### About Esplora
[Esplora](https://github.com/Blockstream/esplora) is a block explorer and RESTful API framework developed and maintained by [Blockstream](https://blockstream.com/). The service offers a lightweight, high-performance interface for querying Bitcoin blockchain data including blocks, transactions, addresses, and the mempool.
***
### Prerequisites
1. Obtain a Maestro [API key](https://dashboard.gomaestro.org).
2. Review [Bitcoin API documentation](/bitcoin/esplora-api/overview).
### Base URL
| **Network** | **Mempool.space** | **Maestro** |
| ----------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| Mainnet | [https://mempool.space/api](https://mempool.space/api) | [https://xbt-mainnet.gomaestro-api.org/v0/esplora](https://xbt-mainnet.gomaestro-api.org/v0/esplora) |
| Testnet4 | [https://mempool.space/testnet4/api](https://mempool.space/testnet4/api) | [https://xbt-testnet.gomaestro-api.org/v0/esplora](https://xbt-testnet.gomaestro-api.org/v0/esplora) |
### Headers
| **Mempool.space** | **Maestro** |
| ----------------- | ----------- |
| - | `api-key` |
### Examples
```bash theme={null}
# Maestro
curl -sSL "https://xbt-mainnet.gomaestro-api.org/v0/esplora/address/bc1qcx7ys0ahvtfqcc63sfn6axls0qrhkadnslpd94" \
--header 'Accept: application/json' \
--header 'api-key: '
# Mempool.space
curl -sSL "https://mempool.space/api/address/bc1qcx7ys0ahvtfqcc63sfn6axls0qrhkadnslpd94"
```
### Supported Areas
Maestro’s Esplora-compatible API supports:
| **Service** | **Supported** |
| --------------------------- | ------------- |
| Addresses | ✓ |
| Blocks | ✓ |
| General | - |
| Mining | - |
| Fees | - |
| Mempool | ✓ |
| Transactions | ✓ |
| Lightning | - |
| Accelerator (Public) | - |
| Accelerator (Authenticated) | - |
### Address
| **Mempool.space** | **Maestro** |
| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| [`/api/address/:address`](https://mempool.space/docs/api/rest#get-address) | [`/address/:address`](/bitcoin/esplora-api/addresses/address) |
| [`/api/address/:address/txs`](https://mempool.space/docs/api/rest#get-address-transactions) | [`/address/:address/txs`](/bitcoin/esplora-api/addresses/address-transactions) |
| [`/api/address/:address/txs/chain`](https://mempool.space/docs/api/rest#get-address-transactions-chain) | [`/address/:address/txs/chain`](/bitcoin/esplora-api/addresses/address-transactions-chain) |
| [`/api/address/:address/txs/mempool`](https://mempool.space/docs/api/rest#get-address-transactions-mempool) | [`/address/:address/txs/mempool`](/bitcoin/esplora-api/addresses/address-transactions-mempool) |
| [`/api/address/:address/utxo`](https://mempool.space/docs/api/rest#get-address-utxo) | [`/address/:address/utxo`](/bitcoin/esplora-api/addresses/address-utxos) |
### Block
| **Mempool.space** | **Maestro** |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [`/api/block/:hash`](https://mempool.space/docs/api/rest#get-block) | [`/block/:hash`](/bitcoin/esplora-api/blocks/block) |
| [`/api/block/:hash/header`](https://mempool.space/docs/api/rest#get-block-header) | [`/block/:hash/:header`](/bitcoin/esplora-api/blocks/block-header) |
| [`/api/block/:hash/status`](https://mempool.space/docs/api/rest#get-block-status) | [`/block/:hash/status`](/bitcoin/esplora-api/blocks/block-status) |
| [`/api/block/:hash/txs[/:start_index]`](https://mempool.space/docs/api/rest#get-block-transactions) | [`/block/:hash/txs/:start_index`](/bitcoin/esplora-api/blocks/get-block-transactions) |
| [`/api/block/:hash/txids`](https://mempool.space/docs/api/rest#get-block-transaction-ids) | [`/block/:hash/txids`](/bitcoin/esplora-api/blocks/block-transaction-ids) |
| [`/api/block/:hash/txid/:index`](https://mempool.space/docs/api/rest#get-block-transaction-id) | [`/block/:hash/txid/:index`](/bitcoin/esplora-api/blocks/block-transaction-id) |
| [`/api/block/:hash/raw`](https://mempool.space/docs/api/rest#get-block-raw) | [`/block/:hash/raw`](/bitcoin/esplora-api/blocks/block-raw) |
| [`/api/blocks[/:start_height]`](https://mempool.space/docs/api/rest#get-blocks) | [`/blocks/:start_height`](/bitcoin/esplora-api/blocks/blocks) |
| [`/api/block-height/:height`](https://mempool.space/docs/api/rest#get-block-height) | [`/block-height/:height`](/bitcoin/esplora-api/blocks/block-height) |
| [`/api/blocks/tip/height`](https://mempool.space/docs/api/rest#get-block-tip-height) | [`/blocks/tip/height`](/bitcoin/esplora-api/blocks/block-tip-height) |
| [`/api/blocks/tip/hash`](https://mempool.space/docs/api/rest#get-block-tip-hash) | [`/blocks/tip/hash`](/bitcoin/esplora-api/blocks/block-tip-hash) |
### Mempool
| **Mempool.space** | **Maestro** |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| [`/api/mempool`](https://mempool.space/docs/api/rest#get-mempool) | [`/mempool`](/bitcoin/esplora-api/mempool/mempool) |
| [`/api/mempool/txids`](https://mempool.space/docs/api/rest#get-mempool-transaction-ids) | [`/mempool/txids`](/bitcoin/esplora-api/mempool/mempool-transaction-ids) |
| [`/api/mempool/recent`](https://mempool.space/docs/api/rest#get-mempool-recent) | [`/mempool/recent`](/bitcoin/esplora-api/mempool/mempool-recent) |
### Transaction
| **Mempool.space** | **Maestro** |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| [`/api/tx/:txid/merkeblock-proof`](https://mempool.space/docs/api/rest#get-transaction-merkleblock-proof) | [`/tx/:txid/merkleblock-proof`](/bitcoin/esplora-api/transactions/transaction-merkleblock-proof) |
| [`/api/tx/:txid/merkle-proof`](https://mempool.space/docs/api/rest#get-transaction-merkle-proof) | [`/tx/:txid/merkle-proof`](/bitcoin/esplora-api/transactions/transaction-merkle-proof) |
| [`/api/tx/:txid/outspend/:vout`](https://mempool.space/docs/api/rest#get-transaction-outspend) | [`/tx/:txid/outspend/:vout`](/bitcoin/esplora-api/transactions/transaction-outspend) |
| [`/api/tx/:txid/outspends`](https://mempool.space/docs/api/rest#get-transaction-outspends) | [`/tx/:txid/outspends`](/bitcoin/esplora-api/transactions/transaction-outspends) |
| [`/api/tx/:txid/raw`](https://mempool.space/docs/api/rest#get-transaction-raw) | [`/tx/:txid/raw`](/bitcoin/esplora-api/transactions/transaction-raw) |
| [`/api/tx/:txid/rbf`](https://mempool.space/docs/api/rest#get-transaction-rbf-timeline) | [`/tx/:txid/rbf`](/bitcoin/esplora-api/transactions/transaction-rbf-timeline) |
| [`/api/tx/:txid/status`](https://mempool.space/docs/api/rest#get-transaction-status) | [`/tx/:txid/status`](/bitcoin/esplora-api/transactions/transaction-status) |
| [`/api/tx/:txid`](https://mempool.space/docs/api/rest#get-transaction) | [`/tx/:txid`](/bitcoin/esplora-api/transactions/transaction) |
| [`/api/tx/:txid/hex`](https://mempool.space/docs/api/rest#get-transaction-hex) | [`/tx/:txid/hex`](/bitcoin/esplora-api/transactions/transaction-hex) |
| [`/api/tx (POST)`](https://mempool.space/docs/api/rest#post-transaction) | [`/tx (POST)`](/bitcoin/esplora-api/transactions/transaction) |
***
### Key Differences
* Maestro is focused on **Bitcoin mainnet/testnet4** data; **no Liquid or Lightning support**
* Maestro returns **identical JSON structures** to Esplora spec, making migration straightward
* Some endpoints such as `stats`, `mining/pools`, or prices must be implemented elsewhere if needed
## Using the Esplora-BDK-Proxy for Maestro API Key Authorization
When migrating from **Mempool.space** to **Maestro’s Esplora API**, applications that rely on the [BDK (Bitcoin Development Kit)](https://bitcoindevkit.org/) may encounter authorization issues. Maestro’s Esplora API requires an `api-key` to be included in every request, while many BDK integrations (or other Esplora clients) don’t natively support adding custom headers.
The **[Maestro Esplora-BDK-Proxy](https://github.com/maestro-org/maestro-esplora-proxy)** solves this problem by acting as a lightweight, local proxy that automatically injects your Maestro API key into requests.
***
### Why You Need It
* **BDK limitation:** No built-in method to send custom headers like `api-key`.
* **Solution:** Run the Esplora-BDK-Proxy locally; your BDK app connects to it instead of calling Maestro directly.
* **Benefit:** Transparent to your BDK code—no code changes needed beyond pointing to the proxy URL.
***
### Installation & Configuration
**1. Clone the Repository**
```bash theme={null}
git clone https://github.com/maestro-org/maestro-esplora-proxy.git && cd maestro-esplora-proxy
```
**2. Configure Environment**
Copy the `.env.example` file to `.env`:
```bash theme={null}
cp .env.example .env
```
Edit `.env` and set:
```env theme={null}
MAESTRO_API_KEY=your-maestro-api-key-here
# For Mainnet
ESPLORA_URL=https://xbt-mainnet.gomaestro-api.org/v0/esplora
# For Testnet4 (uncomment if needed)
# ESPLORA_URL=https://xbt-testnet.gomaestro-api.org/v0/esplora
```
**3. Run the Proxy**
```bash theme={null}
cargo run
```
By default, the proxy listens on `http://localhost:8080`.
***
### Updating Your BDK Code
In your BDK initialization, replace the direct Maestro Esplora URL with the proxy’s local address:
```rust theme={null}
let blockchain = EsploraBlockchain::new("http://localhost:8080", 20);
```
Your BDK app now makes requests to the proxy, which automatically appends the `api-key` and forwards requests to Maestro’s Esplora API.
### 🎉 You’re Done!
You now have walked through a guide on how to migrate from [Mempool.space](https://mempool.space) to [Maestro](https://gomaestro.org) as your de-facto on-chain data provider.
### Additional Resources
* **Maestro Documentation**: [Esplora API overview](/bitcoin/esplora-api/overview)
* **Mempool.space Documentation**: [https://mempool.space/docs/api/rest](https://mempool.space/docs/api/rest)
Be sure to review Maestro's rate limits and [pricing tiers](https://www.gomaestro.org/pricing) to select the plan that best fits your application's needs.
***
**Support**
If you are experiencing any trouble with the above, reach out on Discord.
# Metaprotocols canister usage guide
Source: https://docs.developer.gomaestro.org/bitcoin/tutorials-and-guides/metaprotocols-canister-usage-guide
# Bitcoin Metaprotocols Canister Usage Guide
## Overview
The Bitcoin Metaprotocols Canister is an [Internet Computer](https://internetcomputer.org) (ICP) canister that provides indexing services for Bitcoin metaprotocols, specifically focused on Bitcoin inscriptions. It leverages the [Maestro API](/bitcoin) to fetch and process Bitcoin metaprotocol data, providing structured access to inscription information associated with Bitcoin addresses and UTXOs.
Maestro Official Deployed Canister: [iayqr-yaaaa-aaaar-qbopq-cai](https://dashboard.internetcomputer.org/canister/iayqr-yaaaa-aaaar-qbopq-cai)
## Key Features
* **Address Inscriptions**: Get all inscriptions associated with a Bitcoin address
* **UTXO Inscriptions**: Get inscriptions for specific transaction outputs
* **Collection Metadata**: Fetch collection symbols and floor prices
* **Authorization**: Built-in access control for authorized callers only
## Prerequisites
* A Maestro [API key](https://dashboard.gomaestro.org/login)
Before deploying and using the canister, ensure you have:
1. **Rust** - [Install Rust](https://www.rust-lang.org/tools/install)
2. **DFX** - [Install DFX](https://internetcomputer.org/docs/building-apps/getting-started/install#installing-dfx-via-dfxvm)
3. **WebAssembly target** for Rust:
```bash theme={null}
rustup target add wasm32-unknown-unknown
```
4. **Additional tools** for Candid generation:
* `didc` binary from [Candid releases](https://github.com/dfinity/candid/releases)
* `ic-wasm`: `cargo install ic-wasm`
* `candid-extractor`: `cargo install candid-extractor`
### Authorization
The canister implements access control through a hardcoded list of authorized principals. As it currently exists, only the following principals can call the canister methods:
* Maestro principals
* Liquidium principals
* Other authorized entities
**Current authorized callers**:
*These should be replaced with your own list of authorized callers before deployment and canister interaction.*
```rust theme={null}
// Constants
pub const AUTHORIZED_CALLERS: [&str; 7] = [
"62ick-jmsqq-h6wq5-emdfw-qblno-qphae-hs7y3-dxoyp-xiccq-bw4q3-aae", // maestro
"xktoe-jjqeb-tzsr3-hxjir-en65h-6agv7-bbq2g-dyoch-276wj-waea7-rqe",
"roqha-4aaaa-aaaap-qplnq-cai", // liquidium
"e453p-eqaaa-aaaar-qanya-cai",
"vr4ua-siaaa-aaaar-qaosq-cai",
"pimqm-2dtug-w3ejt-krqai-jlp3u-uux2y-erjcw-wbvhu-pmvhu-hunju-wqe",
"daoh3-exchb-6dvbd-fyxld-7kxjo-fdddf-4vhqp-mcoo2-s7gqh-qwpfd-pae",
];
```
[Source](https://github.com/maestro-org/maestro-bitcoin-metaprotocols-canister/blob/main/src/bitcoin-metaprotocols-canister/src/common.rs)
## Deployment Guide
### Local Development Deployment
**Note:** If the `--network` argument is not provided, it defaults to the public playground. For local deployments use `--network=local`. For mainnet use `--network=ic`.
#### 1. Setup identity (Optional)
Create a new dedicated identity, or:
Use the default one for local development:
```bash theme={null}
dfx identity use default
```
#### 2. Start Local ICP Subnet
In a *separate* terminal window, start the local Internet Computer subnet.
This will create a local canister execution environment and web server processes. This enables you to test your dapps during development.
```bash theme={null}
dfx start --clean
```
Output:
```bash theme={null}
Running dfx start for version 0.26.1
Using the default configuration for the local shared network.
Replica API running on 127.0.0.1:4943. You must open a new terminal to continue developing. If you'd prefer to stop, quit with 'Ctrl-C'.
```
#### 3. Create and Deploy Canister
Create the development canister:
*Creates an empty canister and associates the assigned Canister ID to the canister name.*
```bash theme={null}
dfx canister create bitcoin-metaprotocols-canister-dev
```
Output:
```bash theme={null}
Created a wallet canister on the "local" network for user "default" with ID "uqqxf-5h777-77774-qaaaa-cai"
bitcoin-metaprotocols-canister-dev canister created with canister id: uxrrr-q7777-77774-qaaaq-cai
```
Generate DID:
* A `.did` file is a text file that contains a [Candid](https://internetcomputer.org/docs/building-apps/interact-with-canisters/candid) service description, written either manually or generated from a canister's code.
* It describes the public methods, arguments, and return types of a canister.
```bash theme={null}
dfx generate --network=local bitcoin-metaprotocols-canister-dev
```
Output:
```bash theme={null}
Generated type declarations for canister 'bitcoin-metaprotocols-canister-dev' to 'maestro-bitcoin-metaprotocols-canister/src/declarations/bitcoin-metaprotocols-canister-dev'
```
Build the canister:
*Compiles the program code into a WebAssembly module that can be deployed on ICP.*
```bash theme={null}
dfx build --network=local bitcoin-metaprotocols-canister-dev
```
Output:
```bash theme={null}
Building canister 'bitcoin-metaprotocols-canister-dev'.
Executing: cargo build --target wasm32-unknown-unknown --release -p bitcoin-metaprotocols-canister --locked
Finished building canisters.
```
Install the canister:
*Installs compiled code in a canister.*
```bash theme={null}
dfx canister install --network=local bitcoin-metaprotocols-canister-dev
```
Output:
```bash theme={null}
Installed code for canister bitcoin-metaprotocols-canister-dev, with canister ID uxrrr-q7777-77774-qaaaq-cai
```
**Note:** You can also run `dfx canister deploy` to combine the following steps in the future:
* `dfx canister create `
* `dfx build`
* `dfx canister install `
#### 4. Render the Canister
After [starting the local ICP subnet](#2-start-local-icp-subnet), we can leverage [Candid UI](https://internetcomputer.org/docs/building-apps/interact-with-canisters/candid/using-candid) to interact with our canister directly within the browser.
```bash theme={null}
http://127.0.0.1:4943/?canisterId=u6s2n-gx777-77774-qaaba-cai&id=uxrrr-q7777-77774-qaaaq-cai
```
You may notice the `canisterId` query parameter with value: `u6s2n-gx777-77774-qaaba-cai`; this is Candid's canister that is necessary in order to render our canister's functionality.
**Note:** ICP's canister IDs are *non-deterministic*, so you may need to replace the above `uxrrr-q7777-77774-qaaaq-cai` canister ID with the ID that is generated from the [Create and Deploy canister](#3-create-and-deploy-canister) step if you are not wiping the subnet state for consecutive deployments.

### Canister Interaction
The canister is designed to work with Bitcoin mainnet data through the Maestro API.
**Note:** Regtest support would require modifications to the API endpoints or the use of a regtest-compatible indexing service.
## Available Methods
The canister exposes the following public methods:
### 1. get\_address\_inscriptions
Retrieves all inscriptions associated with a Bitcoin address.
**Method**: `get_address_inscriptions(address: text, count: text) -> (Result)`
**Parameters**:
* `address`: Bitcoin address (e.g., "bc1pa2lw8d6u3kkexzqn9hqgzultkzjjc9rxtveldes68ryfdq8tmslqwfuccl")
* `count`: Maximum number of inscriptions to return (e.g., "10")
**Returns**: `AddressInscriptions` containing:
* `data`: Array of inscription details
* `last_updated`: Block information when data was last updated
* `next_cursor`: Pagination cursor for additional results
**Authorization**: Only authorized principals can call this method.
**Example Usage**:
```bash theme={null}
dfx canister call --update bitcoin-metaprotocols-canister-dev get_address_inscriptions '("bc1pa2lw8d6u3kkexzqn9hqgzultkzjjc9rxtveldes68ryfdq8tmslqwfuccl", "10")'
```
[API Docs: Inscription Info](/bitcoin/blockchain-indexer-api/inscriptions/inscription-info)
### 2. get\_utxo\_inscriptions
Retrieves inscriptions for a specific UTXO (transaction output).
**Method**: `get_utxo_inscriptions(tx_hash: text, output_index: text) -> (Result_1)`
**Parameters**:
* `tx_hash`: Transaction hash
* `output_index`: Output index within the transaction
**Returns**: `UtxoInscriptions` containing:
* `data`: Array of inscription details for the UTXO
* `last_updated`: Block information
* `next_cursor`: Pagination cursor
**Authorization**: Only authorized principals can call this method.
**Example Usage**:
```bash theme={null}
dfx canister call --update bitcoin-metaprotocols-canister-dev get_utxo_inscriptions '("604abd1c0ff2ce5a89b004a0601a75280ed3b76384af37b0a46a23471e9288e7", "1")'
```
[API Docs: Transaction Output Info](/bitcoin/blockchain-indexer-api/transactions/transaction-output-info)
### 3. set\_api\_key
Sets the Maestro API key for the canister (admin only).
**Method**: `set_api_key(key: text) -> (Result_2)`
**Parameters**:
* `key`: Maestro API key string
**Authorization**: Only authorized principals can call this method.
**Example Usage**:
```bash theme={null}
dfx canister call --update bitcoin-metaprotocols-canister-dev set_api_key '("maestro_api_key")'
```
### 4. get\_api\_key
Retrieves the current API key (admin only, query method).
**Method**: `get_api_key() -> (text)`
**Returns**: Current API key string
**Authorization**: Only authorized principals can call this method.
**Example Usage**:
```bash theme={null}
dfx canister call bitcoin-metaprotocols-canister-dev get_api_key '()'
```
## Data Structures
### AddressInscription
```candid theme={null}
type AddressInscription = record {
floor_price : int64;
satoshis : text;
utxo_block_height : int64;
utxo_txid : text;
utxo_vout : int32;
utxo_sat_offset : int64;
inscription_id : text;
collection_symbol : opt text;
utxo_confirmations : int64;
omb_color : opt text;
omb_floor_price : opt int64
};
```
### UtxoInscription
```candid theme={null}
type UtxoInscription = record {
inscription_id : text;
collection_symbol : opt text;
omb_color : opt text;
omb_floor_price : opt int64
};
```
### LastUpdated
```candid theme={null}
type LastUpdated = record {
block_hash : text;
block_height : int64
};
```
## Troubleshooting
### Common Issues
1. **"Unauthorized" Error**
* Ensure your principal is in the authorized callers list
* Use `dfx identity get-principal` to check your principal ID
2. **API Key Issues**
* Verify the API key is set correctly
* Ensure you have a valid Maestro API key
* Check that the API key has sufficient permissions
3. **Deployment Issues**
* Ensure all prerequisites are installed
* Run `make generate_did` before deployment
* Check that the WebAssembly target is installed
### Getting Canister Information
```bash theme={null}
# Get canister ID
dfx canister id bitcoin-metaprotocols-canister-dev
# Get canister info
dfx canister info bitcoin-metaprotocols-canister-dev
# Check canister status
dfx canister status bitcoin-metaprotocols-canister-dev
```
### Cycle Management
The canister uses cycles for HTTP outcalls to the Maestro API. Monitor cycle usage:
```bash theme={null}
# Check cycles balance
dfx canister status bitcoin-metaprotocols-canister-dev
# Add cycles if needed
dfx canister deposit-cycles 1000000000000 bitcoin-metaprotocols-canister-dev
```
## API Rate Limits and Costs
* Each HTTP request to Maestro API consumes cycles (approximately 1B cycles per request)
* The canister makes multiple API calls per inscription to fetch complete data:
* Address inscriptions API call
* Inscription info API call (per inscription)
* Collection stats API call (per collection)
* OMB color group API call (per inscription)
* Plan cycle usage accordingly based on expected query volume
### Debugging
Enable debug logging in the canister by checking the `ic_cdk::println!` statements in the source code. These will output to the replica logs during development.
* [Cycleops](https://cycleops.dev/) for monitoring and topping up canisters.
## 🎉 You’re Done!
You have now walked through a guide on how to deploy and interact with the Maestro Bitcoin Metaprotocols Canister.
Be sure to check out [Maestro's additional services](https://www.gomaestro.org/chains/bitcoin) for further assisting your development of building on Bitcoin.
***
### Support
If you are experiencing any trouble with the above, [submit an issue](https://github.com/maestro-org/maestro-bitcoin-metaprotocols-canister/issues/new) or reach out on Discord.
# Address Statistics (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/address-statistics-mempool-aware
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/statistics
Get Bitcoin address statistics with mempool awareness including balance, transaction count, and activity metrics.
# Historical Satoshi Balance by Address
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/historical-satoshi-balance-by-address
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/balance/historical
Get historical Bitcoin satoshi balance data for an address at specific block heights or timestamps with USD valuation.
# Inscription Activity by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/inscription-activity-by-address-mempool-aware
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/inscriptions/activity
Get Bitcoin Ordinals inscription activity for an address including transfers and ownership changes with mempool awareness.
# Metaprotocol Activity by Address
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/metaprotocol-activity-by-address
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/activity/metaprotocols
Get metaprotocol activity for a Bitcoin address including Runes, inscriptions, and other token-related transactions.
# Rune Activity by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/rune-activity-by-address-mempool-aware
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/runes/activity
Get Bitcoin rune transaction activity for a specific address including minting, transfers, and balance changes with mempool awareness.
# Wallet Satoshi Activity by Address (Mempool-aware)
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/addresses/wallet-satoshi-activity-by-address-mempool-aware
bitcoin/wallet-api/openapi.json get /wallet/addresses/{address}/activity
Get comprehensive Bitcoin address activity with mempool awareness for real-time wallet management and transaction tracking.
# Bitcoin - Wallet API
Source: https://docs.developer.gomaestro.org/bitcoin/wallet-api/overview
Bitcoin Wallet API for detailed address-level transaction activity, including satoshi tracking, inscription monitoring, and rune balance management.
Maestro's Bitcoin Wallet API delivers detailed transaction activity data at the address level, spanning native Bitcoin (satoshis) and metaprotocol layers like inscriptions and runes. This API enables deep visibility into balance changes, token movements, and asset-specific behaviors. Useful for powering explorers, wallets, or dashboards with granular insight into address-level history and asset interactions.
## Key Features
* **Satoshi Activity Tracking:** Track and analyze satoshi-level balance changes—including increases, decreases, and self-transfers—with timestamped precision. Historical balances are itemized by either block height or timestamp, enabling accurate auditing, time-based analysis, and USD-denominated valuation over time.
* **Inscription Insight:** Monitor Ordinals transactions, filtered by inscription ID, activity type (send/receive), or self-transfer logic to reduce noise from spam or internal moves.
* **Rune Transaction Logging:** Track rune minting, transfers, etchings, and balance changes for a given address, including support for filtering by specific rune.
* **Unified Metaprotocol View:** Fetch combined activity across satoshis, inscriptions, and runes in a single request to power holistic user or address histories.
* **Mempool Awareness:** Provides insight into the latest activity from the mempool by default. The system monitors for block reorganizations and automatically rolls back unconfirmed or invalidated trades, ensuring the data reflects the confirmed state of the chain.
## Key Benefits for Developers
Developers gain the ability to surface address-level insights without having to manually parse raw blockchain data. The Wallet API simplifies historical activity analysis, enables protocol-specific filtering, and lets developers build UX-enhancing features like transaction history views, asset trackers, and real-time alerts for wallet activity without managing indexing infrastructure.
# API Usage
Source: https://docs.developer.gomaestro.org/cardano/api-usage
Cardano API usage guide with authentication, pagination, rate limits, and best practices for Maestro's Cardano blockchain APIs.
## Authentication
You will need an `api-key` to access the Maestro API. You can obtain this key from the Maestro dApp Platform Dashboard.
## Examples
### GET Request
Example GET request for retrieving the chain tip:
```bash theme={null}
curl -X GET \
-H "api-key: " \
https://mainnet.gomaestro-api.org/v1/chain-tip
```
### POST Request
Example POST request for submitting a transaction:
```bash theme={null}
curl -X POST \
-H "Content-Type: application/cbor" \
-H "api-key: " \
--data @tx.signed \
https://mainnet.gomaestro-api.org/v1/submit/tx
```
# Security
To ensure the security of your API usage, follow these best practices:
* **Keep your API key private**: Never share it publicly (e.g., on GitHub, client-side code).
* **Prevent unauthorized usage**: Loss or misuse of your API key can result in the overuse of your account's available credits.
* **Secure your API key**: Implement proper methods for storing and accessing your `api-key`, especially in production environments.
# Cursor-based Pagination
Some Maestro endpoints use **Cursor-based Pagination to break large datasets into smaller, more manageable responses.** This method is particularly relevant when returning all the data in a single response would be inefficient or slow.
* **Improved data integrity and accuracy** when fetching multiple pages.
* **Prevents duplicates**, even when new blocks are processed between queries.
* **Optimized for infinite scroll**, enabling a smooth user experience by loading content as the user scrolls.
When using this method, responses will include a `next_cursor` string. This value should be passed as the `cursor` parameter in your next request to retrieve the next page of results.
## Example
* **Initial Response**: When you make an initial API call, the response might include a `"next_cursor": "AAAAAALfeKF8btdzaVvkGaetSS7e1AAF"`. This indicates that there are more results to retrieve.
* \*\*Using \*\*`next_cursor`: To get the next page of data, you need to include the `next_cursor` value in your next API request by adding it as a query parameter (`cursor`).
* **Modifying the Query**: Append the cursor value to your API request URL, like this:
```
?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF
```
* **Result**: The API will return the next set of results when this value is provided.
* \*\*End of Data: \*\*If the response includes `"next_cursor": null` then the end of the requested dataset has been reached.
**Other relevant query parameters are:**
| Parameter | Default | Description |
| :-------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `count` | `100` | Defines the maximum number of results per pagination page |
| `order` | `asc` | Specifies the sort order of the results. Acceptable values are `asc` (ascending) or `desc` (descending). This option is available only for specific endpoints. |
**Example**
```bash theme={null}
curl -L -X GET 'https://mainnet.gomaestro-api.org/v1/policy/f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a/utxos?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF' \
-H 'Accept: application/json' \
-H 'api-key: your-api-key'
```
# Computer Credits
Maestro uses **Compute Credits** to measure the computational resources consumed by your applications on its platform, similar to traditional cloud providers like Google Cloud or AWS. The number of credits assigned to each operation or method is based on the global average duration of that process,\*\* taking into account factors like complexity and computational intensity. \*\*
Learn more about how Compute Credits are allocated by exploring the **Subscription breakdown.**
Compute Credits provide a **fair, usage-based pricing model**, meaning you only pay for the computational resources your application actually uses, making it both **cost-efficient** and **flexible**.
# Request Limits
Maestro enforces two types of API rate limits:
* **Per day**: a set amount of credits consumed per day based on your [subscription](https://www.gomaestro.org/pricing) plan.
* **Per second**: a set amount of requests per second based on your [subscription](https://www.gomaestro.org/pricing) plan.
*For example, the ****Artist plan**** supports up to 10 requests per second.*
For more details on available packages or to upgrade your plan, refer to the [Pricing page](https://www.gomaestro.org/pricing).[ ](https://www.gomaestro.org/pricing)If your organization needs higher limits, [contact us](mailto:info@gomaestro.org) to discuss **Enterprise solutions**.
# Response Headers
Maestro includes the following headers in API responses to help manage usage:
| Header | Description |
| :------------------------------- | :----------------------------------------------------- |
| X-RateLimit-Limit-Second | Maximum allowed requests per second. |
| **X-RateLimit-Remaining-Second** | **Remaining allowed requests for the current second.** |
| X-Maestro-Credits-Limit | Total allowed credits for the day. |
| **X-Maestro-Credits-Remaining** | **Remaining credits for the day.** |
Be sure to monitor these values (in **bold**) and adjust your request rate accordingly to avoid hitting rate limits.
# Errors
Maestro follows standard HTTP response codes to indicate the success or failure of API requests:
| 2xx | Success |
| :-- | :----------------------------------------------------------- |
| 4xx | Client-side errors, such as missing or incorrect parameters. |
| 5xx | Server-side errors with Maestro. |
Refer to the [API Reference](/general/platform-overview) for detailed response codes for each endpoint.
# Stake account addresses
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-addresses
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/addresses
Get all payment addresses associated with a specific Cardano stake account for wallet management.
# Stake account assets
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-assets
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/assets
Get native assets controlled by addresses associated with a specific Cardano stake account.
# Stake account delegation history
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-delegation-history
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/delegations
Get delegation history for a Cardano stake account including stake pool changes and active epochs.
# Stake account history
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-history
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/history
Get comprehensive activity history for a Cardano stake account including all delegations and rewards.
# Stake account information
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-information
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}
Get comprehensive information about a Cardano stake account including delegation status and rewards.
# Stake account rewards
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-rewards
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/rewards
Get reward history for a Cardano stake account including staking rewards and withdrawal records.
# Stake account updates
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/accounts/stake-account-updates
cardano/blockchain-indexer-api/openapi.json get /accounts/{stake_addr}/updates
Get registration and deregistration history for a Cardano stake account with timestamp details.
# Address transaction count
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/address-transaction-count
cardano/blockchain-indexer-api/openapi.json get /addresses/{address}/transactions/count
Get the total number of transactions associated with a specific Cardano address for analytics and pagination.
# Address transactions
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/address-transactions
cardano/blockchain-indexer-api/openapi.json get /addresses/{address}/transactions
Get transaction history for a Cardano address with detailed input/output information and smart contract interactions.
# Balance by payment credential
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/balance-by-payment-credential
cardano/blockchain-indexer-api/openapi.json get /addresses/cred/{credential}/balance
Get balance information for a specific Cardano payment credential including ADA and native assets.
# Decode address
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/decode-address
cardano/blockchain-indexer-api/openapi.json get /addresses/{address}/decode
Decode a Cardano address to extract payment credentials, staking credentials, and network information.
# Payment credential transactions
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/payment-credential-transactions
cardano/blockchain-indexer-api/openapi.json get /addresses/cred/{credential}/transactions
Get transaction history for a specific Cardano payment credential with detailed transaction information.
# Transactions by multiple payment credentials
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/transactions-by-multiple-payment-credentials
cardano/blockchain-indexer-api/openapi.json post /addresses/cred/transactions
Get transaction history for multiple Cardano payment credentials in a single batch request.
# UTxO references at an address
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/utxo-references-at-an-address
cardano/blockchain-indexer-api/openapi.json get /addresses/{address}/utxo_refs
Get UTXO references for a Cardano address including transaction hash and output index pairs.
# UTxOs at an address
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/utxos-at-an-address
cardano/blockchain-indexer-api/openapi.json get /addresses/{address}/utxos
Get unspent transaction outputs (UTxOs) at a Cardano address including native assets, ADA amounts, and datum information.
# UTxOs by multiple addresses
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/utxos-by-multiple-addresses
cardano/blockchain-indexer-api/openapi.json post /addresses/utxos
Get UTXOs for multiple Cardano addresses in a single batch request for efficient wallet management.
# UTxOs by multiple payment credentials
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/utxos-by-multiple-payment-credentials
cardano/blockchain-indexer-api/openapi.json post /addresses/cred/utxos
Get UTXOs for multiple Cardano payment credentials in a single batch request for efficient querying.
# UTxOs by payment credential
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/addresses/utxos-by-payment-credential
cardano/blockchain-indexer-api/openapi.json get /addresses/cred/{credential}/utxos
Get unspent transaction outputs for a specific Cardano payment credential with asset details and values.
# Accounts of addresses holding assets of specific policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/accounts-of-addresses-holding-assets-of-specific-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/accounts
Get stake accounts associated with addresses holding assets from a specific Cardano minting policy.
# Addresses holding assets of specific policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/addresses-holding-assets-of-specific-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/addresses
Get list of addresses holding assets from a specific Cardano minting policy with balance information.
# Information about a policy of native assets
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/information-about-a-policy-of-native-assets
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}
Get detailed information about a Cardano minting policy including assets, metadata, and policy script details.
# List assets of a policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/list-assets-of-a-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/assets
Get comprehensive list of all native assets created under a specific Cardano minting policy.
# Transactions involving assets of policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/transactions-involving-assets-of-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/transactions
Get transaction history involving assets from a specific Cardano minting policy including transfers and mints.
# Transactions minting or burning assets of policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/transactions-minting-or-burning-assets-of-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/mints
Get minting and burning transaction history for assets under a specific Cardano minting policy.
# UTxOs containing assets of specific policy
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/asset-policy/utxos-containing-assets-of-specific-policy
cardano/blockchain-indexer-api/openapi.json get /policy/{policy}/utxos
Get unspent transaction outputs containing assets from a specific Cardano minting policy with asset details.
# Accounts of addresses holding specific asset
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/accounts-of-addresses-holding-specific-asset
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}/accounts
Get stake accounts associated with addresses holding a specific Cardano native asset.
# Native asset addresses
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/native-asset-addresses
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}/addresses
Get list of addresses holding a specific Cardano native asset with balance amounts and distribution statistics.
# Native asset information
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/native-asset-information
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}
Get detailed information about a Cardano native asset including metadata, supply, and minting policy details.
# Native asset mints and burns
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/native-asset-mints-and-burns
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}/mints
Get minting and burning history for a specific Cardano native asset including transaction details and amounts.
# Native asset transactions
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/native-asset-transactions
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}/transactions
Get transaction history for a specific Cardano native asset including transfers, mints, and burns.
# Native asset UTxOs
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/assets/native-asset-utxos
cardano/blockchain-indexer-api/openapi.json get /assets/{asset}/utxos
Get unspent transaction outputs (UTxOs) containing a specific Cardano native asset with address and amount details.
# Block information
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/blocks/block-information
cardano/blockchain-indexer-api/openapi.json get /blocks/{hash_or_height}
Get detailed information about a specific Cardano block by hash or height including transactions and metadata.
# Latest block information
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/blocks/latest-block-information
cardano/blockchain-indexer-api/openapi.json get /blocks/latest
Get information about the latest confirmed block on the Cardano blockchain including hash and timestamp.
# Datum by datum hash
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/datums/datum-by-datum-hash
cardano/blockchain-indexer-api/openapi.json get /datums/{datum_hash}
Get Cardano datum details by datum hash including CBOR data and JSON representation for smart contract interactions.
# Datums by hashes
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/datums/datums-by-hashes
cardano/blockchain-indexer-api/openapi.json post /datums
Get multiple Cardano datums by their hashes in a single request with CBOR and JSON representations for smart contracts.
# Resolve ADA Handle
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/ecosystem/resolve-ada-handle
cardano/blockchain-indexer-api/openapi.json get /ecosystem/adahandle/{handle}
Resolve an ADA Handle to its corresponding Cardano address for user-friendly address management.
# Current epoch details
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/epochs/current-epoch-details
cardano/blockchain-indexer-api/openapi.json get /epochs/current
Get current Cardano epoch information including parameters, pool statistics, and network metrics.
# Specific epoch details
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/epochs/specific-epoch-details
cardano/blockchain-indexer-api/openapi.json get /epochs/{epoch_no}
Get detailed information about a specific Cardano epoch including parameters, statistics, and block count.
# Blockchain system start
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/general/blockchain-system-start
cardano/blockchain-indexer-api/openapi.json get /system-start
Get the Cardano blockchain system start time and initial parameters used to bootstrap the network.
# Chain-tip
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/general/chain-tip
cardano/blockchain-indexer-api/openapi.json get /chain-tip
Get the current Cardano blockchain tip information including latest block hash, number, and slot.
# Era summary
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/general/era-summary
cardano/blockchain-indexer-api/openapi.json get /era-summaries
Get summary information about all Cardano blockchain eras including their start times and parameters.
# Protocol parameters
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/general/protocol-parameters
cardano/blockchain-indexer-api/openapi.json get /protocol-parameters
Get current Cardano blockchain protocol parameters including fees, limits, and governance settings.
# Cardano - Blockchain Indexer API
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/overview
Fast, structured access to Cardano on-chain data for building wallets, explorers, and dApps with real-time blockchain experiences.
The Blockchain Indexer API provides fast, structured access to on-chain data for Cardano and is designed for developers building wallets, explorers, dashboards, and blockchain-integrated apps.
From tracking addresses and transactions to inspecting blocks and UTXOs, the Indexer API offers a highly-performant and developer-friendly interface for building real-time blockchain experiences without running your own node or maintaining complex infrastructure.
## Key Features
* **Address Statistics & UTXOs**: Query the current balance, UTXOs, and transaction summaries for any blockchain address.
* **Transaction Lookup**: Retrieve transaction details including inputs, outputs, confirmations, and block inclusion.
* **Block Explorer Data**: Fetch block metadata by height, hash, or timestamp—including size, miner, difficulty, and transaction count.
* **Token & Asset Metadata**: Surface custom token info, metadata, and transfer activity across tracked chains.
* **Indexing & Activity Summaries**: Understand how an address or block is being used—number of inputs, outputs, sats in/out, and total movement.
## Key Benefits for Developers
The Blockchain Indexer API allows developers to access real-time blockchain data through simple REST endpoints without the burden of managing infrastructure. It’s built on Maestro’s high-performance backend, delivering low-latency and high-throughput responses that scale with your application. JSON responses are consistently structured for clarity, making them easy to plug into dApps, analytics platforms, or frontend dashboards. This API is trusted in production by wallets, explorers, and fintech applications that depend on reliable and accurate chain data.
# List registered stake pools
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/list-registered-stake-pools
cardano/blockchain-indexer-api/openapi.json get /pools
Get comprehensive list of all registered Cardano stake pools with their metadata and performance statistics.
# Stake pool blocks
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-blocks
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/blocks
Get list of blocks produced by a specific Cardano stake pool with timestamps and epoch information.
# Stake pool delegator history
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-delegator-history
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/delegators/{epoch_no}
Get historical snapshot of delegators for a Cardano stake pool at a specific epoch with stake amounts.
# Stake pool delegators
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-delegators
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/delegators
Get list of delegators staking to a specific Cardano stake pool with their stake amounts and addresses.
# Stake pool history
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-history
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/history
Get historical performance data for a Cardano stake pool including rewards, blocks, and delegation metrics.
# Stake pool information
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-information
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/info
Get detailed information about a specific Cardano stake pool including registration details and current status.
# Stake pool metadata
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-metadata
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/metadata
Get metadata information for a specific Cardano stake pool including name, description, and website details.
# Stake pool relays
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-relays
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/relays
Get relay node information for a specific Cardano stake pool including IP addresses and DNS names.
# Stake pool updates
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/pools/stake-pool-updates
cardano/blockchain-indexer-api/openapi.json get /pools/{pool_id}/updates
Get update history for a Cardano stake pool including registration changes and parameter modifications.
# Script by script hash
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/scripts/script-by-script-hash
cardano/blockchain-indexer-api/openapi.json get /scripts/{script_hash}
Get Cardano script details by script hash including Plutus script information and execution parameters.
# Address by transaction output reference
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/address-by-transaction-output-reference
cardano/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/outputs/{index}/address
Get the address associated with a specific Cardano transaction output by transaction hash and output index.
# CBOR bytes of a transaction
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/cbor-bytes-of-a-transaction
cardano/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/cbor
Get the CBOR-encoded bytes of a Cardano transaction for low-level parsing and analysis.
# Evaluate redeemers of a transaction
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/evaluate-redeemers-of-a-transaction
cardano/blockchain-indexer-api/openapi.json post /transactions/evaluate
Evaluate Cardano transaction redeemers to calculate execution units and fees for Plutus smart contract transactions.
# Transaction details
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/transaction-details
cardano/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}
Get detailed Cardano transaction information including inputs, outputs, metadata, and smart contract interactions by transaction hash.
# Transaction output by output reference
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/transaction-output-by-output-reference
cardano/blockchain-indexer-api/openapi.json get /transactions/{tx_hash}/outputs/{index}/txo
Get specific Cardano transaction output (UTxO) by transaction hash and output index with asset details and datum information.
# Transaction outputs by output references
Source: https://docs.developer.gomaestro.org/cardano/blockchain-indexer-api/transactions/transaction-outputs-by-output-references
cardano/blockchain-indexer-api/openapi.json post /transactions/outputs
Get multiple Cardano transaction outputs by their references in a single batch request for efficiency.
# Changelog
Source: https://docs.developer.gomaestro.org/cardano/changelog
Cardano API changelog with version updates, Conway era compatibility, new features, and improvements for Maestro's Cardano services.
## Overview
**Updated**:
* `/transactions/{tx_hash}` Transaction details
* New output fields: `reg_certs`, `unreg_certs`, `vote_delegations`, `stake_vote_delegations`, `stake_reg_delegations`, `vote_reg_delegations`, `stake_vote_reg_delegations`, `auth_committee_hot_certs`, `resign_committee_cold_certs`, `reg_drep_certs`, `unreg_drep_certs`, `update_drep_certs`
* Extended redeemer information: `votes` and `proposals`
**Updated**:
* Any endpoints returning Scripts (e.g. Asset Policy, UTxOs, Script by script hash)
* Added `plutusv3` Script type
* `/policy/{policy}` Asset Policy
* `/transactions/{tx_hash}/outputs/{index}/txo` Transaction output by output reference
* `/transactions/outputs` Transaction outputs by output references
* `/addresses/cred/utxos` UTxOs by multiple payment credentials
* `/addresses/cred/{credential}/utxos` UTxOs by payment credential
* `/addresses/utxos` UTxOs by multiple addresses
* `/addresses/{address}/utxos` UTxOs at an address
* `/scripts/{script_hash}` Script by script hash
**Updated**:
* `/transactions/evaluate` Evaluate redeemers of a transaction
* Added returning `redeemer_tag` of vote and propose
**Updated**:
* `/accounts/{stake_addr}/updates` Stake account updates
* Added returning `registration_deposit`
**Updated**:
* `/pools/{pool_id}/updates` Stake pool updates
* `active_epoch_no` no longer required
**Deprecated**:
* `/era-history` Era history
* Please use the improved `/era-summaries` Era summary
**Added**:
* `/era-summaries` Era summary
* Replaces deprecated `/era-history`
**Deprecated**:
* `/protocol-params` Protocol parameters
* Please use the improved `/protocol-parameters` Protocol parameters
**Added**:
* `/protocol-parameters` Protocol parameters
* Replaces deprecated `/protocol-params`
**Updated**:
* `/markets/dexs/{dex}` DEX pairs
* Added `pair`, `policy`, and `asset_name` filters
**Added**:
* Direct Swap Contract on Managed Contracts API
* `/contracts/directSwap/createOffer` Create an offer
* Create a new offer for direct swap
* `/contracts/directSwap/cancelOffer` Cancel an offer
* Cancel an existing offer for direct swap
* `/contracts/directSwap/getOffers` Get all offers
* Get all the existing offers for direct swap
* `/contracts/directSwap/getOffers/:address` Get user's offers
* Get all the existing offers for a specific user
* `/contracts/directSwap/fillOffer` Fill an offer
* Fill an existing offer for direct swap
**Updated**:
* `/markets/dexs/stats/{dex}/{pair}` DEX and Pair Stats
* Added USD conversion for latest price, 1d, 1w, and 1mo
**Updated**:
* `/markets/dexs/stats/{dex}/{pair}` DEX and Pair Stats
* Added `latest_price`, `market_cap`, `supply`, and `unique_holders`
**Updated**:
* `/markets/dexs/trades/{dex}/{pair}` DEX and Pair Trades
* Added returning `a_to_b`, indicating the direction of each trade
**Removed**:
* Previously deprecated endpoints:
* From v1.4.3: `/datum/{datum_hash}`
* From v1.4.1: `/assets/policy/{policy}`, `/assets/policy/{policy}/accounts`, `/assets/policy/{policy}/addresses`, `/assets/policy/{policy}/txs`, `/assets/policy/{policy}/utxos`, `/assets/{asset}/txs`, `/assets/{asset}/updates`
**Added**:
* `/markets/dexs/stats/{dex}/{pair}` Get DEX Stats
* Returns DEX and Token Stats over different timeframes
**Updated**:
* `/markets/dexs/ohlc/{dex}/{pair}` Get DEX OHLC
* Now includes change percentage within each candle
**Updated**:
* `/accounts/{stake_addr}/addresses` Stake account addresses
* Added an `include_empty` optional parameter to include all addresses ever seen on-chain
**Added**:
* `/addresses/cred/{credential}/balance` Balance by payment credential
* Return total amount of assets, including ADA, in UTxOs controlled by a specific payment credential
**Added**:
* `/accounts/{stake_addr}/delegations` Stake account delegation history
* Returns list of delegation actions relating to a stake account
**Updated**:
* `/accounts/{stake_addr}/history` Stake account history
* Added `order`: The order in which the results are sorted (by epoch number)
* `/accounts/{stake_addr}/rewards` Stake account rewards
* Added `order`: The order in which the results are sorted (by epoch number)
* `/accounts/{stake_addr}/updates` Stake account updates
* Added `order`: The order in which the results are sorted (by absolute slot)
**Updated**:
* `/transactions/outputs` Transaction outputs by output references
* Added an `allow_missing` parameter prevent returning a 404 if any output references are not found
**Updated**:
* Resolution and sort enums for DeFi Market API endpoints
* `/markets/dexs/trades/{dex}/{pair}` Get DEX trades
* `/markets/dexs/ohlc/{dex}/{pair}` Get DEX OHLC
**Added**:
* `/pools/{pool_id}/delegators/{epoch_no}` Stake pool delegator history
**Updated**:
* DeFi Market API - **Now out of Beta!**
**Added**:
* `/markets/dexs/trades/{dex}/{pair}` Get DEX trades
**Removed**:
* `/markets/dexs/prices/{dex}/{pair}` Get DEX prices
**Added**:
* `/markets/dexs/ohlc/{dex}/{pair}` Get DEX OHLC
# Overview
Source: https://docs.developer.gomaestro.org/cardano/index
Cardano blockchain APIs and services from Maestro. Access smart contract capabilities, native assets, staking features, and transaction management tools.
The [Cardano blockchain](https://cardanofoundation.org/) is a smart-contract-enabled proof-of-stake (PoS) blockchain based on the [Ouroboros consensus protocol](https://cardano.org/ouroboros/) offering [native liquid staking](https://cardano.org/stake-pool-delegation/). Cardano is provably secure, energy-efficient, and scalable. Its ledger employs the [Extended UTXO model](https://iohk.io/en/research/library/papers/the-extended-utxo-model/), similar to Bitcoin's UTxO model, but with enhanced capabilities like \*\*native asset issuance \*\*and \*\*smart contracts execution \*\*while maintaining \*\*robust security and scalability. \*\*
***
## Available Services
Maestro provides the following services, accessible across multiple Bitcoin networks:
## Available Networks
The service is available on the following Bitcoin networks:
| ***Network*** | ***Base URL*** |
| :----------------- | :------------------------------------- |
| **Mainnet** | `https://mainnet.gomaestro-api.org/v1` |
| **Pre-Production** | `https://preprod.gomaestro-api.org/v1` |
| **Preview** | `https://preview.gomaestro-api.org/v1` |
The Maestro API is currently versioned at `v1`. When making a query, `v1 `must be included in your base URL.
# Cancel an offer
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/direct-swap/cancel-an-offer
cardano/managed-contracts-api/openapi.json post /contracts/directSwap/cancelOffer
Cancel an existing peer-to-peer asset swap offer on Cardano and reclaim the locked assets.
# Create an offer
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/direct-swap/create-an-offer
cardano/managed-contracts-api/openapi.json post /contracts/directSwap/createOffer
Create a new peer-to-peer asset swap offer on Cardano using managed smart contracts for trustless token exchanges.
# Fill an offer
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/direct-swap/fill-an-offer
cardano/managed-contracts-api/openapi.json post /contracts/directSwap/fillOffer
Fill an existing peer-to-peer asset swap offer on Cardano to complete the trustless token exchange.
# Get all offers
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/direct-swap/get-all-offers
cardano/managed-contracts-api/openapi.json get /contracts/directSwap/getOffers
Get all active peer-to-peer asset swap offers on Cardano with filtering and pagination support.
# Get user's offers
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/direct-swap/get-users-offers
cardano/managed-contracts-api/openapi.json get /contracts/directSwap/getOffers/{address}
Get all direct swap offers created by a specific Cardano address with details and current status.
# End a multisig contract
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/multisig/end-a-multisig-contract
cardano/managed-contracts-api/openapi.json post /contracts/multisig/end
Terminate a multisignature contract and distribute remaining funds to specified beneficiaries.
# Initiate a multisig contract
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/multisig/initiate-a-multisig-contract
cardano/managed-contracts-api/openapi.json post /contracts/multisig/initiate
Initiate a multi-signature contract on Cardano requiring multiple parties to authorize transactions for enhanced security.
# Update a multisig contract
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/multisig/update-a-multisig-contract
cardano/managed-contracts-api/openapi.json post /contracts/multisig/update
Update an existing multisignature contract with new signers, thresholds, or transaction parameters.
# Cardano - Managed Contracts API
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/overview
Cardano Managed Contracts API for pre-deployed Plutus smart contracts including vesting, direct swaps, multisig, and staking functionality.
The Cardano Managed Contracts API provides a high-level interface for interacting with pre-deployed Plutus smart contracts on the Cardano blockchain. It abstracts the complexity of script interactions into intuitive endpoints, allowing developers to build and manage powerful dApps with minimal effort.
## Key Features
* **Vesting Contracts**: Create and manage time-based vesting schedules for tokens, enabling linear or staged release mechanisms.
* **Direct Swap Contracts**: Facilitate peer-to-peer swaps of native assets without relying on centralized intermediaries or third-party trust.
* **Single Asset Staking**: Launch staking campaigns where users can lock tokens and earn rewards. Includes full lifecycle: config, stake, update, withdraw, and reward distribution.
* **Subscription Payments**: Power recurring payment models using NFTs. Includes service creation, user account setup, subscription flows, and merchant fee withdrawals.
* **Multisig Smart Contracts**: Set up multi-party authorization schemes with thresholds, signer updates, and controlled fund distribution.
* **Unsigned Transaction Builder**: All actions return unsigned CBOR transactions (cbor\_hex, tx\_hash), enabling flexible signing with any wallet or custody solution.
## Key Benefits for Developers
Developers can leverage on-chain contracts without needing to write or deploy any Plutus code. The API offers simplified dApp integration through straightforward REST endpoints that manage complex workflows such as staking, vesting, and multisig operations. It’s fully compatible with Cardano Mainnet, Preprod, and Preview networks for seamless development and testing.
# Admin - Create the config for a new campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/admin--create-the-config-for-a-new-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/createConfig
Create configuration for a new single-asset staking campaign including rewards, duration, and staking parameters.
# Admin - Initialize the staking for a new campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/admin--initialize-the-staking-for-a-new-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/initStaking
Initialize a new single asset staking campaign with reward parameters and staking conditions.
# Admin - process rewards for a campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/admin--process-rewards-for-a-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/processRewards
Process and distribute rewards for a single asset staking campaign to all participating users.
# Get the state of a campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/get-the-state-of-a-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/stakingState
Get the current state and statistics of a single asset staking campaign including total stake and rewards.
# User - Staking token to a campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/user--staking-token-to-a-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/stakeToken
Stake tokens to a single-asset staking campaign to earn rewards based on the campaign configuration.
# User - Updating stake on a campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/user--updating-stake-on-a-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/updateStake
Update the amount of assets staked in a single asset staking campaign by increasing or decreasing stake.
# User - Withdrawing stake from a campaign
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/single-asset-staking/user--withdrawing-stake-from-a-campaign
cardano/managed-contracts-api/openapi.json post /contracts/singleAssetStaking/withdrawStake
Withdraw staked assets from a single asset staking campaign with earned rewards calculation.
# Create a subscription service
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/subscription/create-a-subscription-service
cardano/managed-contracts-api/openapi.json post /contracts/subscription/createService
Create a new subscription service contract on Cardano with customizable payment intervals and terms.
# Create a user account
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/subscription/create-a-user-account
cardano/managed-contracts-api/openapi.json post /contracts/subscription/createUserAccount
Create a new user account for subscription services with wallet integration and payment setup.
# Initiate a subscription
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/subscription/initiate-a-subscription
cardano/managed-contracts-api/openapi.json post /contracts/subscription/initSubscription
Initiate a recurring subscription payment on Cardano using NFT-based subscription management and automated billing.
# Unsubscribe
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/subscription/unsubscribe
cardano/managed-contracts-api/openapi.json post /contracts/subscription/unsubscribe
Cancel an active subscription and stop recurring payments with proper contract termination.
# Withdraw subscription fees
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/subscription/withdraw-subscription-fees
cardano/managed-contracts-api/openapi.json post /contracts/subscription/withdrawFees
Withdraw accumulated fees from subscription services to the service provider's wallet.
# Collect assets
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/vesting/collect-assets
cardano/managed-contracts-api/openapi.json post /contracts/vesting/collect/{beneficiary}
Collect vested assets that are ready for release according to the vesting schedule for a beneficiary.
# Lock assets
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/vesting/lock-assets
cardano/managed-contracts-api/openapi.json post /contracts/vesting/lock
Lock Cardano assets in a time-based vesting contract with configurable release schedules and beneficiary management.
# State of vesting assets
Source: https://docs.developer.gomaestro.org/cardano/managed-contracts-api/vesting/state-of-vesting-assets
cardano/managed-contracts-api/openapi.json get /contracts/vesting/state/{beneficiary}
Get the current state of vesting assets for a beneficiary including locked amounts and release schedule.
# DEX and Pair OHLC
Source: https://docs.developer.gomaestro.org/cardano/market-price-api/dex/dex-and-pair-ohlc
cardano/market-price-api/openapi.json get /dexs/ohlc/{dex}/{pair}
Get OHLC (Open, High, Low, Close) price data for a trading pair on a Cardano DEX with historical candles.
# DEX and Pair Trades
Source: https://docs.developer.gomaestro.org/cardano/market-price-api/dex/dex-and-pair-trades
cardano/market-price-api/openapi.json get /dexs/trades/{dex}/{pair}
Get recent trade data for a specific trading pair on a Cardano DEX with price and volume information.
# DEX pairs
Source: https://docs.developer.gomaestro.org/cardano/market-price-api/dex/dex-pairs
cardano/market-price-api/openapi.json get /dexs/{dex}
Get trading pairs available on a specific Cardano DEX with liquidity and volume information.
# DEXs
Source: https://docs.developer.gomaestro.org/cardano/market-price-api/dex/dexs
cardano/market-price-api/openapi.json get /dexs
Get list of supported Cardano decentralized exchanges (DEXs) with metadata and trading information.
# Cardano - Market Price API
Source: https://docs.developer.gomaestro.org/cardano/market-price-api/overview
Cardano Market Price API for DEX market data, OHLC candlesticks, trading pairs, and real-time price feeds across Cardano ecosystem.
The Market Price API provides streamlined access to decentralized exchange (DEX) market data across the Cardano ecosystem. Designed for developers building DeFi analytics tools, trading dashboards, portfolio trackers, or market research platforms, this API delivers real-time and historical data on token pairs, trades, and price movements in a clean, standardized format.
Whether you need candlestick OHLC data, a feed of raw trades, or a list of available DEXs and their trading pairs, the Market Price API offers fast and reliable endpoints that eliminate the complexity of sourcing and parsing on-chain market information.
## Key Features
* **DEX Discovery**: Retrieve a list of supported decentralized exchanges on Cardano.
* **Available Pairs by DEX**: Query all tradable token pairs for a specific DEX, with optional filtering by policy ID or asset name.
* **Candlestick (OHLC) Data**: Access historical and real-time price data in standard OHLC format for any token pair, with flexible time resolutions.
* **Raw Trade Data**: Stream or query executed trades for specific token pairs to support live market visualizations and analytics.
* **Multi-Network Support**: Access consistent market data across Cardano Mainnet, Preprod, and Preview environments.
## Key Benefits for Developers
Developers can integrate high-quality DEX market data into their applications without running complex ingestion pipelines or maintaining your own market indexers. The API provides predictable, well-structured JSON responses that are easy to work with and can be directly plugged into dashboards, bots, or analytics engines.
# SDKs
Source: https://docs.developer.gomaestro.org/cardano/sdks
Cardano SDKs and client libraries for multiple programming languages to integrate Maestro's Cardano APIs into your applications.
Maestro is dedicated to empowering developer communities by offering SDKs in multiple programming languages. We continually expand and refine these SDKs, and we welcome contributions from developers to help shape Maestro's capabilities. Your insights and feedback are invaluable in ensuring our tools meet language-specific needs and unlock new possibilities.
## Available SDKs
Currently, Maestro offers SDKs in the following languages:
| Official SDKs | |
| ------------- | ---------------------------------------------------------------- |
| Haskell | View |
| TypeScript | View |
| Go | View |
| Rust | View |
| Python | View |
| Unofficial SDKs | |
| --------------- | ------------------------------------------------------------------- |
| Java | View |
## Language-Specific Integrations
For developers proficient in Haskell or TypeScript, Maestro offers specialized integrations:
* **Atlas:** Available for Haskell developers.
* **Mesh and Lucid:** Available for TypeScript developers.
These integrations provide deeper access to Maestro’s APIs, allowing for more robust and efficient development.
## Community Call for Contributors
Our SDKs are constantly evolving to keep pace with the rapid expansion of Maestro's services, and we rely on community support to maintain and enhance them. We welcome contributions to add new API integrations, improve existing features, and ensure our tools stay up-to-date.
These SDKs are open-source, reflecting our commitment to building a vibrant ecosystem of tools and APIs that enhance the Maestro developer experience. Your contributions play a crucial role in making this possible.
**Contribute Now:** [github.com/maestro-org](https://github.com/maestro-org)
# Cardano - Transaction Manager API
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/overview
Streamlined Cardano transaction submission and monitoring with turbo features, webhooks, and historical tracking for reliable transaction processing.
The Transaction Manager API provides a streamlined way to submit, monitor, and manage Cardano transactions with advanced features like turbo submission, webhook-based monitoring, and historical tracking. Designed for applications that require reliable transaction processing, it ensures your signed transactions are quickly propagated through the network while giving you real-time visibility into their state.
Whether you’re building wallets, payment processors, or DeFi protocols, the Transaction Manager API abstracts away the complexity of low-level transaction handling, offering secure, high-performance endpoints for transaction submission and lifecycle monitoring.
## Key Features
* **Standard Transaction Submission**: Submit already serialized CBOR transactions to the Cardano network for processing.
* **Turbo Transaction Submission**: Accelerate transaction propagation with Maestro’s Turbo Submit feature, including built-in monitoring.
* **Transaction State Retrieval**: Query the current status of a transaction by its hash to check whether it’s pending, confirmed, or failed.
* **Transaction History**: Retrieve paginated records of previously submitted transactions for your project.
* **Webhook Integration**: Set up webhooks to receive push notifications on transaction updates, confirmations, and failures.
* **Multi-Network Support**: Access the same functionality across Mainnet, Preprod, and Preview environments.
## Key Benefits for Developers
The turbo submission feature helps ensure transactions are quickly included in blocks, while webhook-based notifications let your applications react to status changes in real time. By providing a unified API for submission, tracking, and history retrieval, it enables faster development cycles, reduces operational complexity, and ensures consistent transaction performance across Cardano environments.
# Turbo submit transaction
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/transaction-manager/turbo-submit-transaction
cardano/transaction-manager-api/openapi.json post /txmanager/turbosubmit
Submit a Cardano transaction with priority processing for faster confirmation and reduced latency.
# Get Transaction State
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/transactions/get-transaction-state
cardano/transaction-manager-api/openapi.json get /txmanager/{txhash}/state
Get the current confirmation state and status of a submitted Cardano transaction by hash.
# Submit a Transaction
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/transactions/submit-a-transaction
cardano/transaction-manager-api/openapi.json post /txmanager
Submit a signed Cardano transaction to the network with automatic retry logic and confirmation tracking.
# Transaction History
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/transactions/transaction-history
cardano/transaction-manager-api/openapi.json get /txmanager/history
Get transaction submission history and status for all transactions submitted through the transaction manager.
# Create a Webhook
Source: https://docs.developer.gomaestro.org/cardano/transaction-manager-api/webhooks/create-a-webhook
post /webhooks/project/{project_id}
Create a new webhook for a Cardano project to receive real-time notifications about transaction events and confirmations.
# GET Transaction Output by Reference
Source: https://docs.developer.gomaestro.org/cardano/tutorials-and-guides/get-transaction-output-by-reference
Tutorial guide to retrieve Cardano transaction outputs by reference using Maestro's Blockchain Indexer API for UTXO queries.
## Prerequisites
Before submitting an API request, ensure you have completed the following:
* Created an Account
* Created a Project
## Steps to Submit an API Request
The [Blockchain Indexer]() API allows applications to retrieve on-chain data and submit transactions.
In this example, we will use the `Pre-Production Cardano` network as the selected network for our project.
### 1. Select the Network
* Ensure your project is configured to use the **Pre-Production Cardano network**.
### 2. Retrieve Transaction Output
* Use the following endpoint to get detailed information about a transaction and its output UTxO:
```
/transactions/{tx_hash}/outputs/{index}/txo
```
### 3. Specify Path Parameters
* Include the required path parameters in your request:
| Parameter | Data Type | Description | Required |
| :-------- | :-------- | :----------------------------------------------------- | :------- |
| `tx_hash` | String | The unique identifier of the transaction. | yes |
| `index` | Integer | The output index is specifying which UTxO to retrieve. | yes |
### 4. Specify Query Parameters (Optional)
* Include **optional** query parameters as needed:
| Parameter | Data Type | Description | Required |
| :---------- | :-------- | :------------------------------------------------------------------------------------ | :------- |
| `with_cbor` | Boolean | Set to `true` to include the CBOR encoding of the transaction output in the response. | no |
### 5. Send the API Request
* Use cURL or your preferred tool to send the API request:
For this example, we will use:
* `tx_hash`: **9907c1bcab96889368d975ec1964e2fedfef22ce4a0e367bf9cb621b9f0dcb4a**
* `index`: **0**
* `with_cbor`: **true**
```bash theme={null}
curl -X GET \
-H "api-key: " \
-H 'Accept: application/json' \
https://preprod.gomaestro-api.org/v1/transactions/9907c1bcab96889368d975ec1964e2fedfef22ce4a0e367bf9cb621b9f0dcb4a/outputs/0/txo?resolve_datums=true&with_cbor=true
```
### 6. Review the Response
The API will return a response like the following:
```json theme={null}
"data": {
"tx_hash": "9907c1bcab96889368d975ec1964e2fedfef22ce4a0e367bf9cb621b9f0dcb4a",
"index": 0,
"assets": [
{
"unit": "lovelace",
"amount": 7280082022
},
{
"unit": "34250edd1e9836f5378702fbf9416b709bc140e04f668cc3552085184154414441636f696e",
"amount": 10824
}
],
"address": "addr_test1vpfwv0ezc5g8a4mkku8hhy3y3vp92t7s3ul8g778g5yegsgalc6gc",
"datum": null,
"reference_script": null,
"txout_cbor": "a200581d6052e63f22c5107ed776b70f7b92248b02552fd08f3e747bc74509944101821b00000001b1ed3c66a1581c34250edd1e9836f5378702fbf9416b709bc140e04f668cc355208518a1494154414441636f696e192a48"
},
"last_updated": {
"timestamp": "2024-09-06 13:56:56",
"block_hash": "ca6cf1b408ee8eb02019bce77995c5ed5983c2b553b1b6b2fcecfaaf72d1fc59",
"block_slot": 69947816
}
```
### 7. Understanding the Response
| **Term** | **Definition** |
| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| `tx_hash` | The unique hash identifier of a transaction. |
| `index` | The index position of the transaction output (UTxO). |
| `assets unit` | The reference for native assets, either `hex(policy_id)#hex(asset_name)` or `lovelace`. |
| `assets quantity` | The quantity of the native asset. |
| `address` | The address controlling the UTxO. |
| `datum type` | Type of datum: either `inline` or `hash`. |
| `datum hash` | The hash of the datum. |
| `datum bytes` | Hex-encoded CBOR bytes of the datum (`null` if datum type is `hash` and corresponding datum bytes have not been seen on-chain). |
| `datum json` | JSON format of the datum value. |
| `reference_script type` | The type of reference script: `native`, `plutusv1`, or `plutusv2`. |
| `reference_script hash` | The hash of the reference script. |
| `reference_script bytes` | The script bytes (`null` if the script is `native`). |
| `reference_script json` | JSON format of the script. |
# Monitor Transactions
Source: https://docs.developer.gomaestro.org/cardano/tutorials-and-guides/monitor-transactions
Tutorial guide to monitor Cardano transactions using Maestro APIs with real-time tracking and notification setup.
## Prerequisites
Before you start monitoring transactions, make sure you have:
* Created an Account
* Created a Project
* Access to the **Transactions** page on your Maestro dashboard.
## Overview
The **Transaction Manager & Monitoring System** enables you to track the entire lifecycle of all transactions submitted via the Maestro API. Stay updated on each transaction’s status—from pending in the mempool, to being accepted on-chain, rejected by a node, or rolled back by the network.
Real-time state change notifications are available via [Webhooks]() created on the platform Transaction page.
### Cardano Example
### Supported Transaction States
| Rejected | Rejected by the block producer due to an invalid transaction. |
| :--------------------- | :----------------------------------------------------------------------------------- |
| Pending | Transaction successfully submitted and waiting in a mempool to be accepted on-chain. |
| Failed | Communication to the node has failed. |
| Timedout (Coming Soon) | Transaction is in the mempool but has exceeded its configured time-to-live. |
| Onchain | Transaction is part of a minted block. |
| Rolledback | Transaction has been removed from the chain due to a network rollback. |
### Create a Webhook URL
* Go to the [**Transaction**](https://dashboard.gomaestro.org/) page of your dashboard.
* Scroll down to *Transaction Events Listening*
* Click `+ Create webhook`.
* Select your project, give your webhook a name, and specify its URL.
## Webhook Transaction Notifications
The webhook JSON payloads have the following schema:
```json theme={null}
{
"tx_hash": "84bc33c0336a91f1a42722da8e70b37…",
"state": "onchain",
"timestamp": "2023-01-06T06:37:23+00:00",
"block_number": 8115321,
"metadata": {...}
}
```
| Field | Description |
| :--------------------- | :------------------------------------------------------------------------- |
| tx\_hash | Transaction hash. |
| state | Current state of the transaction. |
| timestamp | UTC timestamp of the transaction state change. |
| block\_number | Block number that your transaction is in if it has been accepted on-chain. |
| metadata (coming soon) | Additional details about your transaction's state. |
# POST a Turbo Transaction
Source: https://docs.developer.gomaestro.org/cardano/tutorials-and-guides/post-a-turbo-transaction
Tutorial guide to submit Cardano Turbo transactions for fast and efficient transaction processing using Maestro's Turbo API.
## Prerequisites
Before submitting an API request, ensure you have completed the following:
* Create an Account
* Create a Project
* Installed the [Eternl wallet](https://eternl.io/)
You need a Maestro **Composer-level subscription or higher to access the Turbo Transactions feature**. Otherwise, you can use the Submit Transaction[ ]()endpoint.
## Steps to Submit an API Request
Turbo Transactions *supercharge your transaction submission* processes. This guide will walk you through generating a transaction on Eternl and sending it to Maestro's Turbo Transaction endpoint.
### 1. Prepare Your Wallet
* Switch the network to `Pre-Production Testnet` by selecting it from the bottom-right selector of the Eternl wallet interface.
* **Create or restore two separate wallets** in [Eternl ]()to test the transaction.
* After creating the wallets, disable the `Transaction Auto Submit` option.
* Find your **w**allet address in the Eternl dashboard under the `Receive` tab.
* Send test ADA (tADA) to one (or both) wallets using the [Cardano Faucet](https://docs.cardano.org/cardano-testnet/tools/faucet)[ here](https://docs.cardano.org/cardano-testnet/tools/faucet).

### 2. Configure Eternl to Use Maestro's Turbo Submit Endpoint
* Open Eternl `App Settings`
* Expand the `Custom Submit API Endpoint` section and click `Add`
* Enter the below **Turbo Transaction** Submit API URL, replacing `` with your project key found in [your project dashboard.](https://dashboard.gomaestro.org/login)
```
https://preprod.gomaestro-api.org/v1/txmanager/turbosubmit?api-key=
```

* Click `Save`
- If your subscription does not support **Turbo Transactions**, you can try the standard \*\*Submit \*\*API.
- Upgrade to the Pay-as-you-go **Conductor** [subscription](https://www.gomaestro.org/pricing) for easy access and support for Turbo Transactions.
### 3. Generating a Transaction
* Go to the `Send` tab
* Enter the receiving wallet address to create and sign a transaction between the two test wallets. Then, specify the amount of test ADA to send.
* Enter your **spending password** and click `Sign`.

### 4. Submit the Transaction
**Option 1**
* Click `Submit` to hit the **Turbo Transaction** endpoint via Eternl.
**Option 2**
Click `Download(signed)`
* Copy the `cBorHex` from the downloaded transaction file. In this example, that will be:
```
> 84a500818258206c4200b0697da7bb625007431df049c70fcc6f548a35f706f9f3356e2c91ee51000186825839008f0bb4f9da382fc5c4926d55130ffbc6f9b4df9461ca922dd310aade6e923c8acd41268395174a364a586ea99a26ba526aa16a3aead7a3ef1a004c4b4082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71b0000000129b6e78b82583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a94dcd36082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a4a6e69b082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a4a6e69b082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a004c4b40021a0002bf35031a042bb5290800a10081825820a92c0a0ddb77ae18ea28e7bcd7f6966af99f32a9a73fc84c5c2c0737f6e8903b5840307e1b7cfedbf33bc167a1779aa72a5379c2461caba02becb2786c4688af48f9c72029f89839d664848145c3d4e719a2122820bc188d279ded4f9c9e59c6e706f5f6
```
* Run the following command to create a binary stream:
```
> TRANSACTION=84a500818258206c4200b0697da7bb625007431df049c70fcc6f548a35f706f9f3356e2c91ee51000186825839008f0bb4f9da382fc5c4926d55130ffbc6f9b4df9461ca922dd310aade6e923c8acd41268395174a364a586ea99a26ba526aa16a3aead7a3ef1a004c4b4082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71b0000000129b6e78b82583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a94dcd36082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a4a6e69b082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a4a6e69b082583900e55b137c7911b75f8f8b5c83f82107e9c5a40d03e6eeb58bad2b4227a720eb63cb5bd34ac4923e8b114c672f543a0e98a1e18492bc3f2da71a004c4b40021a0002bf35031a042bb5290800a10081825820a92c0a0ddb77ae18ea28e7bcd7f6966af99f32a9a73fc84c5c2c0737f6e8903b5840307e1b7cfedbf33bc167a1779aa72a5379c2461caba02becb2786c4688af48f9c72029f89839d664848145c3d4e719a2122820bc188d279ded4f9c9e59c6e706f5f6
> xxd -r -p <<< ${TRANSACTION} > tx.signed.cbor.preprod
```
* Use your project API key to submit the transaction to the Maestro endpoint:
`/txmanager/turbosubmit`
```
> curl -X POST -H "Content-Type: application/cbor" -H "api-key: " --data-binary @tx.signed.cbor.preprod https://preprod.gomaestro-api.org/v1/txmanager/turbosubmit
```
The response is the `transaction hash` of the submitted transaction.
# API Usage
Source: https://docs.developer.gomaestro.org/dogecoin/api-usage
Dogecoin API usage guide with authentication, pagination, rate limits, and best practices for Maestro's Dogecoin blockchain APIs.
## Authentication
You will need an `api-key` to access the Maestro API. You can obtain this key from the Maestro dApp Platform Dashboard.
## Examples
### GET Request
Example GET request for retrieving the chain tip:
```bash theme={null}
curl -X GET \
-H "api-key: " \
https://xdg-mainnet.gomaestro-api.org/v0/chain-tip
```
### POST Request
Example POST request for submitting a transaction:
```bash theme={null}
curl -X POST \
-H "Content-Type: application/cbor" \
-H "api-key: " \
--data @tx.signed \
https://xdg-mainnet.gomaestro-api.org/v0/submit/tx
```
# Security
To ensure the security of your API usage, follow these best practices:
* **Keep your API key private**: Never share it publicly (e.g., on GitHub, client-side code).
* **Prevent unauthorized usage**: Loss or misuse of your API key can result in the overuse of your account's available credits.
* **Secure your API key**: Implement proper methods for storing and accessing your `api-key`, especially in production environments.
# Cursor-based Pagination
Some Maestro endpoints use **Cursor-based Pagination to break large datasets into smaller, more manageable responses.** This method is particularly relevant when returning all the data in a single response would be inefficient or slow.
* **Improved data integrity and accuracy** when fetching multiple pages.
* **Prevents duplicates**, even when new blocks are processed between queries.
* **Optimized for infinite scroll**, enabling a smooth user experience by loading content as the user scrolls.
When using this method, responses will include a `next_cursor` string. This value should be passed as the `cursor` parameter in your next request to retrieve the next page of results.
## Example
* **Initial Response**: When you make an initial API call, the response might include a `"next_cursor": "AAAAAALfeKF8btdzaVvkGaetSS7e1AAF"`. This indicates that there are more results to retrieve.
* \*\*Using \*\*`next_cursor`: To get the next page of data, you need to include the `next_cursor` value in your next API request by adding it as a query parameter (`cursor`).
* **Modifying the Query**: Append the cursor value to your API request URL, like this:
```
?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF
```
* **Result**: The API will return the next set of results when this value is provided.
* \*\*End of Data: \*\*If the response includes `"next_cursor": null` then the end of the requested dataset has been reached.
**Other relevant query parameters are:**
| Parameter | Default | Description |
| :-------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `count` | `100` | Defines the maximum number of results per pagination page |
| `order` | `asc` | Specifies the sort order of the results. Acceptable values are `asc` (ascending) or `desc` (descending). This option is available only for specific endpoints. |
**Example**
```bash theme={null}
curl -L -X GET 'https://mainnet.gomaestro-api.org/v1/policy/f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a/utxos?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF' \
-H 'Accept: application/json' \
-H 'api-key: your-api-key'
```
# Computer Credits
Maestro uses **Compute Credits** to measure the computational resources consumed by your applications on its platform, similar to traditional cloud providers like Google Cloud or AWS. The number of credits assigned to each operation or method is based on the global average duration of that process,\*\* taking into account factors like complexity and computational intensity. \*\*
Learn more about how Compute Credits are allocated by exploring the **Subscription breakdown.**
Compute Credits provide a **fair, usage-based pricing model**. This means you only pay for the computational resources your application actually uses, making it both **cost-efficient** and **flexible**.
# Request Limits
Maestro enforces two types of API rate limits:
* **Per day**: a set amount of credits consumed per day based on your [subscription](https://www.gomaestro.org/pricing) plan.
* **Per second**: a set amount of requests per second based on your [subscription](https://www.gomaestro.org/pricing) plan.
*For example, the *Artist plam* supports up to 10 requests per second.*
For more details on available packages or to upgrade your plan, refer to the [Pricing page](https://www.gomaestro.org/pricing). If your organization needs higher limits, [contact us](mailto:info@gomaestro.org) to discuss **Enterprise solutions**.
# Response Headers
Maestro includes the following headers in API responses to help manage usage:
| Header | Description |
| :------------------------------- | :----------------------------------------------------- |
| X-RateLimit-Limit-Second | Maximum allowed requests per second. |
| **X-RateLimit-Remaining-Second** | **Remaining allowed requests for the current second.** |
| X-Maestro-Credits-Limit | Total allowed credits for the day. |
| **X-Maestro-Credits-Remaining** | **Remaining credits for the day.** |
Be sure to monitor these values (in **bold**) and adjust your request rate accordingly to avoid hitting rate limits.
# Errors
Maestro follows standard HTTP response codes to indicate the success or failure of API requests:
| 2xx | Success |
| :-- | :----------------------------------------------------------- |
| 4xx | Client-side errors, such as missing or incorrect parameters. |
| 5xx | Server-side errors with Maestro. |
Refer to the [API Reference](/general/platform-overview) for detailed response codes for each endpoint.
# DRC20 by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/drc20-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/drc20
Get DRC-20 token balances and holdings for a specific Dogecoin address with token details and amounts.
# DRC20 Transfer Inscriptions by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/drc20-transfer-inscriptions-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/transfer_inscriptions
Get DRC-20 transfer inscriptions for a Dogecoin address including token movements and transfer details.
# Dune UTxOs by Address and Dune
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/dune-utxos-by-address-and-dune
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/dunes/{dune}
Get unspent transaction outputs containing a specific Dogecoin Dune token for a particular address.
# Dunes by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/dunes-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/dunes
Get all Dogecoin Dune token balances and holdings for a specific address with amounts and metadata.
# Inscriptions by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/inscriptions-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/inscriptions
Get all Dogecoin inscriptions associated with a specific address including metadata and content information.
# Total Balance by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/total-balance-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/balance
Get total Dogecoin balance for an address including confirmed and unconfirmed amounts with USD valuation.
# Transactions by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/transactions-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/txs
Get transaction history for a Dogecoin address with detailed input/output information and pagination support.
# UTxOs by Address
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/addresses/utxos-by-address
dogecoin/blockchain-indexer-api/openapi.json get /addresses/{address}/utxos
Get unspent transaction outputs (UTXOs) for a Dogecoin address with real-time mempool awareness and rollback protection.
# DRC20 Holders
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/drc20/drc20-holders
dogecoin/blockchain-indexer-api/openapi.json get /assets/drc20/{ticker}/holders
Get list of addresses holding a specific DRC-20 token with their balance amounts and distribution statistics.
# DRC20 Info
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/drc20/drc20-info
dogecoin/blockchain-indexer-api/openapi.json get /assets/drc20/{ticker}
Get detailed information about a specific Dogecoin DRC-20 token including supply, holders, and deployment details.
# List DRC20
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/drc20/list-drc20
dogecoin/blockchain-indexer-api/openapi.json get /assets/drc20
Get comprehensive list of Dogecoin DRC-20 tokens with metadata, supply information, and holder statistics.
# Dunes Info
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/dunes/dunes-info
dogecoin/blockchain-indexer-api/openapi.json get /assets/dunes/{dune}
Get detailed information about a specific Dogecoin Dune token including metadata, supply, and holder statistics.
# Holders by Dune
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/dunes/holders-by-dune
dogecoin/blockchain-indexer-api/openapi.json get /assets/dunes/{dune}/holders
Get list of addresses holding a specific Dogecoin Dune token with balance amounts and holder statistics.
# List Dunes
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/dunes/list-dunes
dogecoin/blockchain-indexer-api/openapi.json get /assets/dunes
Get comprehensive list of Dogecoin Dunes tokens with metadata, supply information, and trading statistics.
# UTxOs by Dunes
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/dunes/utxos-by-dunes
dogecoin/blockchain-indexer-api/openapi.json get /assets/dunes/{dune}/utxos
Get unspent transaction outputs (UTxOs) containing a specific Dogecoin Dune token with address and amount details.
# Content by Inscription ID
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/inscriptions/content-by-inscription-id
dogecoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}/content_body
Get the content body of a Dogecoin Ordinals inscription by inscription ID including binary data and metadata.
# Inscription Info
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/inscriptions/inscription-info
dogecoin/blockchain-indexer-api/openapi.json get /assets/inscriptions/{inscription_id}
Get detailed information about a Dogecoin Ordinals inscription including metadata, content type, and creation details.
# Dogecoin - Blockchain Indexer API
Source: https://docs.developer.gomaestro.org/dogecoin/blockchain-indexer-api/overview
The Dogecoin Blockchain Indexer API provides structured, high-performance access to on-chain data for Dogecoin, including addresses, transactions, UTxOs, inscriptions, and metaprotocol assets like DRC20 tokens and Dunes. This service is useful for developers building explorers, wallets, trading platforms, and analytics tools.
## Key Features
* **Address Insights**: Retrieve balances, UTxOs, transaction history, inscriptions, DRC20 tokens, and Dunes tied to a specific address.
* **DRC20 Token Support**: List all deployed DRC20 tokens, get token details, track holders, and inspect transfer inscriptions.
* **Dunes Asset Data**: Discover and query Dunes metadata, holders, and UTxOs with full historical and pagination support.
* **Inscription Indexing**: Retrieve all inscriptions for an address, get detailed metadata, and stream raw inscription content.
* **Transaction Lookups**: List transactions involving an address, with filtering and pagination for efficient history retrieval.
* **UTxO Management**: Query all UTxOs for an address or asset, with options to filter dust or exclude metaprotocol-related UTxOs.
* **Multi-Network Access**: Available for both Dogecoin Mainnet and Testnet environments.
## Key Benefits for Developers
This service enables developers to integrate rich Dogecoin blockchain and metaprotocol data directly into their applications without building their own indexing infrastructure. This unified data layer for both native Dogecoin activity and advanced protocols like DRC20 and Dunes allows teams to focus on building user-facing features while ensuring reliable, scalable access to the chain’s full history.
# Changelog
Source: https://docs.developer.gomaestro.org/dogecoin/changelog
Dogecoin API changelog with version updates, new features, improvements, and breaking changes for Maestro's Dogecoin services.
Improved
**Node RPC moved to dedicated folder**
`/addresses/{address}/inscriptions`
* Updates response schema. Backward compatible
`/assets/dunes/{dune}`
* removed field: `data.total_utxos`
Added
**New Inscription Endpoints**
`/addresses/{address}/inscriptions`
* List of all inscriptions which reside at a specific address of script pubkey
`/assets/inscriptions/{inscription_id}`
* Information about an inscription
`/assets/inscriptions/{inscription_id}/content_body`
* Paginated response of inscription content body byte array
Added
**Node RPC moved to dedicated folder**
`/rpc/block/*`
* endpoints moved to Node RPC folder
`/rpc/mempool/*`
* endpoints moved to Node RPC folder
`/rpc/transaction/*`
* endpoints moved to Node RPC folder
Added
**New DRC20 Transfer Inscriptions**
`addresses/\{address}/transfer\inscriptions`
* DRC20 Transfer Inscriptions by Address
Added
**Filter UTxO without Runes and Inscriptions**
`/addresses/{address}/utxos`
* `exclude_metaprotocols` flag to allow excluding metaprotocol UTxOs in Dunes and inscriptions. To use, append the full query parameter `?exclude_metaprotocols=true`
Improved
**Adding Runes Circulating supply**
`/assets/dunes/{rune}`;
* Added `circulating_supply` to provide the current amount of a specific Dune in circulation.
Added
**New Dunes Holders**
`/assets/dunes/{dune}/holders`
* List of all addresses that hold the specified Dune, with the respective amounts.
Added
**New Transaction Details**
`/rpc/transactions/{tx_hash}`
* Transaction Information
Added
**Dune UTxOs by Address and Dune**
`/addresses/{address}/dunes/{dune}`
* Returns all UTxOs controlled by the specified address or script pubkey that contain a specified type of Dune;
Improved
**Ignore dust UTxO filter**
`/addresses/\{address}/utxos`
* Added `filter_dust_threshold` filter to ignore UTxOs containing less than specified shibes.
# Overview
Source: https://docs.developer.gomaestro.org/dogecoin/index
Dogecoin blockchain APIs and services from Maestro. Access Blockchain Indexer, DRC20 tokens, Dunes, inscriptions, and node RPC functionality.
The [**Dogecoin blockchain**](https://dogecoin.com/) is a decentralized digital currency network that supports peer-to-peer transactions. It uses a proof-of-work (PoW) consensus mechanism similar to Bitcoin but features quicker block times and a more abundant supply. Originally created as a “meme” cryptocurrency, Dogecoin has gained a large community following and a notable market presence.
## Available Services
Maestro provides the following services, accessible across multiple Bitcoin networks:
## Available Networks
The service is available on the following Bitcoin networks:
| Networ | Base URL |
| :---------- | :----------------------------------------- |
| **Mainnet** | `https://xdg-mainnet.gomaestro-api.org/v0` |
| **Testnet** | `https://xdg-testnet.gomaestro-api.org/v0` |
The Maestro API is currently versioned at `v0`. When making a query, `v0` must be included in your base URL.
# Block Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/blocks/block-info
dogecoin/node-rpc-api/openapi.json get /block/{height_or_hash}
Get detailed Dogecoin block information by block height or hash including transactions, size, and mining details.
# Block Range Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/blocks/block-range-info
dogecoin/node-rpc-api/openapi.json get /block/range/{start_height}/{end_height}
Get information about a range of Dogecoin blocks between specified start and end heights.
# Latest Block
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/blocks/latest-block
dogecoin/node-rpc-api/openapi.json get /block/latest
Get the latest block information from the Dogecoin network including block height, hash, and transaction count.
# Recent Block Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/blocks/recent-block-info
dogecoin/node-rpc-api/openapi.json get /block/recent/{count}
Get information about the most recent Dogecoin blocks with configurable count limit.
# Blockchain Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/general/blockchain-info
dogecoin/node-rpc-api/openapi.json get /general/info
Get Dogecoin blockchain general information including network stats, block height, difficulty, and node status.
# Mempool Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/mempool/mempool-info
dogecoin/node-rpc-api/openapi.json get /mempool/info
Get Dogecoin mempool information including size, bytes, usage, and fee statistics for transaction queue management.
# Mempool Transaction Ancestors
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/mempool/mempool-transaction-ancestors
dogecoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}/ancestors
Get ancestor transactions of a specific Dogecoin transaction currently in the mempool.
# Mempool Transaction Descendants
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/mempool/mempool-transaction-descendants
dogecoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}/descendants
Get descendant transactions of a specific Dogecoin transaction currently in the mempool.
# Mempool Transaction Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/mempool/mempool-transaction-info
dogecoin/node-rpc-api/openapi.json get /mempool/transactions/{tx_hash}
Get detailed information about a specific Dogecoin transaction in the mempool including fees and dependencies.
# Mempool Transactions
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/mempool/mempool-transactions
dogecoin/node-rpc-api/openapi.json get /mempool/transactions
Get list of all transactions currently in the Dogecoin mempool awaiting confirmation.
# Dogecoin - Node RPC API
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/overview
The Dogecoin Node RPC API provides direct, low-latency access to the Dogecoin blockchain for querying network data, retrieving transaction and block details, monitoring mempool activity, and broadcasting transactions. This service is useful for developers building wallets, block explorers, trading systems, or other blockchain-integrated applications.
## Key Features
* **Blockchain Information**: Retrieve real-time network status, including chain height, difficulty, chainwork, and consensus parameters.
* **Block Data Access**: Get the latest block, fetch blocks by height or hash, and retrieve recent or ranged block history.
* **Transaction Retrieval**: Query full transaction details by hash, including inputs, outputs, confirmations, and raw hex data.
* **Transaction Submission**: Broadcast signed transactions directly to the Dogecoin network.
* **Mempool Monitoring**: Access mempool statistics, view all pending transaction hashes, retrieve detailed mempool transaction info, and explore ancestor/descendant relationships.
* **Multi-Network Support**: Available on both Dogecoin Mainnet and Testnet environments.
## Key Benefits for Developers
The API provides a consistent, high-performance interface for querying chain data, monitoring network activity, and broadcasting transactions, all while returning structured JSON for seamless integration.
# Send Transaction
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/transactions/send-transaction
dogecoin/node-rpc-api/openapi.json post /transaction/submit
Submit a signed Dogecoin transaction to the network for processing and inclusion in the blockchain.
# Transaction Info
Source: https://docs.developer.gomaestro.org/dogecoin/node-rpc-api/transactions/transaction-info
dogecoin/node-rpc-api/openapi.json get /transaction/{tx_hash}
Get detailed Dogecoin transaction information including inputs, outputs, fees, and confirmation status by transaction hash.
# SDKs
Source: https://docs.developer.gomaestro.org/dogecoin/sdks
Dogecoin SDKs and client libraries for multiple programming languages to integrate Maestro's Dogecoin APIs into your applications.
Maestro is dedicated to empowering developer communities by offering SDKs in multiple programming languages. We continually expand and refine these SDKs, and we welcome contributions from developers to help shape Maestro's capabilities. Your insights and feedback are invaluable in ensuring our tools meet language-specific needs and unlock new possibilities.
## Available SDKs
Currently, Maestro offers SDKs in the following languages:
| **SDK** | |
| -------------- | ----------- |
| **Haskell** | Coming Soon |
| **TypeScript** | Coming Soon |
| **Go** | Coming Soon |
| **Rust** | Coming Soon |
| **Python** | Coming Soon |
## Community Call for Contributors
Our SDKs are constantly evolving to keep pace with the rapid expansion of Maestro's services, and we rely on community support to maintain and enhance them. We welcome contributions to add new API integrations, improve existing features, and ensure our tools stay up-to-date.
These SDKs are open-source, reflecting our commitment to building a vibrant ecosystem of tools and APIs that enhance the Maestro developer experience. Your contributions play a crucial role in making this possible.
**Contribute Now:** [github.com/maestro-org](https://github.com/maestro-org)
# Tutorials (Coming Soon)
Source: https://docs.developer.gomaestro.org/dogecoin/tutorials-and-guides/tutorials-coming-soon
Upcoming Dogecoin tutorials and guides for building applications with Maestro's Dogecoin blockchain APIs and development tools.
*Coming soon*
# Blockchain Indexer
Source: https://docs.developer.gomaestro.org/general/blockchain-indexer
Blockchain indexer infrastructure for Web3 applications providing optimized on-chain data access across Bitcoin, Cardano, and Dogecoin networks.
A blockchain indexer is a key piece of infrastructure required to power any Web3 ecosystem. It provides applications with access to a wide range of on-chain data through a flexible and optimized interface. One well-known example is [**The Graph**](https://thegraph.com/en/), a popular blockchain indexer on Ethereum, which simplifies data availability for Web3 applications.
***
# Service Availability
The Blockchain Indexer service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| :--------------------- | :-------------------------------------------------------- | :-------------------------------------------------------- | :--------------------------------------------------------- |
| **Blockchain Indexer** | [API Reference](/bitcoin/blockchain-indexer-api/overview) | [API Reference](/cardano/blockchain-indexer-api/overview) | [API Reference](/dogecoin/blockchain-indexer-api/overview) |
***
# Indexing Data
## Real-Time Data
Maestro’s blockchain indexer is specifically optimized for [**UTXO**](https://docs.cardano.org/learn/eutxo-explainer)\*\* ledger primitives\*\* and focuses on delivering both **real-time data liveness** and **data accuracy**. Blockchains operate as an **event-driven system** with probabilistic transaction finality, meaning the ledger’s "ground truth" isn't instantly finalized—it can take some time to reach global consensus.
Learn More: What are chain [reorgs](https://learnmeabitcoin.com/technical/blockchain/chain-reorganisation/) or [rollbacks](https://plutus-apps.readthedocs.io/en/latest/plutus/explanations/rollback.html)?
Accessing “real-time” onchain data requires rigorous data integrity checks. Traditional solutions, like adding a **block buffer** to indexers, only mitigate rollbacks by providing outdated data.
Maestro has designed a system that handles rollbacks gracefully and in **real-time**, giving users live data without sacrificing data integrity. Let's take a closer look at the components that make up the indexer:
1. **Indexer** - Specialized pipelines that extract, match, and process on-chain information, including handling rollbacks.
2. **Storage** - A data lake optimized for storing various types of data.
3. **Access** - A REST API providing flexible and performant querying capabilities.
***
## Common Use Cases
Accurate and live on-chain data is critical for delivering an optimal user experience in blockchain applications. Some common use cases for blockchain indexers include:
* **Smart contract-based dApps** – Time-sensitive DeFi apps like DEXs, NFT marketplaces, lending protocols, games, and metaverses.
* **Wallets and Decentralized IDs (DIDs)** – Real-time UTxO states are crucial for Cardano wallets, cross-chain wallets, and DID systems.
* **Blockchain explorers** – Analytics platform require reliable access to large sets of on-chain data.
* **Bridges & Web2 integrations** – Blockchain bridges and integrations with traditional Web2 software require access to on-chain information.
# Esplora API
Source: https://docs.developer.gomaestro.org/general/esplora-api
Blockstream-compatible Esplora REST API for lightweight Bitcoin blockchain access with fast block, transaction, and address queries.
The Esplora API is a RESTful service designed by [Blockstream](https://github.com/Blockstream/esplora) that provides a lightweight and efficient HTTP interface for accessing Bitcoin data including blocks, transactions and addresses.
Esplora is designed for performance and ease of integration, making it ideal for explorers, wallets, and backend services that need fast blockchain reads without running a full node RPC server.
***
The Maestro Esplora API offers a forked [Mempool.Space](https://github.com/mempool/mempool) instance, with support for both Bitcoin mainnet and Bitcoin testnet4.
Repo: [https://github.com/maestro-org/mempool](https://github.com/maestro-org/mempool)
### Service Availability
The Esplora service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| :---------- | :--------------------------------------------- | :------ | :------- |
| **Esplora** | [API Reference](/bitcoin/esplora-api/overview) | - | - |
### Key Features
#### Transactions
* Fetch transaction details, raw hex, and status.
* Retrieve merkle proofs (both `bitcoind` and `Electrum` style).
* Broadcast raw transactions.
* Check spending status of outputs.
#### Addresses & Scripthashes
* Lookup balances and stats for addresses and scripthashes.
* View confirmed and mempool transaction history.
* Fetch associated UTXOs.
* Search by address prefix.
#### Blocks
* Get full block details including headers, transactions, txids.
* Access block metadata like height, weight, merkle root.
* Fetch block status and raw binary representation.
#### Mempool
* View mempool stats: total count, vsize, fees.
* Get full mempool txid list and most recent entries.
* Access fee-rate distribution histogram.
#### Fee Estimates
* Retrieve estimated fee rates for confirmation targets (1-1008 blocks).
### Use Cases
* Build block explorers and analytics dashboards.
* Monitor transactions and fee trends.
* Query UTXOs and spending data for wallets.
* Implement mempool-aware transaction trackers.
# Event Manager
Source: https://docs.developer.gomaestro.org/general/event-manager
Real-time blockchain event notification system with programmable webhooks for responsive applications and reduced API usage.
*Real-time event notification systems* are a game-changer for developers building **responsive, reactive applications.** Instead of "pull-based" APIs requiring the client to explicitly request data from the blockchain, "push-based" APIs automatically send data to a client as soon as certain events happen on-chain.
Leading to:
1. Significant savings in API usage and billing
2. Increased app responsiveness with better user experience.
**Maestro's Event Manager** is a *blockchain event notification service* that monitors the blockchain network for user-specified events and notifies applications in real-time via *Webhooks*.
This allows applications to stay updated with on-chain activities such as:
* **Wallet Event:** Track wallet deposits and withdraws
* **Token Activity:** Token transfers or NFT mints
* **Script Execution:** Execution of scripts and smart-contracts
* **Mempool State:** Pending transactions in the mempool
* **Network Activity:** New block minted or blockchain reorgs
## Mempool-Aware Event Notifications
**Maestro's Event Manager** has a unique feature in that it is "*mempool-aware."* That means every configured Event Webhook has two types of notification:
1. **Mempool Notification**: Triggered when the event is detected in the mempool
2. **Onchain Notification**: Triggered when the event is first minted onchain (block confirmation = 1).
## Benefits of Event-Driven App Architecture
By subscribing to these notifications, developers can create applications that react instantly to blockchain activity, **improving user experience and enabling a variety of innovative functionalities.**
1. **Reduced Overhead:** Instead of constantly querying node data to check if something happened onchain, your app can rely on real-time push notifications, resulting in **significantly fewer API calls.**
2. **Real-time Experience:** Create a responsive app that immediately updates users with their most important events creating a **better user experience**. (e.g., “your NFT was just transferred!”)
3. **Scalability and Cost Savings:** Maestro's Event Manager handles the heavy lifting of monitoring the chain so your app never misses an important event. This results in **reduced infrastructure complexity and long-term cost savings**.
***
# Service Availability
The Event Manager service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| :---------------- | :--------------------------------------------------- | :------------ | :------------ |
| **Event Manager** | [API Reference](/bitcoin/event-manager-api/overview) | *Coming Soon* | *Coming Soon* |
## Event Types Available
| **Event Type** | **Notify on** | **Trigger Conditions** |
| :--------------------------- | :-------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------- |
| **Transaction Notification** | Specific transaction accepted into the mempool and then confirmed onchain | **Trigger**=Transaction
**Field**= Transaction ID
**Operator**= equal to
**Value**= Transaction ID |
| **Address Notification** | Specific address withdrawals or deposits by a transaction entering the mempool and then confirmed onchain | **Trigger**=Transaction
**Field**= Sender or Receiver
**Operator**= containts
**Value**= Address ID |
| | | |
### Using the Event Manager
See usage instructions [here](/bitcoin/tutorials-and-guides/integrating-event-manager-into-your-application#configure-and-manage-event-triggers-in-the-maestro-dashboard).
## Common Use Cases for Real-Time Event Notifications
### DeFi Protocol Monitoring
**Liquidity Pool Events**: Get alerts when large liquidity deposits or withdrawals occur, or if pool parameters change.
**Loan Liquidations:** Notify borrowers (or watchers) in real-time when a position is at risk or has been liquidated.
### NFT Marketplace & Collectibles
**Mint Tracking:** Monitor when new tokens are minted so you can update supply or notify users.
Transfer/Ownership Updates: Send push notifications when an NFT changes hands.
**Auction Bids:** Real-time updates for any new bids or final sales.
### Wallet & Portfolio Tracking
\*\*Address Activity: \*\*Keep track of inbound/outbound transactions for a user’s wallet. Helpful for generating push notifications.
**Token Balance Changes:** When an address receives a new token or sells a portion of a token.
### Transaction Lifecycle Tracking
**Pending → Mined → Confirmed:** Provide instant feedback to users about where their transaction is in the pipeline.
**Dropped or Replaced Transactions:** Notify users if their transaction was replaced by a new one with a higher fee.
### Security & Monitoring
**Smart Contract Exploit Detection:** Set up alerts for large, abnormal transactions on known vulnerable contracts.
**Whitelist/Blacklist:** Immediately know if a blacklisted address interacts with your protocol.
# FAQ
Source: https://docs.developer.gomaestro.org/general/faq
Frequently asked questions about Maestro blockchain APIs, services, pricing, technical support, and platform capabilities.
## Q1: What is Maestro?
**A:** Maestro is an enterprise-grade blockchain infrastructure provider specializing in UTXO-based blockchains such as Bitcoin, Cardano, and Dogecoin. It delivers a complete Web3 stack featuring high-performance APIs and advanced developer tools, simplifying the creation of decentralized applications (dApps) and driving innovation in decentralized finance (DeFi).
Maestro offers:
* **High-Performance UTXO Indexing:** For rapid and reliable on-chain data retrieval.
* **Advanced Developer Tools:** Including transaction management, mempool monitoring, and on-chain event notifications.
* **Enhanced Scalability and Security:** Optimized to handle high transaction volumes for both startups and large enterprises.
***
## Q2: How does Maestro work?
**A:** Maestro leverages state-of-the-art UTXO indexing technology to offer real-time, low-latency access to on-chain data. Its robust APIs enable seamless integration with blockchain networks, efficient transaction management, mempool monitoring, and event notification —all designed to streamline dApp development.
***
## Q3: Which blockchains does Maestro support?
**A:** Maestro currently supports multiple UTxO-based blockchains including Bitcoin, Cardano, Dogecoin, and Bitcoin L2s such as MIDL. Maestro's infrastructure services are specifically optimized for the unique characteristics of UTxO ledgers. This multichain approach allows developers to build interoperable dApps across different blockchain ecosystems
***
## Q4: What makes Maestro different from other blockchain infrastructure providers?
**A:** Unlike most infrastructure providers that focus on EVM chains (like Ethereum), Maestro specializes in UTxO-based blockchains. Maestro's technology is built from the ground up to handle the unique challenges of UTxO ledgers, including data availability issues and probabilistic transaction finality. Maestro’s state-of-the-art UTxO indexer technology offers a battle-tested, high-performance data layer optimized to meet the unique needs and challenges of UTxO-based DeFi protocols. This specialized focus makes Maestro the premier choice for Bitcoin and other UTxO blockchain development.
***
## Q5: Who uses Maestro's services?
**A:** Maestro's services are used by:
* DeFi protocols (DEXes, lending platforms)
* Wallet providers
* NFT marketplaces
* Layer 2 solutions
* Traders and payment services
* Enterprise blockchain applications
* Blockchain analysis platforms
***
## Q6: What are the key features of Maestro’s platform?
**A:** Maestro offers a range of enterprise-grade features such as:
* **All-in-one Enterprise Platform:** No longer juggle multiple data providers and software vendors. Maestro offers a suite of advanced services under one enterprise-ready package.
* **High Availability and Reliability:** Benefit from over 99% uptime, backed by enterprise-grade security to keep your applications running smoothly, without interruption.
* **Efficient Data Access:** Accelerate development with streamlined blockchain integration using Maestro's standard API protocols and robust developer tools.
* **Scalable and Cost-Effective:** Grow your project with confidence thanks to flexible, usage-based pricing designed to scale as your needs evolve.
* **Unmatched Support and SLAs:** Get peace of mind with responsive customer support and transparent service level agreements, ensuring reliable and timely assistance whenever you need it.
***
## Q7: What core products does Maestro offer?
**A:** Maestro's core product offerings include:
* **Node RPC API:** Direct blockchain node interactions
* **Blockchain Indexer APIs:** Powerful API for enterprise-grade onchain data needs.
* **Mempool Monitoring:** Real-time tracking of pending transactions
* **Event Manager:** Webhook-based notifications of blockchain events
* **Transaction Manager:** Onchain monitoring of transaction state
* **Turbo Transaction:** Supercharge transaction submission
* **Market Price Feeds:** High-fidelity DeFi market price feed.
* **Wallet Manager:** Dev tools for crypto wallet creation
* **Managed Smart-Contracts:** Plug-and-play managed smart contracts
***
## Q8: What is a UTxO blockchain and why is specialized infrastructure important?
**A:** UTxO (Unspent Transaction Output) is the accounting model used by Bitcoin and several other blockchains. Unlike account-based models (used by Ethereum), UTxO works differently, tracking individual "outputs" rather than account balances. This creates unique challenges for data indexing, state tracking, and application development that require specialized infrastructure solutions.
***
## Q9: How does Maestro's UTxO indexer technology work?
**A:** Maestro's state-of-the-art UTxO indexer employs:
* Event-driven architecture connecting directly to blockchain P2P protocols
* Proactive UTxO resolution upstream of the indexing process
* Block reorganization protection via Maestro's "block buffer" system
* Parallelized data indexing through distributed pipelines
* High-availability API gateway for efficient data retrieval
***
## Q10: What programming languages and frameworks does Maestro support?
**A:** Maestro's services use a standard REST API interface, and additionally provides SDKs for multiple popular programming languages, making integration simple regardless of your technology stack. Visit Maestro's developer [documentation](https://www.gomaestro.org/documentation) for the latest supported languages and frameworks.
***
## Q11: How can Maestro help me build Bitcoin DeFi applications?
**A:** Maestro provides the essential infrastructure layer needed to build responsive, reliable DeFi applications on Bitcoin. Maestro's services handle the complex data indexing, real-time mempool monitoring, and event tracking required for DeFi use cases like DEXes, lending protocols, and yield farming platforms.
***
## Q12: Can Maestro support metaprotocols like Ordinals and Runes?
**A:** Yes! Maestro's infrastructure is specifically designed to support Bitcoin's emerging metaprotocols. Maestro's APIs provide metaprotocol-aware indexing and monitoring for Ordinals (Bitcoin NFTs), Runes (fungible tokens), and other Bitcoin protocol extensions.
***
## Q13: How does Maestro help with wallet development?
**A:** Maestro's Wallet API provides wallet developers with reliable blockchain data access, transaction monitoring, and balance tracking services. This allows wallet providers to focus on building great user experiences while we handle the underlying infrastructure demands.
***
## Q14: How can enterprises and institutions use Maestro?
**A:** Enterprises and institutions can leverage Maestro's infrastructure to build compliance-friendly, high-performance blockchain applications. Maestro's scalable architecture is designed to meet enterprise demands for reliability, security, and performance when integrating with Bitcoin and other UTxO blockchains.
***
## Q15: How do I start using Maestro's services?
**A:** Visit Maestro's [developer portal](https://www.gomaestro.org/documentation)
1. [Create an account](https://dashboard.gomaestro.org/signup)
2. Choose your subscription plan
3. Get your API keys
4. Integrate using Maestro's [documentation](/) and [SDKs](https://github.com/maestro-org)
***
## Q16: Does Maestro offer a free tier for developers?
**A:** Yes, Maestro offers a free tier for developers to test and experiment with its APIs and services. Check Maestro's [pricing page](https://www.gomaestro.org/pricing) for the latest information on Maestro's free tier limits and capabilities.
***
## Q17: Where can I find documentation and examples?
**A:** Comprehensive documentation, tutorials, example projects, and integration guides are available on Maestro's [developer documentation site](/).
***
## Q18: Does Maestro provide customer support?
**A:** Yes, Maestro provides dedicated support channels for all customers. Enterprise customers receive priority support with guaranteed response times. Visit Maestro's [support page](https://www.gomaestro.org/pricing) for more information.
***
## Q19: What is Maestro's vision for the future?
**A:** Maestro's vision is to accelerate the world's transition to the Bitcoin Economy and become the infrastructure middleware that powers a blockchain-native financial system. Maestro's four-phase master plan includes:
1. Building the most advanced application stack for Bitcoin
2. Powering infrastructure for top DeFi projects
3. Onboarding enterprises and institutions
4. Supporting nation-states in adopting Bitcoin as financial infrastructure
***
## Q20: How is Maestro contributing to Bitcoin's evolution as a platform?
**A:** Maestro is helping transform Bitcoin from a simple value transfer network into a robust platform for applications and services. By providing the critical infrastructure needed for Bitcoin DeFi, NFTs, L2s and other use cases, Maestro is enabling Bitcoin to fulfill its potential as the foundation of a new financial system.
***
## Q21: How can I partner with Maestro?
**A:** If you're building a blockchain project or service that could benefit from Maestro's infrastructure, reach out by email: `info@gomaestro.org`. Maestro is actively collaborating with promising projects across the blockchain ecosystem.
***
## Q22: Does Maestro offer custom solutions for specific use cases?
**A:** Yes, Maestro works with enterprises and large-scale projects to provide customized infrastructure solutions tailored to specific requirements. Contact Maestro's enterprise team (`info@gomaestro.org`) to discuss your unique needs.
***
## Q23: How can developers get started with Maestro?
**A:** Developers can [sign up](https://dashboard.gomaestro.org/signup) on Maestro’s platform to access a suite of APIs and cutting-edge tools. The website offers comprehensive [documentation](https://www.gomaestro.org/documentation), a [developer hub](https://www.gomaestro.org/documentation), and [quick-start guides](/getting-started) to help you rapidly build, test, and deploy decentralized applications.
***
## Q24: Is it safe to use Maestro?
**A:** Yes. Maestro provides enterprise-grade security through:
* **Secure Architecture:** Advanced cryptographic techniques and security best practices protect your data and transactions.
* **Privacy Controls:** Strict data access policies and blockchain's inherent decentralization reduce breach risks.
* **High Reliability:** Our infrastructure maintains excellent uptime for business continuity.
* **Regulatory Compliance:** We adhere to industry standards for security and privacy.
* **Expert Support:** Our specialized team helps ensure your safe implementation of UTxO blockchain technology.
***
## Q25: What are Maestro Compute Credits?
**A:** Maestro Compute Credits are the units used in our usage-based billing system. Each API operation or method is assigned a specific number of compute credits based on the computational resources it requires. This model is similar to cloud usage billing on platforms like AWS or Google Cloud.
The benefit of this approach is fairness and transparency - you only pay for the actual computational workload your application generates. Lightweight operations cost fewer credits than resource-intensive ones, accurately reflecting your resource utilization. This allows developers to efficiently manage costs while scaling their applications.
***
## Q26: Can Maestro save me money?
**A:** Yes, Maestro is designed to be cost-effective in several ways:
* **Pay for what you use:** Our compute credit model ensures you only pay for the computational resources you actually consume
* **Automatic volume discounts:** As your usage increases, you automatically qualify for progressively larger discounts
* **Annual billing savings:** Get an additional 30% discount by choosing annual billing
* **No infrastructure costs:** Eliminate the expenses of running and maintaining your own blockchain nodes
* **Developer efficiency:** Reduce development time and costs by using our ready-made APIs instead of building custom solutions
For many projects, using Maestro is significantly more economical than building and maintaining comparable blockchain infrastructure in-house, especially when accounting for ongoing operational costs and the specialized expertise required.
***
## Q27: How do Maestro's volume discounts work?
**A:** Maestro's pricing is designed to reward growth. As your API usage increases, you automatically qualify to higher volume tiers with progressively larger discounts. This ensures your costs don't scale linearly with your success. The volume discounts apply automatically based on your monthly usage, making the unit price cheaper the more you use it.
***
## Q28: Does Maestro contribute to open-source?
**A:** Yes, Maestro is deeply committed to driving innovation within the blockchain ecosystem through open-source contributions. We actively contribute to several important open-source projects including Laser Eyes, Blink Labs, TxPipe, Lucid, and Mesh.
Our involvement with these open-source organizations reflects our dedication to community collaboration, transparency, and the democratization of blockchain technology. By supporting these projects, we help push the boundaries of what's possible within the blockchain space while fostering an environment that propels the entire community forward.
***
## Q29: What are Maestro's values and team culture?
**A:**
**Company Values:**
Maestro is built on a foundation of engineering excellence and user-centric product development. Maestro believes in crafting services that address the genuine needs of users while delivering premium performance at any scale. Maestro's commitment to excellence ensures that whether you're an individual developer or an established enterprise, Maestro provides the infrastructure you need to succeed.
**Team Culture:**
Maestro's team consists of domain experts and creative thinkers working in a fully decentralized company structure. Maestro fosters an environment based on first principle thinking, constructive discourse, and a relentless pursuit of excellence. Maestro's culture values self-leadership, radical accountability, and individual freedom, enabling Maestro's team to innovate and drive blockchain technology forward.
# Getting Started
Source: https://docs.developer.gomaestro.org/general/getting-started
Quick start guide to get up and running with Maestro APIs. Learn how to create an account, generate API keys, and make your first blockchain API request.
**Quickstart Guide to Maestro**
Learn how to open a Maestro account, create a project API key, and make your first request. **Start building today!**
## Tutorial
### 1. Sign Up or Log In
👋 ***New to Maestro?*** Create an account for free [here](https://dashboard.gomaestro.org/).
***
### 2. Create a Project
Once logged in to the Dashboard, you can create multiple API projects. Each project will generate a unique `API key` that authorizes your requests on the platform.
The total number of projects you can create depends on your active subscription tier.
* Click on `+ New Project`
* Add new project info
* `Project Name`
* `Blockchain`
* `Network`
***
### 3. Copy the URL and API Key
***
### 4. Your Project Dashboard
The Projects section will list all created projects. In this example, we will use the `Cardano Preprod` network.
* Copy the project's `URL` and `Key`.
| Term | Description |
| :------------------ | :------------------------------------------------------------------------------------------------ |
| Project URL | The base URL is customized for the network you selected for your project. |
| **Project API Key** | A unique key used by the Maestro API to authenticate and authorize all requests for your project. |
Each *API key* is specific to a project and will only function with the network you selected for that project.
***
**Next Steps**
**Congrats!** Now that you've generated your first API key, let's [Make Your First API Request](./make-your-first-api-request).
# Introduction
Source: https://docs.developer.gomaestro.org/general/index
Welcome to Maestro - comprehensive blockchain APIs for Bitcoin, Cardano, Dogecoin, and more. Build powerful Web3 applications with our reliable infrastructure.
# Welcome to [Maestro](https://www.gomaestro.org/) 👋
[**Maestro**](https://www.gomaestro.org/) is the *fastest* *way* to build on Web3— the **1st complete Web3 developer stack** for UTxO-based apps. Maestro offers *enterprise-grade scalability* and *robust data availability* solutions.
# Agentic Integrations
Maestro provides a complete set of tools for AI agents to seamlessly interact with the blockchain. Explore our agentic integrations:
Autonomous API access via crypto payments — no API keys required.
Connect LLMs and AI agents to Bitcoin blockchain data.
Trustless on-chain agent discovery and verification.
Maestro skills on the ClawHub AI marketplace.
# Supported Chains
Maestro supports the following UTxO chains; view available API services below:
# Quickstart
Learn how to create a project API key, make a request, and submit your first transaction. Your builder journey starts today!
***
# Popular Tutorials
Level up your skills with developer-friendly tutorials showcasing Maestro's best features and tooling:
***
**Don't have an API key yet?**
Create an account for *free* and start exploring Maestro's self-serving [Dashboard](https://dashboard.gomaestro.org/signup).
# Managed Smart Contracts
Source: https://docs.developer.gomaestro.org/general/managed-smart-contracts
Cardano's first Smart Contract Marketplace featuring open-source, audited smart contracts with hosted execution and unified key management.
# Smart-Contract Marketplace
Maestro has released Cardano's first Smart Contract Marketplace, a repository of open-source and audited smart contracts contributed by the community. This platform is a significant step toward promoting open collaboration and trust within the smart contract landscape.
In addition, Maestro offers two novel services aimed at empowering developers with low-code/no-code tools to build and deploy secure dApps easily.
1. Managed Contract API: Deploy contracts and build transactions with a simple REST API interface
2. Contract UI Widgets: Integrate whitelabel React components directly into your app
This service is only included in subscriptions above the **Artist** tier.
Check out the Marketplace [here](https://www.gomaestro.org/smart-contracts).
***
# Service Availability
The Managed Smart Contract service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| :------------------------- | :------ | :------------------------------------------------------- | :------- |
| **Managed Smart Contrac**t | *-* | [API Reference](/cardano/managed-contracts-api/overview) | *-* |
***
## Available Contracts on the Marketplace
| **Smart Contract** | **Description** | **Details** | **Audit/Open-sourced** |
| :------------------------------- | :-------------------------------------------------------------------------- | :--------------------------------------------------------- | :-------------------------------------- |
| **Linear Vesting** | Lock tokens with a linear vesting schedule and control release over time. | Compiler: Plutarch v2, Project: Anastasia Labs, Fee: Yes | Open-sourced, Audited by Anastasia Labs |
| **Direct Swap** | Peer-to-peer & trustless swaps for tokens & NFTs. | Compiler: Plutarch v2, Project: Anastasia Labs, Fee: Yes | Open-sourced, Audited by Anastasia Labs |
| **Single Asset Staking** | Earn and redeem yield on tokens staked at an address. | Compiler: Plutarch v2, Project: Anastasia Labs, Fee: Yes | Open-sourced, Audited by Anastasia Labs |
| **P2P Lending** | Cerra - P2P lending & borrowing order book. | Compiler: Plutus v2, Project: Cerra, Fee: Yes | Open-sourced |
| **Privacy Payments** | Encoins - Privacy accounts and payments protocol. | Compiler: Aiken v2, Project: Encoins, Fee: Yes | Open-sourced |
| **P2P Swaps** | Fallen Icarus - distributed order book DEX with composable atomic swaps. | Compiler: Plutus v2, Project: Fallen Icarus, Fee: No | Open-sourced |
| **Derivatives Marketplace** | Fallen Icarus - marketplace for options, futures, and bonds. | Compiler: Plutus v2, Project: Fallen Icarus, Fee: No | Open-sourced |
| **P2P Options** | Fallen Icarus - P2P options trading. | Compiler: Plutus v2, Project: Fallen Icarus, Fee: No | Open-sourced |
| **P2P Loans** | Fallen Icarus - distributed P2P lending/borrowing protocol. | Compiler: Aiken v2, Project: Fallen Icarus, Fee: No | Open-sourced |
| **Collateralized Debt Position** | Indigo - collateralized debt position protocol. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Onchain Oracle** | Indigo - Onchain oracle script. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Governance Polling** | Indigo - Onchain governance polling script. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Stability Pool** | Indigo - CDP stability pools. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Governance Proposal** | Indigo - Onchain governance proposal creation. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Onchain Staking** | Indigo - staking contract. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **Onchain Treasury** | Indigo - Onchain treasury protocol. | Compiler: Plutus v2, Project: Indigo, Fee: Yes | Open-sourced |
| **NFT Marketplace** | JPG.store Bid and Ask contract for NFT marketplace. | Compiler: Aiken v2, Project: JPG.store, Fee: Yes | Open-sourced, Audited by Sundaeswap |
| **Pool Lending Protocol** | Pooled lending and borrowing protocol with flash loans. | Compiler: Aiken v2, Project: Lenfi, Fee: Yes | Open-sourced, Audited by TxPipe |
| **AMM DEX V1** | Minswap - AMM DEX v1 protocol. | Compiler: Plutus v1, Project: Minswap, Fee: Yes | Open-sourced, Audited by Tweag |
| **AMM DEX V2** | MuesliSwap - AMM DEX protocol. | Compiler: Plutus v2, Project: MuesliSwap, Fee: Yes | Open-sourced |
| **AMM DEX Batcher** | Batch Muesliswap orders. | Compiler: Plutus v2, Project: MuesliSwap, Fee: Yes | Open-sourced |
| **Orderbook DEX V1** | MuesliSwap - v1.1 OrderBook DEX. | Compiler: Plutus v1, Project: MuesliSwap, Fee: Yes | Open-sourced |
| **NFT Marketplace** | SpaceBudz - NFT marketplace contract with chain indexer and event listener. | Compiler: Aiken v2, Project: SpaceBudz, Fee: No | Open-sourced |
| **AMM DEX** | Spectrum Network - Cross-chain DEX with liquidity provision & mining. | Compiler: Plutarch v1, Project: Spectrum Network, Fee: Yes | Open-sourced |
| **NFT Marketplace** | Token Riot - NFT selling, offering, auctions, and timelocks. | Compiler: Plutus v2, Project: Token Riot, Fee: Yes | Open-sourced |
| **Orderbook DEX** | Genius Yield - Pure order book DEX supporting partial orders. | Compiler: Plutarch v2, Project: Genius Yield, Fee: No | Open-sourced, Audited by Anastasia Labs |
| **DEX Order Validator** | GY - Validate new DEX limit orders. | Compiler: Plutarch v2, Project: Genius Yield, Fee: No | Open-sourced, Audited by Anastasia Labs |
| **DEX Fee Config** | GY - Set maker & taker DEX fees. | Compiler: Plutarch v2, Project: Genius Yield, Fee: No | Open-sourced, Audited by Anastasia Labs |
***
### Contract Royalty
Royalties are directly encoded into the contract and *automatically distributed to the contract author* when executed. Like NFT royalties, this ensures the author is incentivized to **open-source** their contract and is rewarded accordingly, *benefiting the Cardano ecosystem with standardized and vetted contracts* for anyone to use.
**Add your own contract to the Marketplace**
Do you have a smart contract and want to earn royalties for it?
To get added to the *Marketplace*, follow the following ***Contribution Instructions.***
***
## Advantages of Open-Sourcing Contracts
* **Standardization**: Open-source contracts can demonstrate best practices and battle-tested protocol architectures, providing a reliable foundation for developers.
* **Security**: Anyone can audit open-source contracts, enhancing their security over time and building confidence in the community that uses them.
* **Collaboration**: Open-source work benefits from diverse contributions, which can lead to higher application efficiency and robustness.
* **Composability**: The ability to combine and recombine contracts encourages creative and innovative protocol development.
***
## Unlocked Benefits for Cardano’s dApp Ecosystem
1. **Dependable Contracts**: Access a curated collection of modular, robust, and reusable smart contracts. Benefit from contracts that have undergone rigorous community assessments.
2. **Standardize Contract Interface**: Interact with contracts through intuitive API, SDK, or UI components, lowering the barrier to entry into Web3 and unlocking the power of blockchain for everyone.
3. **Instant Deployment**: Avoid cumbersome and expensive Cardano backend infrastructure and seamlessly deploy contracts into your web2 application.
4. **Rewarding Innovation**: The royalty system for **both** the backend and frontend developers encourages a culture of sharing and collective advancement.
***
## Managed Contract API
Maestro's Managed Contracts API gives access to **ready-to-deploy smart contracts** written in [Plutus](https://github.com/input-output-hk/plutus) and [Aiken](https://aiken-lang.org/) or any other Cardano smart contract frameworks. The contract API abstracts away both *on-chain* and *off-chain* script interactions. Using intuitive and developer-friendly endpoints, this fully managed contract service aims to *enhance developer experience*, *strengthen the ecosystem*, and *enhance the security* of Dapps on Cardano.
## Contract UI Widgets
### *Direct Swap UI Widget*
For those looking for an end-to-end web integration, Maestro's Contract Widgets provide a no-code option, allowing developers to add full-featured frontend components to any website. All UI widgets are made open source and can be found [here](https://github.com/maestro-org/smart-contract-clients):
**Add your own UI Widget and charge a frontend fee**
Similar to smart contract royalties, front-end developers can contribute their own UI component and charge a *front-end fee* to receive ongoing revenue for their work.
### *Linear Vesting UI Widget*
This API is only included in subscriptions above the *Artist* tier.
Get to know Maestro subscription details [here](https://www.gomaestro.org/pricing).
# Market Price Feeds
Source: https://docs.developer.gomaestro.org/general/market-price-feeds
High-fidelity DeFi market data feeds from Bitcoin and Cardano protocols with OHLC data, trading pairs, and real-time price analytics.
Maestro's *Market Price API* provides **high-fidelity smart contract data feeds** from top DeFi protocols in both the Bitcoin and Cardano ecosystems, enabling the exploration, visualization, and discovery of trends in both historical and real-time DeFi markets. The API democratizes access to DeFi data, facilitating various use-cases for developers, researchers, and traders. It not only abstracts away the complexity of accessing valuable smart contract or UTXO data but also processes and aggregates this data into dApp metrics and financial indicators, enabling advanced blockchain analytics. In the future, it will offer a graphical visualization interface for creating custom dashboards, ultimately helping users to build better dApps, find arbitrage opportunities, and discover new trends in DeFi.
This service is only included in subscriptions above the **Artist** tier.
## Practical Use Cases
* **DeFi Analytics**: Track and analyze liquidity, trading volumes and user activity from various DeFi protocols such as Minswap, Genius Yield and Magic Eden.
* **Smart Contract Analysis**: Analyze the interactions and transactions of a specific smart contract, useful for monitoring the usage and activity of a dApp or for auditing a smart contract.
* **NFT Analytics**: Analyze trends and data related to Non-Fungible Tokens (NFTs), such as sales volumes, average prices, and popular collections.
* **Token/Rune Analytics**: Analyze transactions and transfers of a specific asset, such as token/rune transfers, holder distribution, and on-chain trading activity.
* **Wallet Tracking**: Track and analyze the transactions of a specific Cardano or Bitcoin address; useful for monitoring one's own transactions or for analyzing the activity of a specific address, such as that of a DEX.
### Mempool Awareness
Add the `mempool=included` query parameter to your endpoint to return the latest market price including trades from the mempool for fast price discovery.
This functionality includes:
* **Rollback Protection:** The system monitors for block reorganizations and automatically rolls back unconfirmed or invalidated trades, ensuring the data reflects the confirmed state of the chain.
*Even though real-time pricing includes mempool trades, the API corrects prices if blocks are reorged—no false positives or phantom trades in pricing.*
For developers, this means that you can use the price data immediately but still trust that it will self-correct if the underlying block is not confirmed.
> *By the numbers:*
>
> We refresh this index at a 1 second frequency so both the index and candlesticks are continuously up-to-date.
>
> Our index maintains a buffer of 10 blocks, which allows us to properly update mempool data to be confirmed, without having duplicate or incorrect data.
***
# Service Availability
The Market Price service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| ---------------- | --------------------------------------------------- | --------------------------------------------------- | ------------- |
| **Market Price** | [API Reference](/bitcoin/market-price-api/overview) | [API Reference](/cardano/market-price-api/overview) | *Coming Soon* |
## Format definitions
Detailing the Maestro Market API response structures
### Prices
The DEX OHLC endpoint will return OHLC (Open High Low Close) prices aggregated over the prices of individual trades for a particular time resolution and over a time range.
**Bitcoin**
Example:
* "symbol": "BTC-840000:3" = Bitcoin-DOG•GO•TO•THE•MOON (pair)
* "side": "buy" = puchase rune with Bitcoin
* price = cost per rune (in satoshis)
**Add Mempool awareness** to your endpoint as an optional query parameter.
Example: `?mempool=included`
[https://xbt-mainnet.gomaestro-api.org/v0/markets/dexs/ohlc/magiceden/BTC-840000:3?mempool=included](https://xbt-mainnet.gomaestro-api.org/v0/markets/dexs/ohlc/magiceden/BTC-840000:3?mempool=included)
**Cardano**
* coin A price = coin A traded amount / coin B traded amount
* coin B price = coin B traded amount / coin A traded amount
**This service is only included in subscriptions above the *****Artist***** tier.**
## Data Accessibility
The Market Price API service enhances *Data Accessibility* in the following ways:
1. **Abstracts Complexity**: The Bitcoin and Cardano blockchains contains a vast amount of data that is publicly available but challenging to access and analyze due to their complex natures. Maestro's service abstracts away this complexity and provides easy access to valuable smart contract data (Cardano). Users do not need to have deep technical knowledge on how to parse and process smart-contract data (script, datum, UTxOs, etc.).
2. **Democratizes Access**: By providing a high-fidelity smart contract data feed, Maestro makes it easy for a wide range of users, whether they are developers, researchers, or traders, to access the DeFi data they need. This democratization of access helps fuel adoption and innovation in the ecosystem by enabling various use cases, such as building better dApps, finding arbitrage opportunities, and discovering new trends in DeFi.
3. **Provides Real-time and Historical Data**: Maestro's Market Price API provides access to both historical and real-time smart contract or DEX market data. This is crucial for conducting a comprehensive analysis, backtesting strategies, and making informed decisions based on the most current data.
4. **Facilitates Integration**: The API format of Maestro’s Market Price API service facilitates integration into various applications, tools, or services. Developers can easily integrate the API into their dApps, trading bots, or analytics platforms to access the data they need programmatically.
## Data Analysis
The Market Price API service provides superior *Data Analysis* in several ways:
1. **Processing and Aggregation**: The raw blockchain data includes specific smart contract (Cardano) or complex UTXO interactions happening on DEXes and lending protocols, which can be challenging to analyze. Maestro's service processes and aggregates this raw contract data into more understandable dApp metrics and financial indicators. This transformation enables more advanced blockchain analytics and makes it easier to extract deep insights from the Bitcoin and Cardano DeFi ecosystems.
2. **Enables Advanced Blockchain Analytics**: By processing and aggregating dApp metrics, Maestro's service enables users to conduct more advanced blockchain analytics. Researchers, traders, and developers can extract deep insights from both the Bitcoin and Cardano DeFi ecosystems, which is particularly valuable for making informed decisions, optimizing strategies, and identifying new opportunities.
# Mempool Monitoring
Source: https://docs.developer.gomaestro.org/general/mempool-monitoring
Bitcoin mempool monitoring tools and API for tracking unconfirmed transactions, fee estimation, and network congestion analysis.
The **Bitcoin Mempool** (short for "Memory Pool") is a critical component of the Bitcoin network where all valid but unconfirmed transactions are temporarily stored. When you initiate a Bitcoin transaction, it doesn't get added to the blockchain immediately. Instead, it first enters the Mempool of each participating node in the network.
## The Function of the Mempool
1. **Staging Area for Transactions:** The Mempool acts as a holding area for transactions waiting to be included in the next block. This allows miners to select which transactions to include based on factors like transaction fees.
2. **Facilitates Fee Prioritization:** Since block space is limited (1 MB per block for Bitcoin), miners often prioritize transactions that offer higher fees. Transactions in the Mempool are usually sorted by fee rates, enabling miners to maximize their earnings.
3. **Network Health Indicator:** The size and state of the Mempool can indicate the network's congestion level. A growing Mempool suggests more transactions are waiting to be processed than usual, which can lead to higher fees and longer confirmation times.
4. **Transaction Propagation:** The Mempool helps in propagating transactions across the network. As each node receives a transaction, it validates it and adds it to its own Mempool before sharing it with neighboring nodes.
The Bitcoin Mempool is essential for managing unconfirmed transactions. It serves as a temporary repository that enables efficient transaction processing, fee-based prioritization, and overall network stability.
# Service Availability
The Mempool Monitoring service is available on the following blockchains:
| Services | Bitcoin | Cardano | Dogecoin |
| ------------------------ | --------------------------------------------------------- | ------------- | ------------------------------------------------ |
| **Mempool Node RPC** | [API Reference](/bitcoin/node-rpc-api/overview) | *Coming Soon* | [API Reference](/dogecoin/node-rpc-api/overview) |
| **Mempool Metaprotocol** | [API Reference](/bitcoin/mempool-monitoring-api/overview) | *Coming Soon* | *Coming Soon* |
### Mempool Node RPC Service
This service offers remote access to synced nodes via RPC protocols. It allows users to perform essential operations such as querying blockchain data securely and efficiently.
It specializes in giving access to Mempool Information. It can track in real-time the state of unconfirmed transactions, as well as, mempool transaction ancestors and descendants.
Find out more information about the [Node RPC](./node-rpc) Service.
### Mempool Metaprotocol Service
This service is a highly-optimized\*\* mempool indexer for Bitcoin metaprotocols\*\*, such as Runes and Inscriptions. It gives access to real-time metaprotocol information from unconfirmed transactions:
* Retrieve mempool Runes balances and inscriptions at an address
* Retrieve mempool UTxOs with Runes & Inscription info at an address
This service allows to filter the mempool state by some number of "estimated blocks", in order to prioritize for transsactions that are more likely to be minted in the next block.
### Global Mempool Infrastructure
Maestro's advanced mempool infrastructure leverages a **Global Mempool Synchronization** system that connects to multiple Bitcoin nodes worldwide to provide the most comprehensive and accurate mempool data available.
**How it works:**
* **Multi-Node Network:** Connects to geographically distributed Bitcoin nodes.
* **Real-Time Aggregation:** Continuously synchronizes mempool data from multiple sources.
* **Unified Global View:** Provides a consolidated perspective of unconfirmed transactions across regions.
* **Enhanced Accuracy:** Reduces blind spots and regional inconsistencies for better network visibility.
This infrastructure ensures that Maestro's mempool monitoring APIs deliver the most complete and reliable data for fee estimation, transaction timing, and network analysis.
### Benefits for Developers
Access to Bitcoin mempool APIs provides developers with real-time data about unconfirmed transactions waiting to be included in the blockchain. This access offers several benefits and enables a wide range of use-cases for application builders.
1. **Real-Time Transaction Monitoring**
* \*\*Immediate Insights & Enhanced User Experience: \*\*Access to the mempool allows developers to monitor transactions as soon as they are broadcasted to the network. Developers can provide users with instant updates on the status of their transactions.
2. **Optimal Fee Estimation:**
* **Dynamic Fee & Cost Efficiency :** By analyzing current mempool conditions, developers can help users set appropriate transaction fees to achieve desired confirmation times. Avoid overpaying fees during low congestion periods by adjusting fees based on real-time data.
3. **Network Analysis and Health Monitoring:**
* **Congestion & Anomaly Detection:** Mempool data can signal network congestion, helping developers and users make informed decisions about transaction timing. Identify unusual patterns that may indicate spam attacks or other network issues.
4. **Custom Transaction Selection for Miners:**
* **Maximizing Profits at Block Construction:** Miners can use mempool data to select transactions with higher fees, optimizing their earnings. Helps in creating blocks that maximize fee revenue while adhering to size limits.
***
### Use-Cases for App Builders
Access to Bitcoin mempool APIs can enhance the functionality, efficiency, and user experience of blockchain applications. Whether it's optimizing transaction fees, providing immediate transaction feedback, or developing sophisticated analytics tools, mempool data enables a multitude of innovative use-cases:
1. **Cryptocurrency Wallets:** Offer users real-time fee recommendations for optimal transaction confirmation times. Allow users to monitor the progress of their unconfirmed transactions.
2. **Blockchain Explorers:** Display real-time data on unconfirmed transactions, including sizes, fees, and volume. Enable users to search and filter transactions based on various criteria.
3. **Trading Platforms and Exchanges:** Use mempool data to anticipate market movements based on transaction volumes and fee rates. Optimize the timing of transactions to ensure faster confirmations.
4. **Mining Software and Pools:** Develop smarter ways to select transactions that maximize revenue. Adjust mining strategies based on current mempool conditions.
5. **Analytics and Research Tools:** Provide insights into transaction patterns, fee trends, and network health. Facilitate studies on blockchain behavior and transaction dynamics.
6. **Transaction Accelerators:** Help users increase the fees of their unconfirmed transactions to expedite processing. Offer services to resolve transactions delayed due to low fees.
# Node RPC
Source: https://docs.developer.gomaestro.org/general/node-rpc
Node RPC services for blockchain interaction without running full nodes - query data, broadcast transactions, and access blockchain functionality via JSON-RPC.
The **Node RPC (Remote Procedure Call)** is a service that enables developers and applications to interact with blockchain networks without the need to run their own full nodes. By offering remote access to synced nodes via RPC protocols, this service allows users to perform essential operations such as querying blockchain data and broadcasting transactions securely and efficiently.
## Node RPC Key Functions
* **Remote Node Access:** The RPC service operates full blockchain nodes and exposes their functionality through an API (JSON-RPC protocol). This setup allows developers to remotely execute commands as if they were running a local node.
* **Blockchain Data Retrieval:** Developers can fetch detailed information about blocks, transactions, and addresses. This includes querying transaction histories, obtaining unspent transaction outputs (UTXOs), and monitoring address balances.
* **Transaction Broadcasting:** Applications can create, sign, and broadcast transactions to the network. This is crucial for sending payments or interacting with Layer 2 solutions like the Lightning Network.
***
# Service Availability
The Node RPC service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin | Midl |
| :----------- | :---------------------------------------------- | :------------ | :----------------------------------------------- | :------------------------------------------- |
| **Node RPC** | [API Reference](/bitcoin/node-rpc-api/overview) | *Coming Soon* | [API Reference](/dogecoin/node-rpc-api/overview) | [API Reference](/midl/node-rpc-api/overview) |
***
## Benefits for Developers
* **Resource Efficiency:** Running a full blockchain node requires significant disk space, constant bandwidth, and computational resources. An RPC provider offloads this burden, allowing developers to access node functionalities without the associated overhead.
* **Time Savings:** Synchronizing a new node with the network can take several days. RPC providers offer immediate access, accelerating development and deployment timelines.
* **Scalability:** Designed to handle high volumes of requests, ensuring that applications can scale to meet user demand without performance degradation.
* **Reliability and Uptime:** Maintain robust infrastructure with high availability, ensuring consistent access to the blockchain network, which is critical for real-time applications.
* \*\*Expertise and Support: \*\*Maestro's specialized team manages the nodes, offering optimizations, security updates, and technical support that individual developers might find challenging to maintain independently.
***
## Use-Cases for Blockchain Businesses
* **Cryptocurrency Wallets:** Developers building crypto wallets can use RPC providers to manage wallet functionalities, check balances, and send transactions without handling the complexities of node management.
* **Payment Processing Systems:** E-commerce platforms or services that accept cryptocurrencies can utilize RPC providers to monitor incoming transactions, confirm payments, and handle withdrawals efficiently.
* **Blockchain Explorers:** Applications that allow users to explore blockchain data need access to detailed information about blocks, transactions, and addresses, which can be provided through RPC services.
* **Analytics and Monitoring Tools:** Developers creating tools for network analysis, transaction monitoring, or market insights can retrieve necessary data points from the blockchain
* **Exchange Platforms:** Cryptocurrency exchanges require reliable and fast interactions with the network for processing deposits, withdrawals, and confirming transaction statuses.
***
## Takeaways
Maestro's Node RPC service plays a pivotal role in the blockchain ecosystem by bridging the gap between developers and the blockchain network. By handling the complexities of node operation and maintenance, RPC providers empower developers to:
* **Focus on Innovation:** Spend more time developing features and improving user experience rather than managing infrastructure.
* **Reduce Costs:** Avoid the expenses related to hardware, storage, bandwidth, and maintenance associated with running full nodes.
* **Enhance Security:** Leverage the provider's expertise in securing nodes and handling sensitive data like private keys.
* **Achieve Scalability:** Easily scale applications to accommodate a growing user base without worrying about backend limitations.
# Platform Overview
Source: https://docs.developer.gomaestro.org/general/platform-overview
Complete overview of Maestro's Web3 stack for UTxO chains including Bitcoin, Cardano, and Dogecoin. Discover our key differentiators and services.
**The Complete Web3 Stack for UTxO Chains**
[Maestro](https://www.gomaestro.org/) offers an advanced UTxO-indexing data layer to supercharge Defi on Bitcoin, Cardano & Dogecoin. Below is an overview of Maestro's key differentiators and available services.
***
[**Maestro**](https://www.gomaestro.org/)**’s state-of-the-art UTxO indexer technology** offers a *battle-tested, high-performance data layer* optimized to meet the unique needs and challenges of *UTxO-based DeFi protocols*, making it the infrastructure provider of choice for these blockchains.
## Key Differentiators
Whether developing DeFi protocols, launching NFT marketplaces, or diving into blockchain data, Maestro equips you with everything you need to build, scale, and innovate:
* **✅ All-in-one Enterprise Platform:** No longer juggle multiple data providers and software vendors. Maestro offers a suite of advanced services under one enterprise-ready package.
* **✅ High Availability and Reliability:** Benefit from over 99% uptime, backed by enterprise-grade security to keep your applications running smoothly, without interruption.
* **✅ Efficient Data Access**: Accelerate development with streamlined blockchain integration using our standard API protocols and robust developer tools.
* **✅ Scalable and Cost-Effective:** Grow your project with confidence thanks to flexible, usage-based pricing designed to scale as your needs evolve.
* **✅ Unmatched Support and SLAs:** Get peace of mind with responsive customer support and transparent service level agreements, ensuring reliable and timely assistance whenever you need it.
***
# Available Services
The Maestro platform simplifies your code, streamlines development, and accelerates dApp deployment with a suite of innovative technologies.
| Services | Bitcoin | Cardano | Dogecoin | Midnight | Midl |
| ------------------------- | --------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| **Blockchain Indexer** | [API Reference](/bitcoin/blockchain-indexer-api/overview) | [API Reference](/cardano/blockchain-indexer-api/overview) | [API Reference](/dogecoin/blockchain-indexer-api/overview) | [**API Reference**](https://www.postman.com/go-maestro/maestro-api/collection/ye4quyd/midnight-indexer-graphql-api) | - |
| **Node RPC** | [API Reference](/bitcoin/node-rpc-api/overview) | *Coming Soon* | [API Reference](/dogecoin/node-rpc-api/overview) | *Coming Soon* | [API Reference](/midl/node-rpc-api/overview) |
| **Transaction Manager** | *Coming Soon* | [API Reference](/cardano/transaction-manager-api/overview) | *Coming Soon* | *Coming Soon* | - |
| **Mempool Monitoring** | [API Reference](/bitcoin/mempool-monitoring-api/overview) | *Coming Soon* | [API Reference](/dogecoin/node-rpc-api/overview) | - | - |
| **Event Manager** | [API Reference](/bitcoin/event-manager-api/overview) | *Coming Soon* | *Coming Soon* | Coming Soon | - |
| **Market Price** | [API Reference](/bitcoin/market-price-api/overview) | [API Reference](/cardano/market-price-api/overview) | *Coming Soon* | *Coming Soon* | - |
| **Managed Contracts** | *-* | [API Reference](/cardano/managed-contracts-api/overview) | - | *Coming Soon* | - |
| **Wallet Manager** | [**API Reference**](/bitcoin/wallet-api/overview) | - | *Coming Soon* | *Coming Soon* | - |
| **Esplora API** | [**API Reference**](/bitcoin/esplora-api/overview) | - | - | - | - |
| **Hosted Infrastructure** | ✔ | ✔ | ✔ | ✔ | ✔ |
## Swagger Support
In addition to our [official Maestro API references](/platform-overview#available-services), we also provide a [Maestro Swagger UI](https://swagger.gomaestro.org) for developers who prefer a lighter-weight approach to testing our services.
Simply select the service you are looking for from the dropdown menu at the top of the page and add your generated [Maestro API key](https://dashboard.gomaestro.org) to begin testing the endpoints.
# Service Overview
Enterprise-grade, high performance & low latency UTxO blockchain indexer optimized for both liveliness and accuracy.
Query blockchain data and broadcast transactions without the need to run your own full node.
Automates the entire transaction lifecycle, from submission to confirmation, providing full real-time visibility and control.
Detect unconfirmed transactions in the mempool & track the state of UTxOs and metaprotocol assets.
Onchain event notification service for event-driven software architecture.
Unlocks high-fidelity market price data, empowering your dApp with precise market insights for better decision-making.
Tools for managing crypto wallets. Developer-friendly API to generate key pairs and addresses quickly and securely.
Enables seamless deployment and management of smart contracts with plug-and-play APIs and customizable UI components, reducing development time.
A RESTful interface from Blockstream that provides read-only access to Bitcoin and Liquid blockchain data, including transactions, addresses, blocks, mempool, and assets.
Offers dedicated, scalable infrastructure tailored for performance, control, and security, meeting the demands of mission-critical applications.
# Transaction Manager
Source: https://docs.developer.gomaestro.org/general/transaction-manager
Transaction lifecycle management with real-time state tracking for pending, onchain, and rolled-back transactions across blockchain networks.
Transactions are at the center of all interactions on the blockchain. They are responsible for defining the specific ledger state transitions between two consecutive blocks (ie. UTxOs both consumed and created at an address). As a dApp developer, tracking individual states of a transaction is important and complex. A transaction can be `pending`in a mempool, `onchain`in a block, or `rolledback `from a block. Capturing these state transitions in real-time is challenging and can lead to corrupted data in your application.
***
# Service Availability
The Transaction Manager service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin |
| :---------------------- | :------------ | :--------------------------------------------------------- | :------------ |
| **Transaction Manager** | *Coming Soon* | [API Reference](/cardano/transaction-manager-api/overview) | *Coming Soon* |
***
# Possible Transaction States
| **State** | **Description** |
| :------------- | :----------------------------------------------------------------------------------- |
| **Rejected** | Rejected by the block producer due to an invalid transaction. |
| **Pending** | Transaction successfully submitted and waiting in a mempool to be accepted on-chain. |
| **Failed** | Communication to the node has failed. |
| **Onchain** | Transaction is part of a minted block. |
| **Rolledback** | Transaction has been removed from the chain due to a network rollback or reorg |
***
# Transaction Monitoring & Webhook Notification System
**Maestro’s Transaction Manager is a state-of-the-art tool that abstracts away the complexity of managing blockchain transaction states.** It provides a transaction monitoring dashboard and webhook notification system to track all transactions submitted with Maestro. This provides applications with the following benefits:
## 1. On-submit transaction information[](/cardano/transaction-manager-api/overview)
* **Automatic Retries**: Transactions that fail due to network issues are automatically resubmitted.
* **Rejection Error Parsing**: Transactions rejected by the node will return specific error messages, such as missing UTxOs or malformed transaction bodies.
* **Pending Transaction State**: Successfully submitted transactions are classified as `Pending` when entered into the mempool.
## 2. On-chain webhook notifications[](/cardano/transaction-manager-api/overview)
* **Onchain**: Once a `Pending` transaction is included in a block, an Onchain webhook notification is sent.
* **Rolledback**: If an `Onchain` transaction is dropped due to a rollback, a `Rollback` webhook notification is sent.
* **Timeouts**: ***\[Coming Soon]*** A transaction that remains in the mempool beyond its time-to-live will be marked as timed out and rejected.
***
## Transaction State Machine[](/cardano/transaction-manager-api/overview)
Transaction state transitions can best be understood with a [state machine](https://en.wikipedia.org/wiki/Finite-state_machine) diagram.
*Note: The state machine contains loops, meaning a transaction can transition through the same state multiple times before reaching an end state.*
For example, a rolledback transaction may be included into another block, resulting in three webhook notifications:
> **Onchain -> Rollback -> Onchain**
***
## Transaction Submission[](/cardano/transaction-manager-api/overview)
All transactions submitted via Maestro's specialized endpoint are **recorded and tracked** by the Transaction Manager. Below are the possible response codes:
| Response Code | Description | State Transition |
| :------------ | :----------------- | :--------------------------------- |
| 200 | Valid submission | Start --> Pending |
| 400 | Invalid submission | Start --> Rejected |
| 500 | Network failure | Start --> Start (retry) --> Failed |
***
## Common Use Cases
[Webhooks](https://en.wikipedia.org/wiki/Webhook) are ideal for tracking continuously changing states of data, such as blockchain transactions. Maestro’s transaction notification system provides an efficient way for applications to react to on-chain events, enhancing user experience—particularly for time-sensitive applications.
Examples of **time-sensitive Web3 applications**
* Submitting a trade on a DEX
* Placing a bid for an NFT auction
Transaction rollback notifications are essential for maintaining *data integrity* by providing a mechanism to revert in-app operations as soon as a rollback happens on-chain. For example, reverting an onchain DEX order after a block containing that transaction gets rolled back.
***
# Turbo Transactions
The **Turbo Transaction** service is designed to **supercharge your transaction submission** process. It is a specialized system that employs various strategies to **get your transaction on-chain as fast as possible**. Whether the network is **under heavy load** or operating under normal conditions, Turbo Transactions ensures your transactions are added to the blockchain with utmost **reliability and speed**.
This service is only included in subscriptions above the **Artist** tier.
***
# Service Availability
The Turbo Transaction service is available on the following blockchains:
# Benefits of a transaction propagation system
1. Outcompete transactions trying to consume **highly sought-after UTxOs**, particularly within intensive DeFi applications.
2. Enhance the **reliability of transaction submissions**, particularly during periods of high network load.
3. Accelerate **transaction onchain confirmation and finality**, providing an edge in time-sensitive operations.
***
## Common Use Cases
Use cases are vast, ranging from DeFi applications, where transaction speed can significantly impact financial outcomes, to gaming platforms, where swift transactions can enhance user experience dramatically. In essence, any application demanding fast, reliable transaction execution can substantially benefit from Turbo Transactions.
# Wallet Manager
Source: https://docs.developer.gomaestro.org/general/wallet-manager
Address-level wallet activity tracking with balance changes, metaprotocol interactions, and granular transaction insights for explorers and wallets.
This service provides granular insights into address-level activity, including balance changes and interactions with emerging metaprotocols, if applicable, depending on the chain. This API is ideal for developers building explorers, wallets, indexers, or analytics tools that need to surface meaningful, filtered transaction data tied to a specific address.
Whether you're tracking basic balance deltas or metaprotocol token flows, the Wallet API gives you a unified, flexible interface for querying relevant blockchain events with pagination and fine-grained filters.
## Key Features
* **Activity Tracking:** Understand balance increases, decreases, and self-transfers with timestamped accuracy to support historical analysis and auditing.
* **Bitcoin**
* **Satoshi History:** Returns the historical satoshi balances, itemized by block and including USD price.
* **Inscription Insight:** Monitor Ordinals transactions, filtered by inscription ID, activity type (send/receive), or self-transfer logic to reduce noise from spam or internal moves.
* **Rune Transaction Logging:** Track rune minting, transfers, etchings, and balance changes for a given address, including support for filtering by specific rune.
* **Unified Metaprotocol View:** Fetch combined activity across satoshis, inscriptions, and runes in a single request to power holistic user or address histories.
# Service Availability
The Wallet API service is available on the following blockchains:
| Service | Bitcoin | Cardano | Dogecoin | Arch |
| -------------- | --------------------------------------------- | ------- | -------- | ---- |
| **Wallet API** | [API Reference](/bitcoin/wallet-api/overview) | - | - | - |
## Benefits for Developers:
Developers gain the ability to surface address-level insights without having to manually parse raw blockchain data. The Wallet API simplifies historical activity analysis, enables protocol-specific filtering, and lets developers build UX-enhancing features like transaction history views, asset trackers, and real-time alerts for wallet activity without managing indexing infrastructure.
### Use Cases
* Displaying full transaction history for an address
* Filtering specific activity types (e.g., only inscriptions received or runes decreased)
* Building dashboards holders of specific assets
* Monitoring wallet interactions with native and metaprotocol layers (if applicable)
### Endpoint Categories
**Activity Tracking**
Provides a unified and filterable view of all address-level activity, including satoshi balance changes, Ordinals (inscription) movements, and Rune-related events like etching, minting, and transfers—enabling comprehensive insight into asset flows across Bitcoin and metaprotocol layers.
**Satoshi History**
Query the historical satoshi balance for a specific address over time, allowing you to understand address usage patterns, time-based changes in holdings, and to reconstruct past wallet states.
**Inscriptions Management**
Fetch inscriptions associated with a wallet or address, including metadata like inscription ID, type, and origin. Useful for tracking Ordinals-based NFTs and file inscriptions on Bitcoin.
**Rune Tracking**
Monitor Rune balances and related activity tied to your wallet, including mints, transfers, and etchings. Supports granular filtering by specific Rune ID or asset name.
**Transaction & UTXO Insight**
Delivers detailed, mempool-aware views of confirmed and unconfirmed transactions and UTXO sets per address. Supports batch queries and enables tracking of spendable outputs in real time, including upcoming blocks.
**Asset Holdings**
Provides a snapshot of current asset ownership for UTXOs, Runes, and Inscriptions (if applicable). Supports batch queries and reflects pending mempool updates, enabling dynamic portfolio and balance views across native and metaprotocol assets.
# API Usage
Source: https://docs.developer.gomaestro.org/midl/api-usage
Midl API usage guide with authentication, pagination, rate limits, and best practices for Maestro's Midl blockchain APIs.
# Authentication
You will need an `api-key` to access the Maestro API. You can obtain this key from the Maestro dApp Platform Dashboard.
## Examples
### POST Request
Example request for submitting a transaction:
```bash theme={null}
curl -X POST https://midl-mainnet.gomaestro-api.org/v0 \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
```
***
# Security
To ensure the security of your API usage, follow these best practices:
* **Keep your API key private**: Never share it publicly (e.g., on GitHub, client-side code).
* **Prevent unauthorized usage**: Loss or misuse of your API key can result in the overuse of your account's available credits.
* **Secure your API key**: Implement proper methods for storing and accessing your `api-key`, especially in production environments.
***
# Computer Credits
Maestro uses **Compute Credits** to measure the computational resources consumed by your applications on its platform, similar to traditional cloud providers like Google Cloud or AWS. The number of credits assigned to each operation or method is based on the global average duration of that process, **taking into account factors like complexity and computational intensity.**
Learn more about how Compute Credits are allocated by exploring the **Subscription breakdown.**
Compute Credits provide a **fair, usage-based pricing model**, meaning you only pay for the computational resources your application actually uses, making it both **cost-efficient** and **flexible**.
***
# Request Limits
Maestro enforces two types of API rate limits:
* **Per day**: a set amount of credits consumed per day based on your [subscription](https://www.gomaestro.org/pricing) plan.
* **Per second**: a set amount of requests per second based on your [subscription](https://www.gomaestro.org/pricing) plan.
*For example, the ****Artist plan**** supports up to 10 requests per second.*
For more details on available packages or to upgrade your plan, refer to the [Pricing page](https://www.gomaestro.org/pricing). If your organization needs higher limits, [contact us](mailto:info@gomaestro.org) to discuss **Enterprise solutions**.
***
# Response Headers
Maestro includes the following headers in API responses to help manage usage:
| Header | Description |
| -------------------------------- | ------------------------------------------------------ |
| X-RateLimit-Limit-Second | Maximum allowed requests per second. |
| **X-RateLimit-Remaining-Second** | **Remaining allowed requests for the current second.** |
| X-Maestro-Credits-Limit | Total allowed credits for the day. |
| **X-Maestro-Credits-Remaining** | **Remaining credits for the day.** |
Be sure to monitor these values (in **bold**) and adjust your request rate accordingly to avoid hitting rate limits.
***
# Errors
Maestro follows standard HTTP response codes to indicate the success or failure of API requests:
| 2xx | Success |
| --- | ------------------------------------------------------------ |
| 4xx | Client-side errors, such as missing or incorrect parameters. |
| 5xx | Server-side errors with Maestro. |
Refer to the [API Reference](/general/platform-overview) for detailed response codes for each endpoint.
***
# Overview
Source: https://docs.developer.gomaestro.org/midl/index
Midl blockchain APIs and services from Maestro. Access Midl Node RPC APIs for network communication.
Midl enables native smart contracts, tokens, and dApps directly on Bitcoin’s layer-1, without bridges or intermediaries.
Developers can build, deploy, and interact with Bitcoin-native assets just as they would on Ethereum or Solana, but retaining the security and decentralization of the Bitcoin network.
Midl unlocks:
* Smart contracts executing on Bitcoin’s consensus layer
* Token standards and fungible/non-fungible assets
* Native yields: staking, fee-redistribution, liquidity mining
* Full ecosystem interoperability (DEXes, governance, games, DeFi)
***
## Available Services
Maestro provides the following services, accessible across multiple Midl networks:
## Block Explorer
Maestro also provides a comprehensive block explorer for the Midl network, offering an intuitive interface to explore blocks, transactions, smart contracts, and network activity. The explorer provides real-time insights into the Midl blockchain, making it easy to track transactions, verify contract deployments, and monitor network health.
**Coming Soon**: Public block explorer link will be available here once deployed.
## Available Networks
The service is available on the following Midl networks:
| ***Network*** | ***Base URL*** |
| ------------- | -------------------------------------------------------------------------------------- |
| **Mainnet** | - |
| **Testnet** | - |
| **Regtest** | [https://midl-regtest.gomaestro-api.org/v0](https://midl-regtest.gomaestro-api.org/v0) |
The Maestro API is currently versioned at `v0`. When making a query, `v0 `must be included in your base URL.
# Midl - Node RPC API
Source: https://docs.developer.gomaestro.org/midl/node-rpc-api/overview
The [Midl](https://midl.xyz) Node RPC API provides direct, low-latency access to the Midl blockchain for querying network data, retrieving transaction and block details, EVM-specific metadata, and broadcasting transactions. This service is useful for developers building wallets, block explorers, vaults, or other blockchain-integrated applications.
**JSON-RPC Compatibility**
The Midl Node RPC API is a direct JSON-RPC interface that serves as a drop-in replacement for the MIDL EVM node's JSON-RPC interface. This means you can use existing EVM tooling and libraries without modification, simply by pointing them to Maestro's Midl RPC endpoints.
## Key Features
* **Blockchain Information**: Retrieve real-time network data, including current height, latest hash, and timestamp for live synchronization.
* **Block Data Access**: Fetch blocks by hash or height, explore recent block history with pagination, and select from header-only or full-detail views.
* **Transaction Retrieval**: View complete transaction details such as sender, recipient, gas usage, fee metrics, and Bitcoin linkage for cross-chain verification.
* **Hybrid Execution Context**: Access EVM-enhanced block data featuring gas metrics, withdrawals, and optional execution witness fields for full execution visibility.
* **Cross-Chain Metadata**: Leverage unified transaction records containing both EVM semantics and Bitcoin anchors for multi-layer analytics.
# JSON-RPC
Source: https://docs.developer.gomaestro.org/midl/node-rpc-api/rpc
midl/node-rpc-api/openapi.json post /rpc
A drop-in replacement for Ethereum JSON-RPC interface supporting all standard methods.
MIDL provides a single JSON-RPC endpoint that supports all standard Ethereum 2.0 JSON-RPC methods, making it a drop-in replacement for EVM-compatible blockchain interactions.
## JSON-RPC Methods:
* [Block](#block-methods)
* [Transaction](#transaction-methods)
* [Account](#account-methods)
* [Network](#network-methods)
### Block Methods
#### `eth_getBlockByNumber`
Get block information by block number.
**Parameters:**
1. `blockNumber` (string): Block number in hex or "latest", "earliest", "pending"
2. `includeTransactions` (boolean): If true, returns full transaction objects
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getBlockByNumber",
"params": ["latest", true],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"number": "0x1b4",
"hash": "0x1234567890abcdef...",
"parentHash": "0x...",
"gasLimit": "0x1c9c380",
"gasUsed": "0x...",
"timestamp": "0x...",
"transactions": [...]
}
}
```
#### `eth_getBlockByHash`
Get block information by block hash.
**Parameters:**
1. `blockHash` (string): Block hash in hexadecimal format
2. `includeTransactions` (boolean): If true, returns full transaction objects
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getBlockByHash",
"params": ["0x1234567890abcdef...", true],
"id": 1
}
```
#### `eth_blockNumber`
Get the current block number.
**Parameters:** None
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"params": [],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x4b7"
}
```
### Transaction Methods
#### `eth_getTransactionByHash`
Get transaction information by transaction hash.
**Parameters:**
1. `transactionHash` (string): Transaction hash in hexadecimal format
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getTransactionByHash",
"params": ["0x1234567890abcdef..."],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"hash": "0x1234567890abcdef...",
"blockNumber": "0x1b4",
"blockHash": "0x...",
"transactionIndex": "0x0",
"from": "0x...",
"to": "0x...",
"value": "0x...",
"gas": "0x5208",
"gasPrice": "0x...",
"input": "0x"
}
}
```
#### `eth_getTransactionReceipt`
Get transaction receipt by transaction hash.
**Parameters:**
1. `transactionHash` (string): Transaction hash in hexadecimal format
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getTransactionReceipt",
"params": ["0x1234567890abcdef..."],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"transactionHash": "0x1234567890abcdef...",
"blockNumber": "0x1b4",
"blockHash": "0x...",
"transactionIndex": "0x0",
"from": "0x...",
"to": "0x...",
"gasUsed": "0x5208",
"cumulativeGasUsed": "0x5208",
"status": "0x1",
"logs": []
}
}
```
### Account Methods
#### `eth_getBalance`
Get account balance for a specific address.
**Parameters:**
1. `address` (string): Account address in hexadecimal format
2. `blockParameter` (string): Block number in hex, or "latest", "earliest", "pending"
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0x1234567890abcdef...", "latest"],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x0234c8a3397aab58"
}
```
#### `eth_getTransactionCount`
Get the transaction count (nonce) for an account.
**Parameters:**
1. `address` (string): Account address in hexadecimal format
2. `blockParameter` (string): Block number in hex, or "latest", "earliest", "pending"
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_getTransactionCount",
"params": ["0x1234567890abcdef...", "latest"],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x1"
}
```
### Network Methods
#### `eth_gasPrice`
Get the current gas price.
**Parameters:** None
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_gasPrice",
"params": [],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x09184e72a000"
}
```
#### `eth_chainId`
Get the network chain ID.
**Parameters:** None
**Example Request:**
```json theme={null}
{
"jsonrpc": "2.0",
"method": "eth_chainId",
"params": [],
"id": 1
}
```
**Example Response:**
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x1"
}
```
## Error Handling
Standard JSON-RPC 2.0 error responses:
```json theme={null}
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32601,
"message": "Method not found"
}
}
```
## Integration Examples
### Web3.js
```javascript theme={null}
const Web3 = require('web3');
const web3 = new Web3('https://midl-mainnet.gomaestro-api.org/v0');
// Set default headers for API key
web3.currentProvider.headers = {
'api-key': 'YOUR_API_KEY'
};
// Get latest block
const block = await web3.eth.getBlock('latest');
```
### Ethers.js
```javascript theme={null}
const { JsonRpcProvider } = require('ethers');
const provider = new JsonRpcProvider('https://midl-mainnet.gomaestro-api.org/v0', {
headers: {
'api-key': 'YOUR_API_KEY'
}
});
// Get account balance
const balance = await provider.getBalance('0x...');
```
## Rate Limits
API calls are subject to your plan's rate limits. See [billing documentation](/account/manage-billing) for details on threshold billing and plan limits.
# API Reference
Source: https://docs.developer.gomaestro.org/midnight/api-reference
Midnight Network API reference documentation with GraphQL endpoints for privacy-focused blockchain queries and zero-knowledge operations.
# API Usage
Source: https://docs.developer.gomaestro.org/midnight/api-usage
Midnight Network API usage guide with authentication, privacy-focused queries, and best practices for zero-knowledge blockchain APIs.
# Authentication
You will need an `api-key` to access the Maestro API. To get an API key contact us on our socials: [Discord](https://discord.com/channels/950173135838273556/1266961548967018558) or email: `info@gomaestro.org`
## Examples
### Indexer Request
Example request for retrieving information from the pub-dub Indexer API:
```sh Curl theme={null}
curl --location 'https://midnight-testnet.gomaestro-api.org/v0/indexer/graphql' \
--header 'Content-Type: application/json' \
--header 'api-key: ${API_KEY}' \
--data '{"query":"query {\n block(offset: {height: 500}) {\n hash\n height\n timestamp\n parent {\n hash\n }\n transactions {\n hash\n applyStage\n }\n }\n}","variables":{}}'
```
### Prover Request
```sh Curl theme={null}
curl --location 'https://midnight-testnet.gomaestro-api.org/v0/prover/health' \
--header 'api-key: ${API_KEY}'
```
## Security
To ensure the security of your API usage, follow these best practices:
* **Keep your API key private**: Never share it publicly (e.g., on GitHub, client-side code).
* **Prevent unauthorized usage**: Loss or misuse of your API key can result in the overuse of your account's available credits.
* **Secure your API key**: Implement proper methods for storing and accessing your api-key, especially in production environments.
***
# Cursor-based Pagination
Some Maestro endpoints use **Cursor-based Pagination to break large datasets into smaller, more manageable responses.** This method is particularly relevant when returning all the data in a single response would be inefficient or slow.
* **Improved data integrity and accuracy** when fetching multiple pages.
* **Prevents duplicates**, even when new blocks are processed between queries.
* **Optimized for infinite scroll**, enabling a smooth user experience by loading content as the user scrolls.
When using this method, responses will include a `next_cursor` string. This value should be passed as the `cursor` parameter in your next request to retrieve the next page of results.
## Example
* **Initial Response**: When you make an initial API call, the response might include a `"next_cursor": "AAAAAALfeKF8btdzaVvkGaetSS7e1AAF"`. This indicates that there are more results to retrieve.
* **Using** `next_cursor`: To get the next page of data, you need to include the `next_cursor` value in your next API request by adding it as a query parameter (`cursor`).
* **Modifying the Query**: Append the cursor value to your API request URL, like this:
```none Text theme={null}
?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF
```
* **Result**: The API will return the next set of results when this value is provided.
* **End of Data:** If the response includes `"next_cursor": null`, the requested dataset's end has been reached.
**Other relevant query parameters are:**
| Parameter | Default | Description |
| :-------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `count` | `100` | Defines the maximum number of results per pagination page |
| `order` | `asc` | Specifies the sort order of the results. Acceptable values are `asc` (ascending) or `desc` (descending). This option is available only for specific endpoints. |
**Example**
```sh Curl theme={null}
curl -L -X GET 'https://mainnet.gomaestro-api.org/v1/policy/f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a/utxos?cursor=AAAAAALfeKF8btdzaVvkGaetSS7e1AAF' \
-H 'Accept: application/json' \
-H 'api-key: your-api-key'
```
Available [**Services & Networks**](https://documentation.gomaestro.org/) will include further details for a particular endpoint.
***
# Computer Credits
Maestro uses **Compute Credits** to measure the computational resources consumed by your applications on its platform, similar to traditional cloud providers like Google Cloud or AWS. The number of credits assigned to each operation or method is based on the global average duration of that process, **taking into account factors like complexity and computational intensity.**
Learn more about how Compute Credits are allocated by exploring the **Subscription breakdown.**
Compute Credits provide a **fair, usage-based pricing model**, meaning you only pay for the computational resources your application actually uses, making it both **cost-efficient** and **flexible**.
***
# Request Limits
Maestro enforces two types of API rate limits:
* **Per day**: a set amount of credits consumed per day based on your [subscription](https://www.gomaestro.org/pricing) plan.
* **Per second**: a set amount of requests per second based on your [subscription](https://www.gomaestro.org/pricing) plan.
*For example, the ****Artist plan**** supports up to 10 requests per second.*
For more details on available packages or to upgrade your plan, refer to the [Pricing page](https://www.gomaestro.org/pricing). If your organization needs higher limits, [contact us](mailto:info@gomaestro.org) to discuss **Enterprise solutions**.
***
# Response Headers
Maestro includes the following headers in API responses to help manage usage:
| Header | Description |
| :------------------------------- | :----------------------------------------------------- |
| X-RateLimit-Limit-Second | Maximum allowed requests per second. |
| **X-RateLimit-Remaining-Second** | **Remaining allowed requests for the current second.** |
| X-Maestro-Credits-Limit | Total allowed credits for the day. |
| **X-Maestro-Credits-Remaining** | **Remaining credits for the day.** |
Be sure to monitor these values (in **bold**) and adjust your request rate accordingly to avoid hitting rate limits.
***
# Errors
Maestro follows standard HTTP response codes to indicate the success or failure of API requests:
| 2xx | Success |
| --- | ------------------------------------------------------------ |
| 4xx | Client-side errors, such as missing or incorrect parameters. |
| 5xx | Server-side errors with Maestro. |
Refer to the [API Reference](/general/platform-overview) for detailed response codes for each endpoint.
***
# Overview
Source: https://docs.developer.gomaestro.org/midnight/index
Midnight Network APIs from Maestro - privacy-focused blockchain platform with zero-knowledge proofs for data-protected decentralized applications.
The [Midnight Network](https://midnight.network/) is a next-generation blockchain platform designed to empower **data protection in decentralized applications** (dApps). By integrating **zero-knowledge (ZK) proofs**, Midnight enables developers to create applications that protect user, commercial, and transaction metadata without compromising data ownership or utility.
**Key Features:**
* **Programmable Data Protection:** Developers can selectively disclose data, ensuring sensitive information remains confidential while maintaining necessary transparency.
* **Developer-Friendly Environment:** Midnight offers 'Compact,' a programming language based on TypeScript, facilitating a seamless transition for developers into blockchain and ZK technology.
* **Regulatory Compliance:** The platform's architecture supports the creation of applications that adhere to various regulatory requirements, balancing transparency with data protection.
* **Enterprise Integration:** Midnight's compliance-focused infrastructure is designed to be as user-friendly as traditional cloud services, making it accessible for enterprise adoption.
For more detailed information, you can explore Midnight's official website: [https://midnight.network/](https://midnight.network/)
## Available Services
Maestro provides the following services, accessible across multiple Midnight networks:
## Available Networks
The service is available on the following Bitcoin networks:
| ***Network*** | ***Base URL*** |
| ------------- | ----------------------------------------------- |
| **Mainnet** | **Coming soon** |
| **Testnet** | `https://midnight-testnet.gomaestro-api.org/v0` |
The Maestro API is currently versioned at `v0`. When making a query, `v0` must be included in your base URL.
# SDKs
Source: https://docs.developer.gomaestro.org/midnight/sdks
Midnight Network SDKs and client libraries for privacy-focused blockchain development with zero-knowledge proof capabilities.
*Coming soon*
# Tutorials (Coming Soon)
Source: https://docs.developer.gomaestro.org/midnight/tutorials-and-guides/tutorials-coming-soon
Upcoming Midnight Network tutorials for privacy-focused blockchain development with zero-knowledge proofs using Maestro's APIs.
*Coming soon*
# For AI Agents
Source: https://docs.developer.gomaestro.org/quick-start/for-ai-agents
Quickstart guide for AI agents and developers to use Maestro's SKILL.md for querying Maestro APIs and paying via x402.
✨ **AI Agent Integration**
Use the Maestro skill file below to teach your agent how to query Maestro APIs and pay with x402.
## Provide the Maestro skill directly
```text theme={null}
https://raw.githubusercontent.com/maestro-org/maestro-skill/refs/heads/main/SKILL.md
```
## Install the Maestro skill with npx
```bash theme={null}
npx skills add maestro-org/maestro-skill
```
## What This Skill Enables
* Agent-friendly instructions for querying Maestro APIs
* x402 payment flow guidance for autonomous API access
* A reusable setup path for both AI agents and human operators
## Next Step
Load the URL in your agent setup, then ask the agent to follow the skill and execute an x402-backed Maestro API query.
## Learn More
Learn how Maestro x402 payments work, including the payment challenge flow, wallet sign-in, and credit purchases.
# Make Your First API Request
Source: https://docs.developer.gomaestro.org/quick-start/make-your-first-api-request
**Unsure of what endpoints or service you might need?**
Check out our [Endpoint Recommendations](#endpoint-recommendations) section below. Feel free to reach out on [Discord](https://discord.com/invite/ES2rDhBJt3) with questions or further help identifying which endpoints would be a good fit for your specific use-case.
**Query Onchain Data with Maestro**
In this guide, you will learn to leverage Maestro's [Blockchain Indexer](/blockchain-indexer#) API interface to extract UTxO information given a blockchain address.
# Get UTxOs at an Address
The following endpoint will return a list of UTxOs controlled by a specific address. Select below the chain you want to query:
## Endpoint Recommendations
### Bitcoin
* [Metaprotocols](#metaprotocols)
### Metaprotocols
* [Metaprotocol Activity by Address (Mempool-aware)](/bitcoin/wallet-api/addresses/metaprotocol-activity-by-address)
**Inscriptions**:
* [Inscription IDs by Collection Symbol](/bitcoin/blockchain-indexer-api/inscriptions/inscription-ids-by-collection-symbol)
* [Collection Metadata by Collection Symbol](/bitcoin/blockchain-indexer-api/inscriptions/collection-metadata-by-collection-symbol)
* [Inscription Info](/bitcoin/blockchain-indexer-api/inscriptions/inscription-info)
* [Activity by Inscription](/bitcoin/blockchain-indexer-api/inscriptions/activity-by-inscription)
* [Collection Metadata by Inscription](/bitcoin/blockchain-indexer-api/inscriptions/collection-metadata-by-inscription)
* [Content by Inscription ID](/bitcoin/blockchain-indexer-api/inscriptions/content-by-inscription-id)
* [Token Metadata by Inscription ID](/bitcoin/blockchain-indexer-api/inscriptions/token-metadata-by-inscription)
* [Inscriptions by Address](/bitcoin/blockchain-indexer-api/addresses/inscriptions-by-address)
* [Inscription Activity by Address](/bitcoin/blockchain-indexer-api/addresses/inscription-activity-by-address)
* [Inscription Activity by Address (Wallet API)](/bitcoin/wallet-api/addresses/inscription-activity-by-address-mempool-aware)
**Runes:**
* [List Runes](/bitcoin/blockchain-indexer-api/runes/list-runes)
* [Runes Info](/bitcoin/blockchain-indexer-api/runes/runes-info)
* [Runes by Address](/bitcoin/blockchain-indexer-api/addresses/runes-by-address)
* [Runes by Address (Mempool-aware)](/bitcoin/mempool-monitoring-api/addresses/runes-by-address-mempool-aware)
* [Rune UTxOs by Address](/bitcoin/blockchain-indexer-api/addresses/rune-utxos-by-address)
* [Rune UTxOs by Address (Mempool-aware)](/bitcoin/mempool-monitoring-api/addresses/rune-utxos-by-address-mempool-aware)
* [Rune Activity by Address](/bitcoin/blockchain-indexer-api/addresses/rune-activity-by-address)
* [Rune Activity by Address (Wallet API)](/bitcoin/wallet-api/addresses/rune-activity-by-address-mempool-aware)
* [Activity by Rune](/bitcoin/blockchain-indexer-api/runes/activity-by-rune)
* [Holders by Rune](/bitcoin/blockchain-indexer-api/runes/holders-by-rune)
* [Holders by Rune (Mempool-aware)](/bitcoin/mempool-monitoring-api/runes/holders-by-rune-mempool-aware)
* [UTxOs by Runes](/bitcoin/blockchain-indexer-api/runes/utxos-by-runes)
* [Rune OHLC data](/bitcoin/market-price-api/dex/rune-ohlc-data)
* [Rune Trades for DEX](/bitcoin/market-price-api/dex/rune-trades-for-dex)
* [Rune Registry](/bitcoin/market-price-api/dex/rune-registry)
**BRC20:**
* [List BRC20](/bitcoin/blockchain-indexer-api/brc20/list-brc20)
* [BRC20 Info](/bitcoin/blockchain-indexer-api/brc20/brc20-info)
* [BRC20 Holders](/bitcoin/blockchain-indexer-api/brc20/brc20-holders)
* [BRC20 by Address](/bitcoin/blockchain-indexer-api/addresses/brc20-by-address)
* [BRC20 Transfer Inscriptions by Address](/bitcoin/blockchain-indexer-api/addresses/brc20-transfer-inscriptions-by-address)
# Query Bitcoin UTxOs
Source: https://docs.developer.gomaestro.org/quick-start/query-bitcoin-utxos
Tutorial guide to query Bitcoin UTxO information by address using Maestro's Blockchain Indexer API for wallet and transaction building.
**Get UTxO details on Bitcoin**
In this guide, you will learn to query Bitcoin and extract UTxO information by leveraging the [UTxOs by Address](/bitcoin/blockchain-indexer-api/address/utxos-by-address) endpoint.
## Prerequisites
Before submitting an API request, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org)
* [Create a Project](/getting-started#)
* `Project Name`: \
* `Blockchain`: Bitcoin
* `Network`: Testnet
## Steps to Submit an API Request
The API allows applications to retrieve a list of all UTxOs that are located at a specific address or controlled by a particular script (script pubkey).
In this example, we will use the `Bitcoin Testnet` as the selected network for our project.
***
### 1. Select the Network
* Ensure your project is configured to use `Bitcoin Testnet`.
***
### 2. Retrieve Transaction Output
* Use the following endpoint to get a list of all UTxOs that reside at the specified Bitcoin address or script pubkey:
```
/addresses/:address/utxos
```
***
### 3. Specify Path Parameters
* Include the required path parameters in your request:
| Parameter | Data Type | Description | Required |
| :-------- | :-------- | :------------------------------------------------ | :------- |
| `address` | String | The Bitcoin address or hex-encoded script pubkey. | yes |
***
### 4. Specify Query Parameters (Optional)
* Include **optional** query parameters as needed:
| Parameter | Data Type | Description | Required |
| :---------------------- | :-------- | :--------------------------------------------------------------------------------------------- | :------- |
| `filter_dust` | Boolean | Ignore UTxOs containing less than 100,000 sats. | no |
| `filter_dust_threshold` | Integer | Ignore UTxOs containing less than the specified number of satoshis. | no |
| `count` | any | Maximum number of results per page. | no |
| `order` | any | The order in which the results are sorted (by height at which UTxO was produced). | no |
| `from` | int64 | Return only UTxOs created on or **after** a specific height. | no |
| `to` | int64 | Return only UTxOs created on or **before** a specific height. | no |
| `cursor` | String | Pagination cursor string; use the cursor included in a page of results to fetch the next page. | no |
***
### 5. Send the API Request
* Use cURL or your preferred tool to send the API request:
For this example, we will use:
* `address`: **bc1qh62wlr6cv349jg2ltpfe6dgrjt585gzhlmecdu**
* `filter_dust`: **true**
* `order`: **desc**
qfkWFyfdd8WZIxrXZTCgzRqZyphMA0hk
```sh theme={null}
curl -X GET \
-H "api-key: " \
-H "Accept: application/json" \
"https://xbt-testnet.gomaestro-api.org/v0/addresses/tb1qphcdyah2e4vtpxn56hsz3p6kapg90pl4x525kc/utxos?filter_dust=true&order=desc"
```
***
### 6. Review the Response
The API will return a response like the following:
```json JSON theme={null}
{
"data": [{
"txid": "caff433f77a1458696280be82a9bdb7298260e5d85b81e7a77a762c47bbb89c2",
"vout": 1,
"address": "tb1qphcdyah2e4vtpxn56hsz3p6kapg90pl4x525kc",
"script_pubkey": "00140df0d276eacd58b09a74d5e0288756e8505787f5",
"satoshis": "9813110",
"confirmations": 186347,
"height": 2815507,
"runes": [],
"inscriptions": []
}, {
"txid": "9e46003cb9ae4906a81b4be663c0b3ea5acb8947857bbc20594e9d76144be6ff",
"vout": 2,
"address": "tb1qphcdyah2e4vtpxn56hsz3p6kapg90pl4x525kc",
"script_pubkey": "00140df0d276eacd58b09a74d5e0288756e8505787f5",
"satoshis": "980362",
"confirmations": 186373,
"height": 2815481,
"runes": [],
"inscriptions": []
}],
"last_updated": {
"block_hash": "000000000538766058d37b6ca5e2cd6d313aed48f16da2633eceec75a417e4ea",
"block_height": 3001854
},
"next_cursor": null
}
```
***
### 7. Understanding the Response
| Term | Definition |
| :-------------- | :----------------------------------------------------------------------------------------------------- |
| `txid` | The transaction ID where the UTXO was created. |
| `vout` | The index of the output in the transaction (`txid`). |
| `address` | The Bitcoin address that received the UTXO. |
| `script_pubkey` | The script public key associated with the UTXO, usually in hex format. |
| `satoshis` | The amount of satoshis (smallest unit of Bitcoin) in the UTXO. |
| `confirmations` | The number of confirmations that the UTXO has received on the blockchain. |
| `height` | The block height at which the UTXO was created. |
| `runes` | Additional data related to runes, if any (empty in this response). |
| `inscriptions` | Additional data related to inscriptions, if any (empty in this response). |
| `last_updated` | Information about the last block update related to this request. |
| `block_hash` | The hash of the last block where the UTXOs were updated or retrieved. |
| `block_height` | The height of the last block where the UTXOs were updated or retrieved. |
| `next_cursor` | A cursor for pagination to fetch the next page of results, if applicable (`null `if no further pages). |
***
**Next Steps**
Congrats! Now that you've made your API request, let's [Submit Your First Transaction](/submit-your-first-transaction).
# Query Cardano UTxOs
Source: https://docs.developer.gomaestro.org/quick-start/query-cardano-utxos
Tutorial guide to query Cardano UTxO information by address using Maestro's Blockchain Indexer API for wallet and dApp development.
**Get UTxO details on Cardano**
In this guide, you will learn to query Cardano and extract UTxO information by leveraging the [UTxOs at an Address](/cardano/blockchain-indexer-api/addresses/utxos-at-an-address) endpoint.
# Prerequisites
Before submitting an API request, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org)
* [Create a Project](/getting-started#)
* `Project Name`: \
* `Blockchain`: Cardano
* `Network`: Preprod
# Steps to Submit an API Request
The API allows applications to retrieve detailed information on UTxOs controlled by a specific address.
In this example, we will use the `Cardano Preprod` as the selected network for our project.
***
## 1. Select the Network
* Ensure your project is configured to use `Cardano Preprod`**.**
***
## 2. Retrieve Transaction Output
* Use the following endpoint to get a list of all UTxOs that reside at the specified Cardano address or script pubkey:
```
/addresses/\:address/utxos
```
***
## 3. Specify Path Parameters
* Include the required path parameters in your request:
| Parameter | Data Type | Description | Required |
| :-------- | :-------- | :------------------------------------------- | :------- |
| `address` | String | The address in Bech32 format to query UTxOs. | yes |
***
## 4. Specify Query Parameters (Optional)
* Include **optional** query parameters as needed:
| Parameter | Data Type | Description | Required |
| :--------------- | :-------- | :---------------------------------------------------------------------------------------------------------------- | :------- |
| `asset` | String | Returns only UTxOs containing a specific asset (formatted as concatenation of hex-encoded policy and asset name). | no |
| `resolve_datums` | Boolean | If `true`, include corresponding datums for datum hashes in the response. | no |
| `with_cbor` | Boolean | If `true`, includes CBOR encodings of transaction outputs in the response. | no |
| `count` | Integer | Maximum number of results to return per page. | no |
| `order` | String | Sort order for results (`asc` for ascending or `desc` for descending). | no |
| `from` | int64 | Returns only UTxOs created on or **after** a specific slot number. | no |
| `to` | int64 | Returns only UTxOs created on or **before** a specific slot number. | no |
| `cursor` | String | Pagination cursor string to fetch the next page of results. | |
***
## 5. Send the API Request
* Use cURL or your preferred tool to send the API request:
For this example, we will use:
* `address`: addr\_test1wzdtu0djc76qyqak9cj239udezj2544nyk3ksmfqvaksv7c9xanpg
* `order`: asc
```sh Curl theme={null}
curl -L -X GET \
-H "Accept: application/json" \
-H "api-key: " \
'https://preprod.gomaestro-api.org/v1/addresses/addr_test1wzdtu0djc76qyqak9cj239udezj2544nyk3ksmfqvaksv7c9xanpg/utxos?order=asc'
```
***
## 6. Review the Response
The API will return a response like the following:
```json JSON theme={null}
{
"data": [
{
"tx_hash": "6c1bbfff3b22f189b325fee3f51eceacf13090aae895e912c56ec615efacb3e0",
"index": 0,
"slot": 57115432,
"assets": [
{
"unit": "lovelace",
"amount": 1224040
},
{
"unit": "0c64d6d0371d11185aae649cf3a169040e94214137137b531ebb16c2446a65644f7261636c654e4654",
"amount": 1
}
],
"address": "addr_test1wzdtu0djc76qyqak9cj239udezj2544nyk3ksmfqvaksv7c9xanpg",
"datum": {
"type": "hash",
"hash": "065191b95752a6ecca365cfd19a68f8968215596fbfc94f1fbc8ab0053d9110f",
"bytes": null,
"json": null
},
"reference_script": null,
"txout_cbor": null
}
],
"last_updated": {
"timestamp": "2024-09-11 23:22:19",
"block_hash": "053a9d8a812db204a32ddbb90834128ec8f94a3de2c990caa413dd55ae30d5c1",
"block_slot": 70413739
},
"next_cursor": null
}
```
***
## 7. Understanding the Response
| Term | Definition |
| :------------------------ | :------------------------------------------------------------------------------- |
| `tx_hash` | The unique identifier of the transaction that created this UTXO. |
| `index` | The output index of this UTXO within the transaction. |
| `slot` | The slot number at which this UTXO was created. |
| `assets` | A list of assets contained in this UTXO, including their unit (type) and amount. |
| `address` | The address associated with this UTXO. |
| `datum.type` | The type of datum associated with this UTXO (e.g., "hash"). |
| `datum.hash` | The hash of the datum associated with this UTXO. |
| `datum.bytes` | The byte representation of the datum (if available), otherwise `null`. |
| `datum.json` | The JSON representation of the datum (if available), otherwise `null`. |
| `reference_script` | A reference to a script associated with this UTXO, if any, otherwise `null`. |
| `txout_cbor` | The CBOR encoding of the transaction output, if available, otherwise `null`. |
| `last_updated.timestamp` | The timestamp indicating when the data was last updated. |
| `last_updated.block_hash` | The hash of the block where the UTXO data was last updated. |
| `last_updated.block_slot` | The slot number of the block where the UTXO data was last updated. |
| `next_cursor` | A pointer to the next set of data if there are more results; otherwise `null`. |
**Next Steps**
Congrats! Now that you've made your API request, let's [Submit Your First Transaction](/submit-your-first-transaction).
# Query Dogecoin UTxOs
Source: https://docs.developer.gomaestro.org/quick-start/query-dogecoin-utxos
Tutorial guide to query Dogecoin UTxO information by address using Maestro's Blockchain Indexer API for wallet management and transactions.
**Get UTxO details on Dogecoin**
In this guide, you will learn to query Dogecoin and extract UTxO information by leveraging the [UTxOs by Address](/dogecoin/blockchain-indexer-api/addresses/utxos-by-address) endpoint.
## Prerequisites
Before submitting an API request, ensure you have completed the following:
* [Create an Account](https://dashboard.gomaestro.org)
* [Create a Project](/getting-started)
* `Project Name`: \
* `Blockchain`: Doge
* `Network`: Mainnet
***
## Steps to Submit an API Request
The API allows applications to list all UTxOs located at a specific address or controlled by a particular script (script pubkey).
In this example, we will use the `Doge Mainnet` as the selected network for our project.
***
### 1. Select the Network
* Ensure your project is configured to use `Doge Mainnet.`
***
### 2. Retrieve Transaction Output
* Use the following endpoint to get a list of all UTxOs that reside at the specified Doge address or script pubkey:
```
/addresses/\:address/utxos
```
***
### 3. Specify Path Parameters
* Include the required path parameters in your request:
| Parameter | Data Type | Description | Required |
| :-------- | :-------- | :--------------------------------------------- | :------- |
| `address` | String | The Doge address or hex-encoded script pubkey. | yes |
***
### 4. Specify Query Parameters (Optional)
* Include **optional** query parameters as needed:
| Parameter | Data Type | Description | Required |
| :---------------------- | :-------- | :--------------------------------------------------------------------------------------------- | :------- |
| `filter_dust` | Boolean | Ignore UTxOs containing less than 100,000 sats. | no |
| `filter_dust_threshold` | Integer | Ignore UTxOs containing less than the specified number of satoshis. | no |
| `count` | any | Maximum number of results per page. | no |
| `order` | any | The order in which the results are sorted (by height at which UTxO was produced). | no |
| `from` | int64 | Return only UTxOs created on or **after** a specific height. | no |
| `to` | int64 | Return only UTxOs created on or **before** a specific height. | no |
| `cursor` | String | Pagination cursor string; use the cursor included in a page of results to fetch the next page. | no |
***
### 5. Send the API Request
* Use cURL or your preferred tool to send the API request:
For this example, we will use:
* `address`: **D9Xni5mwofyjvtzg4Cq7aE5vsDJA3zXQti**
* `count`: **3**
* `order`: **asc**
```sh Curl theme={null}
curl -L -X GET \
-H "Accept: application/json" \
-H "api-key: " \
'https://xdg-mainnet.gomaestro-api.org/v0/addresses/D9Xni5mwofyjvtzg4Cq7aE5vsDJA3zXQti/utxos?count=3&order=asc'
```
***
### 6. Review the Response
The API will return a response like the following:
```json JSON theme={null}
{
"data": [{
"txid": "9921cf6256c0794aabdbd830ecd2cc75526ad3728a0a31ec6eb1cea816162cd8",
"vout": 0,
"address": "D9Xni5mwofyjvtzg4Cq7aE5vsDJA3zXQti",
"script_pubkey": "76a914302b2f9e99b0f1256ea229f1399ee2d38044dce488ac",
"satoshis": "100000",
"confirmations": 247204,
"height": 5144691,
"dunes": [],
"inscriptions": [{
"offset": 0,
"inscription_id": "676bd73b326dc73de502fa78f7ac4994a8054d9df1311e34c5d81f9182b51015i0"
}]
}, {
"txid": "9921cf6256c0794aabdbd830ecd2cc75526ad3728a0a31ec6eb1cea816162cd8",
"vout": 1,
"address": "D9Xni5mwofyjvtzg4Cq7aE5vsDJA3zXQti",
"script_pubkey": "76a914302b2f9e99b0f1256ea229f1399ee2d38044dce488ac",
"satoshis": "100000",
"confirmations": 247204,
"height": 5144691,
"dunes": [],
"inscriptions": [{
"offset": 0,
"inscription_id": "25025072dac60ec88cfe353d2d39448b33b702ce5799383493be797f00e97bf7i0"
}]
}, {
"txid": "9921cf6256c0794aabdbd830ecd2cc75526ad3728a0a31ec6eb1cea816162cd8",
"vout": 2,
"address": "D9Xni5mwofyjvtzg4Cq7aE5vsDJA3zXQti",
"script_pubkey": "76a914302b2f9e99b0f1256ea229f1399ee2d38044dce488ac",
"satoshis": "100000",
"confirmations": 247204,
"height": 5144691,
"dunes": [],
"inscriptions": [{
"offset": 0,
"inscription_id": "e0a9abc190a19e3287874c4244d2f8b20dbe437922c6c9774606d4f71e7bb2d1i0"
}]
}],
"last_updated": {
"block_hash": "a8e23d570387e97591545f98fd1572d4f8787ab180c5c282b76de1949c06c780",
"block_height": 5391895
},
"next_cursor": "AAAAAABOgHNg2CwWFqjOsW7sMQqKctNqUnXM0uww2NurSnnAVmLPIZlgAAAAAg"
}
```
***
### 7. Understanding the Response
| Term | Definition |
| :-------------- | :----------------------------------------------------------------------------------------------------- |
| `txid` | The transaction ID where the UTXO was created. |
| `vout` | The index of the output in the transaction (`txid`). |
| `address` | The Bitcoin address that received the UTXO. |
| `script_pubkey` | The script public key associated with the UTXO, usually in hex format. |
| `satoshis` | The amount of satoshis (smallest unit of Bitcoin) in the UTXO. |
| `confirmations` | The number of confirmations that the UTXO has received on the blockchain. |
| `height` | The block height at which the UTXO was created. |
| `runes` | Additional data related to runes, if any (empty in this response). |
| `inscriptions` | Additional data related to inscriptions, if any (empty in this response). |
| `last_updated` | Information about the last block update related to this request. |
| `block_hash` | The hash of the last block where the UTXOs were updated or retrieved. |
| `block_height` | The height of the last block where the UTXOs were updated or retrieved. |
| `next_cursor` | A cursor for pagination to fetch the next page of results, if applicable (`null `if no further pages). |
## Next Steps
Congrats! Now that you've made your API request, let's [Submit Your First Transaction](/submit-your-first-transaction).
# Submit Bitcoin transaction
Source: https://docs.developer.gomaestro.org/quick-start/submit-bitcoin-transaction
Complete guide to creating, signing, and broadcasting Bitcoin transactions using bitcoin-cli and Maestro APIs on Testnet4.
**Creating a Bitcoin Transaction Using bitcoin-cli and Maestro APIs**
This guide covers the steps to create a Bitcoin transaction using bitcoin-cli on Testnet4 Blockchain and Maestro APIs. We will generate a testnet4 Bitcoin address, transfer funds to our address, create a raw transaction, calculate fees using Maestro API, sign the transaction, and broadcast it to the Bitcoin network via Maestro API.
## Prerequisites
* A running Bitcoin Core node with bitcoin-cli access. See Setup Bitcoin Node guide in order to run a testnet4 bitcoin node and install bitcoin-cli.
* Maestro API credentials for retrieving transaction fees and broadcasting transactions. See Getting Started guide in order to create a free Maestro Account.
## Submit a Bitcoin Transaction
To receive Bitcoin, First, you will need to create a new wallet and then generate a new address using bitcoin-cli. Open CMD on Windows or Terminal on Linux and navigate to the bitcoin daemon folder and run the commands below:
```bash theme={null}
# Let's create a new Bitcoin Wallet
bitcoin-cli testnet4 createwallet "MaestroWallet1"
# Now you can create a new address that will be associated with your wallet
bitcoin-cli testnet4 getnewaddress "Address1"
mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM
```
The first command returns a newly generated Bitcoin wallet.
The second command creates a new address in that wallet which you can use as the recipient or sender in transactions.
To create a Bitcoin transaction, our wallet must have funds stored as UTXOs (Unspent Transaction Outputs).
We'll receive Test Bitcoin (tBTC) from the Testnet4 Faucet to Address1. This test bitcoin (not real BTC) will be used as UTXO to send funds to another address on the Testnet4 blockchain.
Go to CoinFaucet website and enter your bitcoin testnet4 address in order to receive test bitcoin.
The Coin Faucet will send Test Bitcoin (tBTC) to our Address1 testnet4 wallet, generating a transaction (tx) that will be recorded on the Bitcoin Testnet4 blockchain.
`abe3318569c84d229dd8aea53ca8e7c9dfe725d2f866ee60a8926cbfba4ddc0c`
**Maestro Bitcoin Explorer**
You can lookup the transaction by visiting explorer.gomaestro.org and entering the transaction id (txid).
[https://explorer.gomaestro.org/bitcoin/testnet/transactions/abe3318569c84d229dd8aea53ca8e7c9dfe725d2f866ee60a8926cbfba4ddc0c](https://explorer.gomaestro.org/bitcoin/testnet/transactions/abe3318569c84d229dd8aea53ca8e7c9dfe725d2f866ee60a8926cbfba4ddc0c)
In Step 2, we received 0.0001776 tBTC. The Bitcoin Faucet generated a transaction with two UTXO outputs. One of these UTXOs was assigned to our address as an output of that transaction, making it available as an input for future transactions. Refer to the screenshot below.
In order to get all Unspent Transaction Outputs (UTXOs) in your address use Maestro's API.
```bash theme={null}
curl --location 'https://xbt-testnet.gomaestro-api.org/v0/addresses/mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM/utxos?api-key={YOUR_MAESTRO_API_KEY}'
```
Below is the output for the Maestro API request UTXOs by Address
**In the given UTXO (Unspent Transaction Output) data:**
**txid (Transaction ID)**:
A unique identifier for the Bitcoin transaction that created this UTXO.
`"txid": "a4b80f03ff283418825ef8b30e4d2668fc8f61295f6dd2f95ac46074f704b1fb"`
**vout (Output Index)**:
The index of this specific output in the transaction.
A Bitcoin transaction can have multiple outputs, and vout specifies which output is being referenced.
`"vout" : 1` means this is the second output (indexes start at 0).
Together, `txid `and `vout `uniquely identify a UTXO, which can be spent in a future transaction.
**Each Transaction Creates Outputs**
Each Bitcoin transaction can create multiple outputs. The **vout** index refers to the specific output within that transaction.
* `"txid": "a4b80f03ff28..."` has an output at vout: 1.
* `"txid": "0a35bebbd903..."` also has an output at vout: 1.
These are separate transactions, meaning each `txid `corresponds to a different transaction, but both have at least two outputs (one at index 0 and another at index 1).
**In our case each UTXO Comes from a Different Transaction**
Even though both UTXOs belong to the same address (`mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM`), they originate from separate transactions, making their **combination of txid and vout unique**.
in the screenshot below we can witness that `"txid": "0a35bebbd903..." `has two outputs and one of them, with the `vout:1` for that transaction, was an input UTXO to our address.
Similarly, the transaction with `txid: "0a35bebbd903..." ` has two outputs. One of them, with index `vout:1`, became an input UTXO for our address when funds were spent in a new transaction. The remaining change from the transaction was sent back to our address. Refer to the screenshot below.
**Why This Matters**
When spending a UTXO in a new transaction, you must reference its **exact** `txid `and `vout`. Since each `txid `is different, these are **two separate UTXOs**, even though both have` vout: 1`.
This returns a list of UTXOs available for spending. Identify the UTXO’s txid and vout to use in the next step.
Let's generate a second address on Bitcoin Testnet Blockchain and create UTXO to send tBTC from Address1 to Address2
```bash theme={null}
bitcoin-cli -testnet4 getnewaddress "Address2"
mxVhXyQgXYaJ1ZfuWBa7QGUyH97obnYnkA
```
*
* Let's create a Raw transaction using bitcoin-cli command
Use the UTXO details to create a raw transaction. Replace placeholders with actual values:
```bash theme={null}
bitcoin-cli createrawtransaction '\[\{"txid":"UTXO\_TXID","vout": 1..n}]' '\{"RECIPIENT\_ADDRESS"\:amount,"CHANGE\_ADDRESS"\:amount}'
```
* `UTXO_TXID`: The transaction ID of the unspent output.
* `UTXO_VOUT`: The output index of the UTXO.
* `RECIPIENT_ADDRESS`: The address receiving Bitcoin.
* `AMOUNT`: The amount (in BTC) to send.
* `CHANGE_ADDRESS`: Your change address for receiving remaining funds.
* `CHANGE_AMOUNT`: The remaining balance after subtracting the transaction fee.
This command constructs a raw Bitcoin transaction, using a specific UTXO as an input and defining two output addresses with specified amounts. The generated raw transaction must be **signed** and **broadcasted** to the network to take effect.
```bash theme={null}
bitcoin-cli createrawtransaction '[\{"txid":"0a35bebbd903c6b0963eaeae5abcbe9ab57d80aafb3b24ccf1e6073672abde73", "vout":1 }]' '\{"mxVhXyQgXYaJ1ZfuWBa7QGUyH97obnYnkA":0.00015206,
"mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM":0.00001}'
```
* `createrawtransaction` - Creates a raw Bitcoin transaction without signing or broadcasting it.
* First argument `[\{"txid":"...","vout":1 }]` – Specifies the transaction input:
* txid is the transaction ID from which the UTXO is being spent.
* vout specifies the output index (1 in this case) from the previous transaction, meaning we are using the second output as an input.
* Second argument `{"mxVhXyQgXYaJ1ZfuWBa7QGUyH97obnYnkA":0.00015206, "mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM":0.00001}`– Defines the outputs:
* Sends 0.00015206 tBTC to address `mxVhXyQgXYaJ1ZfuWBa7QGUyH97obnYnkA`.
* Sends 0.00001 tBTC to address `mwB5SqzYMFQj1BQxPTTL8W2brMr6ehFEEM`.
*
Maestro has two APIs that you can use to calculate estimated fees and the minimum, median, and maximum fee rates for a transaction to be verified on a block.
Use Maestro's API to get the recommended fee rate:
```bash theme={null}
curl --location 'https://xbt-testnet.gomaestro-api.org/v0/rpc/transaction/estimatefee/6' \
--header 'api-key: \{MAESTRO\_API\_KEY}'
```
This API returns an estimate fee rate for 6 transaction verifications. Select a fee rate and adjust the `CHANGE_AMOUNT `accordingly. See Mempool Block Fee Rates Maestro API Documentation
Use Maestro Mempool API to calculate min, median and max block fee rates per tx [https://xbt-testnet.gomaestro-api.org/v0/mempool/fee\\\_rates](https://xbt-testnet.gomaestro-api.org/v0/mempool/fee\\_rates)
```bash theme={null}
curl --location 'https://xbt-testnet.gomaestro-api.org/v0/mempool/fee_rates' \
--header 'api-key: \{YOUR_MAESTRO_ENTERPRISE_API_KEY\}'
```
This API returns fee rates for different speeds (low, medium, high). Select a fee rate and adjust the `CHANGE_AMOUNT `accordingly. See Mempool Block Fee Rates Maestro API Documentation.
This section contains information related to the block and its fee estimates.
```bash theme={null}
"data": \[]
```
* `block_height`: The height (or index) of the block on the blockchain. In this case, it's block number 70608.
* `sats_per_vb` (Satoshis per virtual byte): This shows the estimated fee rate in (sats/vbyte), which is used for calculating transaction fees.
```bash theme={null}
Indexer_info": {}
```
* `chain_tip`: The latest block in the blockchain that is known by the indexer. It provides the block hash and the block height of the latest confirmed block.
* `block_hash`: The hash of the latest block in the chain.
* `block_height`: The height of the latest block in the blockchain.
* `mempool_timestamp`: The timestamp of when the data related to the mempool was recorded. The mempool holds unconfirmed transactions waiting to be included in a block.
* `estimated_blocks`: The predicted next block and its fee structure.
```bash theme={null}
bitcoin-cli signrawtransactionwithwallet "RAW_TX_HEX"
```
This command returns a signed transaction `(hex)` ready for broadcasting.
To check if the transaction is valid before broadcasting run the command below:
```bash theme={null}
bitcoin-cli testmempoolaccept '\["SIGNED\_TX\_HEX"\]'
```
If the command is valid and you provide a valid signed transaction (`SIGNED_TX_HEX`), it will return a JSON response where you can find the key-value pair - `"allowed":true` indicating whether the transaction would be accepted into the mempool or not.
Use Maestro’s API to push the transaction to the Bitcoin network:
```bash theme={null}
curl --location 'https\://xbt-testnet.gomaestro-api.org/v0/rpc/transaction/submit' \
--header 'Content-Type: text/plain' \
--header 'api-key: \{YOUR\_MAESTRO\_API\_KEY}' \
--data '"02000000010a336d7554da8b351850e57712379081364520309bd0fdb0c410ca4e3f8161c5010000006a47304402203c4fd342c1e8a8047ae1f5cd3c91bfed07328bc22d456f3db24a23c1769f51c40220523bed0042446df1830b44fe4ded71c6085a6e0bc389b2635abb3c4b385eff6f012102bfdbc8b5243526c89c31da25b9669121a7c98a4ba44a5c7d3a79fb0d58ea5e7bfdffffff02a03d0000000000001976a9140a5f580e3773f79eb266c9553c4f8187675bec9b88ace8030000000000001976a914861ba3640bb054ab203c13222fda0c2b58c3471788ac00000000"'
```
If successful, the response includes the transaction ID.
Use Maestro Bitcoin Explorer to monitor the Transaction
Use Mempool UTXO by Address API in order to monitor the broadcasted transaction.
```bash theme={null}
curl --location 'https://xbt-testnet.gomaestro-api.org/v0/mempool/addresses/mxVhXyQgXYaJ1ZfuWBa7QGUyH97obnYnkA/utxos' \
--header 'api-key: \{YOUR_MAESTRO_ENTERPRISE_API_KEY}'
```
To see the transaction on the testnet4 blockchain use mempool.space/testnet4
[Transactions by Address](/bitcoin/blockchain-indexer-api/addresses/transactions-by-address)
```bash theme={null}
curl --location 'https://xbt-testnet.gomaestro-api.org/v0/addresses/mgToGb1sxHdBiPbHE5TGMQyuck1DnejxQa/txs' \
--header 'api-key: \{YOUR_MAESTRO_API_KEY}'
```
[Transaction Info](/bitcoin/blockchain-indexer-api/transactions/transaction-info)
Congrats! you made it to this point and now you know how to create a Bitcoin Transaction using Maestro APIs.
Next Topic -> How to Create a Cardano Transaction
# Submit Cardano transaction
Source: https://docs.developer.gomaestro.org/quick-start/submit-cardano-transaction
Tutorial guide for submitting signed Cardano transactions to the network using Maestro's transaction submission endpoints.
*Coming soon*
# Submit Doge transaction
Source: https://docs.developer.gomaestro.org/quick-start/submit-doge-transaction
Tutorial guide for creating, signing, and broadcasting Dogecoin transactions using Maestro's Dogecoin APIs and transaction submission endpoints.
*Coming soon*
# Submit Your First Transaction
Source: https://docs.developer.gomaestro.org/quick-start/submit-your-first-transaction
**NEXT STEPS**
[Bitcoin Documentation](/bitcoin)