curl --request POST \
--url https://api.baselayer.com/onboarding/sessions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reference_id": "<string>"
}
'import requests
url = "https://api.baselayer.com/onboarding/sessions"
payload = {
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reference_id": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', reference_id: '<string>'})
};
fetch('https://api.baselayer.com/onboarding/sessions', 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.baselayer.com/onboarding/sessions",
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([
'template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'reference_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.baselayer.com/onboarding/sessions"
payload := strings.NewReader("{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.baselayer.com/onboarding/sessions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.baselayer.com/onboarding/sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"session_token": "<string>",
"embed_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"reference_id": "<string>"
}{
"code": 37,
"message": "Forbidden access. The organization is not enrolled in the product this route belongs to.",
"metadata": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Start a hosted enrollment session
Starts a session for one applicant on a customer journey you built and published in Console, and returns the embed_url where the applicant completes it. Call it from your server: the response carries a secret session token. A journey that was never published answers 409. When the session completes, the OnboardingSession.completed webhook fires and GET /onboarding/sessions/{session_id}/results returns the outcome.
This is a hosted enrollment session: the applicant completes your published journey on Baselayer’s page. To verify an identity you collected yourself, use a direct verification, POST /issuance/identities/verifications.
Onboarding must be enabled for your organization. Until it is, this endpoint answers 403 with error code 37.
curl --request POST \
--url https://api.baselayer.com/onboarding/sessions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reference_id": "<string>"
}
'import requests
url = "https://api.baselayer.com/onboarding/sessions"
payload = {
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reference_id": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', reference_id: '<string>'})
};
fetch('https://api.baselayer.com/onboarding/sessions', 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.baselayer.com/onboarding/sessions",
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([
'template_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'reference_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.baselayer.com/onboarding/sessions"
payload := strings.NewReader("{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.baselayer.com/onboarding/sessions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.baselayer.com/onboarding/sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"template_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"reference_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"session_token": "<string>",
"embed_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"reference_id": "<string>"
}{
"code": 37,
"message": "Forbidden access. The organization is not enrolled in the product this route belongs to.",
"metadata": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Body
Request to start an onboarding session for one applicant.
Call it from your server; the applicant completes the flow at the
returned embed_url.
ID of the customer journey to run, as built and published in Console; it is the last part of the journey's Console URL. The session runs the latest published version, and a journey that was never published is rejected.
Your own identifier for the applicant or application, returned on the session, its results and its webhooks.
Response
Successful Response
A newly started onboarding session and the link the applicant opens.
Onboarding session id. Use it to fetch results and to match OnboardingSession webhooks.
Secret token that lets the applicant's browser drive this session. Returned only once and already embedded in embed_url; treat it as a credential.
URL of the hosted flow for this session. Open it for the applicant or load it in an iframe.
When session_token, and so embed_url, stops working.
Caller-supplied correlation id.