curl --request POST \
--url https://api.generalvalidation.com/api/v1/fabric/tests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}
'import requests
url = "https://api.generalvalidation.com/api/v1/fabric/tests"
payload = {
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}
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({
pair_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
evidence_limit: 100,
max_bad_records: 0,
source_column: '<string>',
target_column: '<string>',
tolerance: 0
})
};
fetch('https://api.generalvalidation.com/api/v1/fabric/tests', 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://api.generalvalidation.com/api/v1/fabric/tests",
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([
'pair_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'evidence_limit' => 100,
'max_bad_records' => 0,
'source_column' => '<string>',
'target_column' => '<string>',
'tolerance' => 0
]),
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://api.generalvalidation.com/api/v1/fabric/tests"
payload := strings.NewReader("{\n \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\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://api.generalvalidation.com/api/v1/fabric/tests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.generalvalidation.com/api/v1/fabric/tests")
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 \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\n}"
response = http.request(request)
puts response.read_body{
"function": "COUNT_ROWS",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}Add a Test
Add a Test to an active Table Pair, up to 100 per pair. VALUE and OUTER_VALUE Tests need the pair’s join keys first.
Requires the GV.APIContributor application role, or a higher role (Owner > Contributor > Reader).
curl --request POST \
--url https://api.generalvalidation.com/api/v1/fabric/tests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}
'import requests
url = "https://api.generalvalidation.com/api/v1/fabric/tests"
payload = {
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}
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({
pair_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
evidence_limit: 100,
max_bad_records: 0,
source_column: '<string>',
target_column: '<string>',
tolerance: 0
})
};
fetch('https://api.generalvalidation.com/api/v1/fabric/tests', 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://api.generalvalidation.com/api/v1/fabric/tests",
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([
'pair_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'evidence_limit' => 100,
'max_bad_records' => 0,
'source_column' => '<string>',
'target_column' => '<string>',
'tolerance' => 0
]),
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://api.generalvalidation.com/api/v1/fabric/tests"
payload := strings.NewReader("{\n \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\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://api.generalvalidation.com/api/v1/fabric/tests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.generalvalidation.com/api/v1/fabric/tests")
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 \"pair_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"evidence_limit\": 100,\n \"max_bad_records\": 0,\n \"source_column\": \"<string>\",\n \"target_column\": \"<string>\",\n \"tolerance\": 0\n}"
response = http.request(request)
puts response.read_body{
"function": "COUNT_ROWS",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pair_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evidence_limit": 100,
"max_bad_records": 0,
"source_column": "<string>",
"target_column": "<string>",
"tolerance": 0
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}{
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 123,
"title": "<string>",
"type": "<string>",
"diagnostics": {}
}Authorizations
Microsoft Entra application token issued by the caller's Organization tenant for this multitenant API. Request the .default scope and assign the application the required GV.APIReader, GV.APIContributor, or GV.APIOwner role.
Body
The validation function. GET /api/v1/fabric/catalog lists them.
COUNT_ROWS, COUNT, COUNT_DISTINCT, MIN, MAX, AVG, SUM, VALUE, OUTER_VALUE, SET_A_IN_B, SET_B_IN_A, SET_A_EQUALS_B The Table Pair the Test belongs to.
How many mismatched rows a row or set Test saves to your Results Lakehouse. 0 saves none; it never changes the verdict.
0 <= x <= 10000How many mismatches a row or set Test can have and still pass. Aggregate Tests accept only 0.
0 <= x <= 9007199254740991The source column. Omit for COUNT_ROWS.
1 - 255^[^\x00-\x1f\x7f]+$The target column. Omit for COUNT_ROWS.
1 - 255^[^\x00-\x1f\x7f]+$The largest absolute difference that still passes, for aggregate and row Tests. 0 requires exact equality; set Tests accept only 0.
0 <= x <= 1000000000000000Response
Successful Response
The validation function. GET /api/v1/fabric/catalog lists them.
COUNT_ROWS, COUNT, COUNT_DISTINCT, MIN, MAX, AVG, SUM, VALUE, OUTER_VALUE, SET_A_IN_B, SET_B_IN_A, SET_A_EQUALS_B The Table Pair the Test belongs to.
How many mismatched rows a row or set Test saves to your Results Lakehouse. 0 saves none; it never changes the verdict.
0 <= x <= 10000How many mismatches a row or set Test can have and still pass. Aggregate Tests accept only 0.
0 <= x <= 9007199254740991The source column. Omit for COUNT_ROWS.
1 - 255^[^\x00-\x1f\x7f]+$The target column. Omit for COUNT_ROWS.
1 - 255^[^\x00-\x1f\x7f]+$The largest absolute difference that still passes, for aggregate and row Tests. 0 requires exact equality; set Tests accept only 0.
0 <= x <= 1000000000000000