Skip to content

java - v0.29.0 - 2026-01-20 14:16:35

Choose a tag to compare

@github-actions github-actions released this 20 Jan 14:16
7ba1d6a

Java SDK v0.29.0 Changelog

Release Date: January 2025


What's New

This release includes improved type flexibility, new fields, and enhanced filtering capabilities across multiple APIs.


Summary of Changes

Category Description Action Required
CustomFields Flexibility Can now use name instead of id None (backward compatible)
New Fields displayId, downstreamId, archived added None (optional to use)
New Filter Options Bank accounts, payments, ledger accounts None (optional to use)
Type Refinements Better type safety for responses Review if you use strict typing

Detailed Changes by API

Accounting API

CustomFields (All Entities)

What changed: The CustomField object now accepts either id or name as the identifier.

Affected methods:

  • All list(), create(), get(), update() operations for:
    • Bank Accounts
    • Bank Feed Accounts
    • Customers
    • Suppliers
    • Ledger Accounts
    • Tax Rates

Impact: None. This is a relaxation that gives you more flexibility. Your existing code continues to work.

// Before: Only id was accepted
CustomField.builder().id("field_123").value("value").build();

// After: Both options work
CustomField.builder().id("field_123").value("value").build();  // Still works
CustomField.builder().name("Field Name").value("value").build(); // Now also works

Bank Accounts

What changed: New optional filter parameter on get() method.

// New capability (optional)
apideck.accounting().bankAccounts().get(
    AccountingBankAccountsOneRequest.builder()
        .id("bank_123")
        .filter(BankAccountFilter.builder()
            .accountType(AccountType.BANK)
            .build())
        .build()
);

Invoices, Bills, Credit Notes, Expenses

What changed: Response models refined for better type consistency.

Impact: If you're using strict type casting, verify your parsing code. The data structure remains the same.


Invoice Items

What changed: New displayId field available in responses.

var response = apideck.accounting().invoiceItems().list(...);
for (var item : response.getData()) {
    // New field available
    item.getDisplayId().ifPresent(id -> System.out.println("Display ID: " + id));
}

Journal Entries

What changed: New displayId field available in responses.


Purchase Orders

What changed: New displayId field available in responses.


Payments

What changed: New optional filter parameter on list() method.


Ledger Accounts

What changed: New optional filter parameter on list() method.


Departments & Locations

What changed:

  • New displayId field in responses
  • New displayId parameter in create/update requests
// New capability
apideck.accounting().departments().create(
    AccountingDepartmentsAddRequest.builder()
        .accountingDepartment(AccountingDepartmentInput.builder()
            .name("Engineering")
            .displayId("ENG-001")  // New field
            .build())
        .build()
);

Subsidiaries

What changed: New downstreamId field available in responses.


Quotes

What changed: Line items model refined for type consistency.


Projects

What changed: Response model refined for type consistency.


CRM API

Leads

What changed: Model structure improved for type consistency.

Impact: Review your lead parsing code if you use strict typing.


Activities, Companies, Contacts, Opportunities

What changed: CustomFields flexibility (same as Accounting - can use name or id).


Pipelines

What changed: New archived field on pipeline stages.

// New capability
apideck.crm().pipelines().create(
    CrmPipelinesAddRequest.builder()
        .pipeline(PipelineInput.builder()
            .name("Sales Pipeline")
            .stages(List.of(
                PipelineStageInput.builder()
                    .name("Closed Lost")
                    .archived(true)  // New field
                    .build()
            ))
            .build())
        .build()
);

HRIS API

Employees & Schedules

What changed: CustomFields flexibility (same as other APIs - can use name or id).


ATS API

Jobs & Applicants

What changed: CustomFields flexibility (same as other APIs - can use name or id).


Ecommerce API

Orders

What changed: Line item name field type refined.

Impact: Minimal. Review if you have strict type handling for order line items.


File Storage API

Files & Folders

What changed: Sort parameter and folder response model refined.


Migration Checklist

  • Update dependency to v0.29.0
  • Run mvn clean compile to check for any type mismatches
  • If using CustomFields, no changes needed (backward compatible)
  • If using strict type casting on responses, review parsing code
  • Run your test suite

New Features to Explore

After upgrading, you can optionally take advantage of:

  1. CustomFields by name - Reference custom fields by their display name instead of ID
  2. Display IDs - Human-readable identifiers for Tax Rates, Invoice Items, Journal Entries, Purchase Orders, Departments, Locations, Subsidiaries
  3. Pipeline stage archiving - Mark CRM pipeline stages as archived
  4. Enhanced filtering - New filter options on Bank Accounts, Payments, and Ledger Accounts

Dependency Update

Maven:

<dependency>
    <groupId>com.apideck</groupId>
    <artifactId>unify</artifactId>
    <version>0.29.0</version>
</dependency>

Gradle:

implementation 'com.apideck:unify:0.29.0'

Questions?