Developer tools

Everything developers need to build integrations

Merge is your integration toolbox. Integrate quickly with drop-in frontend components, backend SDKs, sandbox accounts, and a whole lot more.

Trusted to power integrations Globally
Gem
BetterHelp
Drata
Sendoso
Airwallex
Navan
Ramp
Revolut
BambooHR
Korn Ferry
Hotel Engine
AngelList
FranklinCovey
Culture Amp
Auditboard
TaxBit
Subskribe
Apollo
JupiterOne
Handshake
Watershed
Brex
LearnUpon
Mosaic
Divvy
Payhawk
Upflex
LogicGate
Mesh Payments
EQ
QuestionPro
Lucid
Payscale
Electric
OpenComp
Standard Metrics
Spendflo
Tropic
Hofy
Ledgy
A-Lign
Bonusly
Guru
Ripplematch
Oyster
Omnipresent
Causal
Fetcher
Gem
BetterHelp
Drata
Sendoso
Airwallex
Navan
Ramp
Revolut
BambooHR
Korn Ferry
Hotel Engine
AngelList
FranklinCovey
Culture Amp
Auditboard
TaxBit
Subskribe
Apollo
JupiterOne
Handshake
Watershed
Brex
LearnUpon
Mosaic
Divvy
Payhawk
Upflex
LogicGate
Mesh Payments
EQ
QuestionPro
Lucid
Payscale
Electric
OpenComp
Standard Metrics
Spendflo
Tropic
Hofy
Ledgy
A-Lign
Bonusly
Guru
Ripplematch
Oyster
Omnipresent
Causal
Fetcher
Seamless account linking

Offer an integration setup flow that feels like magic

Merge seamlessly manages authentication and authorization on behalf of your customers.

Offer account linking and permission controls to your users with Link for a customizable frontend or with Magic Link for URL-based authorization.

SDKs

SDKs that take the effort out of building

Merge offers SDKs to interact with our API for
every category and a variety of languages

Get Employee Data
import merge
from merge.client import Merge
merge_client = Merge(api_key="<YOUR_API_KEY>", account_token="<YOUR_ACCOUNT_TOKEN>")
employee = merge_client.hris.employees.list()
import { MergeClient, Merge } from '@mergeapi/merge-node-client';
const merge = new MergeClient({
  apiKey: 'YOUR_API_KEY',
  accountToken: 'YOUR_ACCOUNT_TOKEN',
});
employee = await merge.hris.employees.list()
ApiClient.instance.authentications.tokenAuth = {
  type: 'bearer',
  accessToken: 'API_KEY',
};
new EmployeesApi().employeesList('ACCOUNT_TOKEN', {}, (data) => {
  console.log(data);
});
import (
  "context"
  "fmt"
  merge "github.com/fern-api/merge-go"
  mergeclient "github.com/fern-api/merge-go/client"
  "github.com/fern-api/merge-go/hris"
)

client := mergeclient.NewClient(
  mergeclient.ClientWithAuthApiKey("<YOUR_API_KEY>"),
  mergeclient.ClientWithHeaderAccountToken("<YOUR_ACCOUNT_TOKEN>"),
)
employee, err := client.Hris().Employees().List(
  context.TODO(),
  &hris.EmployeesRetrieveRequest{
    IncludeRemoteData: merge.Bool(true),
  },
)
if err != nil {
  return err
}
fmt.Printf("Retrieved employee with ID %q\n", *employee.Id)
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath('https://api.merge.dev/api/ats/v1');
ApiKeyAuth tokenAuth = client.getAuthentication('tokenAuth');
tokenAuth.setApiKey('API_KEY');
CandidatesApi apiInstance = new CandidatesApi(client);
apiInstance.candidatesList('ACCOUNT_TOKEN');
import com.merge.api.MergeApiClient;
import com.merge.api.resources.hris.employees.requests.EmployeesRetrieveRequest;
import com.merge.api.resources.hris.types.Employee;
MergeApiClient mergeClient = MergeApiClient.builder()
    .accountToken("ACCOUNT_TOKEN")
    .apiKey("API_KEY")
    .build();
Employee employee = mergeClient.hris().employees().list(
    EmployeesRetrieveRequest.builder()
        .includeRemoteData(true)
        .build());
{
"id": "0958cbc6-6040-430a-848e-aafacbadf4ae",
"remote_id": "19202938",
"employee_number": "2",
"company": "8d9fd929-436c-4fd4-a48b-0c61f68d6178",
"first_name": "Dirna",
"last_name": "Emanuel",
"display_full_name": "Dirna Emanuel",
"username": "dirnaemanuel",
"groups": [
  "21a54124-397f-494d-985e-3c5b330b8a68"
],
"work_email": "dirna@merge.dev",
"personal_email": "dirnaemanuel@gmail.com",
"mobile_phone_number": "+1234567890",
"employments": [
  "17a54124-287f-494d-965e-3c5b330c9a68"
Sandbox accounts

Instantly access sandbox environments

Merge provides sandbox accounts with third-party API providers so you can build and test your integrations with confidence

Simplified data writes

Programmatically access required fields for writing data

Third-party providers require specific (and often different) fields to write data to their APIs, making your code a mess.

Dynamically fetch required data schemas from Merge’s /meta endpoint to make POST or PATCH requests that just work.

Developer resources

Everything you need to build an integration in an hour

Drata

How Drata helps thousands streamline their SOC 2 with Merge

​​”Working with Merge’s Unified API and beautiful React component took less than a sprint to integrate, test, and release.”

Daniel Marashlian of profile photo
Daniel Marashlian
Co-Founder & CTO