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

# Resources

> Use the UQPAY Java SDK to interact with Banking, Issuing, Connect, Payment, Supporting, and Simulator resources.

This page covers all resource namespaces available on `UqpayClient`. Each namespace maps to a UQPAY product.

## Banking

### Balances

```java theme={null}
import com.uqpay.sdk.v2.banking.model.*;

ListBalancesResponse balances = client.banking().getBalances().list(
    new ListBalancesRequest().setPageSize(20).setPageNumber(1)
);
Balance balance = client.banking().getBalances().get("SGD");

// Balance transactions
ListBalanceTransactionsRequest txReq = new ListBalanceTransactionsRequest();
txReq.setPageSize(20);
txReq.setPageNumber(1);
ListBalanceTransactionsResponse txns = client.banking().getBalances().listTransactions(txReq);
```

### Transfers

```java theme={null}
CreateTransferRequest transferReq = new CreateTransferRequest();
transferReq.setSourceAccountId("acc-123");
transferReq.setDestinationAccountId("acc-456");
transferReq.setCurrency("SGD");
transferReq.setAmount("100.00");
CreateTransferResponse transfer = client.banking().getTransfers().create(transferReq);

ListTransfersResponse transfers = client.banking().getTransfers().list(
    new ListTransfersRequest().setPageSize(20).setPageNumber(1)
);
Transfer retrieved = client.banking().getTransfers().get("transfer-id");
```

### Deposits

```java theme={null}
ListDepositsResponse deposits = client.banking().getDeposits().list(
    new ListDepositsRequest().setPageSize(20).setPageNumber(1)
);
Deposit deposit = client.banking().getDeposits().get("deposit-id");
```

### Beneficiaries

```java theme={null}
CreateBeneficiaryResponse beneficiary = client.banking().getBeneficiaries().create(createBeneficiaryReq);
ListBeneficiariesResponse beneficiaries = client.banking().getBeneficiaries().list(listBeneficiaryReq);
Beneficiary ben = client.banking().getBeneficiaries().get("ben-id");
```

### Payouts

```java theme={null}
CreatePayoutRequest payoutReq = new CreatePayoutRequest();
payoutReq.setBeneficiaryId("ben-123");
payoutReq.setCurrency("SGD");
payoutReq.setAmount("50.00");
payoutReq.setPurposeCode("PERSONAL");
CreatePayoutResponse payout = client.banking().getPayouts().create(payoutReq);
```

### Virtual accounts

```java theme={null}
CreateVirtualAccountResponse va = client.banking().getVirtualAccounts().create(createVaReq);
ListVirtualAccountsResponse vas = client.banking().getVirtualAccounts().list(listVaReq);
```

### Conversions

```java theme={null}
CreateConversionQuoteResponse quote = client.banking().getConversions().createQuote(quoteReq);
CreateConversionResponse conversion = client.banking().getConversions().create(createConversionReq);
```

### Exchange rates

```java theme={null}
ListExchangeRatesResponse rates = client.banking().getExchangeRates().list(listRatesReq);
```

## Issuing

### Cardholders

The SDK supports three KYC tiers — simplified, standard, and enhanced.

**Simplified KYC** — basic fields only:

```java theme={null}
import com.uqpay.sdk.v2.issuing.model.*;

CreateCardholderRequest request = new CreateCardholderRequest();
request.setEmail("user@example.com");
request.setFirstName("Jane");
request.setLastName("Smith");
request.setCountryCode("SG");
request.setPhoneNumber("+6512345678");
request.setDateOfBirth("1990-01-01");

CreateCardholderResponse cardholder = client.issuing().getCardholders().create(request);
```

**Standard KYC** — includes gender, nationality, identity document, and address:

```java theme={null}
CreateCardholderRequest standardReq = new CreateCardholderRequest();
standardReq.setEmail("user@example.com");
standardReq.setFirstName("Bob");
standardReq.setLastName("Lee");
standardReq.setCountryCode("SG");
standardReq.setPhoneNumber("+6598765432");
standardReq.setDateOfBirth("1988-11-03");
standardReq.setGender("MALE");
standardReq.setNationality("SG");

Identity identity = new Identity();
identity.setType("PASSPORT");
identity.setNumber("E1234567");
standardReq.setIdentity(identity);

ResidentialAddress addr = new ResidentialAddress();
addr.setCountry("SG");
addr.setState("Singapore");
addr.setCity("Singapore");
addr.setLine1("1 Raffles Place");
addr.setLineEn("1 Raffles Place");
addr.setPostalCode("048616");
standardReq.setResidentialAddress(addr);

CreateCardholderResponse stdCardholder = client.issuing().getCardholders().create(standardReq);
```

**Enhanced KYC** — SUMSUB redirect, returns an IDV verification URL:

