UpsertRelationships
curl --request POST \
--url https://developer.synq.io/api/entities/custom/v1/relationships \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
}
}
]
}
'import requests
url = "https://developer.synq.io/api/entities/custom/v1/relationships"
payload = { "relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<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({
relationships: [
{
upstream: {
airflowDag: {integrationId: '<string>', dagId: '<string>'},
entityId: '<string>'
},
downstream: {
airflowDag: {integrationId: '<string>', dagId: '<string>'},
entityId: '<string>'
}
}
]
})
};
fetch('https://developer.synq.io/api/entities/custom/v1/relationships', 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",
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([
'relationships' => [
[
'upstream' => [
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
],
'entityId' => '<string>'
],
'downstream' => [
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
],
'entityId' => '<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/entities/custom/v1/relationships"
payload := strings.NewReader("{\n \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/entities/custom/v1/relationships")
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 \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"relationship": {
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
}
},
"outcome": "RELATIONSHIP_WRITE_OUTCOME_UNSPECIFIED"
}
]
}synq.entities.custom.v1.RelationshipsService
UpsertRelationships
Create or update relationships between entities. If the relationship already exists, it will be updated, otherwise it will be created.
The response reports what each requested relationship did to the stored graph, and under which pair of entities it was stored. Read it: a relationship whose endpoints resolve to a pair another relationship in the same batch also resolves to is one edge, and only the last write to it survives.
POST
/
api
/
entities
/
custom
/
v1
/
relationships
UpsertRelationships
curl --request POST \
--url https://developer.synq.io/api/entities/custom/v1/relationships \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
}
}
]
}
'import requests
url = "https://developer.synq.io/api/entities/custom/v1/relationships"
payload = { "relationships": [
{
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<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({
relationships: [
{
upstream: {
airflowDag: {integrationId: '<string>', dagId: '<string>'},
entityId: '<string>'
},
downstream: {
airflowDag: {integrationId: '<string>', dagId: '<string>'},
entityId: '<string>'
}
}
]
})
};
fetch('https://developer.synq.io/api/entities/custom/v1/relationships', 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",
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([
'relationships' => [
[
'upstream' => [
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
],
'entityId' => '<string>'
],
'downstream' => [
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
],
'entityId' => '<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/entities/custom/v1/relationships"
payload := strings.NewReader("{\n \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/entities/custom/v1/relationships")
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 \"relationships\": [\n {\n \"upstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n },\n \"downstream\": {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n },\n \"entityId\": \"<string>\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"relationship": {
"upstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
},
"downstream": {
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
},
"entityId": "<string>"
}
},
"outcome": "RELATIONSHIP_WRITE_OUTCOME_UNSPECIFIED"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Show child attributes
Show child attributes
Response
200 - application/json
Success
One result per relationship in the request, in request order.
Show child attributes
Show child attributes