curl --request PUT \
--url https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales Google Calendar",
"credential_source": "base44",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"client_secret": "your-new-oauth-client-secret",
"scopes": [
"https://www.googleapis.com/auth/calendar"
],
"connection_config": {},
"uses_oauth_gateway": true
}
'import requests
url = "https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}"
payload = {
"name": "Sales Google Calendar",
"credential_source": "base44",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"client_secret": "your-new-oauth-client-secret",
"scopes": ["https://www.googleapis.com/auth/calendar"],
"connection_config": {},
"uses_oauth_gateway": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Sales Google Calendar',
credential_source: 'base44',
client_id: '1234567890-abc123def456.apps.googleusercontent.com',
client_secret: 'your-new-oauth-client-secret',
scopes: ['https://www.googleapis.com/auth/calendar'],
connection_config: {},
uses_oauth_gateway: true
})
};
fetch('https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_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://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Sales Google Calendar',
'credential_source' => 'base44',
'client_id' => '1234567890-abc123def456.apps.googleusercontent.com',
'client_secret' => 'your-new-oauth-client-secret',
'scopes' => [
'https://www.googleapis.com/auth/calendar'
],
'connection_config' => [
],
'uses_oauth_gateway' => 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://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}"
payload := strings.NewReader("{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "6820f3a4e7b91d003c45a1f9",
"organization_id": "67e0b12c4d8a3f005b21c9e4",
"integration_type": "googlecalendar",
"name": "Sales Google Calendar",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/calendar.readonly"
],
"credential_source": "byo",
"connection_config": {},
"uses_oauth_gateway": true
}Update workspace connector
Changes a workspace connector. Send only the fields you want to change.
Send client_secret to rotate the secret. Connections already made keep working. Send scopes to change what new connections ask for. Connections already made keep the scopes they were granted.
To move a connector from your own OAuth app onto Base44’s, send credential_source set to base44. The stored client ID and secret are dropped, and connections the apps’ users made through your OAuth app are revoked after the response returns, so they have to connect again. A connector on Base44’s OAuth app can’t move back, and its client ID, secret, and uses_oauth_gateway can’t change.
Before setting uses_oauth_gateway to true, register the gateway redirect URI from Get OAuth redirect URIs in the provider’s console. Setting it back to false always works.
This is limited to 30 requests per minute, shared by Create workspace connector, Update workspace connector, and Delete workspace connector. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.
curl --request PUT \
--url https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sales Google Calendar",
"credential_source": "base44",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"client_secret": "your-new-oauth-client-secret",
"scopes": [
"https://www.googleapis.com/auth/calendar"
],
"connection_config": {},
"uses_oauth_gateway": true
}
'import requests
url = "https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}"
payload = {
"name": "Sales Google Calendar",
"credential_source": "base44",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"client_secret": "your-new-oauth-client-secret",
"scopes": ["https://www.googleapis.com/auth/calendar"],
"connection_config": {},
"uses_oauth_gateway": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Sales Google Calendar',
credential_source: 'base44',
client_id: '1234567890-abc123def456.apps.googleusercontent.com',
client_secret: 'your-new-oauth-client-secret',
scopes: ['https://www.googleapis.com/auth/calendar'],
connection_config: {},
uses_oauth_gateway: true
})
};
fetch('https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_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://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Sales Google Calendar',
'credential_source' => 'base44',
'client_id' => '1234567890-abc123def456.apps.googleusercontent.com',
'client_secret' => 'your-new-oauth-client-secret',
'scopes' => [
'https://www.googleapis.com/auth/calendar'
],
'connection_config' => [
],
'uses_oauth_gateway' => 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://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}"
payload := strings.NewReader("{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/workspace/{workspace_id}/connectors/{connector_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Sales Google Calendar\",\n \"credential_source\": \"base44\",\n \"client_id\": \"1234567890-abc123def456.apps.googleusercontent.com\",\n \"client_secret\": \"your-new-oauth-client-secret\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/calendar\"\n ],\n \"connection_config\": {},\n \"uses_oauth_gateway\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "6820f3a4e7b91d003c45a1f9",
"organization_id": "67e0b12c4d8a3f005b21c9e4",
"integration_type": "googlecalendar",
"name": "Sales Google Calendar",
"client_id": "1234567890-abc123def456.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/calendar.readonly"
],
"credential_source": "byo",
"connection_config": {},
"uses_oauth_gateway": true
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Body
The workspace connector fields to change. Leave out the ones to keep.
New name. Must be unique in the workspace, matching case exactly.
1"Sales Google Calendar"
Send base44 to move a connector from your own OAuth app onto Base44's. It can't move back. Moving drops the stored client ID and secret, and app users who connected through your OAuth app have to connect again.
byo, base44 "base44"
New client ID of your OAuth app. Not accepted for a connector on Base44's OAuth app.
1 - 512"1234567890-abc123def456.apps.googleusercontent.com"
New client secret of your OAuth app, to rotate it. Not accepted for a connector on Base44's OAuth app. It's stored encrypted and never returned.
1 - 512"your-new-oauth-client-secret"
New list of OAuth scopes, replacing the current one.
["https://www.googleapis.com/auth/calendar"]
New connection values, replacing the current ones.
Show child attributes
Show child attributes
{}
Whether new connections return to the single gateway redirect URI (true) or to the per-app ones (false). Register the matching URIs in the provider's console first, from Get OAuth redirect URIs. Not accepted for a connector on Base44's OAuth app, which always uses the gateway.
true
Response
The updated workspace connector.
A workspace connector. The client secret is never returned.
ID of the workspace connector. Pass it as connector_id to Start connector connection.
"6820f3a4e7b91d003c45a1f9"
ID of the workspace.
"67e0b12c4d8a3f005b21c9e4"
Connector it's for.
"googlecalendar"
Name of the workspace connector.
"Sales Google Calendar"
Client ID of the workspace's OAuth app. Empty for a connector on Base44's OAuth app.
"1234567890-abc123def456.apps.googleusercontent.com"
OAuth scopes connections through it ask for.
[
"https://www.googleapis.com/auth/calendar.readonly"
]
Whose OAuth app it runs on: byo for the workspace's own, or base44 for Base44's.
byo, base44 "byo"
Connection values saved on it, keyed by field name. Empty when the connector needs none.
Show child attributes
Show child attributes
{}
Whether new connections return to the single gateway redirect URI (true) or to the per-app ones (false). Get OAuth redirect URIs says which to register.
true
Was this page helpful?