Members
Start a single sign-on session
If you already have your own authentication mechanism, Single Sign-On allows your authenticated members to directly access the member area without logging in again.
Call this endpoint from your backend and redirect the member to the
accessUrl from the response. Optionally pass path to direct the
member to a specific page. The accessUrl is valid for 15 minutes.
POST
/
members
/
start-session
Start a single sign-on session
curl --request POST \
--url https://{domain}/api/site/members/start-session \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'User-Agent: <api-key>' \
--data '
{
"email": "john@doe.com",
"path": "/protected-member-only-page"
}
'import requests
url = "https://{domain}/api/site/members/start-session"
payload = {
"email": "john@doe.com",
"path": "/protected-member-only-page"
}
headers = {
"Authorization": "Bearer <token>",
"User-Agent": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'User-Agent': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({email: 'john@doe.com', path: '/protected-member-only-page'})
};
fetch('https://{domain}/api/site/members/start-session', 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://{domain}/api/site/members/start-session",
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([
'email' => 'john@doe.com',
'path' => '/protected-member-only-page'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"User-Agent: <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://{domain}/api/site/members/start-session"
payload := strings.NewReader("{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("User-Agent", "<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://{domain}/api/site/members/start-session")
.header("Authorization", "Bearer <token>")
.header("User-Agent", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{domain}/api/site/members/start-session")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["User-Agent"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}"
response = http.request(request)
puts response.read_body{
"token": "xxxxx.xxxxx.xxxxx",
"accessUrl": "https://your-domain/api/site/members/session/xxxxx.xxxxx.xxxxx",
"createdAt": 1605283421,
"expiresAt": 1605284321
}Authorizations
Pass your API key as: Authorization: Bearer <API KEY>.
Client identifier sent with requests from the documentation playground.
Body
application/json
Response
200 - application/json
A session token and access URL.
Last modified on September 2, 2026
Was this page helpful?
⌘I
Start a single sign-on session
curl --request POST \
--url https://{domain}/api/site/members/start-session \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'User-Agent: <api-key>' \
--data '
{
"email": "john@doe.com",
"path": "/protected-member-only-page"
}
'import requests
url = "https://{domain}/api/site/members/start-session"
payload = {
"email": "john@doe.com",
"path": "/protected-member-only-page"
}
headers = {
"Authorization": "Bearer <token>",
"User-Agent": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'User-Agent': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({email: 'john@doe.com', path: '/protected-member-only-page'})
};
fetch('https://{domain}/api/site/members/start-session', 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://{domain}/api/site/members/start-session",
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([
'email' => 'john@doe.com',
'path' => '/protected-member-only-page'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"User-Agent: <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://{domain}/api/site/members/start-session"
payload := strings.NewReader("{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("User-Agent", "<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://{domain}/api/site/members/start-session")
.header("Authorization", "Bearer <token>")
.header("User-Agent", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{domain}/api/site/members/start-session")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["User-Agent"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"john@doe.com\",\n \"path\": \"/protected-member-only-page\"\n}"
response = http.request(request)
puts response.read_body{
"token": "xxxxx.xxxxx.xxxxx",
"accessUrl": "https://your-domain/api/site/members/session/xxxxx.xxxxx.xxxxx",
"createdAt": 1605283421,
"expiresAt": 1605284321
}
