> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monei.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Offramp Services

> Manage crypto-to-fiat swaps, track transaction history, and handle payouts using the Monei Node.js / TypeScript SDK

# Overview

The `Offramp Services` provides a full suite of services for converting crypto to fiat, tracking transactions, and managing payout accounts.

Included services:

* **Exchange** — retrieve assets, get quotes, and initiate swaps
* **Ledger** — view transaction history and track orders
* **Payouts** — retrieve supported banks and verify bank accounts

All services require a properly configured `MoneiClient` instance.

***

## Offramp Exchange

`monei.offrampExchange` allows you to retrieve available assets, get crypto-to-fiat quotes, and initiate swaps.

### Get Offramp Assets

Retrieve a list of assets available for offramp transactions.

```typescript theme={null}
const assets = await monei.offrampExchange.getAssets();

console.log(assets);
```

### Get Crypto-to-Fiat Quote

Retrieve a quote for swapping crypto to fiat.

```typescript theme={null}
const quoteRequest = {
  crypto: "USDT",
  fiat: "NGN",
  amount: 100
};

const quote = await monei.offrampExchange.getQuote(quoteRequest);

console.log(quote);
```

### Initiate Swap

Initiate a crypto-to-fiat swap.

```typescript theme={null}
const swapData = {
  crypto: "USDT",
  fiat: "NGN",
  amount: 100,
  destinationBankAccount: "1234567890"
};

const order = await monei.offrampExchange.initiateSwap(swapData);

console.log(order);
```

***

## Offramp Ledger

`monei.offrampLedger` provides methods to track transaction history and order statuses.

### Get Offramp Transactions

Retrieve a paginated list of offramp transactions.

```typescript theme={null}
const requestData = {
  userId: "user-123",
  page: 1,
  limit: 10
};

const transactions = await monei.offrampLedger.getTransactions(requestData);

console.log(transactions);
```

### Track Order

Track an individual order by reference.

```typescript theme={null}
const reference = "order-123";

const orderDetails = await monei.offrampLedger.trackOrder(reference);

console.log(orderDetails);
```

***

## Offramp Payouts

`monei.offrampPayouts` provides methods to retrieve supported banks and verify payout accounts.

### Get Offramp Banks

Retrieve a list of supported payout banks.

```typescript theme={null}
const banks = await monei.offrampPayouts.getBanks();

console.log(banks);
```

### Verify Offramp Bank Account

Verify a bank account before initiating a payout.

```typescript theme={null}
const verifyData = {
  accountNumber: "0123456789",
  bankCode: "057"
};

const verification = await monei.offrampPayouts.verifyBankAccount(verifyData);

console.log(verification);
```

***

## Working with Response Objects

All methods return objects with property access:

