Skip to main content
ApiClient is the server-side interface to the CoinVoyage API. Import it from @coin-voyage/paykit/server and use it in your API routes, server actions, or backend services to create pay orders, retrieve quotes, manage KYC links, bank accounts, withdrawals, webhooks, and more. Every method returns an APIResponse<T> wrapper that provides consistent, type-safe error handling without throwing exceptions.

Initialization

apiKey
string
required
Your organization’s API key from the CoinVoyage dashboard.
environment
string
default:"production"
Environment to connect to: "production" or "development".
sessionId
string
Optional session identifier attached to every request for tracking purposes.
version
string
Optional client version string sent as the X-Client-Version request header.

APIResponse<T>

Every ApiClient method returns a Promise<APIResponse<T>>. The response is always an object with either a data field (on success) or an error field (on failure) — never both.

Handling responses

data
T
The typed response payload. Present when the request succeeds.
error
object
Error details. Present when the request fails.

Methods

createDepositPayOrder

Creates a pay order with mode DEPOSIT for a direct on-chain deposit to a specified address.
Provide either token_amount or fiat in intent.amount, never both. The amount must be greater than zero. Invalid input is caught by built-in Zod validation and returns an error without making a network request.
Parameters: params (PayOrderParams), opts? (Opts) Returns: Promise<APIResponse<PayOrder>>

createSalePayOrder

Creates a pay order with mode SALE for a merchant sale. Requires your API secret for authorization. If you omit intent.asset, CoinVoyage settles the payment to the settlement currency configured in your dashboard. If you provide intent.asset, the pay order settles to that specific asset and chain.
The authorization signature is generated internally. You only need to pass the raw apiSecret string.
intent.assetSettlement behavior
OmittedSettles to your dashboard settlement currency (must be configured)
ProvidedSettles to the specified asset and chain for this pay order
Parameters: params (PayOrderParams), apiSecret (string), opts? (Opts) Returns: Promise<APIResponse<PayOrder>>

createRefundPayOrder

Creates a pay order with mode REFUND against an existing pay order. Supports full and partial refunds.
Parameters: payOrderId (string), params (PayOrderParams), apiSecret (string), opts? (Opts) Returns: Promise<APIResponse<PayOrder>>

getPayOrder

Fetches a pay order by its ID.
Parameters: payOrderId (string), opts? (Opts) Returns: Promise<APIResponse<PayOrder>>

listPayOrders

Lists PayOrders for your organization with pagination. This is a signed server-side method and requires your API secret.
Parameters: params? (ListPayOrdersParams), apiSecret (string), opts? (Opts) Returns: Promise<APIResponse<PayOrdersWithPagination>>

currencySearch

Searches supported currencies for token pickers and back-office tools.
Parameters: params (CurrencySearchParams), opts? (Opts) Returns: Promise<APIResponse<CurrencySearchResponse>>

portfolio

Retrieves wallet token balances and USD values for a wallet address.
Parameters: params (WalletPortfolioRequest), opts? (Opts) Returns: Promise<APIResponse<WalletPortfolioResponse>>

payOrderQuote

Generates a quote for a pay order given a user’s wallet and chain information. Returns available payment tokens with balances.
Parameters: payOrderId (string), params (PayOrderQuoteParams), opts? (Opts) Returns: Promise<APIResponse<RouteQuote[]>>

payOrderPaymentDetails

Retrieves the information needed to complete a payment — destination address, amount, and per-step payment instructions.
Parameters:
params.payorder_id
string
required
The unique identifier of the pay order.
params.payment_rail
string
default:"CRYPTO"
Payment rail to use. Defaults to CRYPTO.
params.source_currency
object
Source currency to use for the payment details request, with chain_id and address.
params.quote_id
string
Quote identifier from a previously selected route quote.
params.refund_address
string
Address to which funds are returned if the payment fails.
Returns: Promise<APIResponse<PaymentDetails>>

getPayOrderPaymentMethods

Fetches the available payment methods (rails, tokens, availability) for a pay order.
Parameters: payOrderId (string), opts? (Opts) Returns: Promise<APIResponse<PaymentMethodsResponse>>

KYC methods

Use these methods from server code to create verification links and check identity-verification status for your organization.
Retrieves the current KYC and terms-of-service status. Requires your API secret.
Parameters: apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<KYCLinkResponse>>

Bank account methods

Use these signed server-side methods for fiat payout destination management.
Lists bank accounts linked to the authenticated organization.
Parameters: apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<BankAccountsResponse>>
Retrieves one linked bank account.
Parameters: bankAccountId (string), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<BankAccountDetails>>
Adds a new linked bank account. The request shape depends on the account type and payout currency.
Parameters: params (AddBankAccountRequest), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<BankAccountDetails>>

Withdrawal methods

Use these signed server-side methods to list and create off-ramp withdrawals.
Lists organization withdrawals. Requires your API secret.
Parameters: apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<WithdrawalsResponse>>
Creates an off-ramp withdrawal and returns wallet execution data when a source-chain transaction is required.
Parameters: params (CreateWithdrawalRequest), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<WithdrawalResponse>>

generateAuthorizationSignature

