from kombo import Kombo
with Kombo(
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.connect.create_connection_link(end_user_email="test@example.com", end_user_organization_name="Test Inc.", end_user_origin_id="123", integration_category="HRIS", integration_tool="personio", language="en", enable_filtering=False, enable_field_mapping=False, enable_static_ips=True, link_type="EMBEDDED")
# Handle response
print(res)import { Kombo } from "@kombo-api/sdk";
const kombo = new Kombo({
api_key: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await kombo.connect.createConnectionLink({
end_user_email: "test@example.com",
end_user_organization_name: "Test Inc.",
end_user_origin_id: "123",
integration_tool: "personio",
enable_static_ips: true,
});
console.log(result);
}
run();require 'kombo'
Models = ::Kombo::Models
s = ::Kombo::Kombo.new(
security: Models::Shared::Security.new(
api_key: '<YOUR_BEARER_TOKEN_HERE>'
)
)
req = Models::Shared::PostConnectCreateLinkRequestBody.new(
end_user_email: 'test@example.com',
end_user_organization_name: 'Test Inc.',
end_user_origin_id: '123',
integration_tool: Models::Shared::IntegrationTool::PERSONIO,
enable_static_ips: true
)
res = s.connect.create_connection_link(request: req)
unless res.post_connect_create_link_positive_response.nil?
# handle response
endcurl --request POST \
--url https://api.kombo.dev/v1/connect/create-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"end_user_email": "test@example.com",
"end_user_organization_name": "Test Inc.",
"integration_category": "HRIS",
"integration_tool": "personio",
"end_user_origin_id": "123",
"language": "en",
"link_type": "EMBEDDED",
"enable_static_ips": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
end_user_email: 'test@example.com',
end_user_organization_name: 'Test Inc.',
integration_category: 'HRIS',
integration_tool: 'personio',
end_user_origin_id: '123',
language: 'en',
link_type: 'EMBEDDED',
enable_static_ips: true
})
};
fetch('https://api.kombo.dev/v1/connect/create-link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kombo.dev/v1/connect/create-link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'end_user_email' => 'test@example.com',
'end_user_organization_name' => 'Test Inc.',
'integration_category' => 'HRIS',
'integration_tool' => 'personio',
'end_user_origin_id' => '123',
'language' => 'en',
'link_type' => 'EMBEDDED',
'enable_static_ips' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kombo.dev/v1/connect/create-link"
payload := strings.NewReader("{\n \"end_user_email\": \"test@example.com\",\n \"end_user_organization_name\": \"Test Inc.\",\n \"integration_category\": \"HRIS\",\n \"integration_tool\": \"personio\",\n \"end_user_origin_id\": \"123\",\n \"language\": \"en\",\n \"link_type\": \"EMBEDDED\",\n \"enable_static_ips\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.kombo.dev/v1/connect/create-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"end_user_email\": \"test@example.com\",\n \"end_user_organization_name\": \"Test Inc.\",\n \"integration_category\": \"HRIS\",\n \"integration_tool\": \"personio\",\n \"end_user_origin_id\": \"123\",\n \"language\": \"en\",\n \"link_type\": \"EMBEDDED\",\n \"enable_static_ips\": true\n}")
.asString();{
"status": "success",
"data": {
"link": "https://connect.kombo.dev/v1?token=<example-token>",
"static_ips": [
"203.0.113.10",
"203.0.113.11"
]
}
}Create connection link
Generate a unique link that allows your user to enter the embedded Kombo Connect flow.
from kombo import Kombo
with Kombo(
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.connect.create_connection_link(end_user_email="test@example.com", end_user_organization_name="Test Inc.", end_user_origin_id="123", integration_category="HRIS", integration_tool="personio", language="en", enable_filtering=False, enable_field_mapping=False, enable_static_ips=True, link_type="EMBEDDED")
# Handle response
print(res)import { Kombo } from "@kombo-api/sdk";
const kombo = new Kombo({
api_key: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await kombo.connect.createConnectionLink({
end_user_email: "test@example.com",
end_user_organization_name: "Test Inc.",
end_user_origin_id: "123",
integration_tool: "personio",
enable_static_ips: true,
});
console.log(result);
}
run();require 'kombo'
Models = ::Kombo::Models
s = ::Kombo::Kombo.new(
security: Models::Shared::Security.new(
api_key: '<YOUR_BEARER_TOKEN_HERE>'
)
)
req = Models::Shared::PostConnectCreateLinkRequestBody.new(
end_user_email: 'test@example.com',
end_user_organization_name: 'Test Inc.',
end_user_origin_id: '123',
integration_tool: Models::Shared::IntegrationTool::PERSONIO,
enable_static_ips: true
)
res = s.connect.create_connection_link(request: req)
unless res.post_connect_create_link_positive_response.nil?
# handle response
endcurl --request POST \
--url https://api.kombo.dev/v1/connect/create-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"end_user_email": "test@example.com",
"end_user_organization_name": "Test Inc.",
"integration_category": "HRIS",
"integration_tool": "personio",
"end_user_origin_id": "123",
"language": "en",
"link_type": "EMBEDDED",
"enable_static_ips": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
end_user_email: 'test@example.com',
end_user_organization_name: 'Test Inc.',
integration_category: 'HRIS',
integration_tool: 'personio',
end_user_origin_id: '123',
language: 'en',
link_type: 'EMBEDDED',
enable_static_ips: true
})
};
fetch('https://api.kombo.dev/v1/connect/create-link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kombo.dev/v1/connect/create-link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'end_user_email' => 'test@example.com',
'end_user_organization_name' => 'Test Inc.',
'integration_category' => 'HRIS',
'integration_tool' => 'personio',
'end_user_origin_id' => '123',
'language' => 'en',
'link_type' => 'EMBEDDED',
'enable_static_ips' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kombo.dev/v1/connect/create-link"
payload := strings.NewReader("{\n \"end_user_email\": \"test@example.com\",\n \"end_user_organization_name\": \"Test Inc.\",\n \"integration_category\": \"HRIS\",\n \"integration_tool\": \"personio\",\n \"end_user_origin_id\": \"123\",\n \"language\": \"en\",\n \"link_type\": \"EMBEDDED\",\n \"enable_static_ips\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.kombo.dev/v1/connect/create-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"end_user_email\": \"test@example.com\",\n \"end_user_organization_name\": \"Test Inc.\",\n \"integration_category\": \"HRIS\",\n \"integration_tool\": \"personio\",\n \"end_user_origin_id\": \"123\",\n \"language\": \"en\",\n \"link_type\": \"EMBEDDED\",\n \"enable_static_ips\": true\n}")
.asString();{
"status": "success",
"data": {
"link": "https://connect.kombo.dev/v1?token=<example-token>",
"static_ips": [
"203.0.113.10",
"203.0.113.11"
]
}
}Check out our full guide for more details about implementing the connection flow into your app.
Kombo will not deduplicate integrations for you that are created with this endpoint. You are responsible for keeping track of integrations in your system and prevent customers from connecting the same tool again. Use the reconnection link endpoint if you want a customer to update their credentials.
Example Request Body
{
"end_user_email": "test@example.com",
"end_user_organization_name": "Test Inc.",
"integration_category": "HRIS",
"integration_tool": "personio",
"end_user_origin_id": "123",
"language": "en",
"link_type": "EMBEDDED",
"enable_static_ips": true
}
Authorizations
Create an API key on the Secrets page in the Kombo dashboard.
Body
POST /connect/create-link Request body
If the tool you want to connect offers different environments, you can specify which one you want to connect to here. If you don't specify this, we'll assume you want to use the production environment. Note that this can only be used if you've also specified a tool through integration_tool.
Pre-define a tool this integration link can be used for.
workday, successfactors, smartrecruiters, factorial, oraclerecruiting, lever, icims, cornerstonetalentlink, recruitee, recruiterflow, atlas, greenhouse, greenhousev3, greenhousejobboard, teamtailor, teamtailorjobboards, ashby, talentsoft, talentsoftcustomer, concludis, perbilityhelix, talention, piloga, onlyfy, personio, ukgpro, ukgready, adpworkforcenow, taleo, rexx, afas, bamboohr, bullhorn4salesforce, bullhorn, bullhornlogin, workable, jobvite, fountain, softgarden, softgardenpartner, pinpoint, welcometothejungle, dvinci, dvinciadmin, join, sagehr, traffit, erecruiter, abacusumantis, umantis, jobylon, taleez, hrworks, otys, zohorecruit, ceipal, eploy, jobdiva, careerplug, perview, eightfold, paylocity, paycor, avature, apploi, phenom, paradox, heyrecruit, recruhr, recruitcrm, jazzhr, bite, brassring, homerun, mysolution, carerix, carerixgraphql, hroffice, talentclue, inrecruiting, jobadder, jobadderjobboard, ubeeo, connexys, hr4you, cornerstoneondemand, zvooverecruit, odoo, comeet, compleetpitcher, compleetpersy, compleet, gem, laura, covetorest, coveto, mercury, crelate, manatal, avionte, mhmhr, asymbl, breezyhr, flatchr, dayforce, digitalrecruiters, applicantstack, reachmee, talentadore, sandbox, guidecom, spott, stardex, logicmelon, loxo, kula, trackerrms, databites, pageup, talent360, emplypeople, hibob, workdaycustomreport, workdaycustomreportsftp, ukgprowfm, adpdecidium, adplink, payfitcustomer, payfitpartner, payfit, employmenthero, fourth, kenjo, heavenhr, cezannehr, entraid, azuread, googleworkspace, nmbrs, deel, remotecom, iriscascade, okta, sagepeople, humaans, eurecia, oraclehcm, officient, sesamehr, charliehr, abacus, zohopeople, gusto, breathehr, catalystone, mirus, alexishr, simployer, peple, youserve, hansalog, lattice, latticetalent, hoorayhr, trinet, trinetpeo, namely, paycom, insperity, paychex, rippling, sapling, peoplehr, lucca, zelt, planday, boondmanager, haileyhr, skello, oysterhr, kiwihr, square, leapsome, loket, workforcecom, peoplefirst, sdworx, itrent, absenceio, a3innuvanomina, scim, datevlauds, datevhr, datev, datevlug, sympa, youforce, nibelis, peoplexd, zellis, veda, sona, sftp, sftpfetch, 360learning, talentlms, docebo, coursera, udemy, linkedinlearning, moodle Enable the filtering feature for the integration. HRIS only.
Enable the field mapping feature for this integration.
Enable Static IPs for this integration so all API calls originate from a fixed, allowlistable set of IPs.
The type of link you want to create. EMBEDDED is for the embedded flow using the Kombo Connect SDK (these links are valid for 1 hour) and MAGIC_LINK is for magic links which you send out manually to customers (there are valid for 1 year).
This defaults to EMBEDDED, which is our recommended method of implementing the connection flow for a seamless user experience.
EMBEDDED, MAGIC_LINK Was this page helpful?