Register
Register new healthcare provider or link existing provider to partner organization
curl --request POST \
--url https://sdp.suki.ai/api/v1/auth/register \
--header 'Content-Type: application/json' \
--data '
{
"partner_id": "your-partner-id",
"partner_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"provider_id": "provider-123",
"provider_name": "Dr. John Smith",
"provider_org_id": "org-123",
"provider_specialty": "CARDIOLOGY"
}
'import requests
url = "https://sdp.suki.ai/api/v1/auth/register"
payload = {
"partner_id": "your-partner-id",
"partner_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"provider_id": "provider-123",
"provider_name": "Dr. John Smith",
"provider_org_id": "org-123",
"provider_specialty": "CARDIOLOGY"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
partner_id: 'your-partner-id',
partner_token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...',
provider_id: 'provider-123',
provider_name: 'Dr. John Smith',
provider_org_id: 'org-123',
provider_specialty: 'CARDIOLOGY'
})
};
fetch('https://sdp.suki.ai/api/v1/auth/register', 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://sdp.suki.ai/api/v1/auth/register",
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([
'partner_id' => 'your-partner-id',
'partner_token' => 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...',
'provider_id' => 'provider-123',
'provider_name' => 'Dr. John Smith',
'provider_org_id' => 'org-123',
'provider_specialty' => 'CARDIOLOGY'
]),
CURLOPT_HTTPHEADER => [
"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://sdp.suki.ai/api/v1/auth/register"
payload := strings.NewReader("{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://sdp.suki.ai/api/v1/auth/register")
.header("Content-Type", "application/json")
.body("{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/auth/register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}"
response = http.request(request)
puts response.read_bodyThis response has no body data.{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 409,
"message": "conflict"
}{
"code": 500,
"message": "internal server error"
}Registration scenarios
This endpoint handles three different scenarios depending on the user’s status in the Suki system.| Scenario | Condition | Actions Taken | Response |
|---|---|---|---|
| New User | The provider does not exist in Suki. | • Creates a new organization • Links your partner account to the organization • Creates a new user with the provided details | 201 Created |
| Existing User, New Link | The provider exists but is not yet linked to your partner account. | • Verifies the user and organization details • Links your partner account to the existing organization | 201 Created |
| Existing User, Already Linked | The provider and organization are already linked to your partner account. | • Detects the existing link | 409 Conflict |
Code examples
- Python
- TypeScript
import requests
url = "https://sdp.suki-stage.com/api/v1/auth/register"
payload = {
"partner_id": "your-partner-id",
"partner_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"provider_name": "Dr. John Smith",
"provider_org_id": "org-123",
"provider_id": "provider-123", # Optional
"provider_specialty": "CARDIOLOGY" # Optional, defaults to FAMILY_MEDICINE
}
response = requests.post(url, json=payload)
if response.status_code == 201:
print("Provider registered successfully")
elif response.status_code == 409:
print("Provider already linked to this partner")
else:
print(f"Registration failed: {response.status_code}")
print(response.json())
const response = await fetch('https://sdp.suki-stage.com/api/v1/auth/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
partner_id: 'your-partner-id',
partner_token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...',
provider_name: 'Dr. John Smith',
provider_org_id: 'org-123',
provider_id: 'provider-123', // Optional
provider_specialty: 'CARDIOLOGY' // Optional, defaults to FAMILY_MEDICINE
})
});
if (response.status === 201) {
console.log('Provider registered successfully');
} else if (response.status === 409) {
console.log('Provider already linked to this partner');
} else {
const error = await response.json();
console.error(`Registration failed: ${response.status}`, error);
}
Body
Provider registration details and partner credentials from onboarding.
Unique identifier for the partner. This will be shared securely by Suki to the partner through a separate partner registration process.
"your-partner-id"
JWT token issued by trusted authorization server. The token must include Provider Email.
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
Name of the provider.
"Dr. John Smith"
Health system or organization to which the provider belongs.
"org-123"
Optional for standard partners.
Required for:
- Bearer authentication. Send
provider_idso Suki can identify the provider during Login or Register. - Single Auth Token authentication. Send
provider_idso Suki can identify the clinician during Login or Register.
"provider-123"
Optional - Medical specialty of the provider. Defaults to FAMILY_MEDICINE if not provided.
"CARDIOLOGY"
Response
Resource created successfully.
Was this page helpful?
curl --request POST \
--url https://sdp.suki.ai/api/v1/auth/register \
--header 'Content-Type: application/json' \
--data '
{
"partner_id": "your-partner-id",
"partner_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"provider_id": "provider-123",
"provider_name": "Dr. John Smith",
"provider_org_id": "org-123",
"provider_specialty": "CARDIOLOGY"
}
'import requests
url = "https://sdp.suki.ai/api/v1/auth/register"
payload = {
"partner_id": "your-partner-id",
"partner_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"provider_id": "provider-123",
"provider_name": "Dr. John Smith",
"provider_org_id": "org-123",
"provider_specialty": "CARDIOLOGY"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
partner_id: 'your-partner-id',
partner_token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...',
provider_id: 'provider-123',
provider_name: 'Dr. John Smith',
provider_org_id: 'org-123',
provider_specialty: 'CARDIOLOGY'
})
};
fetch('https://sdp.suki.ai/api/v1/auth/register', 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://sdp.suki.ai/api/v1/auth/register",
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([
'partner_id' => 'your-partner-id',
'partner_token' => 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...',
'provider_id' => 'provider-123',
'provider_name' => 'Dr. John Smith',
'provider_org_id' => 'org-123',
'provider_specialty' => 'CARDIOLOGY'
]),
CURLOPT_HTTPHEADER => [
"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://sdp.suki.ai/api/v1/auth/register"
payload := strings.NewReader("{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://sdp.suki.ai/api/v1/auth/register")
.header("Content-Type", "application/json")
.body("{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/auth/register")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"partner_id\": \"your-partner-id\",\n \"partner_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"provider_id\": \"provider-123\",\n \"provider_name\": \"Dr. John Smith\",\n \"provider_org_id\": \"org-123\",\n \"provider_specialty\": \"CARDIOLOGY\"\n}"
response = http.request(request)
puts response.read_bodyThis response has no body data.{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 409,
"message": "conflict"
}{
"code": 500,
"message": "internal server error"
}