Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers-sandbox.uqpaytech.com/llms.txt

Use this file to discover all available pages before exploring further.

The UQPAY Node.js SDK provides typed access to the UQPAY API, including automatic authentication, pagination, retries, and webhook verification.

npm

@uqpay/sdk
The SDK requires Node.js 20 or higher.

Installation

npm install @uqpay/sdk

Quick start

import { UQPayClient } from '@uqpay/sdk'

const client = new UQPayClient({
  clientId: 'your-client-id',
  apiKey: 'your-api-key',
  environment: 'sandbox',
})

const account = await client.account.accounts.retrieve('acc-123')
console.log(account.status) // 'ACTIVE'

Configuration

Pass options when you create the client:
const client = new UQPayClient({
  clientId: 'your-client-id',       // required
  apiKey: 'your-api-key',           // required
  environment: 'sandbox',           // 'sandbox' | 'production' — default: 'sandbox'
  webhookSecret: 'whsec_...',       // required for webhook verification
  timeout: 30_000,                  // request timeout in ms — default: 30000
  maxRetries: 2,                    // automatic retry count — default: 2
  logLevel: 'info',                 // 'none' | 'info' | 'debug' — default: 'none'
})

Authentication

The SDK handles authentication automatically. It exchanges your clientId and apiKey for a token, caches it, and refreshes it before expiry. You do not need to manage tokens manually.

Acting on behalf of a sub-account

To make API calls on behalf of a connected sub-account, pass the x-on-behalf-of header:
await client.account.accounts.retrieve('acc-123', {
  headers: { 'x-on-behalf-of': 'sub-account-id' },
})

Idempotency

Every request includes an auto-generated UUID idempotency key. To provide your own:
await client.account.subAccounts.create(params, {
  headers: { 'x-idempotency-key': 'your-uuid-v4' },
})

Pagination

All list methods return a PaginatedResponse<T> with data, total_pages, and total_items:
const page = await client.issuing.cards.list({ page_number: 1, page_size: 50 })

console.log(page.data)        // Card[]
console.log(page.total_pages) // total number of pages
console.log(page.total_items) // total number of items
Increment page_number until it reaches total_pages to paginate through all results.

Logging

Enable debug logging to see all requests and responses:
const client = new UQPayClient({
  // ...
  logLevel: 'debug',
})
Sensitive fields (apiKey, card_number, cvc, iban, etc.) are automatically redacted. You can add custom fields to redact:
const client = new UQPayClient({
  // ...
  logLevel: 'debug',
  redactFields: ['my_secret_field'],
})

Escape hatch

For endpoints not yet covered by the SDK, use the generic request method:
const result = await client.request('POST', '/v1/some/endpoint', {
  body: { key: 'value' },
})

Platform info

If you are building a platform on top of UQPAY, attach your app info to the User-Agent header:
client.setAppInfo('MyPlatform', '2.0.0', 'https://myplatform.com')
// User-Agent: uqpay-node/0.2.0 node/20.0.0 MyPlatform/2.0.0 (https://myplatform.com)