Generates an HMAC-SHA256 authorization signature for signed server-side API requests. Most ApiClient methods that require signing generate this value internally when you pass apiSecret.
The result is formatted as:
This method uses your API secret. Call it only in server-side code. Never expose your API secret in client-side bundles.
Parameters: apiSecret (string), method (string), path (string) Returns: string

subscribeOrderStatus

Opens a WebSocket connection for real-time pay order status events. Order-scoped subscriptions authenticate with your API key. Organization-wide subscriptions require a server-generated authorization signature for GET /ws.
For server-side dashboards and reconciliation workers, pass an authorization signature to subscribe to all organization PayOrder events:
Returns: OrderStatusSocket The OrderStatusSocket exposes the following methods:
subscribe(orderId)
function
Subscribe to status events for a specific pay order.
subscribeOrg()
function
Subscribe to all pay order events for your organization. Available only when subscribeOrderStatus() is called with an authorization signature.
unsubscribe(orderId)
function
Unsubscribe from a specific pay order.
unsubscribeOrg()
function
Unsubscribe from organization-wide events. Available only when subscribeOrderStatus() is called with an authorization signature.
onMessage(callback)
function
Attach a listener for parsed server messages.
onOpen(callback)
function
Attach a listener for the WebSocket open event.
onClose(callback)
function
Attach a listener for the WebSocket close event.
onError(callback)
function
Attach a listener for WebSocket errors.
close()
function
Close the WebSocket connection.

Webhook methods

Lists all webhooks configured for your organization.
Parameters: apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<WebhookResponse[]>>
Creates a new webhook subscription for your organization.
Parameters: params (CreateWebhookRequest), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<WebhookResponse>>
Updates an existing webhook subscription.
Parameters: webhookId (string), params (UpdateWebhookRequest), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<WebhookResponse>>
Deletes a webhook subscription.
Parameters: webhookId (string), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<void>>

Fee methods

Retrieves claimable fee balances for your organization.
Parameters: apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<GetFeeBalancesResponse>>
Claims accrued fees for your organization.
Parameters: params (ClaimFeesRequest), apiSecret (string), opts? (Opts)Returns: Promise<APIResponse<ClaimFeesResponse>>

Swap methods

Gets a quote for swapping between two currencies.
Parameters: params (SwapQuoteRequest), opts? (Opts)Returns: Promise<APIResponse<SwapQuoteResponse>>
Gets the transaction data needed to execute a swap.
Parameters: params (SwapDataRequest), opts? (Opts)Returns: Promise<APIResponse<SwapDataResponse>>

createPayOrder (low-level)

A lower-level helper that creates a DEPOSIT or SALE pay order with an explicit mode. In most integrations you should use the mode-specific helpers above (createDepositPayOrder, createSalePayOrder, createRefundPayOrder). Use createPayOrder only when you need direct control over the mode and authorization signature.
Parameters: params (PayOrderParams), mode (CreatePayOrderMode), signature? (string), opts? (Opts) Returns: Promise<APIResponse<PayOrder>>
ApiClient does not expose a processPayOrder() method. PayOrder processing begins automatically once funds are detected on-chain.

TypeScript types

The SDK exports the following TypeScript types for use in your application.

PayOrder

The main pay order object returned by API methods.

PayOrderMode

ValueDescription
SALEMerchant sale. Settles to the dashboard settlement currency unless intent.asset is provided.
DEPOSITDirect deposit to a specified address on a target chain.
REFUNDFull or partial refund of a previous pay order.

PayOrderStatus

StatusDescription
PENDINGCreated but not yet ready for payment.
AWAITING_PAYMENTReady and waiting for the user to send payment.
AWAITING_CONFIRMATIONPayment transaction detected; waiting for blockchain confirmation.
OPTIMISTIC_CONFIRMEDOptimistically confirmed; execution can begin.
EXECUTING_ORDERPayment is being routed to the destination.
COMPLETEDCompleted successfully.
FAILEDFailed during processing.
EXPIREDExpired before payment was received.
REFUNDEDRefunded to the configured refund address.
PARTIAL_PAYMENTReceived an insufficient amount; reached a terminal partial-payment state.

PayOrderMetadata

You can attach up to 20 additional custom fields to the metadata object. Each custom field value must be a string with a maximum of 500 characters.

PayOrderParams

PayOrderIntent

IntentAmount

Provide either token_amount or fiat — not both.

FulfillmentData

PaymentData

deposit_address, receiving_address, and refund_address are legacy compatibility fields. Use the steps array for rail-specific payment instructions and provider data instead.

CurrencyAmount

ui_amount_display
string
Formatted display string suitable for rendering in UI.
raw_amount
string
Raw amount as a string to prevent BigInt precision loss.
value_usd
number
USD equivalent value of the amount.

WebhookEventType

EventPayload typeDescription
ORDER_CREATEDpayorder_createdA new pay order was created.
ORDER_AWAITING_PAYMENTpayorder_startedThe pay order is ready for payment.
ORDER_CONFIRMINGpayorder_confirmingPayment detected and confirming on-chain.
ORDER_EXECUTINGpayorder_executingPayment execution has begun.
ORDER_COMPLETEDpayorder_completedThe pay order completed successfully.
ORDER_ERRORpayorder_errorAn error occurred during processing.
ORDER_REFUNDEDpayorder_refundedA refund was processed.
ORDER_EXPIREDpayorder_expiredThe pay order expired before payment was received.