```java theme={null}
KycVerification kyc = new KycVerification();
kyc.setMethod("SUMSUB_REDIRECT");
request.setKycVerification(kyc);

CreateCardholderResponse enhanced = client.issuing().getCardholders().create(request);
System.out.println("IDV URL: " + enhanced.getIdvVerificationUrl());
```

**Get / list / update:**

```java theme={null}
Cardholder ch = client.issuing().getCardholders().get("ch-id");
ListCardholdersResponse list = client.issuing().getCardholders().list(
    new ListCardholdersRequest().setPageSize(20).setPageNumber(1).setCardholderStatus("SUCCESS")
);

UpdateCardholderRequest updateReq = new UpdateCardholderRequest();
updateReq.setResidentialAddress(addr);
client.issuing().getCardholders().update("ch-id", updateReq);
```

### Cards

```java theme={null}
// Create a card
CreateCardRequest cardReq = new CreateCardRequest();
cardReq.setCardCurrency("SGD");
cardReq.setCardholderId(cardholder.getCardholderId());
cardReq.setCardProductId("prod-123");

CardCreationResponse card = client.issuing().getCards().create(cardReq);

// Create a ONE_TIME card with auto-cancel trigger
CreateCardRequest oneTimeReq = new CreateCardRequest();
oneTimeReq.setCardCurrency("SGD");
oneTimeReq.setCardholderId(cardholder.getCardholderId());
oneTimeReq.setCardProductId("prod-123");
oneTimeReq.setUsageType("ONE_TIME");
oneTimeReq.setAutoCancelTrigger("ON_AUTH");

// Create a card with supplemental KYC fields
CardholderRequiredFields fields = new CardholderRequiredFields();
fields.setGender("FEMALE");
fields.setNationality("SG");
fields.setIdentity(identity);
fields.setResidentialAddress(addr);
cardReq.setCardholderRequiredFields(fields);

// Get, list
RetrieveCardResponse retrieved = client.issuing().getCards().get("card-id");
ListCardsResponse cards = client.issuing().getCards().list(
    new ListCardsRequest().setPageSize(20).setPageNumber(1)
);

// Freeze / unfreeze
UpdateCardStatusRequest freeze = new UpdateCardStatusRequest();
freeze.setCardStatus("FROZEN");
client.issuing().getCards().updateStatus("card-id", freeze);

// Recharge and withdraw
CardOrderRequest rechargeReq = new CardOrderRequest();
rechargeReq.setAmount(100.00);
CardOrder recharge = client.issuing().getCards().recharge("card-id", rechargeReq);

CardOrderRequest withdrawReq = new CardOrderRequest();
withdrawReq.setAmount(50.00);
CardOrder withdraw = client.issuing().getCards().withdraw("card-id", withdrawReq);
```

### Transactions, products, balances, and transfers

```java theme={null}
// Transactions
ListTransactionsResponse txns = client.issuing().getTransactions().list(
    new ListTransactionsRequest().setPageSize(20).setPageNumber(1).setCardId("card-id")
);
Transaction txn = client.issuing().getTransactions().get("txn-id");

// Products
ListProductsResponse products = client.issuing().getProducts().list(
    new ListProductsRequest().setPageSize(20).setPageNumber(1)
);

// Issuing balances
ListIssuingBalancesResponse issuingBalances = client.issuing().getBalances().list(listReq);
IssuingBalance issuingBalance = client.issuing().getBalances().get("SGD");

// Issuing transfers
CreateIssuingTransferResponse issuingTransfer = client.issuing().getTransfers().create(createIssuingTransferReq);
```

## Connect

```java theme={null}
import com.uqpay.sdk.v2.connect.model.*;

ListAccountsResponse accounts = client.connect().getAccounts().list(
    new ListAccountsRequest().setPageSize(20).setPageNumber(1)
);
Account account = client.connect().getAccounts().get("acc-id");
Account accountByBizCode = client.connect().getAccounts().get("acc-id", "BUSINESS_CODE");
```

## Payment

### Payment intents

```java theme={null}
import com.uqpay.sdk.v2.payment.model.*;

CreatePaymentIntentRequest intentReq = new CreatePaymentIntentRequest();
intentReq.setAmount("100.00");
intentReq.setCurrency("SGD");
CreatePaymentIntentResponse intent = client.payment().getPaymentIntents().create(intentReq);

client.payment().getPaymentIntents().confirm(intent.getPaymentIntentId(), confirmReq);
client.payment().getPaymentIntents().capture(intent.getPaymentIntentId(), captureReq);
client.payment().getPaymentIntents().cancel(intent.getPaymentIntentId());

ListPaymentIntentsResponse intents = client.payment().getPaymentIntents().list(listIntentsReq);
```

