Skip to content

Releases: merge-api/merge-node-client

v4.0.3

27 Mar 18:05
64459fd

Choose a tag to compare

Merge Node SDK Release Notes - Version [4.0.3]

Improvements

  • Relaxed RemoteFieldRequest.value type in Accounting from Record<string, unknown> to unknown, allowing any value type.

v4.0.2

26 Mar 01:43
20590b1

Choose a tag to compare

Merge Node SDK Release Notes - Version [4.0.2]

Improvements

  • Accounting: Added isBillable field to invoice line items — You can now read and write the isBillable property on InvoiceLineItem and InvoiceLineItemRequest, indicating whether a line item can be charged to the client/customer.
  • Accounting: Added isActive filter to projects list — The projects.list() endpoint now supports an optional isActive parameter to filter projects by their active status.

v4.0.1

16 Mar 18:01
f51a8fe

Choose a tag to compare

Merge Node SDK Release Notes - Version [4.0.1]

Improvements

  • Added linkedDestinationId to HRIS Link Token creation: You can now optionally specify a linkedDestinationId when creating a link token via client.hris.linkToken.create(). This allows you to tie a Linked Account to a specific linked
    destination by passing its UUID.

v4.0.0

11 Mar 20:45
19f98bd

Choose a tag to compare

Merge Node SDK Release Notes - Version [4.0.0]

Release Date: [2026-03-11]

This release includes support for all of the latest updates to the Merge API. For more information, see https://www.merge.dev/changelog


Breaking Changes

Pagination API Overhaul:

All list() methods now return Page instead of HttpResponsePromise. The new Page object supports async iteration, built-in next page fetching, and direct access to the raw response.

  //  v3.x
  const result = client.accounting.invoices.list({ accountId: "..." });
  const response = await result;
  const items = response.results; // access paginated list directly

  //  v4.x
  const page = await client.accounting.invoices.list({ accountId: "..." });
  const items = page.data;                    // array of items on current page
  const fullResponse = page.response;         // full PaginatedInvoiceList object
  const raw = page.rawResponse;               // raw HTTP response

  // Check and fetch next page
  if (page.hasNextPage()) {
      const nextPage = await page.getNextPage();
  }

  // Or iterate through all pages automatically
  for await (const item of page) {
      console.log(item);
  }

Expand Parameter Type Changes:

Expand parameters changed from large string union types to individual enum items that accept a single value or an array. Old union combination types (e.g. "company,addresses,phone_numbers") have been removed.

    //  v3.x - Single combined string union
    const contacts = await client.accounting.contacts.list({
        expand: "company,addresses,phone_numbers"
    });

    //  v4.x - Single value or array of individual items
    const contacts = await client.accounting.contacts.list({
        expand: ["company", "addresses", "phone_numbers"]
    });

    // Single expand still works
    const contacts = await client.accounting.contacts.list({
        expand: "company"
    });

Affected types: All *ListRequestExpand and *RetrieveRequestExpand types have been replaced with *ListRequestExpandItem and *RetrieveRequestExpandItem equivalents across Accounting, ATS, CRM, HRIS, Ticketing, and File Storage modules.


Improvements

New Accounting Resources
- Sales Orders (client.accounting.salesOrders) - Full CRUD with list, create, retrieve, bulk create, and remote field classes support.
- Item Fulfillments (client.accounting.itemFulfillments) - Complete resource for managing item fulfillments with the same full operation set.

Bulk Operations Support
New bulk create and retrieve operations across major accounting endpoints including Invoices, Expenses, Sales Orders, and Item Fulfillments.

    // Initiate a bulk create operation
    const bulkResult = await client.accounting.invoices.bulkCreate({
        batchItems: [{ model: invoiceData1 }, { model: invoiceData2 }],
    });

    // Retrieve batch operation results
    const batchResults = await client.accounting.invoices.bulkRetrieve(batchId);

Typed Batch Status Enums
Batch operation status fields are typed with proper enums:
- BatchObjectStatusEnum: PENDING, SUCCESS, FAILURE
- BatchObjectsResponseStatusEnum: ENQUEUED, IN_PROGRESS, PARTIAL_SUCCESS, SUCCESS, FAILED, RATE_LIMITED


Notes

The method field on DataPassthroughRequest in the Accounting module has been narrowed from MethodEnum | string to MethodEnum, aligning it with the other five modules (ATS, CRM, HRIS,
Ticketing, File Storage) which already used MethodEnum directly. Enum validation at runtime continues to accept any strings, so this is a TypeScript compile-time change only.

