Skip to navigation

v2.0.20

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 for more information.

Intelligent boarding clients (beta)

ApiClient adds the businesses, people, paypoints, payment_methods, boarding_templates, and applications clients. Their methods return envelope types, such as BusinessDetailEnvelope.

These endpoints only accept OAuth. Set your OAuth client_id and client_secret in ClientConfig. See OAuth authentication and Manage API credentials.

let config = ClientConfig {
client_id: Some("CLIENT_ID".to_string()),
client_secret: Some("CLIENT_SECRET".to_string()),
..Default::default()
};
let client = ApiClient::new(config).expect("Failed to build client");
let business = client.businesses.get_business("BUSINESS_REFERENCE", None).await?;

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.export_applications was already deprecated. The methods don’t have the #[deprecated] attribute, so the compiler doesn’t warn you.

Renamed request types

Three request types were renamed so they don’t collide with the new clients’ types. Their fields haven’t changed.

MethodBeforeAfter
boarding.list_applicationsListApplicationsQueryRequestBoardingListApplicationsQueryRequest
templates.list_templatesListTemplatesQueryRequestTemplatesListTemplatesQueryRequest
query.list_paypointsListPaypointsQueryRequestQueryListPaypointsQueryRequest

ApiError::UnprocessableEntityError has new fields

The new applications endpoints return a different error body for HTTP 422. ApiError::UnprocessableEntityError now has message, field, and validation_error instead of message, is_success, response_code, response_text, and response_data. Code that matches on the old fields no longer compiles.

// After
if let Err(ApiError::UnprocessableEntityError { message, field, validation_error }) = &result {
// ...
}

Case management bank account services use new types

BankAccountServices::money_in is now Option<Vec<CaseManagementMoneyInService>>, and money_out is now Option<Vec<CaseManagementMoneyOutService>>. The new enumerations have the same variants as MoneyInService and MoneyOutService.

// Before
money_in: Some(vec![MoneyInService::Ach]),
// After
money_in: Some(vec![CaseManagementMoneyInService::Ach]),

New pagination module

The new pagination types module has the same name as the pagination module that the crate root already re-exports, so imports that start with payabli_api::pagination::, such as use payabli_api::pagination::AsyncPaginator;, no longer compile. Import AsyncPaginator, SyncPaginator, and PaginationResult from the crate root or from payabli_api::core::pagination instead. The new Pagination type is available from the crate root and the prelude.

v2.0.19

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 for more information.

New methods

  • money_out.get_next_check_number(paypoint_id: i64, account_id: &str, options) returns Result<NextCheckNumberResponse, ApiError>. NextCheckNumberResponse::check_number is a String.
  • ghost_card.delete_ghost_card(card_token: &str, options) returns Result<DeleteGhostCardResponse, ApiError>. Its response_data has delete_type and card_token (Option<String>).
let next: NextCheckNumberResponse = client.money_out.get_next_check_number(285, "ACCOUNT_ID", None).await?;
let deleted: DeleteGhostCardResponse = client.ghost_card.delete_ghost_card("CARD_TOKEN", None).await?;

Request changes

  • ReissueOutRequest adds check_number (Option<VendorCheckNumber>).
  • RequestUpdateSchedule, the request for subscription.update_subscription, adds invoice_data (Option<BillData>).
  • VendorData adds issue_1099 (Option<bool>).

Vendor 1099 flag

VendorQueryRecord, VendorDataResponse, TransferOutDetailVendor, and PayoutSubscriptionVendor add the required field issue_1099 (Issue1099, a tuple struct that wraps a bool). AssociatedVendor, VCardGetResponseAssociatedVendor, VendorOutData, and GetMethodResponseResponseDataVendorsItem add issue_1099 (Option<Issue1099>).

Payouts that paid a bill

BillResponseData and BillQueryRecord2 add transactions (Option<Vec<BillTransactionReference>>). Each BillTransactionReference has id_out (i64) and payment_id (Option<String>).

Card-present device details

  • TransactionQueryRecords and TransactionQueryRecordsCustomer add device_entry_mode (Option<DeviceEntryMode>), emv_auth_data (Option<EmvAuthData>, with request_emv_data and response_emv_data), and device_data (Option<QueryDeviceData>).
  • DeviceQueryRecord adds the required field operational_status (DeviceQueryRecordOperationalStatus, with the variants Online, Busy, and Offline), plus app_version and os_version (Option<String>).

Builders for VendorQueryRecord, VendorDataResponse, TransferOutDetailVendor, PayoutSubscriptionVendor, and DeviceQueryRecord fail with BuildError when a new required field is missing. Struct literals of the changed types must set the new fields.