curl --request POST \
--url https://developer.synq.io/api/saved-views/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"selection": {
"entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": {
"parts": [
{
"identifierList": {
"identifiers": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
]
}
}
]
}
}
},
"config": {
"cardFields": [
"<string>"
]
},
"grants": {
"grants": [
{
"granteeIdentity": "<string>"
}
]
},
"etag": "<string>"
}
'import requests
url = "https://developer.synq.io/api/saved-views/v1"
payload = {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"selection": { "entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": { "parts": [{ "identifierList": { "identifiers": [{ "airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
} }] } }] }
} },
"config": { "cardFields": ["<string>"] },
"grants": { "grants": [{ "granteeIdentity": "<string>" }] },
"etag": "<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({
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
title: '<string>',
description: '<string>',
selection: {
entityQuery: {
resolverQl: '<string>',
renderedResolverQl: '<string>',
publicQuery: {
parts: [
{
identifierList: {identifiers: [{airflowDag: {integrationId: '<string>', dagId: '<string>'}}]}
}
]
}
}
},
config: {cardFields: ['<string>']},
grants: {grants: [{granteeIdentity: '<string>'}]},
etag: '<string>'
})
};
fetch('https://developer.synq.io/api/saved-views/v1', 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/saved-views/v1",
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([
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'title' => '<string>',
'description' => '<string>',
'selection' => [
'entityQuery' => [
'resolverQl' => '<string>',
'renderedResolverQl' => '<string>',
'publicQuery' => [
'parts' => [
[
'identifierList' => [
'identifiers' => [
[
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
]
]
]
]
]
]
]
]
],
'config' => [
'cardFields' => [
'<string>'
]
],
'grants' => [
'grants' => [
[
'granteeIdentity' => '<string>'
]
]
],
'etag' => '<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/saved-views/v1"
payload := strings.NewReader("{\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\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/saved-views/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/saved-views/v1")
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 \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"view": {
"id": "<string>",
"title": "<string>",
"description": "<string>",
"selection": {
"entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": {
"parts": [
{
"identifierList": {
"identifiers": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
]
}
}
]
}
}
},
"config": {
"cardFields": [
"<string>"
]
},
"grants": [
{
"granteeIdentity": "<string>"
}
],
"owner": {
"name": "<string>",
"email": {
"userEmail": "jsmith@example.com"
}
},
"updatedBy": {
"name": "<string>",
"email": {
"userEmail": "jsmith@example.com"
}
},
"permissions": {
"canEdit": true,
"canDelete": true,
"canManageGrants": true
},
"pinned": true,
"etag": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
}Upsert
Create or update a saved view.
The view id is supplied by the caller (a UUID), which makes this operation
idempotent — repeating the same request converges to the same view rather
than creating a duplicate. Mutable fields are optional: a field that is set
is written, a field that is omitted is left unchanged. To guard against
overwriting a concurrent edit, pass the etag you last read.
curl --request POST \
--url https://developer.synq.io/api/saved-views/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"selection": {
"entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": {
"parts": [
{
"identifierList": {
"identifiers": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
]
}
}
]
}
}
},
"config": {
"cardFields": [
"<string>"
]
},
"grants": {
"grants": [
{
"granteeIdentity": "<string>"
}
]
},
"etag": "<string>"
}
'import requests
url = "https://developer.synq.io/api/saved-views/v1"
payload = {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"selection": { "entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": { "parts": [{ "identifierList": { "identifiers": [{ "airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
} }] } }] }
} },
"config": { "cardFields": ["<string>"] },
"grants": { "grants": [{ "granteeIdentity": "<string>" }] },
"etag": "<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({
id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
title: '<string>',
description: '<string>',
selection: {
entityQuery: {
resolverQl: '<string>',
renderedResolverQl: '<string>',
publicQuery: {
parts: [
{
identifierList: {identifiers: [{airflowDag: {integrationId: '<string>', dagId: '<string>'}}]}
}
]
}
}
},
config: {cardFields: ['<string>']},
grants: {grants: [{granteeIdentity: '<string>'}]},
etag: '<string>'
})
};
fetch('https://developer.synq.io/api/saved-views/v1', 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/saved-views/v1",
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([
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'title' => '<string>',
'description' => '<string>',
'selection' => [
'entityQuery' => [
'resolverQl' => '<string>',
'renderedResolverQl' => '<string>',
'publicQuery' => [
'parts' => [
[
'identifierList' => [
'identifiers' => [
[
'airflowDag' => [
'integrationId' => '<string>',
'dagId' => '<string>'
]
]
]
]
]
]
]
]
],
'config' => [
'cardFields' => [
'<string>'
]
],
'grants' => [
'grants' => [
[
'granteeIdentity' => '<string>'
]
]
],
'etag' => '<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/saved-views/v1"
payload := strings.NewReader("{\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\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/saved-views/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/saved-views/v1")
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 \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"selection\": {\n \"entityQuery\": {\n \"resolverQl\": \"<string>\",\n \"renderedResolverQl\": \"<string>\",\n \"publicQuery\": {\n \"parts\": [\n {\n \"identifierList\": {\n \"identifiers\": [\n {\n \"airflowDag\": {\n \"integrationId\": \"<string>\",\n \"dagId\": \"<string>\"\n }\n }\n ]\n }\n }\n ]\n }\n }\n },\n \"config\": {\n \"cardFields\": [\n \"<string>\"\n ]\n },\n \"grants\": {\n \"grants\": [\n {\n \"granteeIdentity\": \"<string>\"\n }\n ]\n },\n \"etag\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"view": {
"id": "<string>",
"title": "<string>",
"description": "<string>",
"selection": {
"entityQuery": {
"resolverQl": "<string>",
"renderedResolverQl": "<string>",
"publicQuery": {
"parts": [
{
"identifierList": {
"identifiers": [
{
"airflowDag": {
"integrationId": "<string>",
"dagId": "<string>"
}
}
]
}
}
]
}
}
},
"config": {
"cardFields": [
"<string>"
]
},
"grants": [
{
"granteeIdentity": "<string>"
}
],
"owner": {
"name": "<string>",
"email": {
"userEmail": "jsmith@example.com"
}
},
"updatedBy": {
"name": "<string>",
"email": {
"userEmail": "jsmith@example.com"
}
},
"permissions": {
"canEdit": true,
"canDelete": true,
"canManageGrants": true
},
"pinned": true,
"etag": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Client-supplied UUID identifying the view. The same id updates the same view; a new id creates a new view.
Title. Required when creating; omit to keep the existing title on update.
1 - 200Description. Omit to keep the existing description.
10000Surface the view applies to. Omit to keep the existing context.
SAVED_VIEW_CONTEXT_UNSPECIFIED, SAVED_VIEW_CONTEXT_CHECKS, SAVED_VIEW_CONTEXT_ISSUES The selection. Required when creating; omit to keep the existing selection.
Show child attributes
Show child attributes
Display configuration. Omit to keep the existing config.
Show child attributes
Show child attributes
Sharing state. Omit to keep the existing visibility.
SAVED_VIEW_VISIBILITY_UNSPECIFIED, SAVED_VIEW_VISIBILITY_SHARED, SAVED_VIEW_VISIBILITY_GRANTED Access grants. When present, replaces the entire grant set (an empty list clears all grants); when omitted, grants are left unchanged. Changing grants requires manage/admin permission on the view.
Show child attributes
Show child attributes
Optional optimistic-concurrency guard. When set, the update fails with a conflict if the view was modified since this etag was read.
Response
Success
The stored view after the upsert.
Show child attributes
Show child attributes