Check if the Server Contains a List of Objects
curl --request POST \
--url https://app.speckle.systems/api/diff/{projectId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objects": "[\"object-id-1\", \"object-id-2\"]"
}
'import requests
url = "https://app.speckle.systems/api/diff/{projectId}"
payload = { "objects": "[\"object-id-1\", \"object-id-2\"]" }
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({objects: '["object-id-1", "object-id-2"]'})
};
fetch('https://app.speckle.systems/api/diff/{projectId}', 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://app.speckle.systems/api/diff/{projectId}",
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([
'objects' => '["object-id-1", "object-id-2"]'
]),
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://app.speckle.systems/api/diff/{projectId}"
payload := strings.NewReader("{\n \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\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://app.speckle.systems/api/diff/{projectId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.speckle.systems/api/diff/{projectId}")
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 \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\n}"
response = http.request(request)
puts response.read_body{
"object-id-1": true,
"object-id-2": false
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}Objects
Check if the Server Contains a List of Objects
deprecated
This method is useful for optimizing uploads, so that objects that are already in the project are not uploaded for every commit. Returns a dictionary mapping object IDs to boolean values indicating whether each object exists on the server. On Speckle Cloud and Speckle Enterprise Server 2026.9 and later, this endpoint no longer checks existence: it reports every object as absent, so clients upload their full graph. Speckle Cloud removes it on 26 November 2026 (announced with a Sunset header). On the open-source Speckle Server it is current.
POST
/
api
/
diff
/
{projectId}
Check if the Server Contains a List of Objects
curl --request POST \
--url https://app.speckle.systems/api/diff/{projectId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objects": "[\"object-id-1\", \"object-id-2\"]"
}
'import requests
url = "https://app.speckle.systems/api/diff/{projectId}"
payload = { "objects": "[\"object-id-1\", \"object-id-2\"]" }
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({objects: '["object-id-1", "object-id-2"]'})
};
fetch('https://app.speckle.systems/api/diff/{projectId}', 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://app.speckle.systems/api/diff/{projectId}",
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([
'objects' => '["object-id-1", "object-id-2"]'
]),
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://app.speckle.systems/api/diff/{projectId}"
payload := strings.NewReader("{\n \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\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://app.speckle.systems/api/diff/{projectId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.speckle.systems/api/diff/{projectId}")
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 \"objects\": \"[\\\"object-id-1\\\", \\\"object-id-2\\\"]\"\n}"
response = http.request(request)
puts response.read_body{
"object-id-1": true,
"object-id-2": false
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}