Update a single fact table
curl -X POST 'https://api.growthbook.io/api/v1/fact-tables/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"name":"New Fact Table Name"}'import requests
url = "https://api.growthbook.io/api/v1/fact-tables/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"owner": "<string>",
"projects": ["<string>"],
"tags": ["<string>"],
"userIdTypes": ["<string>"],
"sql": "<string>",
"eventName": "<string>",
"columns": [
{
"column": "<string>",
"jsonFields": {},
"name": "<string>",
"description": "<string>",
"alwaysInlineFilter": False,
"deleted": False,
"isAutoSliceColumn": False,
"autoSlices": ["<string>"],
"lockedAutoSlices": ["<string>"]
}
],
"columnsError": "<string>",
"archived": 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({
name: '<string>',
description: '<string>',
owner: '<string>',
projects: ['<string>'],
tags: ['<string>'],
userIdTypes: ['<string>'],
sql: '<string>',
eventName: '<string>',
columns: [
{
column: '<string>',
jsonFields: {},
name: '<string>',
description: '<string>',
alwaysInlineFilter: false,
deleted: false,
isAutoSliceColumn: false,
autoSlices: ['<string>'],
lockedAutoSlices: ['<string>']
}
],
columnsError: '<string>',
archived: true
})
};
fetch('https://api.growthbook.io/api/v1/fact-tables/{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.growthbook.io/api/v1/fact-tables/{id}",
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>',
'description' => '<string>',
'owner' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
'<string>'
],
'userIdTypes' => [
'<string>'
],
'sql' => '<string>',
'eventName' => '<string>',
'columns' => [
[
'column' => '<string>',
'jsonFields' => [
],
'name' => '<string>',
'description' => '<string>',
'alwaysInlineFilter' => false,
'deleted' => false,
'isAutoSliceColumn' => false,
'autoSlices' => [
'<string>'
],
'lockedAutoSlices' => [
'<string>'
]
]
],
'columnsError' => '<string>',
'archived' => 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://api.growthbook.io/api/v1/fact-tables/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\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.growthbook.io/api/v1/fact-tables/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/fact-tables/{id}")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\n}"
response = http.request(request)
puts response.read_body{
"factTable": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"owner": "<string>",
"projects": [
"<string>"
],
"tags": [
"<string>"
],
"datasource": "<string>",
"userIdTypes": [
"<string>"
],
"sql": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"ownerEmail": "<string>",
"aggregatedFactTableSettings": {
"idTypes": [
"<string>"
],
"updateTime": {
"time": "<string>",
"timezone": "<string>"
},
"lookbackWindow": 123,
"restateChunkDays": 4
},
"eventName": "<string>",
"columns": [
{
"column": "<string>",
"jsonFields": {},
"name": "<string>",
"description": "<string>",
"alwaysInlineFilter": false,
"deleted": false,
"isAutoSliceColumn": false,
"autoSlices": [
"<string>"
],
"lockedAutoSlices": [
"<string>"
],
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z"
}
],
"columnsError": "<string>",
"archived": true
}
}Authorizations
If using Bearer auth, pass the Secret Key as the token:
curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456"
Path Parameters
The id of the requested resource
Body
Description of the fact table
10000The userId or email address of the owner. If an email address is provided, it will be used to look up the userId of the matching organization member. If an ID is provided, it will be validated as existing in the organization.
List of associated project ids
List of associated tags
List of identifier columns in this table. For example, "id" or "anonymous_id"
Settings for maintaining shared daily aggregated tables (a subset of userIdTypes plus the daily update time and restate lookback window) used to speed up CUPED. Requires the data pipeline (pipeline-mode) feature.
Show child attributes
Show child attributes
The SQL query for this fact table
The event name used in SQL template variables
Optional array of columns that you want to update. Only allows updating properties of existing columns. Cannot create new columns or delete existing ones. Columns cannot be added or deleted; column structure is determined by SQL parsing. Slice-related properties require an enterprise license.
Show child attributes
Show child attributes
Error message if there was an issue parsing the SQL schema
Set this to "api" to disable editing in the GrowthBook UI
, api, admin Response
Resource created
Show child attributes
Show child attributes
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v1/fact-tables/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"name":"New Fact Table Name"}'import requests
url = "https://api.growthbook.io/api/v1/fact-tables/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"owner": "<string>",
"projects": ["<string>"],
"tags": ["<string>"],
"userIdTypes": ["<string>"],
"sql": "<string>",
"eventName": "<string>",
"columns": [
{
"column": "<string>",
"jsonFields": {},
"name": "<string>",
"description": "<string>",
"alwaysInlineFilter": False,
"deleted": False,
"isAutoSliceColumn": False,
"autoSlices": ["<string>"],
"lockedAutoSlices": ["<string>"]
}
],
"columnsError": "<string>",
"archived": 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({
name: '<string>',
description: '<string>',
owner: '<string>',
projects: ['<string>'],
tags: ['<string>'],
userIdTypes: ['<string>'],
sql: '<string>',
eventName: '<string>',
columns: [
{
column: '<string>',
jsonFields: {},
name: '<string>',
description: '<string>',
alwaysInlineFilter: false,
deleted: false,
isAutoSliceColumn: false,
autoSlices: ['<string>'],
lockedAutoSlices: ['<string>']
}
],
columnsError: '<string>',
archived: true
})
};
fetch('https://api.growthbook.io/api/v1/fact-tables/{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.growthbook.io/api/v1/fact-tables/{id}",
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>',
'description' => '<string>',
'owner' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
'<string>'
],
'userIdTypes' => [
'<string>'
],
'sql' => '<string>',
'eventName' => '<string>',
'columns' => [
[
'column' => '<string>',
'jsonFields' => [
],
'name' => '<string>',
'description' => '<string>',
'alwaysInlineFilter' => false,
'deleted' => false,
'isAutoSliceColumn' => false,
'autoSlices' => [
'<string>'
],
'lockedAutoSlices' => [
'<string>'
]
]
],
'columnsError' => '<string>',
'archived' => 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://api.growthbook.io/api/v1/fact-tables/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\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.growthbook.io/api/v1/fact-tables/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/fact-tables/{id}")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"userIdTypes\": [\n \"<string>\"\n ],\n \"sql\": \"<string>\",\n \"eventName\": \"<string>\",\n \"columns\": [\n {\n \"column\": \"<string>\",\n \"jsonFields\": {},\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"alwaysInlineFilter\": false,\n \"deleted\": false,\n \"isAutoSliceColumn\": false,\n \"autoSlices\": [\n \"<string>\"\n ],\n \"lockedAutoSlices\": [\n \"<string>\"\n ]\n }\n ],\n \"columnsError\": \"<string>\",\n \"archived\": true\n}"
response = http.request(request)
puts response.read_body{
"factTable": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"owner": "<string>",
"projects": [
"<string>"
],
"tags": [
"<string>"
],
"datasource": "<string>",
"userIdTypes": [
"<string>"
],
"sql": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"ownerEmail": "<string>",
"aggregatedFactTableSettings": {
"idTypes": [
"<string>"
],
"updateTime": {
"time": "<string>",
"timezone": "<string>"
},
"lookbackWindow": 123,
"restateChunkDays": 4
},
"eventName": "<string>",
"columns": [
{
"column": "<string>",
"jsonFields": {},
"name": "<string>",
"description": "<string>",
"alwaysInlineFilter": false,
"deleted": false,
"isAutoSliceColumn": false,
"autoSlices": [
"<string>"
],
"lockedAutoSlices": [
"<string>"
],
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z"
}
],
"columnsError": "<string>",
"archived": true
}
}
