Skip to content
Fresh 2026

Merge SDKs ​

Official SDK installation and usage for all supported languages. Includes links to GitHub repos and package managers.


Overview ​

Once you've added our embedded Linking Flow to your app, your users can authorize any integration that Merge supports.

The SDKs listed below will allow your app's backend to communicate with Merge and interact with data from those integrations.

Note that our SDKs are in various stages of active development. Please contact us at support@merge.dev with any questions.


Complete category SDKs ​

The following SDKs encompass all of Merge's categories. Even if you do not plan on using more than one Merge API category right now, these SDKs are more frequently updated (to rollout changes to all customers sooner) and provide upgrade flexibility in case you find new Merge API categories useful in the future.

We are in the process of releasing new versions of these SDKs.

  • Node
  • Java (Kotlin/JVM)
  • Python
  • Go
  • Ruby
  • C# / .NET

If you do not see your language here, get in touch with us at support@merge.dev. If you would prefer to manually build your own integration with Merge, refer to our API reference.


Fetching data ​

Learn to fetch data from the integrations your users have authorized by reviewing the example usage of the Merge HRIS SDK below.

python
# Using Advanced Python SDK.

from pprint import pprint

import merge
from merge.client import Merge

# Swap YOUR_API_KEY below with your production key from:
# https://app.merge.dev/keys
api_key = ""

# The string 'TEST_ACCOUNT_TOKEN' below works to test your connection
# to Merge and will return dummy data in the response.
# In production, replace this with account_token from user.
account_token = "TEST_ACCOUNT_TOKEN"

merge_client = Merge(api_key=api_key, account_token=account_token)

try:
    employee_return_object = merge_client.hris.employees.list()
    employee_next_cursor = employee_return_object.next
    employee_previous_cursor = employee_return_object.previous
    employee_list = employee_return_object.results
    pprint(employee_list)
except:
    print("Exception when calling Employees API -> list_employees.")

# Pagination Example
if employee_next_cursor:
    try:
        employee_next_return_object = merge_client.hris.employees.list(
            cursor=employee_next_cursor
        )
        next_employee_list = employee_next_return_object.results
        pprint(next_employee_list)
    except:
        print("Exception when calling Employees API -> list_employees.")
javascript
// Using Advanced Node SDK

import { MergeClient, Merge } from '@mergeapi/merge-node-client';

// Swap YOUR_API_KEY below with your production key from:
// https://app.merge.dev/keys
const apiKey = 'YOUR_API_KEY';

// The string 'TEST_ACCOUNT_TOKEN' below works to test your connection
// to Merge and will return dummy data in the response.
// In production, replace this with your user's account_token.
const accountToken = "TEST_ACCOUNT_TOKEN";

const merge = new MergeClient({
  apiKey: apiKey,
  accountToken: accountToken,
});

let employeeList = await merge.hris.employees.list();

// Pagination
// if there is a next page, load it by passing `next` to the cursor argument
while (employeeList.next != null) {
  employeeList = merge.hris.employees.list({
      cursor: employeeList.next,
  })
}
java
// Using Java Advanced SDK

import com.merge.api.MergeApiClient;
import com.merge.api.resources.hris.employees.requests.EmployeesRetrieveRequest;
import com.merge.api.resources.hris.types.Employee;

public class SDKInstructions {

    public static void main(String[] args) {

        // Swap YOUR_API_KEY below with your production key from:
        // https://app.merge.dev/keys
        String apiKey = "API_KEY";

        // The string 'TEST_ACCOUNT_TOKEN' below works to test your connection
        // to Merge and will return dummy data in the response.
        // In production, replace this with account_token from user.
        String accountToken = "TEST_ACCOUNT_TOKEN";

        MergeApiClient mergeClient = MergeApiClient.builder()
            .accountToken(accountToken)
            .apiKey(apiKey)
            .build();

        Employee employee = mergeClient.hris().employees().list(
            EmployeesRetrieveRequest.builder()
                .includeRemoteData(true)
                .build());
    }
}
go
// Using Advanced Go SDK

package main

import (
  "context"
  "fmt"
  "os"

  merge "github.com/merge-api/merge-go-client"
  mergeclient "github.com/merge-api/merge-go-client/client"
  "github.com/merge-api/merge-go-client/ats"
)

// The string 'TEST_ACCOUNT_TOKEN' below works to test your connection
// to Merge and will return dummy data in the response.
// In production, replace this with your user's account_token.

func main() {
  xAccountToken := "TEST_ACCOUNT_TOKEN"
  accountToken := "w6hPsLojCFY17l5GoB06A2rHW_hOVWTCN8-oOMsS-RoW7h8LmjtCIg"

  client := mergeclient.NewClient(
    mergeclient.ClientWithAuthApiKey(xAccountToken),
    mergeclient.ClientWithHeaderAccountToken(&accountToken),
  )

  candidateList, err := client.Ats().Candidates().List(
    context.TODO(),
    &ats.CandidatesListRequest{
      CreatedBefore: merge.Time(time.Now()),
    },
  )
  if err != nil {
    os.Exit(1)
  }
  fmt.Printf("Retrieved %d candidates\n", len(candidateList.Results))
}
ruby
# Using Single-Category HRIS Ruby SDK

require 'time'
require 'merge_hris_client'

MergeHRISClient.configure do |config|
  config.api_key['tokenAuth'] = 'YOUR_API_KEY'
  config.api_key_prefix['tokenAuth'] = 'Bearer'
end

api_instance = MergeHRISClient::EmployeesApi.new

# The string 'TEST_ACCOUNT_TOKEN' below works to test your connection
# to Merge and will return dummy data in the response.
# In production, replace this with account_token from user.
x_account_token = 'TEST_ACCOUNT_TOKEN'

begin
  result = api_instance.employees_list(x_account_token)
  p result
rescue MergeHRISClient::ApiError => e
  puts 'Exception when calling EmployeesApi->employees_list: #{e}'
end

Unofficial documentation reference. Built for internal use.