Email magic link
Start Email Magic Link Challenge
Start a challenge when the user is already enrolled with at least one email magic link authenticator
POST
/
challenge
/
email-magic-link
Start Email Magic Link Challenge
curl --request POST \
--url https://api.authsignal.com/v1/client/challenge/email-magic-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userAuthenticatorId": "<string>"
}
'import requests
url = "https://api.authsignal.com/v1/client/challenge/email-magic-link"
payload = { "userAuthenticatorId": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({userAuthenticatorId: '<string>'})
};
fetch('https://api.authsignal.com/v1/client/challenge/email-magic-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.authsignal.com/v1/client/challenge/email-magic-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([
'userAuthenticatorId' => '<string>'
]),
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.authsignal.com/v1/client/challenge/email-magic-link"
payload := strings.NewReader("{\n \"userAuthenticatorId\": \"<string>\"\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.authsignal.com/v1/client/challenge/email-magic-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userAuthenticatorId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.authsignal.com/v1/client/challenge/email-magic-link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userAuthenticatorId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"challengeId": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>",
"errorCode": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>"
}{
"error": "too_many_requests",
"errorDescription": "The rate limit has been exceeded."
}Authorizations
Use a short-lived token obtained from the Server API's Track Action endpoint. The token is valid for 10 minutes and should be passed in the Authorization header as 'Bearer {token}'.
Body
application/json
The ID of the email authenticator to use. Only required if the user has multiple email authenticators and you want to target a specific one.
Response
OK
The ID of the challenge. Pass this ID back to check if the user has clicked on the magic link and finalize the challenge.
Was this page helpful?
⌘I
Start Email Magic Link Challenge
curl --request POST \
--url https://api.authsignal.com/v1/client/challenge/email-magic-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userAuthenticatorId": "<string>"
}
'import requests
url = "https://api.authsignal.com/v1/client/challenge/email-magic-link"
payload = { "userAuthenticatorId": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({userAuthenticatorId: '<string>'})
};
fetch('https://api.authsignal.com/v1/client/challenge/email-magic-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.authsignal.com/v1/client/challenge/email-magic-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([
'userAuthenticatorId' => '<string>'
]),
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.authsignal.com/v1/client/challenge/email-magic-link"
payload := strings.NewReader("{\n \"userAuthenticatorId\": \"<string>\"\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.authsignal.com/v1/client/challenge/email-magic-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userAuthenticatorId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.authsignal.com/v1/client/challenge/email-magic-link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userAuthenticatorId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"challengeId": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>",
"errorCode": "<string>"
}{
"error": "<string>",
"errorDescription": "<string>"
}{
"error": "too_many_requests",
"errorDescription": "The rate limit has been exceeded."
}
