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-merchant

Quick 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();