Appearance
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