Thank you for using Merge SDKs!

v4.0.0-alpha.1

11 Mar 16:01
d1df252

Choose a tag to compare

v4.0.0-alpha.1 Pre-release
Pre-release

Merge Node SDK Release Notes - Version [4.0.0-alpha.1]

Updated Bulk endpoint names to POST /<common_model>/bulk and GET /<common_model>/bulk/<batch_id> + other fixes to request/response types for all the bulk writes cases.

3.0.1

21 Jan 00:14
449b181

Choose a tag to compare

Merge Node SDK Release Notes - Version [3.0.1]

Improvements

Fixed enum validation errors for customers upgrading from v2.x by allowing unrecognized enum values, ensuring existing code using enums that are not defined in the schema continues to work without modification. This fix applies to all enum parameters across the SDK.

  // v2.x - This worked fine
  await accounting.trackingCategories.list({
      categoryType: "LOCATION"
  });

  // v3.0.0 - This threw "Expected enum" error  
  await accounting.trackingCategories.list({
      categoryType: "LOCATION" // ❌ Error: Expected enum. Received "LOCATION"
  });

  // v3.0.1 - This now works again
  await accounting.trackingCategories.list({
      categoryType: "LOCATION" // ✅ Works without errors
  });

v3.0.0

16 Jan 20:26
ad131cd

Choose a tag to compare

Merge Node SDK Release Notes - Version [3.0.0]

Breaking Changes

Use v 3.0.1 which fixes a bug introduced in this version

  • Client Class Names:

    Direct imports of resource client classes now require "Client" suffix. Main imports through the package root remain unchanged via backward compatibility aliases.

  // ❌ v2.x - Direct imports no longer work
  import { Activities } from "@mergeapi/merge-node-client/api/resources/ats/resources/activities/client/Client";
  import { Candidates } from "@mergeapi/merge-node-client/api/resources/ats/resources/candidates/client/Client";

  // ✅ v3.x - Update direct imports
  import { ActivitiesClient } from "@mergeapi/merge-node-client/api/resources/ats/resources/activities/client/Client";
  import { CandidatesClient } from "@mergeapi/merge-node-client/api/resources/ats/resources/candidates/client/Client";


  // ✅ Main imports still work (backward compatible)
  import { MergeClient, Ats, Accounting, Crm } from "@mergeapi/merge-node-client";

  const client = new MergeClient({ apiKey: "your-api-key" });
  const candidates = await client.ats.candidates.list();

  // All existing API calls work identically
  const candidates = await client.ats.candidates.list();
  const accounts = await client.crm.accounts.list();
  const employees = await client.hris.employees.list();

   // Legacy class names still work for direct instantiation
  const atsClient = new Ats({ apiKey: "your-api-key" });
  const crmClient = new Crm({ apiKey: "your-api-key" });
  const accountingClient = new Accounting({ apiKey: "your-api-key" });


Improvements

  • Enhanced Client Architecture
    Modern BaseClient system with improved error handling, authentication providers, and better request/response processing.

  • Better TypeScript Support
    Improved type inference and normalized client options across all resource clients.

  • Advanced Configuration Options
    New support for custom timeouts, retry logic, logging configuration, and enhanced header management.

v2.2.0

05 Sep 12:35
e38be55

Choose a tag to compare

Merge Node SDK Release Notes - Version [2.2.0]

This release includes support for all of the latest updates for the Merge API. For more information, see https://www.merge.dev/changelog

v2.1.3

29 Aug 16:13
84e84b4

Choose a tag to compare

Merge Node SDK Release Notes - Version [2.1.3]

Improvements

This release contains an update to correctly use the account token configured in category specific client initializations by default. See the below code snippet for an example:

import { ATS } from `@mergeapi/merge-node-client/api/resources/ats/clientClient';

const mergeClient = new ATS({
  apiKey: 'YOUR_API_KEY',
  accountToken: 'YOUR_ACCOUNT_TOKEN',
});

// now uses the account token specified in the client initialization
mergeclient.accountDetails.retrieve();


v2.1.2

28 Aug 16:31
dd5640a

Choose a tag to compare

Merge Node SDK Release Notes - Version [2.1.2]

Improvements

This release contains an update to add is_common_model_field to RemoteFieldClass in Accounting, CRM and Ticketing.