curl --request POST \
--url https://api.botpress.cloud/v1/tables/{table}/rows/upsert \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-bot-id: <x-bot-id>' \
--data '
{
"rows": [
{
"id": 123
}
],
"keyColumn": "id",
"waitComputed": true
}
'import requests
url = "https://api.botpress.cloud/v1/tables/{table}/rows/upsert"
payload = {
"rows": [{ "id": 123 }],
"keyColumn": "id",
"waitComputed": True
}
headers = {
"x-bot-id": "<x-bot-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-bot-id': '<x-bot-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({rows: [{id: 123}], keyColumn: 'id', waitComputed: true})
};
fetch('https://api.botpress.cloud/v1/tables/{table}/rows/upsert', 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.botpress.cloud/v1/tables/{table}/rows/upsert",
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([
'rows' => [
[
'id' => 123
]
],
'keyColumn' => 'id',
'waitComputed' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-bot-id: <x-bot-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.botpress.cloud/v1/tables/{table}/rows/upsert"
payload := strings.NewReader("{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-bot-id", "<x-bot-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.botpress.cloud/v1/tables/{table}/rows/upsert")
.header("x-bot-id", "<x-bot-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.botpress.cloud/v1/tables/{table}/rows/upsert")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-bot-id"] = '<x-bot-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}"
response = http.request(request)
puts response.read_body{
"inserted": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"updated": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}{
"inserted": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"updated": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}upsertTableRows
Inserts or updates rows based on a key. If a row exists, it is updated; otherwise, a new row is created.
curl --request POST \
--url https://api.botpress.cloud/v1/tables/{table}/rows/upsert \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-bot-id: <x-bot-id>' \
--data '
{
"rows": [
{
"id": 123
}
],
"keyColumn": "id",
"waitComputed": true
}
'import requests
url = "https://api.botpress.cloud/v1/tables/{table}/rows/upsert"
payload = {
"rows": [{ "id": 123 }],
"keyColumn": "id",
"waitComputed": True
}
headers = {
"x-bot-id": "<x-bot-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-bot-id': '<x-bot-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({rows: [{id: 123}], keyColumn: 'id', waitComputed: true})
};
fetch('https://api.botpress.cloud/v1/tables/{table}/rows/upsert', 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.botpress.cloud/v1/tables/{table}/rows/upsert",
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([
'rows' => [
[
'id' => 123
]
],
'keyColumn' => 'id',
'waitComputed' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-bot-id: <x-bot-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.botpress.cloud/v1/tables/{table}/rows/upsert"
payload := strings.NewReader("{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-bot-id", "<x-bot-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.botpress.cloud/v1/tables/{table}/rows/upsert")
.header("x-bot-id", "<x-bot-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.botpress.cloud/v1/tables/{table}/rows/upsert")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-bot-id"] = '<x-bot-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rows\": [\n {\n \"id\": 123\n }\n ],\n \"keyColumn\": \"id\",\n \"waitComputed\": true\n}"
response = http.request(request)
puts response.read_body{
"inserted": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"updated": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}{
"inserted": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"updated": [
{
"id": 123,
"computed": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"stale": [
"<string>"
],
"similarity": 123
}
],
"warnings": [
"<string>"
],
"errors": [
"<string>"
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Bot id
Integration id
Integration alias
Integration name
User Id
User Role
Path Parameters
The table's name or unique identifier for targeting specific table operations.
Body
Rows for insertion or update, with a key column to determine action. Supports partial successes.
1 - 1000 elementsShow child attributes
Show child attributes
Determines if a row is inserted or updated. Defaults to "id".
1 - 30Ensure computed columns are fully processed before returning the result. This is applicable only when the number of rows involved is fewer than 1.
Response
Summary of insertions and updates, including any warnings or errors.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Alerts for minor issues that don't block the operation but suggest possible improvements.
Critical issues in specific elements that prevent their successful processing, allowing partial operation success.
Was this page helpful?