# Table of Contents - [Tokens | Circular Docs](#tokens-circular-docs) - [Tips | Circular Docs](#tips-circular-docs) - [Endpoint | Circular Docs](#endpoint-circular-docs) - [Endpoint | Circular Docs](#endpoint-circular-docs) - [Status | Circular Docs](#status-circular-docs) - [Tools | Circular Docs](#tools-circular-docs) - [Transactions | Circular Docs](#transactions-circular-docs) - [Examples | Circular Docs](#examples-circular-docs) - [Tips | Circular Docs](#tips-circular-docs) - [Plans | Circular Docs](#plans-circular-docs) - [Endpoint | Circular Docs](#endpoint-circular-docs) - [Compute Units | Circular Docs](#compute-units-circular-docs) - [Compute Units | Circular Docs](#compute-units-circular-docs) - [Transactions | Circular Docs](#transactions-circular-docs) - [Api Keys | Circular Docs](#api-keys-circular-docs) - [Market Cache | Circular Docs](#market-cache-circular-docs) - [Fast | Circular Docs](#fast-circular-docs) - [Wallets | Circular Docs](#wallets-circular-docs) - [Gains | Circular Docs](#gains-circular-docs) - [Examples | Circular Docs](#examples-circular-docs) - [Overview | Circular Docs](#overview-circular-docs) - [Examples | Circular Docs](#examples-circular-docs) - [Fees | Circular Docs](#fees-circular-docs) - [Contact | Circular Docs](#contact-circular-docs) - [Transaction | Circular Docs](#transaction-circular-docs) - [Endpoint | Circular Docs](#endpoint-circular-docs) - [Examples | Circular Docs](#examples-circular-docs) - [Circular | Circular Docs](#circular-circular-docs) --- # Tokens | Circular Docs [PreviousExamples](/circular-docs/api/fast/examples) [NextEndpoint](/circular-docs/api/tokens/transactions) Last updated 1 month ago **Tokens** is one of Circular's most popular innovations, delivering unparalleled value to the arbitrage community. This API provides users with real-time access to an exclusive list of arbitrage mints, empowering them to craft and execute precise trading strategies with confidence. **Real-Time Arbitrage Intelligence** The **Tokens API** grants seamless access to a dynamic list of mints updated in real time. With customizable parameters, users can tailor the API to fit their specific trading and arbitrage needs, ensuring optimal performance for diverse strategies. **Why Is This Mint List Revolutionary?** Circular’s approach to identifying valuable mints is a game-changer in the arbitrage ecosystem. Unlike traditional methods that rely on volume or price discrepancies, which are prone to wash trading and manipulation, Tokens prioritizes real-time arbitrage gains. Here’s how it works: * **Market-Wide Analysis**: Circular continuously monitors the arbitrage market, analyzing gains generated across liquidity pools. * **True Market Signals**: The API focuses on tokens with verifiable arbitrage activity, driven by genuine user transactions rather than artificial volume. * **Liquidity Pool Integrity**: By targeting pools where trades require rebalancing through legitimate arbitrage, Tokens ensures its users have access to the highest-quality opportunities. **The Circular Difference** Volume and price discrepancies often mislead traders due to artificial inflation, but Tokens eliminates this noise. By concentrating on pools with proven arbitrage gains, the API delivers a curated list of mints that reflects real, actionable market conditions. **A Visual Insight: Liquidity Pools in Action** To better understand the significance of this innovation, consider a liquidity pool impacted by a large trade. The imbalance created necessitates arbitrage to restore equilibrium. Below is an image illustrating this process: When an arbitrage action is performed, it validates the authenticity of a liquidity pool's volume and allows for faster identification of trends, highlighting where the majority of arbitrage profits are being generated. **Who Benefits from Tokens?** Tokens caters to a wide array of market participants: * **Arbitrage Traders**: Identify the most lucrative mints without sifting through noise. * **DeFi Platforms**: Offer users robust tools for efficient market enga ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252F7glXB2ztSBHDWpo4sNJQ%252Fimage.png%3Falt%3Dmedia%26token%3Dc80803dc-2c15-4e17-9f71-777aa7f4fd6a&width=768&dpr=4&quality=100&sign=6e28eb97&sv=2) ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) --- # Tips | Circular Docs You can submit transactions free of charge via Fast, but each transaction must contain a TIP: * If your transaction **fail**, it will cost you absolutely **nothing** * If your transaction **success**, the tips will be sent to one of our **tips** wallets For each transaction sent, we check that it contains a TIP to one of Fast's wallets, the current minimum tip is **0.001 SOL** The higher your tip, the more your transaction will be prioritized Here are the TIP addresses : * **FAST3dMFZvESiEipBvLSiXq3QCV51o3xuoHScqRU6cB6** * **FASTHPW6akdGh9PFSdhMTbCuGkCSX7LsUjjnaB2RTQ4v** * **FASTYKWXRfAoty7SQCM1mGVrmPUyyNcF4tc3DUkLDAu9** * **FASTPB76TxKPMZ7Q29m8v4zJn8gUjbWyvTEQaaxhwN7M** * **FASTs6ctgbsuZegMzUs4DPUYhRSZUPCjgCVnttHbpQAp** * **FASTYmSidNfLwdwiQEhCTtzghxEtaipeNSDSwh9xDPs3** * **FASTCKnwwY6iL3CknRgg3Zqir7jeagDDhxSnBQQy5a1C** * **FASTKL1AamNKrwnvbKwo4PU8434BBdqVrTtugM6oDU71** [PreviousEndpoint](/circular-docs/api/fast/transactions) [NextExamples](/circular-docs/api/fast/examples) --- # Endpoint | Circular Docs `POST` [`https://fast.circular.bot/transactions`](https://fast.circular.bot/transactions) Optimized transaction landing **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Body** Copy { "jsonrpc": "2.0", "id": 1, "method": "sendTransaction", "params": [\ "...Base58 or Base64 tx",\ {\ "frontRunningProtection": false // false = SWQOS + Jito, true = only Jito\ }\ ] } **Response** 200 Copy { "jsonrpc": "2.0", "result": { "signature": "48GewyfenTDHJmg6xn3Yr...", "uuid": "9d56d81d76f441f2d06feb2..." }, "id": 1 } **Informations:** * **Fast** is currently implemented in **Amsterdam (AMS)**, we will be opening up to new regions * Requests per second: 25/50/100 * Available plans: [**FREE**](https://www.circular.bot/plans) , [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) [PreviousFast](/circular-docs/api/fast) [NextTips](/circular-docs/api/fast/tips) Last updated 1 month ago --- # Endpoint | Circular Docs `GET` [`https://pro.circular.bot/market/tokens`](https://pro.circular.bot/market/tokens) Tokens Mint List **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "maxTokensList": 10, // Maximum list, sorted by most to least interesting "maxTimeRange": 900, // Time range in which gains are taken into account "excludeTokens": [ // Exclude tokens from the return list\ "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC\ "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT\ ], "provider": "JITO", // Optional, Filter by provider list ("JITO", "FAST", "TEMPORAL", "BLOX", "NEXTBLOCK", "NO_PROVIDER") "token": "So11111111111111111111111111111111111111112" // Token with which you arbitrate to determine the most relevant mints } **Response** 200 Copy [\ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ...\ ] **Informations:** * Requests per minute: 20 * Available plans: [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/tokens_market_tokens_get) [PreviousTokens](/circular-docs/api/tokens) [NextExamples](/circular-docs/api/tokens/examples) Last updated 1 month ago --- # Status | Circular Docs [PreviousExamples](/circular-docs/api/market-cache/examples) [NextEndpoint](/circular-docs/api/status/transactions) Last updated 1 month ago **Status** is Circular's innovative tool designed to provide real-time insights into arbitrage market conditions. By leveraging a powerful algorithm, Status identifies market trends, detecting whether the market is calm or experiencing heightened activity. **Market Trend Detection** Status continuously analyzes arbitrage market data to determine: * **LOW Status**: Times of low volatility with fewer arbitrage opportunities. * **MEDIUM Status**: Moderate market activity, offering balanced arbitrage conditions. * **HIGH Status**: Periods of significant volatility, marked by high arbitrage activity and greater profit potential. **Visualizing Market Trends** Here's a curve describing the market status detected by our algorithm: **Why Use Status?** * **Enhanced Decision-Making**: Understand market conditions to time your strategies effectively. * **Data-Driven Insights**: Visualize profitability trends and adapt to market changes. * **Competitive Edge**: Stay ahead by leveraging real-time status updates on market behavior. **Who Benefits from Status?** Status is an invaluable tool for: * **Arbitrage Traders**: Optimize strategies based on real-time market conditions. * **High-Frequency Traders**: Identify peak periods for maximum gains. * **DeFi Analysts**: Gain deeper insights into market trends to inform decision-making. ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252F5Xp8e7BhTSe8LWDVnlEU%252Fimage.png%3Falt%3Dmedia%26token%3Db17b8e4a-dc4d-419b-bd16-41a9896667e4&width=768&dpr=4&quality=100&sign=3e160b31&sv=2) ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) --- # Tools | Circular Docs **Tools** represents a collection of utilities that were originally developed to address internal needs at Circular and requests from our community. These tools have been refined and made available through our API to empower users in the arbitrage and DeFi ecosystem. **Why Tools Were Created** Circular’s Tools are designed to solve practical challenges faced during arbitrage operations, whether they emerged from internal workflows or specific community feedback. By sharing these utilities, we ensure that all users benefit from: * **Proven Solutions**: Tools that have been tested and optimized for real-world applications. * **Community-Centric Features**: Many tools are direct responses to user requests and suggestions. [PreviousExamples](/circular-docs/api/status/examples) [NextWallets](/circular-docs/api/tools/wallets) Last updated 1 month ago ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) --- # Transactions | Circular Docs [Transaction](/circular-docs/api/tools/transactions/transactions) [PreviousTransactions](/circular-docs/api/tools/wallets/transactions-1) [NextTransaction](/circular-docs/api/tools/transactions/transactions) --- # Examples | Circular Docs JavascriptTypescriptPythonRust Copy // Define constants const API_URL = 'https://pro.circular.bot/market/tokens'; const API_KEY = 'your-api-key'; // Replace by your API Key const requestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, }, params: { maxTokensList: 10, maxTimeRange: 900, excludeTokens: [\ "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC\ "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT\ ].join(','), provider: "JITO", // Optional token: "So11111111111111111111111111111111111111112", }, }; const getTokensMintList = async () => { try { const response = await axios.get(API_URL, requestOptions); console.log('Mints: ', response?.data); } catch (error) { console.log('Error: ', error?.response?.data); } }; getTokensMintList(); Copy // Define constants const API_URL: string = 'https://pro.circular.bot/market/tokens'; const API_KEY: string = 'your-api-key'; // Replace with your API Key // Define interfaces for request options interface RequestOptions { headers: { 'Content-Type': string; 'x-api-key': string; }; params: { maxTokensList: number; maxTimeRange: number; excludeTokens: string; // Comma-separated string of tokens token: string; provider?: string; }; } // Define the response structure (adjust as needed) interface TokenMintListResponse { mints: string[]; // Assuming the response contains an array of mints } // Request options const requestOptions: RequestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, }, params: { maxTokensList: 10, maxTimeRange: 900, excludeTokens: [\ "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC\ "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT\ ].join(','), // Convert array to comma-separated string provider: "JITO", // Optional token: "So11111111111111111111111111111111111111112", }, }; // Function to fetch tokens mint list const getTokensMintList = async (): Promise => { try { const response: AxiosResponse = await axios.get( API_URL, requestOptions as AxiosRequestConfig ); console.log('Mints:', response.data); } catch (error: any) { console.error('Error:', error?.response?.data || error.message); } }; // Execute the function getTokensMintList(); Copy # Define constants API_URL = "https://pro.circular.bot/market/tokens" API_KEY = "your-api-key" # Replace with your API Key # Request headers and parameters headers = { "Content-Type": "application/json", "x-api-key": API_KEY, } params = { "maxTokensList": 10, "maxTimeRange": 900, "excludeTokens": ",".join([\ "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC\ "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", # USDT\ ]), "provider": "JITO", "token": "So11111111111111111111111111111111111111112", } # Function to fetch tokens mint list def get_tokens_mint_list(): try: response = requests.get(API_URL, headers=headers, params=params) response.raise_for_status() # Raise an exception for HTTP errors print("Mints:", response.json()) except requests.exceptions.RequestException as error: print("Error:", error.response.json() if error.response else str(error)) # Execute the function get_tokens_mint_list() Copy // Define constants const API_URL: &str = "https://pro.circular.bot/market/tokens"; const API_KEY: &str = "your-api-key"; // Replace with your API key // Define the response structure #[derive(Deserialize, Debug)] struct TokenMintListResponse { mints: Vec, // Assuming the response contains an array of mints } // Function to fetch tokens mint list async fn get_tokens_mint_list() -> Result<(), Box> { // Create a client let client = reqwest::Client::new(); // Set up headers let mut headers = HeaderMap::new(); headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); headers.insert("x-api-key", HeaderValue::from_static(API_KEY)); // Define parameters let exclude_tokens = vec![\ "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC\ "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", // USDT\ ] .join(","); // Convert array to comma-separated string let query_params = [\ ("maxTokensList", "10"),\ ("maxTimeRange", "900"),\ ("excludeTokens", &exclude_tokens),\ ("provider", "JITO"),\ ("token", "So11111111111111111111111111111111111111112"),\ ]; // Send the GET request let response = client .get(API_URL) .headers(headers) .query(&query_params) .send() .await?; if response.status().is_success() { let mints: TokenMintListResponse = response.json().await?; println!("Mints: {:#?}", mints); } else { eprintln!( "Error: {}", response.text().await.unwrap_or_else(|_| "Unknown error".to_string()) ); } Ok(()) } // Main function #[tokio::main] async fn main() { if let Err(err) = get_tokens_mint_list().await { eprintln!("An error occurred: {}", err); } } [PreviousEndpoint](/circular-docs/api/tokens/transactions) [NextMarket Cache](/circular-docs/api/market-cache) Last updated 1 month ago --- # Tips | Circular Docs [Compute Units](/circular-docs/api/tools/tips/transactions) [Gains](/circular-docs/api/tools/tips/transactions-1) [PreviousTransaction](/circular-docs/api/tools/transactions/transactions) [NextCompute Units](/circular-docs/api/tools/tips/transactions) --- # Plans | Circular Docs [PreviousApi Keys](/circular-docs/api/api-keys) [NextContact](/circular-docs/api/contact) Last updated 1 month ago You can find out more about the plans on [Circular](https://www.circular.bot/plans) . ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252FiNP2HPyj4kfKoPeJt8US%252Fimage.png%3Falt%3Dmedia%26token%3Dca7caeb4-f86f-4d09-9daf-1dc1709ec655&width=768&dpr=4&quality=100&sign=b32a0aab&sv=2) --- # Endpoint | Circular Docs `GET` [`https://pro.circular.bot/market/status`](https://pro.circular.bot/market/status) Real-time Market Status **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy {} **Response** 200 Copy { "state": "medium" // The state of the market ("high", "medium", "low") } **Informations:** * Requests per minute: 60 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/status_market_status_get) [PreviousStatus](/circular-docs/api/status) [NextExamples](/circular-docs/api/status/examples) Last updated 1 month ago --- # Compute Units | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/market/fees/by/computeUnit`](https://pro.circular.bot/market/fees/by/computeUnit) This endpoint retrieves percentile information for fees (in lamports) based on a comput unit range **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "wallets": [ // Optional | filter by a list of wallets, if the field is not specified the data is based on the entire market\ "Ge8xkdPrPU2tP22nKWBHocCZ6ezfHTLGHZzLsPmEtozH",\ ...\ ], "computeUnitMin": 0, // Minimum compute unit value "computeUnitMax": 10000000000000, // Maximum compute unit value "providers": [ // Filter by provider list ("JITO", "FAST", "TEMPORAL", "BLOX", "NEXTBLOCK", "NO_PROVIDER")\ "FAST",\ "JITO",\ ...\ ], "maxTimeRange": 900 // Considers transactions from now since (seconds) } **Response** 200 Copy { "FAST": { "number": 3223, // The total number of transactions where this mint was used for tipping "percentiles": { "p00": 1000000, // Minimum percentage of gains allowed for tip amounts. "p10": 1182033, "p20": 1495086, "p30": 2047978, "p40": 3154260, "p50": 4827979, // Median percentage of gains allowed for tip amounts (50th percentile). "p60": 6446495, "p70": 9217775, "p80": 15950023, "p90": 40284947, "p95": 104138223, "p99": 516037929 // 99th percentile of percentages of gains allowed for tip amounts. } } } **Informations:** * Requests per minute: 10 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/fees_by_computUnits_market_fees_by_computeUnit_get) [PreviousFees](/circular-docs/api/tools/fees) [NextApi Keys](/circular-docs/api/api-keys) Last updated 1 month ago --- # Compute Units | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/market/tips/by/computeUnit`](https://pro.circular.bot/market/tips/by/computeUnit) This endpoint retrieves percentile of token allowed to tips grouped by mint grouped by mint, based on a comput unit range **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "wallets": [ // Optional | filter by a list of wallets, if the field is not specified the data is based on the entire market\ "Ge8xkdPrPU2tP22nKWBHocCZ6ezfHTLGHZzLsPmEtozH",\ ...\ ], "computeUnitMin": 0, // Minimum compute unit value "computeUnitMax": 10000000000000, // Maximum compute unit value "providers": [ // Filter by provider list ("JITO", "FAST", "TEMPORAL", "BLOX", "NEXTBLOCK", "NO_PROVIDER")\ "FAST",\ "JITO",\ ...\ ], "maxTimeRange": 900 // Considers transactions from now since (seconds) } **Response** 200 Copy { "FAST": { "So11111111111111111111111111111111111111112": { // Token used for tips "number": 3223, // The total number of transactions where this mint was used for tipping "percentiles": { "p00": 1000000, // Minimum percentage of gains allowed for tip amounts. "p10": 1182033, "p20": 1495086, "p30": 2047978, "p40": 3154260, "p50": 4827979, // Median percentage of gains allowed for tip amounts (50th percentile). "p60": 6446495, "p70": 9217775, "p80": 15950023, "p90": 40284947, "p95": 104138223, "p99": 516037929 // 99th percentile of percentages of gains allowed for tip amounts. } } } } **Informations:** * Requests per minute: 10 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/tips_by_computeUnit_market_tips_by_computeUnit_get) [PreviousTips](/circular-docs/api/tools/tips) [NextGains](/circular-docs/api/tools/tips/transactions-1) Last updated 1 month ago --- # Transactions | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/wallets/transactions`](https://pro.circular.bot/market/tips/by/computeUnit) This endpoint retrieves the last 50 transactions for a set of wallets, over the most recent stored records, with the option to filter by transaction success status (isSuccess). **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "wallets": [ // Max 5 wallets\ "GuiU6MpLahPHSHYcsfSRjwLUm1AtZ9zP2eiLAkJMBjg",\ ...\ ], "isSuccess": true // Optional } **Response** 200 Copy [\ {\ "isSuccess": true,\ "wallet": "GuiU6MpLahPHSHYcsfSRjwLUm1AtZ9zP2eiLAkJMBjg",\ "signature": "5t2jysNxSxKs5KX1dS8uKvXZvoMSBgcg3TfLYGRYULf4Bv49C6aFMFzaBRE8nkanm4bGiysT1ygyV6D2G7ro7fho",\ "block_number": 314252437,\ "timestamp": "2025-01-15T23:59:48Z",\ "mint": "92cRC6kV5D7TiHX1j56AbkPbffo9jwcXxSDQZ8Mopump",\ "fees": 10000,\ "net_gains_usd": 1.757935,\ "net_gains_sol": 0.008532997\ },\ ...\ ] **Informations:** * Requests per minute: 1/3 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/get_transactions_wallets_transactions_get) [PreviousOverview](/circular-docs/api/tools/wallets/transactions) [NextTransactions](/circular-docs/api/tools/transactions) Last updated 1 month ago --- # Api Keys | Circular Docs [PreviousCompute Units](/circular-docs/api/tools/fees/transactions) [NextPlans](/circular-docs/api/api-keys-1) Last updated 1 month ago To obtain your API key, you must first create a [Circular account](https://www.circular.bot/dashboard) . You can then navigate to your [Circular account](https://www.circular.bot/account) and find your API key, which allows you to authenticate on all Circular services ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252FF7txqkOovSgcynTGwdRp%252Fimage.png%3Falt%3Dmedia%26token%3D8cc91dcc-4dfa-4f27-a2f5-1767d51b75d4&width=768&dpr=4&quality=100&sign=c5469f99&sv=2) ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252FMupyg4IEd2JsYn08IQBW%252Fimage.png%3Falt%3Dmedia%26token%3D1aad662f-eb84-4499-9159-c5a8e7b31bf7&width=768&dpr=4&quality=100&sign=99aa70e8&sv=2) --- # Market Cache | Circular Docs [PreviousExamples](/circular-docs/api/tokens/examples) [NextEndpoint](/circular-docs/api/market-cache/transactions) Last updated 1 month ago **Market Cache** is a transformative API designed to help users optimize the liquidity pools they use, saving significant time and gaining a competitive edge in the arbitrage market. **The Power of Market Cache** By leveraging **Market Cache**, users can filter and retrieve a comprehensive list of liquidity pools ready for integration into their Jupiter trading strategies. Here’s how it works: * **Real-Time Updates**: Market Cache monitors the creation and status of liquidity pools, ensuring its data is always current. * **Efficient Filtering**: With a single list of mints, users can identify and utilize the most relevant pools for their trading needs. * **Seamless Integration**: The API outputs pools in a format that’s ready to inject directly into Jupiter, simplifying the setup process for bots and strategies. **Unmatched Efficiency** Utilizing Market Cache dramatically improves operational efficiency. It minimizes downtime for your trading bots, ensuring they remain functional and capable of executing opportunities at all times. Below is a comparison of using Market Cache versus handling market data outside Jupiter: **Who Should Use Market Cache?** Market Cache is perfect for: * **High-Frequency Traders**: Maximize uptime and ensure swift integration of new pools. * **Algorithmic Traders**: Maintain peak bot performance with real-time pool data. * **DeFi Developers**: Provide users with seamless, optimized access to liquidity pools. ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252FlcXfJDDBPNXYsnAu39aH%252Fimage.png%3Falt%3Dmedia%26token%3D9dbfd792-1c00-4e09-8259-f150022ecd09&width=768&dpr=4&quality=100&sign=3c1513ad&sv=2) ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) --- # Fast | Circular Docs [PreviousCircular](/circular-docs) [NextEndpoint](/circular-docs/api/fast/transactions) Last updated 1 month ago **Fast** is Circular's cutting-edge solution designed to **optimize transaction** broadcasting across the **Solana network**. By receiving raw transactions, Fast simultaneously propagates them via **staked node (dedicated swqos)**, **standard nodes** and **Jito**, ensuring ultra-fast and efficient distribution across multiple channels. Leveraging a global infrastructure, Fast broadcasts transactions simultaneously across the world, maximizing validation speed, reducing latency, and enhancing the overall performance of critical on-chain strategies. [](#who-should-use-fast) **Who Should Use Fast** ----------------------------------------------------- * **Sniping Bots**: Outperform competitors by securing tokens and mints faster. * **DeFi Platforms**: Enhance user experience by ensuring smooth, reliable transactions without delays or failures. * **High-Frequency Traders**: Execute trades with unparalleled speed and precision to seize market opportunities. * **Liquidators**: Be the first to act on liquidation opportunities and maximize your edge. * **Jito Bundle Users**: Experience optimized throughput with enhanced efficiency using block engine integration. * **Algorithmic Traders**: Achieve consistency and reliability for your bots, regardless of market conditions. ### [](#fast-lets-you-concentrate-on-your-trading-and-arbitrage-strategies-well-make-sure-youre-land-fast) **Fast lets you concentrate on your trading and arbitrage strategies, we'll make sure you're land Fast!** ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FRVVO0mlZVIa6WOk9Ep9y%2Fimage.png&width=768&dpr=4&quality=100&sign=3157732d&sv=2) --- # Wallets | Circular Docs [Overview](/circular-docs/api/tools/wallets/transactions) [Transactions](/circular-docs/api/tools/wallets/transactions-1) [PreviousTools](/circular-docs/api/tools) [NextOverview](/circular-docs/api/tools/wallets/transactions) --- # Gains | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/market/tips/by/gains`](https://pro.circular.bot/market/tips/by/gains) This endpoint retrieves percentile of the percentages of gains allowed to tips grouped by mint, based on a input amount of token range **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "wallets": [ // Optional | filter by a list of wallets, if the field is not specified the data is based on the entire market\ "Ge8xkdPrPU2tP22nKWBHocCZ6ezfHTLGHZzLsPmEtozH",\ ...\ ], "inputAmountMin": 0, // Minimum input amount value "inputAmountMax": 10000000000000, // Maximum input amount "providers": [ // Filter by provider list ("JITO", "FAST", "TEMPORAL", "BLOX", "NEXTBLOCK", "NO_PROVIDER")\ "FAST",\ "JITO",\ ...\ ], "maxTimeRange": 900 // Considers transactions from now since (seconds) } **Response** 200 Copy { "FAST": { "So11111111111111111111111111111111111111112": { // Token used for tips "number": 3223, // The total number of transactions where this mint was used for tipping "percentiles": { "p00": 1000000, // Minimum percentage of gains allowed for tip amounts. "p10": 1182033, "p20": 1495086, "p30": 2047978, "p40": 3154260, "p50": 4827979, // Median percentage of gains allowed for tip amounts (50th percentile). "p60": 6446495, "p70": 9217775, "p80": 15950023, "p90": 40284947, "p95": 104138223, "p99": 516037929 // 99th percentile of percentages of gains allowed for tip amounts. } } } } **Informations:** * Requests per minute: 10 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/tips_by_gains_market_tips_by_gains_get) [PreviousCompute Units](/circular-docs/api/tools/tips/transactions) [NextFees](/circular-docs/api/tools/fees) Last updated 1 month ago --- # Examples | Circular Docs JavascriptTypescriptPythonRust Copy // Define constants const API_URL = 'https://pro.circular.bot/market/cache'; const API_KEY = 'your-api-key'; // Replace by your API Key const requestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, }, params: { onlyjup: false, tokens: [\ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ].join(',') }, }; const getFilteredMarketCache = async () => { try { const response = await axios.get(API_URL, requestOptions); console.log('Market-Cache: ', response?.data); } catch (error) { console.log('Error: ', error?.response?.data); } }; getFilteredMarketCache(); Copy // Define constants const API_URL: string = 'https://pro.circular.bot/market/cache'; const API_KEY: string = 'your-api-key'; // Replace with your API key // Define the request options interface interface RequestOptions { headers: { 'Content-Type': string; 'x-api-key': string; }; params: { onlyjup: boolean; tokens: string; // Comma-separated string of tokens }; } // Define response structure (adjust based on actual API response) interface MarketCacheResponse { cached: string; market_cache: Array<{ pubkey: string; owner: string; params?: Record; // Optional additional parameters }>; } // Request options const requestOptions: RequestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, }, params: { onlyjup: false, tokens: [\ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ].join(','), // Join tokens into a comma-separated string }, }; // Function to fetch the filtered market cache const getFilteredMarketCache = async (): Promise => { try { const response: AxiosResponse = await axios.get(API_URL, requestOptions); console.log('Market-Cache: ', response.data); } catch (error: any) { console.error('Error: ', error?.response?.data || error.message); } }; // Execute the function getFilteredMarketCache(); Copy # Define constants API_URL = "https://pro.circular.bot/market/cache" API_KEY = "your-api-key" # Replace with your API key # Request options headers = { "Content-Type": "application/json", "x-api-key": API_KEY, } tokens = [\ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ] params = { "onlyjup": False, "tokens": ",".join(tokens), # Join tokens into a comma-separated string } # Function to fetch filtered market cache def get_filtered_market_cache(): try: response = requests.get(API_URL, headers=headers, params=params) response.raise_for_status() # Raise an exception for HTTP errors print("Market-Cache:", response.json()) except requests.exceptions.RequestException as error: print("Error:", error.response.json() if error.response else str(error)) # Execute the function get_filtered_market_cache() Copy // Define constants const API_URL: &str = "https://pro.circular.bot/market/cache"; const API_KEY: &str = "your-api-key"; // Replace with your API key // Define the response structure #[derive(Deserialize, Debug)] struct MarketCacheResponse { cached: String, market_cache: Vec, } #[derive(Deserialize, Debug)] struct MarketCacheEntry { pubkey: String, owner: String, params: Option>, // Optional additional parameters } // Function to fetch the filtered market cache async fn get_filtered_market_cache() -> Result<(), Box> { // Create a client let client = reqwest::Client::new(); // Set up headers let mut headers = HeaderMap::new(); headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); headers.insert("x-api-key", HeaderValue::from_static(API_KEY)); // Define tokens as a comma-separated string let tokens = vec![\ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ] .join(","); // Set up query parameters let query_params = [("onlyjup", "false"), ("tokens", &tokens)]; // Send the GET request let response = client .get(API_URL) .headers(headers) .query(&query_params) .send() .await?; if response.status().is_success() { let market_cache: MarketCacheResponse = response.json().await?; println!("Market-Cache: {:#?}", market_cache); } else { eprintln!( "Error: {}", response.text().await.unwrap_or_else(|_| "Unknown error".to_string()) ); } Ok(()) } // Main function #[tokio::main] async fn main() { if let Err(err) = get_filtered_market_cache().await { eprintln!("An error occurred: {}", err); } } [PreviousEndpoint](/circular-docs/api/market-cache/transactions) [NextStatus](/circular-docs/api/status) Last updated 1 month ago --- # Overview | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/wallets/overview`](https://pro.circular.bot/market/tips/by/computeUnit) This endpoint retrieves the total net gains, trading volume, and transaction counts (in USD and SOL) for the specified wallets over the last 24 hours. **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "wallets": [ // Max 5 wallets\ "Ge8xkdPrPU2tP22nKWBHocCZ6ezfHTLGHZzLsPmEtozH",\ ...\ ], "provider": "JITO" // Optional, Filter by provider list ("JITO", "FAST", "TEMPORAL", "BLOX", "NEXTBLOCK", "NO_PROVIDER") } **Response** 200 Copy { "Ge8xkdPrPU2tP22nKWBHocCZ6ezfHTLGHZzLsPmEtozH": { "gains": { "SOL": { "success": 105.85100016, "fail": 0, "total": 105.85100016 }, "USD": { "success": 21577.28, "fail": 0, "total": 21577.28 } }, "volume": { "SOL": { "success": 8946.107759684, "fail": 0, "total": 8946.107759684 }, "USD": { "success": 1825002.08, "fail": 0, "total": 1825002.08 } }, "transactions": { "success": 1003, "fail": 0, "total": 1003 } } } **Informations:** * Requests per minute: 1/3 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/get_overview_wallets_overview_get) [PreviousWallets](/circular-docs/api/tools/wallets) [NextTransactions](/circular-docs/api/tools/wallets/transactions-1) Last updated 1 month ago --- # Examples | Circular Docs JavascriptTypescriptPythonRust Copy // Define constants const API_URL = 'https://pro.circular.bot/market/status'; const API_KEY = 'your-api-key'; // Replace by your API Key const requestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, } }; const getMarketStatus = async () => { try { const response = await axios.get(API_URL, requestOptions); console.log('Market-Cache: ', response?.data); } catch (error) { console.log('Error: ', error?.response?.data); } }; getMarketStatus(); Copy // Define constants const API_URL: string = 'https://pro.circular.bot/market/status'; const API_KEY: string = 'your-api-key'; // Replace with your API Key // Define the request options interface interface RequestOptions extends AxiosRequestConfig { headers: { 'Content-Type': string; 'x-api-key': string; }; } // Request options const requestOptions: RequestOptions = { headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY, }, }; // Define the response structure (adjust as needed) interface MarketStatusResponse { status: string; details: Record; // Adjust to match the structure of the API response } // Function to fetch market status const getMarketStatus = async (): Promise => { try { const response: AxiosResponse = await axios.get(API_URL, requestOptions); console.log('Market-Cache:', response.data); } catch (error: any) { console.error('Error:', error?.response?.data || error.message); } }; // Execute the function getMarketStatus(); Copy # Define constants API_URL = "https://pro.circular.bot/market/status" API_KEY = "your-api-key" # Replace with your API key # Request headers headers = { "Content-Type": "application/json", "x-api-key": API_KEY, } # Function to fetch market status def get_market_status(): try: response = requests.get(API_URL, headers=headers) response.raise_for_status() # Raise an exception for HTTP errors print("Market-Cache:", response.json()) except requests.exceptions.RequestException as error: print("Error:", error.response.json() if error.response else str(error)) # Execute the function get_market_status() Copy // Define constants const API_URL: &str = "https://pro.circular.bot/market/status"; const API_KEY: &str = "your-api-key"; // Replace with your API Key // Define the response structure #[derive(Deserialize, Debug)] struct MarketStatusResponse { status: String, details: Option, // Adjust based on the actual response structure } // Function to fetch market status async fn get_market_status() -> Result<(), Box> { // Create a client let client = reqwest::Client::new(); // Set up headers let mut headers = HeaderMap::new(); headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); headers.insert("x-api-key", HeaderValue::from_static(API_KEY)); // Send the GET request let response = client .get(API_URL) .headers(headers) .send() .await?; if response.status().is_success() { let market_status: MarketStatusResponse = response.json().await?; println!("Market-Cache: {:#?}", market_status); } else { eprintln!( "Error: {}", response.text().await.unwrap_or_else(|_| "Unknown error".to_string()) ); } Ok(()) } // Main function #[tokio::main] async fn main() { if let Err(err) = get_market_status().await { eprintln!("An error occurred: {}", err); } } [PreviousEndpoint](/circular-docs/api/status/transactions) [NextTools](/circular-docs/api/tools) Last updated 1 month ago --- # Fees | Circular Docs [Compute Units](/circular-docs/api/tools/fees/transactions) [PreviousGains](/circular-docs/api/tools/tips/transactions-1) [NextCompute Units](/circular-docs/api/tools/fees/transactions) --- # Contact | Circular Docs For all assistance / personalized offers requests, we are available through the following channels: * Twitter: [https://x.com/Circular\_fi](https://x.com/Circular_fi) * Discord: [https://discord.gg/j99p8dmE5a](https://discord.gg/j99p8dmE5a) [PreviousPlans](/circular-docs/api/api-keys-1) Last updated 12 days ago --- # Transaction | Circular Docs [](#endpoint) Endpoint --------------------------- `GET` [`https://pro.circular.bot/transaction`](https://pro.circular.bot/market/tips/by/computeUnit) Retrieves detailed information about a transaction from its unique signature. **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "signature": "4Pap2uwUQ8QC9EF7wD5jNwbSjSsJ6URkWBS7m2UUBvfq7DXPwzFetEYy5XnP6MhrwUV5fVfKBrJQ8qnrjp4kzosC" } **Response** 200 Copy { "signature": "4Pap2uwUQ8QC9EF7wD5jNwbSjSsJ6URkWBS7m2UUBvfq7DXPwzFetEYy5XnP6MhrwUV5fVfKBrJQ8qnrjp4kzosC", "wallet": "E8bTgCfQLMSrJ6wPaq3GsRaGopzNzGL7RPCUYqRUHSFM", "isSuccess": true, "timestamp": "2025-01-17T12:40:45Z", "type": "arbitrage", "block_number": 314575587, "compute_unit": 106405, "fees": 5000, "gains_details": [\ {\ "amount": -5000,\ "mint": "So11111111111111111111111111111111111111111",\ "price": 219.117,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 9,\ "symbol": "SOL"\ },\ {\ "amount": 151589083,\ "mint": "So11111111111111111111111111111111111111112",\ "price": 219.117,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 9,\ "symbol": "SOL"\ }\ ], "tips_details": [\ {\ "type": "JITO",\ "amount": 124027430,\ "mint": "So11111111111111111111111111111111111111112",\ "to": [\ "piJ2unWe2Z24ncjmFoqjKpXpzhTTCAoRd1KepaMM7tH",\ "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"\ ],\ "price": 219.117,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 9,\ "symbol": "SOL"\ }\ ], "route_map_details": [\ {\ "order": 0,\ "input_mint": "So11111111111111111111111111111111111111112",\ "output_mint": "DKu9kykSfbN5LBfFXtNNDPaX35o4Fv6vJ9FKk7pZpump",\ "input_amount": 38548520243,\ "output_amount": 37230476716,\ "input_mint_info": {\ "price": 219.117,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 9,\ "symbol": "SOL"\ },\ "output_mint_info": {\ "price": 0.2365,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 6,\ "symbol": "AVA"\ }\ },\ {\ "order": 1,\ "input_mint": "DKu9kykSfbN5LBfFXtNNDPaX35o4Fv6vJ9FKk7pZpump",\ "output_mint": "So11111111111111111111111111111111111111112",\ "input_amount": 37230476716,\ "output_amount": 38824136756,\ "input_mint_info": {\ "price": 0.2365,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 6,\ "symbol": "AVA"\ },\ "output_mint_info": {\ "price": 219.117,\ "price_timestamp": "2025-01-17T12:37:00Z",\ "digits": 9,\ "symbol": "SOL"\ }\ }\ ], "net_gains_usd": 33.214649, "net_gains_sol": 0.151584083, "volume_usd": 8446.63611, "volume_sol": 38.548520243 } **Informations:** * Requests per minute: 30/60 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/get_transaction_by_signature_transaction_get) [PreviousTransactions](/circular-docs/api/tools/transactions) [NextTips](/circular-docs/api/tools/tips) Last updated 1 month ago --- # Endpoint | Circular Docs `GET` [`https://pro.circular.bot/market/cache`](https://pro.circular.bot/market/cache) Filtering and optimizing your Jupiter market-cache **Headers** Copy { "Content-Type": "application/json", "x-api-key": "your-api-key" } **Parameters** Copy { "onlyjup": false, // Filter only the Jupiter market-cache or also pools retrieved in real time by Circular "tokens": [ // The tokens you're interested in, the API will filter the pools where tokenA and tokenB correspond to tokens in your list \ "So11111111111111111111111111111111111111112",\ "BbtrrZ2ExfCTzrndFBCx5iNDFXxuVxNMdEZ14BZxpump",\ "6b7NtVRo6jDSUZ75qfhHgpy99XVkSu1kfoTFu2E3pump",\ ...\ ] } **Response** 200 Copy [\ {\ "pubkey": "EzvDheLRnPjWy3S29MZYEi5qzcaR1WR5RNS8YhUA5WG5",\ "owner": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",\ "params": { // Optional\ "addressLookupTableAddress":"5tVPTN4afHxuyS8CNCNrnU7WZJuYeq5e2FvxUdCMQG7F", // Optional\ "serumAsks":"Ac8Hoi4LBbJfG4pCEUu2sS3jkmNrZBv6tbdmEnxAkRsK",\ "serumBids":"CF1NyAZjWqi8t9WZ7pSiqCiTSr3taZ94EW44AjyZRsnY",\ "serumCoinVaultAccount":"65LDE8k8WqhgrZy6NDsVQxGuUq3r8fT8bJunt5WPAZAk",\ "serumEventQueue":"1Xpk12GqjPLS8bkL8XVRHc6nrnunqcJhDha9jUq6Ymc",\ "serumPcVaultAccount":"AKATaDtSNPc5HemQCJzhph7o76Q1ndRHyKwai5C4wFkR",\ "serumVaultSigner":"7xookfS7px2FxR4JzpB3bT9nS3hUAENE4KsGaqkM6AoQ"\ }\ },\ ...\ ] **Informations:** * **Market Cache** currently supports **Raydium**, **Meteora** and **Orca** * Requests per minute: 10 * Available plans: [**PREMIUM**](https://www.circular.bot/plans) , [**PRO**](https://www.circular.bot/plans) * More technical information [here](https://pro.circular.bot/documentation#operation/cache_market_cache_get) [PreviousMarket Cache](/circular-docs/api/market-cache) [NextExamples](/circular-docs/api/market-cache/examples) Last updated 1 month ago --- # Examples | Circular Docs JavascriptTypescriptPythonRust Copy // Define constants const FAST_URL_ENGINES = "https://fast.circular.bot/transactions"; const FAST_TIP = new PublicKey("FAST3dMFZvESiEipBvLSiXq3QCV51o3xuoHScqRU6cB6"); const MIN_TIP_AMOUNT = 1_000_000; async function sendFastTx( ixs, signer, rpcClient ) { // Create transfer instruction const tipIx = SystemProgram.transfer({ fromPubkey: signer.publicKey, toPubkey: FAST_TIP, lamports: MIN_TIP_AMOUNT, }); ixs.push(tipIx); // Get the latest blockhash const { blockhash } = await rpcClient.getLatestBlockhash(); // Create transaction and sign it const tx = new Transaction().add(...ixs); tx.recentBlockhash = blockhash; tx.feePayer = signer.publicKey; tx.sign(signer); // Serialize the transaction to Base64 const serializedTx = tx.serialize().toString("base64"); // Send the transaction const response = await fetch(FAST_URL_ENGINES, { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "your-api-key" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "sendTransaction", params: [\ serializedTx, // base58 or base64\ {\ frontRunningProtection: false, // false = SWQOS + Jito, true = only Jito \ },\ ], }), }); console.log("Transaction sent :", await response.json()); } Copy // Define constants const FAST_URL_ENGINES = "https://fast.circular.bot/transactions"; const FAST_TIP = new PublicKey("FAST3dMFZvESiEipBvLSiXq3QCV51o3xuoHScqRU6cB6"); const MIN_TIP_AMOUNT = 1_000_000; async function sendFastTx( ixs: TransactionInstruction[], signer: Keypair, rpcClient: Connection ): Promise { // Create transfer instruction const tipIx = SystemProgram.transfer({ fromPubkey: signer.publicKey, toPubkey: FAST_TIP, lamports: MIN_TIP_AMOUNT, }); ixs.push(tipIx); // Get the latest blockhash const { blockhash } = await rpcClient.getLatestBlockhash(); // Create transaction and sign it const tx = new Transaction().add(...ixs); tx.recentBlockhash = blockhash; tx.feePayer = signer.publicKey; tx.sign(signer); // Serialize the transaction to Base64 const serializedTx = tx.serialize().toString("base64"); // Send the transaction const response = await fetch(FAST_URL_ENGINES, { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "your-api-key" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "sendTransaction", params: [\ serializedTx, // base58 or base64\ {\ frontRunningProtection: false, // false = SWQOS + Jito, true = only Jito \ },\ ], }), }); console.log("Transaction sent :", await response.json()); } Copy # Define constants FAST_URL_ENGINES = "https://fast.circular.bot/transactions" FAST_TIP = PublicKey("FAST3dMFZvESiEipBvLSiXq3QCV51o3xuoHScqRU6cB6") MIN_TIP_AMOUNT = 1_000_000 API_KEY = "your-api-key" def send_fast_tx(ixs, signer, rpc_client, front_running_protection=False): # Create transfer instruction tip_ix = transfer( TransferParams( from_pubkey=signer.public_key, to_pubkey=FAST_TIP, lamports=MIN_TIP_AMOUNT, ) ) ixs.append(tip_ix) # Get the latest blockhash blockhash = rpc_client.get_recent_blockhash()["result"]["value"]["blockhash"] # Create and sign the transaction tx = Transaction(recent_blockhash=blockhash, fee_payer=signer.public_key) for ix in ixs: tx.add(ix) tx.sign(signer) # Serialize the transaction to Base64 serialized_tx = base64.b64encode(tx.serialize()).decode("utf-8") # Send the transaction via the Fast endpoint headers = { "Content-Type": "application/json", "x-api-key": API_KEY, } payload = { "jsonrpc": "2.0", "id": 1, "method": "sendTransaction", "params": [\ serialized_tx, # base58 or base64\ {\ "frontRunningProtection": front_running_protection, # false = SWQOS + Jito, true = only Jito \ },\ ], } response = requests.post(FAST_URL_ENGINES, json=payload, headers=headers) # Print response print("Transaction sent:", response.json()) Copy // Define constants const FAST_URL_ENGINES: &str = "https://fast.circular.bot/transactions"; const FAST_TIP: &str = "FAST3dMFZvESiEipBvLSiXq3QCV51o3xuoHScqRU6cB6"; const MIN_TIP_AMOUNT: u64 = 1_000_000; const API_KEY: &str = "your-api-key"; async fn send_fast_tx( ixs: Vec, signer: &Keypair, rpc_client: &RpcClient, front_running_protection: bool, ) -> Result<(), Box> { // Create transfer instruction let fast_tip_pubkey = Pubkey::from_str(FAST_TIP)?; let tip_instruction = system_instruction::transfer( &signer.pubkey(), &fast_tip_pubkey, MIN_TIP_AMOUNT, ); let mut instructions = ixs; instructions.push(tip_instruction); // Get the latest blockhash let recent_blockhash = rpc_client.get_latest_blockhash()?; // Create and sign the transaction let mut transaction = Transaction::new_with_payer(&instructions, Some(&signer.pubkey())); transaction.try_sign(&[signer], recent_blockhash)?; // Serialize transaction to Base64 let serialized_tx = base64::encode(transaction.serialize()?); // Send transaction using Fast endpoint let client = Client::new(); let payload = json!({ "jsonrpc": "2.0", "id": 1, "method": "sendTransaction", "params": [\ serialized_tx, // base58 or base64\ {\ "frontRunningProtection": front_running_protection // false = SWQOS + Jito, true = only Jito \ }\ ] }); let response = client .post(FAST_URL_ENGINES) .header("Content-Type", "application/json") .header("x-api-key", API_KEY) .json(&payload) .send() .await?; let response_json: serde_json::Value = response.json().await?; println!("Transaction sent: {:?}", response_json); Ok(()) } [PreviousTips](/circular-docs/api/fast/tips) [NextTokens](/circular-docs/api/tokens) --- # Circular | Circular Docs [NextFast](/circular-docs/api/fast) Last updated 1 month ago Circular is a pioneering platform dedicated to enhancing the way traders, developers, and analysts interact with the on-chain world. By combining cutting-edge technology with a deep understanding of arbitrage and decentralized finance (DeFi), Circular provides tools and APIs that empower users to make smarter, faster, and more informed decisions. **Our Vision** At Circular, we believe in creating a transparent and efficient DeFi ecosystem. Our goal is to make on-chain trading accessible and optimized for everyone, from individual traders to large-scale operations. Through our suite of APIs and tools, we aim to: * **Simplify Arbitrage**: Eliminate complexities and provide actionable insights. * **Enhance Transparency**: Deliver accurate, real-time data that users can trust. * **Foster Innovation**: Equip users with tools that enable them to explore new strategies and possibilities. **What Circular Offers** Circular’s ecosystem is built around APIs and tools designed to address the specific needs of the arbitrage and DeFi community. Key offerings include: * **Fast API**: Accelerate transaction broadcasting across Solana’s network with unparalleled speed and reliability. * **Tokens API**: Access real-time lists of arbitrage mints, tailored to highlight genuine opportunities. * **Market Cache API**: Optimize liquidity pools and streamline market analysis with real-time updates, ready for Jupiter integration * **Status API**: Gain insights into market trends with detailed analytics on arbitrage activity. * **Tools API**: A suite of utilities born from internal use cases and community feedback, designed to enhance trading workflows. **Who Benefits from Circular?** Circular serves a diverse audience within the DeFi ecosystem: * **Arbitrage Traders**: Optimize strategies and maximize gains with our tailored APIs. * **DeFi Platforms**: Leverage our tools to enhance user experiences and improve market engagement. * **Developers**: Integrate robust, reliable APIs into your applications. * **Analysts**: Access real-time, actionable data to drive informed decision-making. **Why Choose Circular?** Circular stands out as a trusted partner for arbitrage and on-chain trading by offering: * **Reliability**: APIs and tools built for high performance and uptime. * **Community-Centric Approach**: Many of our innovations come directly from user feedback. * **Innovation**: Constantly evolving to meet the dynamic needs of the DeFi landscape. Whether you're a trader, developer or analyst, Circular provides the resources you need to succeed in the fast-moving world of on-chain trading. Explore our APIs, discover new strategies, and take your arbitrage game to the next level with Circular! ### [](#surf-the-wave-with-us) Surf the wave with us ![](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2F1223231219-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FAm2wAywSSia5klggrwnS%252Fuploads%252FPIQFFqMUQee41jlt3frp%252Fimage.png%3Falt%3Dmedia%26token%3Dcba5f541-aaea-4728-b592-cf534bb8c10a&width=768&dpr=4&quality=100&sign=e73fa013&sv=2) ![Page cover image](https://docs.circular.bot/~gitbook/image?url=https%3A%2F%2Fcontent.gitbook.com%2Fcontent%2FAm2wAywSSia5klggrwnS%2Fblobs%2FDDhjpOAw4Y9pAXENQFvw%2FCapture_decran_2024-09-02_a_13.46.05-min.png&width=1248&dpr=4&quality=100&sign=103978e1&sv=2) ---