curl --request PATCH \
--url https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"gcp_project_id": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"sync_enabled": true,
"query_sanitization_enabled": true
}
'import requests
url = "https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}"
payload = {
"name": "<string>",
"gcp_project_id": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"sync_enabled": True,
"query_sanitization_enabled": True
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
gcp_project_id: '<string>',
bigquery_dataset_id: '<string>',
billing_account_id: '<string>',
service_account: '<string>',
sync_enabled: true,
query_sanitization_enabled: true
})
};
fetch('https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}', 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/{bigquery_connection_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'gcp_project_id' => '<string>',
'bigquery_dataset_id' => '<string>',
'billing_account_id' => '<string>',
'service_account' => '<string>',
'sync_enabled' => true,
'query_sanitization_enabled' => true
]),
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/{bigquery_connection_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}")
.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 \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.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 \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"etag": "<string>",
"name": "<string>",
"gcp_project_id": "<string>",
"regions": [
"<string>"
],
"is_doit": true,
"connection_id": "<string>",
"sync_enabled": true,
"query_sanitization_enabled": true,
"create_time": "<string>",
"update_time": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"gcp_organization_id": "<string>",
"gcp_organization_name": "<string>",
"doit_billing_status": "active",
"added_by_email": "<string>",
"last_successful_sync_time": "<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": [
{}
]
}{
"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": [
{}
]
}Update a BigQuery connection
curl --request PATCH \
--url https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"gcp_project_id": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"sync_enabled": true,
"query_sanitization_enabled": true
}
'import requests
url = "https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}"
payload = {
"name": "<string>",
"gcp_project_id": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"sync_enabled": True,
"query_sanitization_enabled": True
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
gcp_project_id: '<string>',
bigquery_dataset_id: '<string>',
billing_account_id: '<string>',
service_account: '<string>',
sync_enabled: true,
query_sanitization_enabled: true
})
};
fetch('https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}', 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/{bigquery_connection_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'gcp_project_id' => '<string>',
'bigquery_dataset_id' => '<string>',
'billing_account_id' => '<string>',
'service_account' => '<string>',
'sync_enabled' => true,
'query_sanitization_enabled' => true
]),
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/{bigquery_connection_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"gcp_project_id\": \"<string>\",\n \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}")
.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 \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/bigquery-connections/{bigquery_connection_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.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 \"bigquery_dataset_id\": \"<string>\",\n \"billing_account_id\": \"<string>\",\n \"service_account\": \"<string>\",\n \"sync_enabled\": true,\n \"query_sanitization_enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"etag": "<string>",
"name": "<string>",
"gcp_project_id": "<string>",
"regions": [
"<string>"
],
"is_doit": true,
"connection_id": "<string>",
"sync_enabled": true,
"query_sanitization_enabled": true,
"create_time": "<string>",
"update_time": "<string>",
"bigquery_dataset_id": "<string>",
"billing_account_id": "<string>",
"service_account": "<string>",
"gcp_organization_id": "<string>",
"gcp_organization_name": "<string>",
"doit_billing_status": "active",
"added_by_email": "<string>",
"last_successful_sync_time": "<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": [
{}
]
}{
"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.
Path Parameters
Body
A merge-patch update to an existing BigQuery connection: an omitted
field is left unchanged, and null clears it.
Every field mirrors its BigQueryConnectionCreate counterpart. is_doit
cannot be changed once the connection is added, so it has no counterpart
here.
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 BigQuery dataset holding the project's billing and pricing exports. Letters, digits and underscores only. Must be omitted on a DoiT-managed connection, and cannot be cleared with null on any other.
^[a-zA-Z0-9_]{1,1024}$The Cloud Billing account the exports belong to, in XXXXXX-XXXXXX-XXXXXX form, case-insensitive. Must be omitted on a DoiT-managed connection, and cannot be cleared with null on any other.
^[0-9A-Fa-f]{6}-[0-9A-Fa-f]{6}-[0-9A-Fa-f]{6}$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$Whether SELECT syncs data for this connection.
Whether query text is sanitized before SELECT stores it.
Response
Successful Response
A connection to one BigQuery project.
The unique identifier of the connection.
Opaque strong ETag for this connection's configuration. Matches the ETag response header, and is what If-Match requires on a write. It changes whenever a configurable field on the connection changes.
Display name for the connection, as shown throughout SELECT.
The GCP project SELECT reads BigQuery usage and spend from.
The BigQuery regions SELECT detected query activity in. Empty until the first successful detection.
Whether this project's GCP billing account is managed by DoiT as a resale customer, so SELECT reads its spend from DoiT's billing data rather than from an export in your own dataset.
Identifier of the underlying connection this BigQuery project reads through.
Whether SELECT is currently syncing data for this connection.
Whether query text is sanitized before SELECT stores it.
When the connection was added.
When the connection was last changed.
The BigQuery dataset holding the project's billing and pricing exports. Null when is_doit is true, since SELECT reads DoiT's export rather than one in your own dataset.
The Cloud Billing account the exports belong to, in XXXXXX-XXXXXX-XXXXXX form. Null when is_doit is true.
The GCP service account SELECT impersonates to reach the project. Null for a connection SELECT reaches without impersonation.
Numeric id of the GCP organization the project belongs to. Null for a standalone project, or when SELECT cannot read the project's ancestry.
Display name of the GCP organization the project belongs to. Null when the name cannot be read even though the id resolved.
Whether SELECT can read this connection's spend from DoiT's billing data. pending while SELECT confirms access, active once spend is flowing, and inactive if it cannot be read — contact support. Null when is_doit is false.
active, pending, inactive Email address of the person who added the connection. Null when it was not added by a person.
When SELECT last completed a sync for this connection. Null before the first one succeeds.