```typescript theme={null}
// Get assets response
const assets = await monei.offrampExchange.getAssets();
assets.data.forEach(asset => {
  console.log(asset.symbol);      // Asset symbol (e.g., "USDT")
  console.log(asset.name);        // Asset name (e.g., "Tether USD")
  console.log(asset.decimals);    // Token decimals
  console.log(asset.minAmount);   // Minimum swap amount
  console.log(asset.maxAmount);   // Maximum swap amount
});

// Get quote response
const quote = await monei.offrampExchange.getQuote({
  crypto: "USDT",
  fiat: "NGN",
  amount: 100
});
console.log(quote.cryptoAmount);     // Amount of crypto to send
console.log(quote.fiatAmount);       // Expected fiat amount
console.log(quote.exchangeRate);     // Exchange rate
console.log(quote.fee);              // Service fee
console.log(quote.totalAmount);      // Total fiat after fees
console.log(quote.expiresAt);        // Quote expiration time

// Initiate swap response
const order = await monei.offrampExchange.initiateSwap({
  crypto: "USDT",
  fiat: "NGN",
  amount: 100,
  destinationBankAccount: "1234567890"
});
console.log(order.id);               // Order ID
console.log(order.reference);        // Order reference
console.log(order.status);           // Order status
console.log(order.cryptoAmount);     // Crypto amount
console.log(order.fiatAmount);       // Fiat amount
console.log(order.bankAccount);      // Destination bank account
console.log(order.createdAt);        // Creation date

// Get transactions response
const transactions = await monei.offrampLedger.getTransactions({
  userId: "user-123",
  page: 1,
  limit: 10
});
transactions.data.forEach(tx => {
  console.log(tx.id);               // Transaction ID
  console.log(tx.reference);        // Transaction reference
  console.log(tx.type);             // Transaction type
  console.log(tx.cryptoAmount);     // Crypto amount
  console.log(tx.fiatAmount);       // Fiat amount
  console.log(tx.status);           // Transaction status
  console.log(tx.createdAt);        // Creation date
});
console.log(transactions.pagination); // Pagination info

// Track order response
const orderDetails = await monei.offrampLedger.trackOrder("order-123");
console.log(orderDetails.id);           // Order ID
console.log(orderDetails.reference);    // Order reference
console.log(orderDetails.status);       // Current status
console.log(orderDetails.cryptoAmount); // Crypto amount
console.log(orderDetails.fiatAmount);   // Fiat amount
console.log(orderDetails.bankAccount);  // Destination bank account
console.log(orderDetails.txHash);       // Transaction hash
console.log(orderDetails.confirmations); // Block confirmations
console.log(orderDetails.updatedAt);    // Last update date

// Get banks response
const banks = await monei.offrampPayouts.getBanks();
banks.data.forEach(bank => {
  console.log(bank.name);           // Bank name
  console.log(bank.code);           // Bank code
  console.log(bank.country);        // Country code
});

// Verify bank account response
const verification = await monei.offrampPayouts.verifyBankAccount({
  accountNumber: "0123456789",
  bankCode: "057"
});
console.log(verification.accountNumber);  // Verified account number
console.log(verification.accountName);    // Account holder name
console.log(verification.bankName);       // Bank name
console.log(verification.bankCode);       // Bank code
console.log(verification.verified);       // Verification status
```

***

## Response Types

### AssetDto

```typescript theme={null}
{
  symbol: string;
  name: string;
  decimals: number;
  minAmount: number;
  maxAmount: number;
}
```

### OfframpQuoteResponseDto

```typescript theme={null}
{
  cryptoAmount: number;
  fiatAmount: number;
  exchangeRate: number;
  fee: number;
  totalAmount: number;
  expiresAt: string;
}
```

### OfframpOrderResponseDto

```typescript theme={null}
{
  id: string;
  reference: string;
  status: 'pending' | 'processing' | 'completed' | 'failed';
  cryptoAmount: number;
  fiatAmount: number;
  bankAccount: string;
  createdAt: string;
}
```

### OfframpTransactionDto

```typescript theme={null}
{
  id: string;
  reference: string;
  type: string;
  cryptoAmount: number;
  fiatAmount: number;
  status: string;
  createdAt: string;
}
```

### BankDto

```typescript theme={null}
{
  name: string;
  code: string;
  country: string;
}
```

### VerifyBankAccountResponseDto

```typescript theme={null}
{
  accountNumber: string;
  accountName: string;
  bankName: string;
  bankCode: string;
  verified: boolean;
}
```

***

## Error Handling

All offramp service calls may throw an error if the request fails.

```typescript theme={null}
import { MoneiError } from 'monei-sdk';

try {
  const quote = await monei.offrampExchange.getQuote({
    crypto: "USDT",
    fiat: "NGN",
    amount: 100
  });
  console.log(quote.fiatAmount);
} catch (error) {
  if (error instanceof MoneiError) {
    console.error(error.statusCode);  // HTTP status code
    console.error(error.message);     // Error message
    console.error(error.code);        // Error code
  }
}
```

***

## Service Overview

| Service      | Method                     | Description                  |
| ------------ | -------------------------- | ---------------------------- |
| **Exchange** | `getAssets()`              | Retrieve available assets    |
|              | `getQuote(request)`        | Get crypto-to-fiat quote     |
|              | `initiateSwap(data)`       | Initiate crypto-to-fiat swap |
| **Ledger**   | `getTransactions(request)` | Get offramp transactions     |
|              | `trackOrder(reference)`    | Track order by reference     |
| **Payouts**  | `getBanks()`               | Get supported payout banks   |
|              | `verifyBankAccount(data)`  | Verify bank account          |

***

## Notes

* All requests require a properly configured `MoneiClient` with authentication
* Always validate input data and ensure the correct crypto/fiat codes before initiating swaps
* Quotes expire after a certain period - obtain a fresh quote before swapping
* Bank account verification is recommended before initiating payouts
* All responses are strongly typed objects with property access

***
