curl --request POST \
--url https://developer.synq.io/api/agent/recon/v1/yaml/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": [
"<string>"
],
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": true,
"bisection": {
"enabled": true,
"factor": 513,
"threshold": 2,
"timeColumn": "<string>"
},
"reporting": {
"sampleLimit": 2,
"consentAcknowledged": true
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": []
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
},
"groupColumns": [
"<string>"
]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>"
},
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"cutoff": {
"source": {
"column": "<string>",
"query": "<string>"
},
"target": {
"column": "<string>",
"query": "<string>"
},
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"timeout": "<string>",
"rowCount": {
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
}
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"variables": {},
"strictTimeReferences": true,
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
}
'import requests
url = "https://developer.synq.io/api/agent/recon/v1/yaml/validate"
payload = { "suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": ["<string>"],
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": True,
"bisection": {
"enabled": True,
"factor": 513,
"threshold": 2,
"timeColumn": "<string>"
},
"reporting": {
"sampleLimit": 2,
"consentAcknowledged": True
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": []
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
},
"groupColumns": ["<string>"]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>"
},
"setup": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardown": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardownOnFailure": True,
"ignoreSetupErrors": True,
"cutoff": {
"source": {
"column": "<string>",
"query": "<string>"
},
"target": {
"column": "<string>",
"query": "<string>"
},
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": ["<string>"]
}
],
"timeout": "<string>",
"rowCount": { "thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
} },
"comparison": {
"numericScale": { "exact": "true" },
"columns": [
{
"column": "<string>",
"numericScale": { "exact": "true" }
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardown": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardownOnFailure": True,
"ignoreSetupErrors": True,
"variables": {},
"strictTimeReferences": True,
"annotations": [
{
"name": "<string>",
"values": ["<string>"]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": { "exact": "true" },
"columns": [
{
"column": "<string>",
"numericScale": { "exact": "true" }
}
]
}
} }
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({
suite: {
name: '<string>',
title: '<string>',
description: '<string>',
reconciliations: [
{
name: '<string>',
source: {connection: '<string>', query: '<string>', asOf: '<string>'},
target: {connection: '<string>', query: '<string>', asOf: '<string>'},
title: '<string>',
description: '<string>',
keyColumn: '<string>',
keyColumns: ['<string>'],
columnMapping: [{source: '<string>', target: '<string>'}],
caseInsensitive: true,
bisection: {enabled: true, factor: 513, threshold: 2, timeColumn: '<string>'},
reporting: {sampleLimit: 2, consentAcknowledged: true},
aggregate: {
measures: [{column: '<string>', functions: []}],
thresholds: {
absolute: 1,
percentage: 1,
perColumn: [{column: '<string>', thresholds: '<unknown>'}],
perMeasure: [{column: '<string>', thresholds: '<unknown>'}]
},
groupColumns: ['<string>']
},
errorHandling: {
queryTimeout: '<string>',
maxRetries: 5,
retryInitialDelay: '<string>',
retryBackoffFactor: 2
},
window: {lookback: '<string>', column: '<string>'},
setup: [{connection: '<string>', queries: ['<string>']}],
teardown: [{connection: '<string>', queries: ['<string>']}],
teardownOnFailure: true,
ignoreSetupErrors: true,
cutoff: {
source: {column: '<string>', query: '<string>'},
target: {column: '<string>', query: '<string>'},
offset: '<string>',
applySource: {column: '<string>', operator: '<string>'},
applyTarget: {column: '<string>', operator: '<string>'}
},
annotations: [{name: '<string>', values: ['<string>']}],
timeout: '<string>',
rowCount: {
thresholds: {
absolute: 1,
percentage: 1,
perColumn: [{column: '<string>', thresholds: '<unknown>'}],
perMeasure: [{column: '<string>', thresholds: '<unknown>'}]
}
},
comparison: {
numericScale: {exact: 'true'},
columns: [{column: '<string>', numericScale: {exact: 'true'}}]
}
}
],
setup: [{connection: '<string>', queries: ['<string>']}],
teardown: [{connection: '<string>', queries: ['<string>']}],
teardownOnFailure: true,
ignoreSetupErrors: true,
variables: {},
strictTimeReferences: true,
annotations: [{name: '<string>', values: ['<string>']}],
execution: {timeout: '<string>', concurrency: 32, reconciliationTimeout: '<string>'},
comparison: {
numericScale: {exact: 'true'},
columns: [{column: '<string>', numericScale: {exact: 'true'}}]
}
}
})
};
fetch('https://developer.synq.io/api/agent/recon/v1/yaml/validate', 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/agent/recon/v1/yaml/validate",
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([
'suite' => [
'name' => '<string>',
'title' => '<string>',
'description' => '<string>',
'reconciliations' => [
[
'name' => '<string>',
'source' => [
'connection' => '<string>',
'query' => '<string>',
'asOf' => '<string>'
],
'target' => [
'connection' => '<string>',
'query' => '<string>',
'asOf' => '<string>'
],
'title' => '<string>',
'description' => '<string>',
'keyColumn' => '<string>',
'keyColumns' => [
'<string>'
],
'columnMapping' => [
[
'source' => '<string>',
'target' => '<string>'
]
],
'caseInsensitive' => true,
'bisection' => [
'enabled' => true,
'factor' => 513,
'threshold' => 2,
'timeColumn' => '<string>'
],
'reporting' => [
'sampleLimit' => 2,
'consentAcknowledged' => true
],
'aggregate' => [
'measures' => [
[
'column' => '<string>',
'functions' => [
]
]
],
'thresholds' => [
'absolute' => 1,
'percentage' => 1,
'perColumn' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
],
'perMeasure' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
]
],
'groupColumns' => [
'<string>'
]
],
'errorHandling' => [
'queryTimeout' => '<string>',
'maxRetries' => 5,
'retryInitialDelay' => '<string>',
'retryBackoffFactor' => 2
],
'window' => [
'lookback' => '<string>',
'column' => '<string>'
],
'setup' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardown' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardownOnFailure' => true,
'ignoreSetupErrors' => true,
'cutoff' => [
'source' => [
'column' => '<string>',
'query' => '<string>'
],
'target' => [
'column' => '<string>',
'query' => '<string>'
],
'offset' => '<string>',
'applySource' => [
'column' => '<string>',
'operator' => '<string>'
],
'applyTarget' => [
'column' => '<string>',
'operator' => '<string>'
]
],
'annotations' => [
[
'name' => '<string>',
'values' => [
'<string>'
]
]
],
'timeout' => '<string>',
'rowCount' => [
'thresholds' => [
'absolute' => 1,
'percentage' => 1,
'perColumn' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
],
'perMeasure' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
]
]
],
'comparison' => [
'numericScale' => [
'exact' => 'true'
],
'columns' => [
[
'column' => '<string>',
'numericScale' => [
'exact' => 'true'
]
]
]
]
]
],
'setup' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardown' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardownOnFailure' => true,
'ignoreSetupErrors' => true,
'variables' => [
],
'strictTimeReferences' => true,
'annotations' => [
[
'name' => '<string>',
'values' => [
'<string>'
]
]
],
'execution' => [
'timeout' => '<string>',
'concurrency' => 32,
'reconciliationTimeout' => '<string>'
],
'comparison' => [
'numericScale' => [
'exact' => 'true'
],
'columns' => [
[
'column' => '<string>',
'numericScale' => [
'exact' => 'true'
]
]
]
]
]
]),
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/agent/recon/v1/yaml/validate"
payload := strings.NewReader("{\n \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\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/agent/recon/v1/yaml/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/agent/recon/v1/yaml/validate")
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 \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"issues": [
{
"severity": "SUITE_VALIDATION_SEVERITY_UNSPECIFIED",
"fieldPath": "<string>",
"message": "<string>",
"position": {
"line": 123,
"column": 123
}
}
],
"suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": [
"<string>"
],
"mode": "RECONCILIATION_MODE_UNSPECIFIED",
"hashAlgorithm": "HASH_ALGORITHM_UNSPECIFIED",
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": true,
"bisection": {
"enabled": true,
"factor": 513,
"threshold": 2,
"strategy": "SEGMENTATION_STRATEGY_UNSPECIFIED",
"timeColumn": "<string>",
"timeGranularity": "TIME_GRANULARITY_UNSPECIFIED"
},
"reporting": {
"level": "MISMATCH_DETAIL_LEVEL_UNSPECIFIED",
"sampleLimit": 2,
"consentAcknowledged": true
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": [
"AGGREGATE_FUNCTION_UNSPECIFIED"
]
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"percentageBasis": "PERCENTAGE_BASIS_UNSPECIFIED",
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>",
"function": "AGGREGATE_FUNCTION_UNSPECIFIED"
}
]
},
"groupColumns": [
"<string>"
]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>",
"strategy": "WINDOW_STRATEGY_UNSPECIFIED"
},
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"cutoff": {
"source": {
"column": "<string>",
"aggregate": "CUTOFF_AGGREGATE_FUNCTION_UNSPECIFIED",
"query": "<string>"
},
"target": {
"column": "<string>",
"aggregate": "CUTOFF_AGGREGATE_FUNCTION_UNSPECIFIED",
"query": "<string>"
},
"combine": "CUTOFF_COMBINE_STRATEGY_UNSPECIFIED",
"truncate": "CUTOFF_TRUNCATE_UNIT_UNSPECIFIED",
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"timeout": "<string>",
"rowCount": {
"thresholds": {
"absolute": 1,
"percentage": 1,
"percentageBasis": "PERCENTAGE_BASIS_UNSPECIFIED",
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>",
"function": "AGGREGATE_FUNCTION_UNSPECIFIED"
}
]
}
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"variables": {},
"strictTimeReferences": true,
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
}ValidateSuite
ValidateSuite checks a suite and gives all the problems that it finds. Each problem has the path of its field. ValidateSuite does not save the suite, so an editor can call it after each change.
ValidateSuite does the same checks as synq-recon check-config without
--db. It also does the checks that apply only to suites that run in
Coalesce Quality.
ValidateSuite does not connect to a warehouse. Thus it does not find a query that refers to a table that does not exist.
ValidateSuite does not compare the connection names with the integrations of the workspace. A suite gets its integrations when it runs or when you promote it.
curl --request POST \
--url https://developer.synq.io/api/agent/recon/v1/yaml/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": [
"<string>"
],
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": true,
"bisection": {
"enabled": true,
"factor": 513,
"threshold": 2,
"timeColumn": "<string>"
},
"reporting": {
"sampleLimit": 2,
"consentAcknowledged": true
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": []
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
},
"groupColumns": [
"<string>"
]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>"
},
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"cutoff": {
"source": {
"column": "<string>",
"query": "<string>"
},
"target": {
"column": "<string>",
"query": "<string>"
},
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"timeout": "<string>",
"rowCount": {
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
}
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"variables": {},
"strictTimeReferences": true,
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
}
'import requests
url = "https://developer.synq.io/api/agent/recon/v1/yaml/validate"
payload = { "suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": ["<string>"],
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": True,
"bisection": {
"enabled": True,
"factor": 513,
"threshold": 2,
"timeColumn": "<string>"
},
"reporting": {
"sampleLimit": 2,
"consentAcknowledged": True
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": []
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
},
"groupColumns": ["<string>"]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>"
},
"setup": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardown": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardownOnFailure": True,
"ignoreSetupErrors": True,
"cutoff": {
"source": {
"column": "<string>",
"query": "<string>"
},
"target": {
"column": "<string>",
"query": "<string>"
},
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": ["<string>"]
}
],
"timeout": "<string>",
"rowCount": { "thresholds": {
"absolute": 1,
"percentage": 1,
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
]
} },
"comparison": {
"numericScale": { "exact": "true" },
"columns": [
{
"column": "<string>",
"numericScale": { "exact": "true" }
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardown": [
{
"connection": "<string>",
"queries": ["<string>"]
}
],
"teardownOnFailure": True,
"ignoreSetupErrors": True,
"variables": {},
"strictTimeReferences": True,
"annotations": [
{
"name": "<string>",
"values": ["<string>"]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": { "exact": "true" },
"columns": [
{
"column": "<string>",
"numericScale": { "exact": "true" }
}
]
}
} }
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({
suite: {
name: '<string>',
title: '<string>',
description: '<string>',
reconciliations: [
{
name: '<string>',
source: {connection: '<string>', query: '<string>', asOf: '<string>'},
target: {connection: '<string>', query: '<string>', asOf: '<string>'},
title: '<string>',
description: '<string>',
keyColumn: '<string>',
keyColumns: ['<string>'],
columnMapping: [{source: '<string>', target: '<string>'}],
caseInsensitive: true,
bisection: {enabled: true, factor: 513, threshold: 2, timeColumn: '<string>'},
reporting: {sampleLimit: 2, consentAcknowledged: true},
aggregate: {
measures: [{column: '<string>', functions: []}],
thresholds: {
absolute: 1,
percentage: 1,
perColumn: [{column: '<string>', thresholds: '<unknown>'}],
perMeasure: [{column: '<string>', thresholds: '<unknown>'}]
},
groupColumns: ['<string>']
},
errorHandling: {
queryTimeout: '<string>',
maxRetries: 5,
retryInitialDelay: '<string>',
retryBackoffFactor: 2
},
window: {lookback: '<string>', column: '<string>'},
setup: [{connection: '<string>', queries: ['<string>']}],
teardown: [{connection: '<string>', queries: ['<string>']}],
teardownOnFailure: true,
ignoreSetupErrors: true,
cutoff: {
source: {column: '<string>', query: '<string>'},
target: {column: '<string>', query: '<string>'},
offset: '<string>',
applySource: {column: '<string>', operator: '<string>'},
applyTarget: {column: '<string>', operator: '<string>'}
},
annotations: [{name: '<string>', values: ['<string>']}],
timeout: '<string>',
rowCount: {
thresholds: {
absolute: 1,
percentage: 1,
perColumn: [{column: '<string>', thresholds: '<unknown>'}],
perMeasure: [{column: '<string>', thresholds: '<unknown>'}]
}
},
comparison: {
numericScale: {exact: 'true'},
columns: [{column: '<string>', numericScale: {exact: 'true'}}]
}
}
],
setup: [{connection: '<string>', queries: ['<string>']}],
teardown: [{connection: '<string>', queries: ['<string>']}],
teardownOnFailure: true,
ignoreSetupErrors: true,
variables: {},
strictTimeReferences: true,
annotations: [{name: '<string>', values: ['<string>']}],
execution: {timeout: '<string>', concurrency: 32, reconciliationTimeout: '<string>'},
comparison: {
numericScale: {exact: 'true'},
columns: [{column: '<string>', numericScale: {exact: 'true'}}]
}
}
})
};
fetch('https://developer.synq.io/api/agent/recon/v1/yaml/validate', 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/agent/recon/v1/yaml/validate",
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([
'suite' => [
'name' => '<string>',
'title' => '<string>',
'description' => '<string>',
'reconciliations' => [
[
'name' => '<string>',
'source' => [
'connection' => '<string>',
'query' => '<string>',
'asOf' => '<string>'
],
'target' => [
'connection' => '<string>',
'query' => '<string>',
'asOf' => '<string>'
],
'title' => '<string>',
'description' => '<string>',
'keyColumn' => '<string>',
'keyColumns' => [
'<string>'
],
'columnMapping' => [
[
'source' => '<string>',
'target' => '<string>'
]
],
'caseInsensitive' => true,
'bisection' => [
'enabled' => true,
'factor' => 513,
'threshold' => 2,
'timeColumn' => '<string>'
],
'reporting' => [
'sampleLimit' => 2,
'consentAcknowledged' => true
],
'aggregate' => [
'measures' => [
[
'column' => '<string>',
'functions' => [
]
]
],
'thresholds' => [
'absolute' => 1,
'percentage' => 1,
'perColumn' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
],
'perMeasure' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
]
],
'groupColumns' => [
'<string>'
]
],
'errorHandling' => [
'queryTimeout' => '<string>',
'maxRetries' => 5,
'retryInitialDelay' => '<string>',
'retryBackoffFactor' => 2
],
'window' => [
'lookback' => '<string>',
'column' => '<string>'
],
'setup' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardown' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardownOnFailure' => true,
'ignoreSetupErrors' => true,
'cutoff' => [
'source' => [
'column' => '<string>',
'query' => '<string>'
],
'target' => [
'column' => '<string>',
'query' => '<string>'
],
'offset' => '<string>',
'applySource' => [
'column' => '<string>',
'operator' => '<string>'
],
'applyTarget' => [
'column' => '<string>',
'operator' => '<string>'
]
],
'annotations' => [
[
'name' => '<string>',
'values' => [
'<string>'
]
]
],
'timeout' => '<string>',
'rowCount' => [
'thresholds' => [
'absolute' => 1,
'percentage' => 1,
'perColumn' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
],
'perMeasure' => [
[
'column' => '<string>',
'thresholds' => '<unknown>'
]
]
]
],
'comparison' => [
'numericScale' => [
'exact' => 'true'
],
'columns' => [
[
'column' => '<string>',
'numericScale' => [
'exact' => 'true'
]
]
]
]
]
],
'setup' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardown' => [
[
'connection' => '<string>',
'queries' => [
'<string>'
]
]
],
'teardownOnFailure' => true,
'ignoreSetupErrors' => true,
'variables' => [
],
'strictTimeReferences' => true,
'annotations' => [
[
'name' => '<string>',
'values' => [
'<string>'
]
]
],
'execution' => [
'timeout' => '<string>',
'concurrency' => 32,
'reconciliationTimeout' => '<string>'
],
'comparison' => [
'numericScale' => [
'exact' => 'true'
],
'columns' => [
[
'column' => '<string>',
'numericScale' => [
'exact' => 'true'
]
]
]
]
]
]),
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/agent/recon/v1/yaml/validate"
payload := strings.NewReader("{\n \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\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/agent/recon/v1/yaml/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.synq.io/api/agent/recon/v1/yaml/validate")
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 \"suite\": {\n \"name\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"reconciliations\": [\n {\n \"name\": \"<string>\",\n \"source\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"target\": {\n \"connection\": \"<string>\",\n \"query\": \"<string>\",\n \"asOf\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"keyColumn\": \"<string>\",\n \"keyColumns\": [\n \"<string>\"\n ],\n \"columnMapping\": [\n {\n \"source\": \"<string>\",\n \"target\": \"<string>\"\n }\n ],\n \"caseInsensitive\": true,\n \"bisection\": {\n \"enabled\": true,\n \"factor\": 513,\n \"threshold\": 2,\n \"timeColumn\": \"<string>\"\n },\n \"reporting\": {\n \"sampleLimit\": 2,\n \"consentAcknowledged\": true\n },\n \"aggregate\": {\n \"measures\": [\n {\n \"column\": \"<string>\",\n \"functions\": []\n }\n ],\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n },\n \"groupColumns\": [\n \"<string>\"\n ]\n },\n \"errorHandling\": {\n \"queryTimeout\": \"<string>\",\n \"maxRetries\": 5,\n \"retryInitialDelay\": \"<string>\",\n \"retryBackoffFactor\": 2\n },\n \"window\": {\n \"lookback\": \"<string>\",\n \"column\": \"<string>\"\n },\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"cutoff\": {\n \"source\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"target\": {\n \"column\": \"<string>\",\n \"query\": \"<string>\"\n },\n \"offset\": \"<string>\",\n \"applySource\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n },\n \"applyTarget\": {\n \"column\": \"<string>\",\n \"operator\": \"<string>\"\n }\n },\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"timeout\": \"<string>\",\n \"rowCount\": {\n \"thresholds\": {\n \"absolute\": 1,\n \"percentage\": 1,\n \"perColumn\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ],\n \"perMeasure\": [\n {\n \"column\": \"<string>\",\n \"thresholds\": \"<unknown>\"\n }\n ]\n }\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n ],\n \"setup\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardown\": [\n {\n \"connection\": \"<string>\",\n \"queries\": [\n \"<string>\"\n ]\n }\n ],\n \"teardownOnFailure\": true,\n \"ignoreSetupErrors\": true,\n \"variables\": {},\n \"strictTimeReferences\": true,\n \"annotations\": [\n {\n \"name\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"execution\": {\n \"timeout\": \"<string>\",\n \"concurrency\": 32,\n \"reconciliationTimeout\": \"<string>\"\n },\n \"comparison\": {\n \"numericScale\": {\n \"exact\": \"true\"\n },\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"numericScale\": {\n \"exact\": \"true\"\n }\n }\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"issues": [
{
"severity": "SUITE_VALIDATION_SEVERITY_UNSPECIFIED",
"fieldPath": "<string>",
"message": "<string>",
"position": {
"line": 123,
"column": 123
}
}
],
"suite": {
"name": "<string>",
"title": "<string>",
"description": "<string>",
"reconciliations": [
{
"name": "<string>",
"source": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"target": {
"connection": "<string>",
"query": "<string>",
"asOf": "<string>"
},
"title": "<string>",
"description": "<string>",
"keyColumn": "<string>",
"keyColumns": [
"<string>"
],
"mode": "RECONCILIATION_MODE_UNSPECIFIED",
"hashAlgorithm": "HASH_ALGORITHM_UNSPECIFIED",
"columnMapping": [
{
"source": "<string>",
"target": "<string>"
}
],
"caseInsensitive": true,
"bisection": {
"enabled": true,
"factor": 513,
"threshold": 2,
"strategy": "SEGMENTATION_STRATEGY_UNSPECIFIED",
"timeColumn": "<string>",
"timeGranularity": "TIME_GRANULARITY_UNSPECIFIED"
},
"reporting": {
"level": "MISMATCH_DETAIL_LEVEL_UNSPECIFIED",
"sampleLimit": 2,
"consentAcknowledged": true
},
"aggregate": {
"measures": [
{
"column": "<string>",
"functions": [
"AGGREGATE_FUNCTION_UNSPECIFIED"
]
}
],
"thresholds": {
"absolute": 1,
"percentage": 1,
"percentageBasis": "PERCENTAGE_BASIS_UNSPECIFIED",
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>",
"function": "AGGREGATE_FUNCTION_UNSPECIFIED"
}
]
},
"groupColumns": [
"<string>"
]
},
"errorHandling": {
"queryTimeout": "<string>",
"maxRetries": 5,
"retryInitialDelay": "<string>",
"retryBackoffFactor": 2
},
"window": {
"lookback": "<string>",
"column": "<string>",
"strategy": "WINDOW_STRATEGY_UNSPECIFIED"
},
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"cutoff": {
"source": {
"column": "<string>",
"aggregate": "CUTOFF_AGGREGATE_FUNCTION_UNSPECIFIED",
"query": "<string>"
},
"target": {
"column": "<string>",
"aggregate": "CUTOFF_AGGREGATE_FUNCTION_UNSPECIFIED",
"query": "<string>"
},
"combine": "CUTOFF_COMBINE_STRATEGY_UNSPECIFIED",
"truncate": "CUTOFF_TRUNCATE_UNIT_UNSPECIFIED",
"offset": "<string>",
"applySource": {
"column": "<string>",
"operator": "<string>"
},
"applyTarget": {
"column": "<string>",
"operator": "<string>"
}
},
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"timeout": "<string>",
"rowCount": {
"thresholds": {
"absolute": 1,
"percentage": 1,
"percentageBasis": "PERCENTAGE_BASIS_UNSPECIFIED",
"perColumn": [
{
"column": "<string>",
"thresholds": "<unknown>"
}
],
"perMeasure": [
{
"column": "<string>",
"thresholds": "<unknown>",
"function": "AGGREGATE_FUNCTION_UNSPECIFIED"
}
]
}
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
],
"setup": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardown": [
{
"connection": "<string>",
"queries": [
"<string>"
]
}
],
"teardownOnFailure": true,
"ignoreSetupErrors": true,
"variables": {},
"strictTimeReferences": true,
"annotations": [
{
"name": "<string>",
"values": [
"<string>"
]
}
],
"execution": {
"timeout": "<string>",
"concurrency": 32,
"reconciliationTimeout": "<string>"
},
"comparison": {
"numericScale": {
"exact": "true"
},
"columns": [
{
"column": "<string>",
"numericScale": {
"exact": "true"
}
}
]
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
- suite
- yaml
A suite in the format that Coalesce Quality stores. The request does not apply the validation rules of ReconciliationSuite. Thus an incorrect suite gets to ValidateSuite, and the response has one issue for each rule that the suite does not obey.
Show child attributes
Show child attributes
Response
Success
True when no issue has the ERROR severity. A suite with only warnings is valid.
All the problems in the suite. The errors come first, then the warnings. Empty when the suite has no problems.
Show child attributes
Show child attributes
The suite from the yaml input. It is not set when the request gives the suite as a proto, or when the YAML text does not give a suite.
Show child attributes
Show child attributes