curl --request POST \
--url https://developer.synq.io/api/entities/custom/v1/relationships/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
],
"pagination": {
"cursor": "<string>",
"pageSize": 1
}
}
'import requests
url = "https://developer.synq.io/api/entities/custom/v1/relationships/list"
payload = {
"ids": [{ "airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
} }],
"pagination": {
"cursor": "<string>",
"pageSize": 1
}
}
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({
ids: [{airflowDag: {integrationId: '<string>', dagId: '<string>'}}],
pagination: {cursor: '<string>', pageSize: 1}
})
};
fetch('https://developer.synq.io/api/entities/custom/v1/relationships/list', 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/entities/custom/v1/relationships/list",
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([
'ids' => [
[
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
]
]
],
'pagination' => [
'cursor' => '<string>',
'pageSize' => 1
]
]),
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/entities/custom/v1/relationships/list"
payload := strings.NewReader("{\n \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\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/entities/custom/v1/relationships/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/entities/custom/v1/relationships/list")
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 \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\n }\n}"
response = http.request(request)
puts response.read_body{
"relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
}
],
"pageInfo": {
"totalCount": 123,
"count": 123,
"lastId": "<string>"
}
}ListRelationships
List relationships touching the given entities, or every relationship in the workspace when ids is left empty.
curl --request POST \
--url https://developer.synq.io/api/entities/custom/v1/relationships/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
],
"pagination": {
"cursor": "<string>",
"pageSize": 1
}
}
'import requests
url = "https://developer.synq.io/api/entities/custom/v1/relationships/list"
payload = {
"ids": [{ "airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
} }],
"pagination": {
"cursor": "<string>",
"pageSize": 1
}
}
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({
ids: [{airflowDag: {integrationId: '<string>', dagId: '<string>'}}],
pagination: {cursor: '<string>', pageSize: 1}
})
};
fetch('https://developer.synq.io/api/entities/custom/v1/relationships/list', 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/entities/custom/v1/relationships/list",
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([
'ids' => [
[
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
]
]
],
'pagination' => [
'cursor' => '<string>',
'pageSize' => 1
]
]),
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/entities/custom/v1/relationships/list"
payload := strings.NewReader("{\n \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\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/entities/custom/v1/relationships/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/entities/custom/v1/relationships/list")
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 \"ids\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ],\n \"pagination\": {\n \"cursor\": \"<string>\",\n \"pageSize\": 1\n }\n}"
response = http.request(request)
puts response.read_body{
"relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
}
],
"pageInfo": {
"totalCount": 123,
"count": 123,
"lastId": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Return relationships for the given entity_id. Either upstream or downstream. Leave empty to return every relationship in the workspace: an edge hangs off endpoints a caller may not know up front, so enumerating them by id requires already knowing every entity an edge can touch.
Identifier is a unique reference to an entity in Coalesce Quality system. Entity identifiers are designed to closely mimic identifiers used by data platforms and tools. To construct an identifier, you need to know the kind of the entity and the ids that you would normally use to identify it in the data platform or tool. For example, to identify a table in BigQuery, you would need to know the project, dataset, and table names.
- airflow_dag
- airflow_task
- athena_table
- bigquery_table
- clickhouse_table
- custom
- databricks_table
- dataproduct
- dbt_cloud_node
- dbt_core_node
- fabric_table
- monitor
- mssql_table
- mysql_table
- oracle_table
- postgres_table
- redshift_table
- saved_view
- snowflake_table
- sql_mesh_audit
- sql_mesh_model
- synq_path
- trino_table
Show child attributes
Show child attributes
Pagination. Omitting this, or sending a zero page_size, returns every matching relationship in one response — there is no server-side default page size. Set page_size to bound the response; pass page_info.last_id from the previous response as the cursor to fetch the next page.
Show child attributes
Show child attributes
Response
Success