Create Domain Connect URL
curl --request POST \
--url https://management-api.fpjs.io/subdomains/{id}/domain-connect \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-API-Version: <x-api-version>' \
--data '{
"port": 8976
}'import requests
url = "https://management-api.fpjs.io/subdomains/{id}/domain-connect"
payload = { "port": 8976 }
headers = {
"X-API-Version": "<x-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-Version': '<x-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({port: 8976})
};
fetch('https://management-api.fpjs.io/subdomains/{id}/domain-connect', 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://management-api.fpjs.io/subdomains/{id}/domain-connect",
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([
'port' => 8976
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-API-Version: <x-api-version>"
],
]);
$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://management-api.fpjs.io/subdomains/{id}/domain-connect"
payload := strings.NewReader("{\n \"port\": 8976\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Version", "<x-api-version>")
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://management-api.fpjs.io/subdomains/{id}/domain-connect")
.header("X-API-Version", "<x-api-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"port\": 8976\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://management-api.fpjs.io/subdomains/{id}/domain-connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Version"] = '<x-api-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"port\": 8976\n}"
response = http.request(request)
puts response.read_body{
"data": {
"domain_connect_url": "<string>",
"dns_provider": "Cloudflare"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"violations": [
{
"property": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}subdomains
Create Domain Connect URL
Create a signed Domain Connect URL that redirects to a Fingerprint CLI loopback callback. The returned URL is specific to this CLI session and is not stored on the subdomain. Open it in your browser, then use the verify endpoint to check DNS and certificate progress. The redirect targets http://127.0.0.1:{port}/domain-connect/callback; the client must listen on the supplied port before opening the URL.
POST
/
subdomains
/
{id}
/
domain-connect
Create Domain Connect URL
curl --request POST \
--url https://management-api.fpjs.io/subdomains/{id}/domain-connect \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-API-Version: <x-api-version>' \
--data '{
"port": 8976
}'import requests
url = "https://management-api.fpjs.io/subdomains/{id}/domain-connect"
payload = { "port": 8976 }
headers = {
"X-API-Version": "<x-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-Version': '<x-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({port: 8976})
};
fetch('https://management-api.fpjs.io/subdomains/{id}/domain-connect', 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://management-api.fpjs.io/subdomains/{id}/domain-connect",
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([
'port' => 8976
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-API-Version: <x-api-version>"
],
]);
$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://management-api.fpjs.io/subdomains/{id}/domain-connect"
payload := strings.NewReader("{\n \"port\": 8976\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Version", "<x-api-version>")
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://management-api.fpjs.io/subdomains/{id}/domain-connect")
.header("X-API-Version", "<x-api-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"port\": 8976\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://management-api.fpjs.io/subdomains/{id}/domain-connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Version"] = '<x-api-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"port\": 8976\n}"
response = http.request(request)
puts response.read_body{
"data": {
"domain_connect_url": "<string>",
"dns_provider": "Cloudflare"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"code": "<string>",
"violations": [
{
"property": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"message": "<string>",
"code": "<string>"
}
}Use the returned URL to authorize DNS changes at the subdomain’s DNS provider. Start a local HTTP listener at
http://127.0.0.1:{port}/domain-connect/callback and send its port in the request body. Keep the listener running while you open the URL and complete authorization in your browser. Remote sessions require port forwarding so your browser can reach the listener.
The URL is specific to that callback listener and isn’t stored on the subdomain. The dns_provider display name is optional and may be omitted from the response.
This endpoint returns 409 if Domain Connect is unavailable for this subdomain or it is no longer awaiting DNS validation. A public pending status doesn’t guarantee availability: DNS may already be validated while certificate issuance is still in progress. If Domain Connect is unavailable, add the DNS records manually.
Authorization doesn’t mean the subdomain is ready to use. Call Verify subdomain, then poll Get subdomain (GET /subdomains/{id}) until the status is active before updating your application’s endpoints. Respect the verification rate limit.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Management API version.
Path Parameters
Body
application/json
Local loopback port where the CLI is listening for the Domain Connect callback.
Required range:
1 <= x <= 65535Example:
8976
Response
Signed Domain Connect URL.
Show child attributes
Show child attributes
Was this page helpful?