Share an image
curl --request POST \
--url https://api.halfpagetechnologies.com/backend/api/v1/shares \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image_id": "aB3dE5fG"
}
'import requests
url = "https://api.halfpagetechnologies.com/backend/api/v1/shares"
payload = { "image_id": "aB3dE5fG" }
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({image_id: 'aB3dE5fG'})
};
fetch('https://api.halfpagetechnologies.com/backend/api/v1/shares', 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.halfpagetechnologies.com/backend/api/v1/shares",
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([
'image_id' => 'aB3dE5fG'
]),
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.halfpagetechnologies.com/backend/api/v1/shares"
payload := strings.NewReader("{\n \"image_id\": \"aB3dE5fG\"\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.halfpagetechnologies.com/backend/api/v1/shares")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image_id\": \"aB3dE5fG\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halfpagetechnologies.com/backend/api/v1/shares")
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 \"image_id\": \"aB3dE5fG\"\n}"
response = http.request(request)
puts response.read_body{
"access": "anyone_with_link",
"created_at": "2026-07-01T12:05:00Z",
"id": "5b1f0c4e-2d3a-4e5f-9a8b-7c6d5e4f3a2b",
"image_id": "aB3dE5fG",
"last_viewed_at": "2026-07-02T09:30:00Z",
"role": "viewer",
"url": "https://www.halfpagetechnologies.com/aB3dE5fG?share=uAgn3l8EOJxQXvpIF3G-X3K7c3ziqIAP",
"view_count": 3
}{
"detail": "Requires authentication"
}{
"detail": "Image with id 3fa85f64-5717-4562-b3fc-2c963f66afa6 not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}shares
Share an image
Get a view-only public link to an image.
Anyone with the returned url can open the image in a browser, without an
account, with its latest cell outlines and counts: what your lab sees now,
so later results show up on the same link. Nothing on the page edits the
image, and downloading from it asks the visitor to sign in.
Idempotent: an image has at most one live link, so sharing it again returns
the same share. After DELETE /shares/{share_id}, sharing again makes a new
link. An image outside your organization returns 404.
POST
/
api
/
v1
/
shares
Share an image
curl --request POST \
--url https://api.halfpagetechnologies.com/backend/api/v1/shares \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image_id": "aB3dE5fG"
}
'import requests
url = "https://api.halfpagetechnologies.com/backend/api/v1/shares"
payload = { "image_id": "aB3dE5fG" }
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({image_id: 'aB3dE5fG'})
};
fetch('https://api.halfpagetechnologies.com/backend/api/v1/shares', 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.halfpagetechnologies.com/backend/api/v1/shares",
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([
'image_id' => 'aB3dE5fG'
]),
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.halfpagetechnologies.com/backend/api/v1/shares"
payload := strings.NewReader("{\n \"image_id\": \"aB3dE5fG\"\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.halfpagetechnologies.com/backend/api/v1/shares")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image_id\": \"aB3dE5fG\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.halfpagetechnologies.com/backend/api/v1/shares")
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 \"image_id\": \"aB3dE5fG\"\n}"
response = http.request(request)
puts response.read_body{
"access": "anyone_with_link",
"created_at": "2026-07-01T12:05:00Z",
"id": "5b1f0c4e-2d3a-4e5f-9a8b-7c6d5e4f3a2b",
"image_id": "aB3dE5fG",
"last_viewed_at": "2026-07-02T09:30:00Z",
"role": "viewer",
"url": "https://www.halfpagetechnologies.com/aB3dE5fG?share=uAgn3l8EOJxQXvpIF3G-X3K7c3ziqIAP",
"view_count": 3
}{
"detail": "Requires authentication"
}{
"detail": "Image with id 3fa85f64-5717-4562-b3fc-2c963f66afa6 not found"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Body
application/json
Response
Successful Response
A share of one image. access says who it reaches and role what they
can do; url is the link to send.