GuidesSDKs
TypeScript SDK
Install and use the official halfin TypeScript SDK
The @halfin/sdk-merchant package provides typed methods for the halfin API, webhook signature verification, and payment URI helpers.
Installation
pnpm add @halfin/sdk-merchantQuick Start
import { createHalfin } from '@halfin/sdk-merchant';
const halfin = createHalfin({
apiKey: process.env.HALFIN_API_KEY!,
baseUrl: 'https://api.halfin.xyz/api',
});Create an Invoice
const invoice = await halfin.createInvoice({
currency: 'BTC',
amount: '0.001',
description: 'Order #1234',
metadata: { order_id: '1234' },
});
console.log(invoice.data.id); // "00000000-..."
console.log(invoice.data.deposit_address); // "bc1q..."Webhook Verification
import { verifySignature } from '@halfin/sdk-merchant';
const isValid = verifySignature({
signature: req.headers['x-halfin-signature'] as string,
body: rawBody,
secret: process.env.HALFIN_WEBHOOK_SECRET!,
toleranceSeconds: 300, // reject events older than 5 minutes
});Payment URI Helpers
Generate cryptocurrency payment URIs for wallets and QR codes:
import { formatPaymentURI } from '@halfin/sdk-merchant';
const uri = formatPaymentURI({
currency: 'BTC',
address: 'bc1qexampleaddress',
amount: '0.001',
});
// → "bitcoin:bc1qexampleaddress?amount=0.001"
const uriWithTag = formatPaymentURI({
currency: 'XRP',
address: 'rExampleAddress',
amount: '10.5',
tag: '12345',
});
// → "ripple:rExampleAddress?amount=10.5&dt=12345"QR Code Generation
import { getCheckoutQRCode } from '@halfin/sdk-merchant';
const qrDataUrl = await getCheckoutQRCode('bitcoin:bc1qexampleaddress?amount=0.001');
// → "data:image/png;base64,..."
// Use in HTML: <img src={qrDataUrl} alt="Scan to pay" />Other Methods
// List invoices
const invoices = await halfin.listInvoices({ status: 'paid', limit: 10 });
// Get a single invoice
const inv = await halfin.getInvoice('00000000-0000-0000-0000-000000000001');
// Cancel a pending invoice
await halfin.cancelInvoice('00000000-0000-0000-0000-000000000001');
// Create a static address
const addr = await halfin.createAddress({ currency: 'ETH', label: 'Donations' });
// List balances
const balances = await halfin.listBalances();
// Get exchange rates
const rates = await halfin.getRates();