> This is Payabli documentation. For a complete page index, fetch https://docs.payabli.com/llms.txt — append .md to any page URL for lightweight markdown. For section-level indexes, query parameters, and other AI-optimized access methods, see https://docs.payabli.com/ai-agents.md

## v1.0.23

This release includes breaking changes. It adds clients for the intelligent boarding API (beta) and marks the legacy boarding methods as deprecated. See [October 19, 2026](/changelog/api-changelog/2026/10/19) for more information.

### Intelligent boarding clients (beta)

`PayabliApiClient` adds the `businesses()`, `people()`, `paypoints()`, `paymentMethods()`, `boardingTemplates()`, and `applications()` clients. The async and raw clients have them too. Their methods return envelope types, such as `BusinessDetailEnvelope`.

These endpoints only accept OAuth. Set your OAuth `clientId` and `clientSecret` on the builder. See [OAuth authentication](/developers/oauth-authentication) and [Manage API credentials](/guides/platform-developer-api-credentials-manage).

```java
PayabliApiClient client = new PayabliApiClientBuilder()
        .clientId("CLIENT_ID")
        .clientSecret("CLIENT_SECRET")
        .build();
BusinessDetailEnvelope business = client.businesses().getBusiness("BUSINESS_REFERENCE");
```

### Legacy boarding methods are deprecated

Legacy boarding will be sunset in Q2 2027. Every method on `boarding()` and `templates()` now has a deprecation warning in its documentation. `export().exportApplications` was already deprecated. The methods don't have the `@Deprecated` annotation, so the compiler doesn't warn you.

### `UnprocessableEntityError.body()` now returns `Object`

The new applications endpoints return a different error body for HTTP `422`, so `UnprocessableEntityError.body()` now returns `Object` instead of `PayabliErrorBody`. Code that reads its fields, such as after `moneyOut().authorizeOut`, `captureOut`, or `payout`, no longer compiles.

```java
// Before
catch (UnprocessableEntityError e) { String text = e.body().getResponseText(); }

// After
catch (UnprocessableEntityError e) { Object body = e.body(); }
```

### Case management bank account services use new types

The `BankAccountServices` builder's `moneyIn` and `moneyOut` now take `List<CaseManagementMoneyInService>` and `List<CaseManagementMoneyOutService>`, and the matching methods return them. The new types have the same constants as `MoneyInService` and `MoneyOutService`.

```java
// Before
BankAccountServices.builder().moneyIn(Arrays.asList(MoneyInService.ACH)).build();

// After
BankAccountServices.builder().moneyIn(Arrays.asList(CaseManagementMoneyInService.ACH)).build();
```

## v1.0.22

This release adds methods to get the next check number and cancel ghost cards, a check number on reissued payouts, invoice data on subscription updates, a 1099 flag on vendors, every payout that paid a bill, and card-present device details. See [October 19, 2026](/changelog/api-changelog/2026/10/19) for more information.

### New methods

* `moneyOut().getNextCheckNumber(long paypointId, String accountId)` returns `NextCheckNumberResponse`, whose `getCheckNumber()` returns `String`.
* `ghostCard().deleteGhostCard(String cardToken)` returns `DeleteGhostCardResponse`. Its `getResponseData()` returns `Optional<DeleteGhostCardResponseData>`, which has `getDeleteType()` and `getCardToken()`.

The async and raw clients have the same methods.

```java
NextCheckNumberResponse next = client.moneyOut().getNextCheckNumber(285L, "ACCOUNT_ID");
DeleteGhostCardResponse deleted = client.ghostCard().deleteGhostCard("CARD_TOKEN");
```

### Request changes

* `ReissueOutRequest` adds `checkNumber(String)` to its builder, and `getCheckNumber()` returns `Optional<String>`.
* `RequestUpdateSchedule`, the request for `subscription().updateSubscription`, adds `invoiceData(BillData)` to its builder. To remove the subscription's invoice data, pass `Nullable.ofNull()` from `io.github.payabli.api.core`:

  ```java
  client.subscription().updateSubscription(396, RequestUpdateSchedule.builder()
          .invoiceData(Nullable.<BillData>ofNull())
          .build());
  ```
* `VendorData` adds `issue1099(Boolean)` to its builder, and `getIssue1099()` returns `Optional<Boolean>`.

### Vendor 1099 flag

`VendorQueryRecord`, `VendorDataResponse`, `TransferOutDetailVendor`, and `PayoutSubscriptionVendor` add the required `getIssue1099()` (`boolean`). `AssociatedVendor`, `VCardGetResponseAssociatedVendor`, `VendorOutData`, and `GetMethodResponseResponseDataVendorsItem` add `getIssue1099()` (`Optional<Boolean>`).

### Payouts that paid a bill

`BillResponseData` and `BillQueryRecord2` add `getTransactions()` (`Optional<List<BillTransactionReference>>`). Each `BillTransactionReference` has `getIdOut()` (`long`) and `getPaymentId()` (`Optional<String>`).

### Card-present device details

* `TransactionQueryRecords` and `TransactionQueryRecordsCustomer` add `getDeviceEntryMode()` (`Optional<String>`), `getEmvAuthData()` (`Optional<EmvAuthData>`, with `getRequestEmvData()` and `getResponseEmvData()`), and `getDeviceData()` (`Optional<QueryDeviceData>`).
* `DeviceQueryRecord` adds the required `getOperationalStatus()` (`DeviceQueryRecordOperationalStatus`, with the constants `ONLINE`, `BUSY`, and `OFFLINE`), plus `getAppVersion()` and `getOsVersion()` (`Optional<String>`).

The new required fields are new builder stages, so existing `builder()` calls for `VendorQueryRecord`, `VendorDataResponse`, `TransferOutDetailVendor`, `PayoutSubscriptionVendor`, and `DeviceQueryRecord` must set them.