JavaScript SDK

Official Caibo SDK for JavaScript and TypeScript.

npm@caibopay/sdk

Installation

npm
npm install @caibopay/sdk
yarn
yarn add @caibopay/sdk
pnpm
pnpm add @caibopay/sdk

Quick Start

index.ts
import CaiboPay from '@caibopay/sdk';

// Initialize the client
const caibo = new CaiboPay({
  apiKey: process.env.CAIBOPAY_API_KEY!
});

// Create a transfer
async function createTransfer() {
  const transfer = await caibo.transfers.create({
    amount: 100000,
    sourceCurrency: 'CAD',
    destinationCurrency: 'COP',
    destination: {
      type: 'bank_account',
      country: 'CO',
      accountHolder: 'Maria Garcia',
      accountNumber: '12345678901234'
    }
  });

  console.log('Transfer created:', transfer.id);
  return transfer;
}

createTransfer();

TypeScript Support

The SDK is written in TypeScript and includes full type definitions:

types.ts
import CaiboPay, { Transfer, Account } from '@caibopay/sdk';

const caibo = new CaiboPay({ apiKey: '...' });

// Full type inference
const transfer: Transfer = await caibo.transfers.create({
  amount: 100000,
  sourceCurrency: 'CAD',
  destinationCurrency: 'COP',
  destination: {
    type: 'bank_account',
    country: 'CO',
    accountHolder: 'Maria Garcia',
    accountNumber: '12345678901234'
  }
});

// TypeScript will catch errors
transfer.status; // 'pending' | 'processing' | 'completed' | 'failed'

Configuration Options

config.ts
const caibo = new CaiboPay({
  apiKey: process.env.CAIBOPAY_API_KEY!,

  // Optional: API version (defaults to latest)
  apiVersion: '2026-03-01',

  // Optional: Request timeout in ms (default 30000)
  timeout: 60000,

  // Optional: Max retries for failed requests (default 3)
  maxRetries: 5,

  // Optional: Custom base URL (for testing)
  baseUrl: 'https://api.caibopay.com'
});

Error Handling

errors.ts
import CaiboPay, { CaiboPayError } from '@caibopay/sdk';

try {
  await caibo.transfers.create({ /* ... */ });
} catch (error) {
  if (error instanceof CaiboPayError) {
    console.log('Type:', error.type);
    console.log('Code:', error.code);
    console.log('Message:', error.message);
    console.log('Param:', error.param);

    // Handle specific errors
    if (error.code === 'insufficient_funds') {
      // Handle insufficient funds
    }
  }
}

Pagination

pagination.ts
// Auto-pagination
for await (const transfer of caibo.transfers.list()) {
  console.log(transfer.id);
}

// Manual pagination
let page = await caibo.transfers.list({ limit: 10 });

while (page.hasMore) {
  for (const transfer of page.data) {
    console.log(transfer.id);
  }
  page = await page.getNextPage();
}

Webhooks

webhooks.ts
import express from 'express';
import CaiboPay from '@caibopay/sdk';

const app = express();
const caibo = new CaiboPay({ apiKey: '...' });

app.post('/webhooks',
  express.raw({ type: 'application/json' }),
  async (req, res) => {
    const event = caibo.webhooks.constructEvent(
      req.body,
      req.headers['caibo-signature'] as string,
      process.env.WEBHOOK_SECRET!
    );

    switch (event.type) {
      case 'transfer.completed':
        // Handle completed transfer
        break;
    }

    res.json({ received: true });
  }
);