[AIR-3][AIS-3][BPC-3][RES-3]
API Reference¶
Table of Contents¶
Overview¶
Anya provides a comprehensive REST and WebSocket API for integrating Bitcoin infrastructure into enterprise applications. This reference covers all available endpoints, authentication, error handling, and best practices.
Authentication¶
API Keys¶
// Request with API key
GET /api/v1/transactions
Authorization: Bearer YOUR_API_KEY
OAuth2¶
// OAuth2 token request
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
REST API¶
Transaction Endpoints¶
Create Transaction¶
POST /api/v1/transactions
Content-Type: application/json
{
"recipients": [{
"address": "bc1q...",
"amount": "0.1"
}],
"fee_rate": "5",
"rbf": true
}
Get Transaction¶
GET /api/v1/transactions/{txid}
List Transactions¶
GET /api/v1/transactions?limit=10&offset=0
Wallet Endpoints¶
Create Wallet¶
POST /api/v1/wallets
Content-Type: application/json
{
"name": "main",
"type": "segwit",
"backup_type": "encrypted"
}
Get Wallet¶
GET /api/v1/wallets/{wallet_id}
List Wallets¶
GET /api/v1/wallets?limit=10&offset=0
Contract Endpoints¶
Create Contract¶
POST /api/v1/contracts
Content-Type: application/json
{
"type": "dlc",
"oracle": "oracle_id",
"outcomes": ["true", "false"],
"collateral": "1.0"
}
Get Contract¶
GET /api/v1/contracts/{contract_id}
Execute Contract¶
PUT /api/v1/contracts/{contract_id}/execute
Content-Type: application/json
{
"outcome": "true"
}
WebSocket API¶
Connection¶
// Connect to WebSocket
ws://api.anya.com/v1/ws
// Authentication message
{
"type": "auth",
"api_key": "YOUR_API_KEY"
}
Subscriptions¶
Transaction Updates¶
// Subscribe
{
"type": "subscribe",
"channel": "transactions"
}
// Update message
{
"type": "transaction",
"data": {
"txid": "...",
"status": "confirmed",
"block_height": 700000
}
}
Block Updates¶
// Subscribe
{
"type": "subscribe",
"channel": "blocks"
}
// Update message
{
"type": "block",
"data": {
"height": 700000,
"hash": "...",
"timestamp": 1631234567
}
}
Contract Updates¶
// Subscribe
{
"type": "subscribe",
"channel": "contracts"
}
// Update message
{
"type": "contract",
"data": {
"contract_id": "...",
"status": "executed",
"outcome": "true"
}
}
Error Handling¶
Error Format¶
{
"error": {
"code": "invalid_request",
"message": "Invalid transaction parameters",
"details": {
"field": "amount",
"reason": "insufficient_funds"
}
}
}
Common Error Codes¶
invalid_request
: Invalid request parametersunauthorized
: Authentication failedforbidden
: Permission deniednot_found
: Resource not foundrate_limited
: Too many requestsinternal_error
: Server error
Rate Limiting¶
Headers¶
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1631234567
Limits¶
- REST API: 1000 requests per minute
- WebSocket: 100 messages per second
- Bulk operations: 10 requests per minute
Pagination¶
Request¶
GET /api/v1/transactions?limit=10&offset=0
Response¶
{
"data": [...],
"pagination": {
"total": 100,
"limit": 10,
"offset": 0,
"has_more": true
}
}
Versioning¶
API Versions¶
- v1: Current stable version
- v2: Beta version (if available)
- v0: Deprecated version
Headers¶
Accept: application/json; version=1
Examples¶
Creating a Transaction¶
use anya_sdk::{Client, TransactionBuilder};
let client = Client::new(api_key);
let tx = TransactionBuilder::new()
.add_recipient("bc1q...", "0.1")
.set_fee_rate(5)
.enable_rbf()
.build()?;
let result = client.send_transaction(tx).await?;
Managing Contracts¶
use anya_sdk::{Client, ContractBuilder};
let client = Client::new(api_key);
let contract = ContractBuilder::new()
.set_type(ContractType::DLC)
.set_oracle("oracle_id")
.add_outcomes(vec!["true", "false"])
.set_collateral("1.0")
.build()?;
let result = client.create_contract(contract).await?;
WebSocket Subscription¶
use anya_sdk::{WebSocketClient, Subscription};
let ws = WebSocketClient::new(api_key);
ws.subscribe(vec![
Subscription::Transactions,
Subscription::Blocks,
Subscription::Contracts,
])?;
while let Some(msg) = ws.next().await {
match msg {
Message::Transaction(tx) => println!("New transaction: {}", tx.txid),
Message::Block(block) => println!("New block: {}", block.height),
Message::Contract(contract) => println!("Contract update: {}", contract.id),
}
}
Best Practices¶
1. Error Handling¶
- Always check error responses
- Implement exponential backoff
- Handle rate limiting
- Log errors appropriately
2. Performance¶
- Use WebSocket for real-time updates
- Implement caching
- Batch operations when possible
- Monitor API usage
3. Security¶
- Secure API keys
-
Use HTTPS
-
Implement timeouts
- Validate responses
SDK Support¶
Official SDKs¶
- Rust:
anya-sdk
- Python:
anya-python
- JavaScript:
anya-js
- Go:
anya-go
Installation¶
## Rust
cargo add anya-sdk
## Python
pip install anya-python
## JavaScript
npm install anya-js
## Go
go get github.com/anya/anya-go
Support¶
For API support:
- API documentation
- SDK documentation
- Support channels
- Status page
Last updated: 2025-06-02