Appearance
Fresh 2026
Authorize single integration
How to pre-select a specific integration in Merge Link so users skip the integration picker and go straight to authorization.
Overview
You may want to customize your user experience to skip integration selection and guide your user directly to a specific integration's configuration step in Merge's integration authorization component.
If you don't want to display a menu of integrations to your user and instead want to show them a single integration in Merge's component, you can do so using the code example below.
When you create a link token to initialize a linking flow session (as in Step 1 of the Get Started guide), add the identifier (found below) of the single integration you want to display in Merge's integration authorization component to the link_token request parameters.
A link_token created with this parameter will cause the linking flow to open directly to the integration configuration input form of just that integration.
python
import requests
# Replace api_key with your organization's production API Key
def create_link_token(user, api_key):
body = {
"end_user_organization_name": user.organization_name,
"end_user_email_address": user.email_address,
"end_user_origin_id": user.id,
"categories": ["hris"],
# identifier of desired integration
"integration": "greenhouse",
}
headers = {"Authorization": f"Bearer {api_key}"}
link_token_url = "https://api.merge.dev/api/integrations/create-link-token"
link_token_result = requests.post(link_token_url, data=body, headers=headers)
link_token = link_token_result.json().get("link_token")
return link_tokenruby
require 'httparty'
# Replace api_key with your organization's production API Key
def create_link_token(user, api_key)
uri = URI('https://api.merge.dev/api/integrations/create-link-token')
body = {
'end_user_organization_name' => user.organization_name,
'end_user_email_address' => user.email_address,
'end_user_origin_id' => user.id,
'categories' => ['hris'],
# identifier of desired integration
'integration' => 'greenhouse'
}
headers = { 'Authorization' => "Bearer #{api_key}", 'Content-Type' => 'application/json' }
link_token_response = HTTParty.post(uri, body: body.to_json, headers: headers)
link_token_response['link_token']
endnode
import { MergeClient, Merge } from '@mergeapi/merge-node-client';
// Swap YOUR_API_KEY below with your production key from:
// https://app.merge.dev/keys
const merge = new MergeClient({apiKey: 'YOUR_API_KEY'});
const linkTokenResponse = await merge.hris.linkToken.create({
endUserEmailAddress: user.email_address,
endUserOrganizationName: user.organization.name,
endUserOriginId: user.id,
categories: [Merge.hris.CategoriesEnum.Hris],
integration: "greenhouse",
linkExpiryMins: 30});
console.log("Created link token", linkTokenResponse.linkToken);java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
public class MergeLinkingFlow {
public static String createLinkToken(User user, String apiKey)
throws IOException, InterruptedException {
Map data = new HashMap();
data.put("end_user_organization_name", user.end_user_organization_name); // Your end user's organization name
data.put("end_user_email_address", user.end_user_email_address); // Your end user's email address
data.put("end_user_origin_id", user.end_user_origin_id); // Your end user's ID
String[] categories = {"hris"}; // Only use one category for single integration
data.put("categories", categories);
data.put("integration", "greenhouse"); // Enter the integration name you want to use
ObjectMapper mapper = new ObjectMapper();
String requestBody = mapper.writeValueAsString(data);
HttpClient client = HttpClient.newHttpClient();
URI uri = URI.create("https://api.merge.dev/api/integrations/create-link-token");
HttpRequest request = HttpRequest.newBuilder(uri)
.header("Content-Type", "application/json")
.header("Authorization", String.format("Bearer %s", apiKey))
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse linkTokenResult = client.send(request, HttpResponse.BodyHandlers.ofString());
String linkToken = new ObjectMapper().readValue(linkTokenResult.body(), ObjectNode.class).get("link_token").textValue();
return linkToken;
}
}elixir
# Replace api_key with your organization's production API Key
def create_link_token(user, api_key) do
uri = "https://api.merge.dev/api/integrations/create-link-token"
body =
%{
"end_user_organization_name" => user.organization_name,
"end_user_email_address" => user.email,
"end_user_origin_id" => user.id,
"categories" => ["ats"],
# identifier of desired integration
"integration" => "greenhouse"
}
|> Jason.encode!()
{:ok, response} =
Tesla.post(uri, body,
headers: [{"content-type", "application/json"}, {"Authorization", "Bearer #{api_key}"}]
)
link_token_response = Jason.decode!(response.body)
link_token_response["link_token"]
endIntegration identifiers
Below are examples of integration identifiers (slugs) organized by category. For a complete list of all available integrations, visit your Merge Dashboard.
7shiftsadp-decidiumadp-next-genadp-runadp-workforce-nowalliancehcmaltera-payrollbamboohrbreathecezanne-hrcharliecharthopclayhrcoolcarecyberarkdarwinboxdayforcedeelemployment-herofactorialfolks-hrfreshteamgoogle-workspacegustohailey-hrhibobhr-cloudhr-partnerhrworkshumaanshumiinsperity-premierintellihriris-cascadeisolvedjumpcloudjustworkskalliduskekakenjolanolattice-hrisleapsomeluccamicrosoft-entra-idnamelynmbrsofficientoktaoneloginoracle-cloud-human-capital-management-hcmoysterhrpaycaptainpaychexpaycompaycorpayfitpaylocitypeoplehrpersoniopingoneplandayprismhrproliantremoterevolut-peopleripplingsage-hrsage-peoplesap-successfactorssesamesimployersquare-payrolltrinettrinet-hr-platformukg-proukg-pro-workforce-managementukg-readyworkdayzeltzoho-people
applicantstackashbyavaturebamboohrbreezybullhornbullhorn-recruitment-cloudcatsclayhrclockworkcomeetcornerstone-talentlinkcrelatedayforcedvincieasycruitengageatseployflatchrfountainfreshteamgemgreenhousegreenhouse-job-board-apiharbour-atshomerunhr-cloudicimsinfinite-brassringjazzhrjobadderjobdivajobscorejobsoidjobvitejoinlanolevermanataloccupoponlyfyoracle-fusion-recruiting-cloudoracle-taleopersonio-recruitingpinpointpolymerrecruiterflowrecruitivesage-hrsap-successfactorssmartrecruiterstaleeztalentlyfttalentreefteamtailortellent-recruiteetraffittribepadukg-pro-recruitingwelcome-to-the-jungleworkableworkdayzoho-recruit
clear-booksfreeagentfreshbooksmicrosoft-dynamics-365-business-centralmicrosoft-dynamics-finance-and-operationsmoneybirdnetsuitequickbooks-desktopquickbooks-onlinesage-business-cloud-accountingsage-intacctwave-financialworkdayxerozoho-books
ahaasanaazure-devopsbasecampbitbucketclickupdixafreshdeskfreshservicefrontgithub-issuesgitlabgladlygorgiasheighthelp-scouthivehubspot-ticketingintercomironcladjirajira-data-centerjira-service-managementkustomerlinearpivotal-trackerrallyservicenowshortcutspotdraftteamworktrellowrikezendeskzoho-bugtrackerzoho-desk
acceloactivecampaignaffinitycapsuleclosecopperhubspotinsightlykeapmicrosoft-dynamics-365-salesnutshellpipedrivepipelinersalesflaresalesforcesugarcrmteamleaderteamwork-crmvtigerzendesk-sellzoho-crm
boxdropboxgoogle-driveonedrivesharepoint
confluence