BIO.RE
Payment

Get Load Packages

Public list of suggested wallet top-up amounts plus the absolute min/max limits and active currency. Drives the load-amount picker in the wallet UI.

GET /api/v1/wallet/packages — 🌐 Public

Returns the suggested wallet load amounts (e.g. [5, 10, 25]) plus the absolute min / max limits and the active currency code. Drives the chip / button picker in the wallet load screen — the user can pick a suggested amount or type a custom one within the bounds.

Admin-managed catalog. wallet.load_packages (default [5, 10, 25]), wallet.min_load (default 5), wallet.max_load (default 500) are all admin-managed via ConfigService. The currency comes from the platform's default-currency resolver (which reads from the same admin layer).

Kill switch on the controller. @RequireKillSwitch('PAYMENT') is applied at the controller level, so this endpoint also returns 503 features.payment_disabled when admin disables payments. Surface a "wallet is temporarily unavailable" UI when you see that response.

Request

No body, no params, no headers required.

Response

200 OKApiResponseOf<WalletPackagesResponseDto>

{
  "success": true,
  "data": {
    "packages": [5, 10, 25],
    "min": 5,
    "max": 500,
    "currency": "USD"
  }
}
FieldTypeNotes
packagesnumber[]Suggested load amounts (in major units, e.g. dollars). Render as picker chips.
minnumberAbsolute minimum load amount. Reject custom inputs below this client-side.
maxnumberAbsolute maximum per-load amount. There's also a wallet.max_balance ceiling enforced server-side at load time (returned as max_balance error if a single load would exceed it).
currencystringISO 4217 currency code (e.g. USD). Reflects the active platform currency.

Errors

HTTPcode / i18nKeyReason
503features.payment_disabledAdmin kill switch PAYMENT is active

Side effects

  1. Read wallet.load_packages JSON config (default [5, 10, 25]).
  2. Read wallet.min_load config (default 5).
  3. Read wallet.max_load config (default 500).
  4. Resolve the active default currency from the platform layer.
  5. Return { packages, min, max, currency }. No mutations, no auth, no per-user state.

Code samples

curl https://api.bio.re/api/v1/wallet/packages
type WalletPackages = {
  packages: number[];
  min: number;
  max: number;
  currency: string;
};

async function getWalletPackages(): Promise<WalletPackages> {
  const res = await fetch('https://api.bio.re/api/v1/wallet/packages');
  const json = await res.json();
  if (!res.ok || !json.success) {
    throw Object.assign(new Error(json?.error?.message ?? 'Wallet packages fetch failed'), {
      code: json?.error?.code,
    });
  }
  return json.data;
}
import { useQuery } from '@tanstack/react-query';

export const walletKeys = {
  packages: () => ['wallet', 'packages'] as const,
};

export function useWalletPackages() {
  return useQuery({
    queryKey: walletKeys.packages(),
    queryFn: async () => {
      const res = await fetch('/api/v1/wallet/packages');
      const json = await res.json();
      if (!res.ok || !json.success) {
        throw Object.assign(new Error(json?.error?.message ?? 'Wallet packages fetch failed'), {
          code: json?.error?.code,
          i18nKey: json?.error?.i18nKey,
        });
      }
      return json.data as WalletPackages;
    },
    // Catalog rarely changes within a session
    staleTime: 5 * 60_000,
  });
}

Try it

GET
/api/v1/wallet/packages
AuthorizationBearer <token>

In: header

Response Body

application/json

curl -X GET "https://loading/api/v1/wallet/packages"
{
  "success": true,
  "data": {
    "packages": [
      5,
      10,
      25
    ],
    "min": 5,
    "max": 500,
    "currency": "USD"
  }
}

Source

SourcePathLines
Controllerapps/api-core/src/modules/payment/wallet.controller.ts21–28 (getPackages)
DTO (response)apps/api-core/src/modules/payment/dto/wallet-response.dto.ts9–22 (WalletPackagesResponseDto)
Serviceapps/api-core/src/modules/payment/wallet.service.ts34–40 (getLoadPackages)
Config keysapps/api-core/src/modules/config/config.service.tswallet.load_packages, wallet.min_load, wallet.max_load, wallet.max_balance (admin-managed)
Kill switchapps/api-core/src/common/guards/kill-switch.guard.tsRequireKillSwitch('PAYMENT') (class-level)

On this page