List consultation photos
curl --request GET \
--url https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/ \
--header 'Authorization: Bearer <token>' \
--header 'X-Brand-Slug: <x-brand-slug>'import requests
url = "https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/"
headers = {
"X-Brand-Slug": "<x-brand-slug>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Brand-Slug': '<x-brand-slug>', Authorization: 'Bearer <token>'}
};
fetch('https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/', 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.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Brand-Slug: <x-brand-slug>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Brand-Slug", "<x-brand-slug>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/")
.header("X-Brand-Slug", "<x-brand-slug>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Brand-Slug"] = '<x-brand-slug>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "5c1e9a37-2f80-4d4a-9a0e-71b3c2f4d810",
"url": "https://api.hi-doctor.ai/v1/questionnaire/consultations/b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4/images/5c1e9a37-2f80-4d4a-9a0e-71b3c2f4d810/content/",
"filename": "cheek-left.jpg",
"uploaded_at": "2026-08-26T09:14:22.481073Z",
"consultation_id": "b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4"
},
{
"id": "a0d47b12-6c93-4e58-bb21-4f8e05c7a934",
"url": "https://api.hi-doctor.ai/v1/questionnaire/consultations/b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4/images/a0d47b12-6c93-4e58-bb21-4f8e05c7a934/content/",
"filename": "cheek-right.jpg",
"uploaded_at": "2026-08-26T09:14:58.902114Z",
"consultation_id": "b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4"
}
]{
"detail": "Given token not valid for any token type",
"code": "token_not_valid",
"messages": [
{
"token_class": "AccessToken",
"token_type": "access",
"message": "Token is invalid"
}
]
}{
"detail": "No Consultation matches the given query."
}Consultations
List consultation photos
Every photograph attached to one of your consultations, oldest first.
The dermatology pathways ask for photographs of the affected skin, and this is where they end up once the consultation exists. Each entry carries a url pointing at the content route below rather than a storage link, so the bytes stay behind the same access check as the consultation itself.
GET
/
v1
/
questionnaire
/
consultations
/
{id}
/
images
/
List consultation photos
curl --request GET \
--url https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/ \
--header 'Authorization: Bearer <token>' \
--header 'X-Brand-Slug: <x-brand-slug>'import requests
url = "https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/"
headers = {
"X-Brand-Slug": "<x-brand-slug>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Brand-Slug': '<x-brand-slug>', Authorization: 'Bearer <token>'}
};
fetch('https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/', 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.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Brand-Slug: <x-brand-slug>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Brand-Slug", "<x-brand-slug>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/")
.header("X-Brand-Slug", "<x-brand-slug>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hi-doctor.ai/v1/questionnaire/consultations/{id}/images/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Brand-Slug"] = '<x-brand-slug>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "5c1e9a37-2f80-4d4a-9a0e-71b3c2f4d810",
"url": "https://api.hi-doctor.ai/v1/questionnaire/consultations/b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4/images/5c1e9a37-2f80-4d4a-9a0e-71b3c2f4d810/content/",
"filename": "cheek-left.jpg",
"uploaded_at": "2026-08-26T09:14:22.481073Z",
"consultation_id": "b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4"
},
{
"id": "a0d47b12-6c93-4e58-bb21-4f8e05c7a934",
"url": "https://api.hi-doctor.ai/v1/questionnaire/consultations/b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4/images/a0d47b12-6c93-4e58-bb21-4f8e05c7a934/content/",
"filename": "cheek-right.jpg",
"uploaded_at": "2026-08-26T09:14:58.902114Z",
"consultation_id": "b91d7c04-3f6a-4d21-8c55-0e7a91d2b3f4"
}
]{
"detail": "Given token not valid for any token type",
"code": "token_not_valid",
"messages": [
{
"token_class": "AccessToken",
"token_type": "access",
"message": "Token is invalid"
}
]
}{
"detail": "No Consultation matches the given query."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Identifies the Hi-Doctor brand. Required; the request is rejected without it.
Available options:
hi-doctor Path Parameters
Response
No response body