Send a hosted intake link (Mode B)
curl --request POST \
--url https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"send": true
}'import requests
url = "https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link"
payload = { "send": True }
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({send: true})
};
fetch('https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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([
'send' => true
]),
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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link"
payload := strings.NewReader("{\n \"send\": true\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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"send\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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 \"send\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"token": "<string>",
"url": "https://intake.telemedcomplete.com/form/abc123",
"notified": true
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}Intakes
Send a hosted intake link (Mode B)
Vita Clinic only. Requires the intakes:write scope. Create (or reuse) a hosted intake for your patient and return the intake.telemedcomplete.com link so the patient can complete the questionnaire themselves. If the patient has an account and send is true they are notified by SMS + email (PHI-free — link only). A patient belonging to another organization resolves as 404 patient_not_found. Repeated calls for the same patient + category reuse the same pending intake. Test keys never contact the patient but still return the link.
POST
/
patients
/
{patientId}
/
intake
/
send-link
Send a hosted intake link (Mode B)
curl --request POST \
--url https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"send": true
}'import requests
url = "https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link"
payload = { "send": True }
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({send: true})
};
fetch('https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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([
'send' => true
]),
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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link"
payload := strings.NewReader("{\n \"send\": true\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://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-link")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"send\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://vitarelay.com/api/public/v1/patients/{patientId}/intake/send-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 \"send\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"token": "<string>",
"url": "https://intake.telemedcomplete.com/form/abc123",
"notified": true
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}Authorizations
API key issued by VitaRelay. Send as Authorization: Bearer vr_live_…
(production) or Authorization: Bearer vr_test_… (sandbox).
Path Parameters
Body
application/json
Response
Intake link created or reused.
Show child attributes
Show child attributes

