#telegram #api #telegram-bot #blockchain #crypto-api #crypto #api-bindings

crypto-pay-api

A Rust client library for Crypto Pay API provided by Telegram CryptoBot

1 unstable release

0.1.0 Feb 13, 2025

#709 in Magic Beans

Download history 125/week @ 2025-02-11

125 downloads per month

MIT license

215KB
4.5K SLoC

Crypto Pay API Client for Rust ๐Ÿฆ€

Crates.io Documentation License CI codecov

A type-safe Rust client for the Crypto Bot API with async support.

Features โœจ

  • ๐Ÿ”’ Complete type safety
  • ๐Ÿš€ Async support
  • ๐Ÿ’ก Comprehensive error handling
  • ๐Ÿ›  Built-in parameter validation
  • ๐Ÿ“ฆ Zero configuration
  • ๐Ÿ”Œ Webhook support
  • ๐Ÿ“š Full API coverage
  • ๐Ÿงช Complete test coverage

Quick Start ๐Ÿš€

Add to your Cargo.toml:

[dependencies]
crypto-pay-api = "0.1.0"

Basic Example with tokio

use crypto_pay_api::prelude::*;

#[tokio::main]
async fn main() -> Result<(), CryptoBotError> {
    // Initialize client
    let client = CryptoBot::builder().api_token("YOUR_API_TOKEN").build()?;

    // Create an invoice
    let params = CreateInvoiceParamsBuilder::new()
        .asset(CryptoCurrencyCode::Ton)
        .amount(dec!(10.5))
        .description("Test payment".to_string())
        .build(&client)
        .await?;

    let invoice = client.create_invoice(&params).await?;
    println!("Payment URL: {}", invoice.pay_url);

    Ok(())
}

API Coverage ๐Ÿ“‹

Invoices

  • โœ… Create invoice (create_invoice)
  • โœ… Get invoices (get_invoices)
  • โœ… Delete invoice (delete_invoice)

Transfers

  • โœ… Transfer (transfer)
  • โœ… Get transfers (get_transfers)

Checks

  • โœ… Create check (create_check)
  • โœ… Get checks (get_checks)
  • โœ… Delete check (delete_check)

Other Features

  • โœ… Get balance (get_balance)
  • โœ… Get exchange rates (get_exchange_rates)
  • โœ… Get currencies (get_currencies)
  • โœ… Get app info (get_me)
  • โœ… Get statistics (get_stats)

Advanced Usage ๐Ÿ”ง

Webhook Handling

use crypto_pay_api::prelude::*;

#[tokio::main]
async fn main() -> Result<(), CryptoBotError> {
    let client = CryptoBot::builder().api_token("YOUR_API_TOKEN").build()?;
    let mut handler = client.webhook_handler(WebhookHandlerConfigBuilder::new().build());

    // Register payment callback
    handler.on_update(|update| async move {
        println!("Invoice paid: {:?}", update.payload);
        Ok(())
    });

    // Start webhook server
    // ... integrate with your web framework
}

See examples/axum_webhook.rs for an example using axum.

Custom Configuration

let client = CryptoBot::builder()
    .api_token("YOUR_API_TOKEN")
    .base_url("https://pay.crypt.bot/api")
    .timeout(Duration::from_secs(30))
    .build();

Error Handling โš ๏ธ

The library provides detailed error types:

match client.get_balance().await {
    Ok(balances) => {
        for balance in balances {
            println!("{}: {}", balance.currency_code, balance.available);
        }
    }
    Err(CryptoBotError::ValidationError { kind, message, field }) => {
        eprintln!("Validation error: {} (field: {:?})", message, field);
    }
    Err(e) => eprintln!("Other error: {}", e),
}

Documentation ๐Ÿ“š

Contributing ๐Ÿค

Contributions are welcome! Please check out our Contributing Guide.

License ๐Ÿ“„

This project is licensed under the MIT License - see the LICENSE file for details.

Dependencies

~6โ€“18MB
~245K SLoC