The collapse of FTX and other exchanges showed: assets on a trading platform are not your assets. Institutional investors now demand zero counterparty risk. Copper.co solves this with ClearLoop — an off-exchange settlement network where funds are stored in MPC wallets under full client control, and trading happens without transferring assets to the exchange. We have completed 15+ custody integration projects, including ClearLoop for funds with portfolios from $50M.
What Integration Delivers
Without ClearLoop: a trader transfers $10M to Binance—assets are on the exchange. Risk: hack or bankruptcy. With ClearLoop: assets stay in Copper custody; only a credit line is on the exchange. Settlement occurs within ClearLoop several times per day (intraday netting). Result: zero counterparty risk. ClearLoop is 6 times faster than blockchain settlement and saves up to 60% on withdrawal fees compared to standard transfers.
For products: the custody API provides programmatic access to institutional-grade wallets with MPC, a policy engine for multi-level approval, and an audit trail for compliance. All in a single integration. According to Copper reports, clients save up to 60% on fees.
How ClearLoop Works
ClearLoop is a network where each trade is recorded in an off-chain ledger, and final settlement happens internally without blockchain transactions. This means even at massive volumes (typical clients manage portfolios from $10M), gas costs are zero. Per Copper documentation, ClearLoop supports intraday netting with settlement frequencies up to 6 times daily, reducing operational risk.
Copper API: Key Endpoints
Copper provides a REST API plus WebSocket for real-time events. Authentication: API Key + HMAC-SHA256 request signing. Below is a full client example and calls—note error handling and signing.
import crypto from 'crypto'; import axios from 'axios'; class CopperClient { private baseUrl = 'https://api.copper.co'; private signRequest( method: string, path: string, timestamp: number, body: string, ): string { const message = `${timestamp}${method.toUpperCase()}${path}${body}`; return crypto .createHmac('sha256', process.env.COPPER_API_SECRET!) .update(message) .digest('hex'); } async request<T>(method: string, path: string, data?: unknown): Promise<T> { const timestamp = Date.now(); const body = data ? JSON.stringify(data) : ''; const signature = this.signRequest(method, path, timestamp, body); const response = await axios({ method, url: `${this.baseUrl}${path}`, data: data || undefined, headers: { 'Authorization': `ApiKey ${process.env.COPPER_API_KEY}`, 'X-Signature': signature, 'X-Timestamp': timestamp.toString(), 'Content-Type': 'application/json', }, }); return response.data; } // Portfolio & wallets async getPortfolios() { return this.request('GET', '/platform/portfolios'); } async getWallets(portfolioId: string) { return this.request('GET', `/platform/portfolios/${portfolioId}/wallets`); } async createWallet(portfolioId: string, name: string, currency: string, type: 'hot' | 'cold') { return this.request('POST', '/platform/wallets', { portfolioId, name, mainCurrency: currency, type, }); } // Transactions & approval async createTransaction(portfolioId: string, currency: string, amount: string, toAddress: string, network: string, memo?: string) { return this.request('POST', '/platform/transactions', { type: 'withdrawal', portfolioId, currency, amount, toAddress, network, memo, }); } // ClearLoop async transferToClearloop(fromPortfolioId: string, toExchangeAccountId: string, currency: string, amount: string) { return this.request('POST', '/clearloop/transfers', { fromPortfolioId, toExchangeAccountId, currency, amount, }); } async getClearloopPositions(exchangeAccountId: string) { return this.request('GET', `/clearloop/positions/${exchangeAccountId}`); } } WebSocket: Real-Time Updates
import WebSocket from 'ws'; const ws = new WebSocket('wss://ws.copper.co/platform'); ws.on('open', () => { ws.send(JSON.stringify({ type: 'auth', apiKey: process.env.COPPER_API_KEY, signature: generateWsSignature(), timestamp: Date.now(), })); ws.send(JSON.stringify({ type: 'subscribe', channels: ['transactions', 'portfolio_balances'], portfolioIds: [portfolioId], })); }); ws.on('message', (data) => { const event = JSON.parse(data.toString()); if (event.type === 'transaction_update') { handleTransactionUpdate(event.payload); } if (event.type === 'balance_update') { handleBalanceUpdate(event.payload); } }); Compliance and Reporting
Copper provides audit-ready data: all transactions with timestamps, approver logs, and blockchain confirmations. Exporting transaction history for any period is a single API call. Each record includes initiator, approvers, timestamps, txHash. For regulatory reporting, connect a SIEM system via WebSocket. For an accurate cost and timeline estimate, contact us—we'll audit your infrastructure and propose the optimal solution.
Integration Process: Typical Stages
| Stage | Duration | What Happens |
|---|---|---|
| KYB onboarding | 2–4 weeks | Document submission, company verification, API key issuance |
| Basic API integration | 2–3 weeks | SDK development, webhook handling, deposit/withdrawal implementation |
| ClearLoop integration | 2–4 weeks | Exchange account setup, off-exchange settlement configuration |
| Approval workflow | 1–2 weeks | Policy engine setup, multi-signature approval integration |
| Compliance reporting | 1–2 weeks | Transaction export, audit trail, SIEM connection |
| QA and testing | 1–2 weeks | Sandbox testing, load testing, security audit |
ClearLoop vs Standard Settlement
| Parameter | ClearLoop | Standard Settlement |
|---|---|---|
| Counterparty risk | Zero (assets in custody) | High (assets on exchange) |
| Settlement speed | Intraday netting (up to 6x/day) | Depends on blockchain |
| Transaction cost | Minimal (internal netting) | Gas + exchange fees |
| Audit transparency | Full audit trail | Limited |
| Exchange support | 10+ (Binance, Deribit, Kraken) | Single exchange |
Common Integration Mistakes
- Incorrect HMAC signing order. Timestamp and method must be in exact order. One second off—request rejected.
- Ignoring webhooks. Transaction status changes asynchronously—relying only on API response is insufficient. Handle WSS events.
- Skipping policy engine setup. Without proper limits and whitelists, transactions may stall in approval.
- Starting without KYB. API access is granted only after full verification—beginning integration without KYB is futile.
Case Study: ClearLoop for a Hedge Fund. One of our clients—a hedge fund with $50M monthly volume—faced high withdrawal fees (up to 0.5% on Ethereum). We integrated ClearLoop in 8 weeks, configuring off-exchange settlement with Binance and Deribit. Result: zero counterparty risk, $120K annual savings on fees due to intraday netting. The entire audit trail is automatically exported to their SIEM.
What's Included
- Integration documentation (architecture, data schemas, sequence diagrams)
- SDK/adapter source code (TypeScript or Python on request)
- Access to Copper test sandbox
- Webhook integration for transaction status updates
- Load testing of ClearLoop channels
- One month of post-deployment support
Contact us for a preliminary project assessment. We'll help plan the architecture, prepare documentation, and get through KYB with minimal delays. Get a consultation—our engineers will review your current architecture and provide an integration roadmap.







