curl --request POST \
--url https://api.select.dev/v2/bigquery-connections/actions/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"gcp_project_id": "<string>",
"service_account": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"is_doit": false,
"sync_enabled": true,
"query_sanitization_enabled": false
}
'import requests
url = "https://api.select.dev/v2/bigquery-connections/actions/test"
payload = {
"name": "<string>",
"gcp_project_id": "<string>",
"service_account": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"is_doit": False,
"sync_enabled": True,
"query_sanitization_enabled": False
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
gcp_project_id: '<string>',
service_account: '<string>',
bigquery_dataset_id: '<string>',
billing_account_id: '<string>',
is_doit: false,
sync_enabled: true,
query_sanitization_enabled: false
})
};
fetch('https://api.select.dev/v2/bigquery-connections/actions/test', 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.select.dev/v2/bigquery-connections/actions/test",
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([
'name' => '<string>',
'gcp_project_id' => '<string>',
'service_account' => '<string>',
'bigquery_dataset_id' => '<string>',
'billing_account_id' => '<string>',
'is_doit' => false,
'sync_enabled' => true,
'query_sanitization_enabled' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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.select.dev/v2/bigquery-connections/actions/test"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
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.select.dev/v2/bigquery-connections/actions/test")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/bigquery-connections/actions/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"checks": [
{
"id": "connectivity",
"label": "<string>",
"status": "passed",
"message": "<string>",
"docs_link": "<string>"
}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Test a BigQuery connection configuration
curl --request POST \
--url https://api.select.dev/v2/bigquery-connections/actions/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"gcp_project_id": "<string>",
"service_account": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"is_doit": false,
"sync_enabled": true,
"query_sanitization_enabled": false
}
'import requests
url = "https://api.select.dev/v2/bigquery-connections/actions/test"
payload = {
"name": "<string>",
"gcp_project_id": "<string>",
"service_account": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"is_doit": False,
"sync_enabled": True,
"query_sanitization_enabled": False
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
gcp_project_id: '<string>',
service_account: '<string>',
bigquery_dataset_id: '<string>',
billing_account_id: '<string>',
is_doit: false,
sync_enabled: true,
query_sanitization_enabled: false
})
};
fetch('https://api.select.dev/v2/bigquery-connections/actions/test', 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.select.dev/v2/bigquery-connections/actions/test",
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([
'name' => '<string>',
'gcp_project_id' => '<string>',
'service_account' => '<string>',
'bigquery_dataset_id' => '<string>',
'billing_account_id' => '<string>',
'is_doit' => false,
'sync_enabled' => true,
'query_sanitization_enabled' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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.select.dev/v2/bigquery-connections/actions/test"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
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.select.dev/v2/bigquery-connections/actions/test")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/bigquery-connections/actions/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"is_doit\": false,\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"checks": [
{
"id": "connectivity",
"label": "<string>",
"status": "passed",
"message": "<string>",
"docs_link": "<string>"
}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Authorizations
Organization API key (sl_…).
Headers
The organization ID the request is scoped to.
Body
A BigQuery connection to add.
Display name for the connection, as shown throughout SELECT.
The GCP project to read BigQuery usage and spend from. 6-30 characters, starting with a lowercase letter, made up of lowercase letters, digits and hyphens, and not ending in a hyphen.
^[a-z][a-z0-9-]{4,28}[a-z0-9]$The GCP service account SELECT impersonates to reach the project, in [email protected] form.
^[a-z][a-z0-9-]{4,28}[a-z0-9]@[a-z][a-z0-9-]{4,28}[a-z0-9]\.iam\.gserviceaccount\.com$The BigQuery dataset holding the project's billing and pricing exports. Letters, digits and underscores only. Required when is_doit is false, and must be omitted when it is true.
^[a-zA-Z0-9_]{1,1024}$The Cloud Billing account the exports belong to, in XXXXXX-XXXXXX-XXXXXX form, case-insensitive. Required when is_doit is false, and must be omitted when it is true.
^[0-9A-Fa-f]{6}-[0-9A-Fa-f]{6}-[0-9A-Fa-f]{6}$Set this when the project's GCP billing account is managed by DoiT as a resale customer, so SELECT reads its spend from DoiT's billing data. SELECT confirms access before spend can be read, so the connection is created with a doit_billing_status of pending; re-read it to see when it becomes active. Requires a user credential rather than an API key, and cannot be changed once the connection is added.
Whether SELECT starts syncing data for this connection.
Whether query text is sanitized before SELECT stores it.
Response
Successful Response
The result of validating a connection's configuration against BigQuery.