### Refunds

```java theme={null}
CreateRefundRequest refundReq = new CreateRefundRequest();
refundReq.setPaymentIntentId(intent.getPaymentIntentId());
refundReq.setAmount("50.00");
CreateRefundResponse refund = client.payment().getRefunds().create(refundReq);
```

### Bank accounts

```java theme={null}
CreateBankAccountResponse bankAccount = client.payment().getBankAccounts().create(bankAccountReq);
```

### Payouts

```java theme={null}
CreatePayoutResponse payout = client.payment().getPayouts().create(payoutReq);
```

### Balances and attempts

```java theme={null}
ListPaymentBalancesResponse paymentBalances = client.payment().getBalances().list(listBalReq);
ListPaymentAttemptsResponse attempts = client.payment().getPaymentAttempts().list(listAttemptsReq);
```

## Supporting (file upload / download)

```java theme={null}
import com.uqpay.sdk.v2.supporting.model.*;
import java.io.File;

// Upload a file
File doc = new File("kyc-document.pdf");
UploadFileResponse uploaded = client.supporting().getFiles().upload(doc, "KYC document");
System.out.println("File ID: " + uploaded.getFileId());

// Get download links
DownloadLinksRequest dlReq = new DownloadLinksRequest(List.of(uploaded.getFileId()));
DownloadLinksResponse links = client.supporting().getFiles().getDownloadLinks(dlReq);
links.getFiles().forEach(f -> System.out.println("URL: " + f.getUrl()));
```

## Simulator (sandbox only)

<Warning>
  The simulator is only available in the `sandbox` environment. Calling simulator methods in production throws a `UqpayException`.
</Warning>

```java theme={null}
import com.uqpay.sdk.v2.simulator.model.*;

// Simulate a card authorization
SimulateAuthorizationRequest authReq = new SimulateAuthorizationRequest();
authReq.setCardId("card-123");
authReq.setTransactionAmount(25.00);
authReq.setTransactionCurrency("SGD");
authReq.setMerchantName("Coffee Shop");
SimulateAuthorizationResponse auth = client.simulator().getIssuing().authorize(authReq);

// Simulate a reversal
SimulateReversalRequest revReq = new SimulateReversalRequest();
revReq.setTransactionId(auth.getTransactionId());
client.simulator().getIssuing().reverse(revReq);

// Simulate a deposit
SimulateDepositRequest depositReq = new SimulateDepositRequest();
depositReq.setCurrency("SGD");
depositReq.setAmount(500.00);
SimulateDepositResponse deposit = client.simulator().getDeposits().simulate(depositReq);
```

## API coverage

### Banking API

| Resource             | Operations                                                   |
| -------------------- | ------------------------------------------------------------ |
| **Balances**         | Get, List, ListTransactions                                  |
| **Transfers**        | Create, List, Get                                            |
| **Deposits**         | List, Get                                                    |
| **Beneficiaries**    | Create, List, Get, Update, Delete, ListPaymentMethods, Check |
| **Payouts**          | Create, List, Get                                            |
| **Virtual Accounts** | Create, List                                                 |
| **Conversions**      | CreateQuote, Create, List, Get, ListConversionDates          |
| **Exchange Rates**   | List                                                         |

### Issuing API

| Resource          | Operations                                                     |
| ----------------- | -------------------------------------------------------------- |
| **Cardholders**   | Create (Simplified/Standard/Enhanced KYC), Get, List, Update   |
| **Cards**         | Create, Get, GetSecure, List, Recharge, Withdraw, UpdateStatus |
| **Transactions**  | Get, List                                                      |
| **Products**      | List                                                           |
| **Balances**      | Get, List, ListTransactions                                    |
| **Transfers**     | Create, List, Get                                              |
| **Reports**       | Create, Get                                                    |
| **Auth Decision** | PGP-based real-time authorization                              |

### Connect API

| Resource     | Operations |
| ------------ | ---------- |
| **Accounts** | Get, List  |

### Payment API

| Resource             | Operations                                  |
| -------------------- | ------------------------------------------- |
| **Payment Intents**  | Create, Confirm, Capture, Cancel, List, Get |
| **Refunds**          | Create, List, Get                           |
| **Bank Accounts**    | Create, List, Get                           |
| **Payouts**          | Create, List, Get                           |
| **Balances**         | List                                        |
| **Payment Attempts** | List, Get                                   |
| **Settlements**      | List                                        |

### Supporting API

| Resource  | Operations               |
| --------- | ------------------------ |
| **Files** | Upload, GetDownloadLinks |

### Simulator (sandbox only)

| Resource     | Operations         |
| ------------ | ------------------ |
| **Issuing**  | Authorize, Reverse |
| **Deposits** | Simulate           |
