curl --request POST \
--url https://developer.synq.io/api/overlays/v1/by-id \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entityIds": [
"<string>"
]
}
'import requests
url = "https://developer.synq.io/api/overlays/v1/by-id"
payload = { "entityIds": ["<string>"] }
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({entityIds: ['<string>']})
};
fetch('https://developer.synq.io/api/overlays/v1/by-id', 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://developer.synq.io/api/overlays/v1/by-id",
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([
'entityIds' => [
'<string>'
]
]),
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://developer.synq.io/api/overlays/v1/by-id"
payload := strings.NewReader("{\n \"entityIds\": [\n \"<string>\"\n ]\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://developer.synq.io/api/overlays/v1/by-id")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entityIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/overlays/v1/by-id")
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 \"entityIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"entities": [
{
"entityId": "<string>",
"ownerEntityIds": [
"<string>"
],
"dataproductEntityIds": [
"<string>"
]
}
]
}BatchGetEntityOverlays
For each entity, list every overlay that claims it.
The response has one entry per requested id, in the order you asked, so you can match results positionally and never have to tell “absent” from “empty”. An entity that belongs to no overlay comes back with empty lists.
Freshness. Which overlays exist and what they are attached to is up to date the moment you change it — create an overlay, delete one, point an ownership at a different data product, and the next call reflects it. What each overlay contains is recomputed periodically, so an asset that newly satisfies an existing rule — a table appearing in a folder a rule watches — shows up shortly afterwards rather than instantly.
Returns PERMISSION_DENIED if your credential can read neither data products nor owners. If it can read one but not the other, the call succeeds and the list you may not read comes back empty rather than failing.
curl --request POST \
--url https://developer.synq.io/api/overlays/v1/by-id \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"entityIds": [
"<string>"
]
}
'import requests
url = "https://developer.synq.io/api/overlays/v1/by-id"
payload = { "entityIds": ["<string>"] }
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({entityIds: ['<string>']})
};
fetch('https://developer.synq.io/api/overlays/v1/by-id', 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://developer.synq.io/api/overlays/v1/by-id",
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([
'entityIds' => [
'<string>'
]
]),
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://developer.synq.io/api/overlays/v1/by-id"
payload := strings.NewReader("{\n \"entityIds\": [\n \"<string>\"\n ]\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://developer.synq.io/api/overlays/v1/by-id")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entityIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/overlays/v1/by-id")
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 \"entityIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"entities": [
{
"entityId": "<string>",
"ownerEntityIds": [
"<string>"
],
"dataproductEntityIds": [
"<string>"
]
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The entities to ask about: 1 to 1000 ids, no duplicates.
An entity_id is opaque. Take one from any listing or search response, or
from synq.entities.resolve.v1.IdentifierResolveService if what you hold is
a warehouse table name or a model name, and pass it back unchanged. Do not
build one yourself or parse one apart — the format carries no meaning you can
rely on and is not part of this contract.
1 - 1000 elements1 - 2048Response
Success
One entry per requested entity, in the order they were requested.
Show child attributes
Show child attributes