curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"new_owner_user_id": "6706af53b9c1e2004a37d85f",
"keep_sender_as_collaborator": false
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member"
payload = {
"new_owner_user_id": "6706af53b9c1e2004a37d85f",
"keep_sender_as_collaborator": False
}
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({
new_owner_user_id: '6706af53b9c1e2004a37d85f',
keep_sender_as_collaborator: false
})
};
fetch('https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member', 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/apps/{app_id}/ownership/transfer/workspace-member",
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([
'new_owner_user_id' => '6706af53b9c1e2004a37d85f',
'keep_sender_as_collaborator' => false
]),
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/apps/{app_id}/ownership/transfer/workspace-member"
payload := strings.NewReader("{\n \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\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://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member")
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 \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\n}"
response = http.request(request)
puts response.read_body{
"app_id": "6820f3a4e7b91d003c45a1f2",
"app_name": "Acme CRM",
"new_owner_id": "6706af53b9c1e2004a37d85f",
"app_type": "user_app",
"target_workspace_id": "67f2c8e01a3b5d004e92d7a1"
}Transfer ownership to a workspace member
Makes an owner, admin, editor, or member of the app’s workspace the app’s owner right away, with no invitation.
Unlike Start ownership transfer, the recipient doesn’t have to accept. The app stays in its workspace, and only its owner changes. The new owner gets editor access, and the app’s collaborators and published site stay as they are. The previous owner loses their direct access unless you set keep_sender_as_collaborator, though a workspace owner or admin keeps access through the workspace.
An app with a secret, or with a connected integration of its own, can’t be transferred this way. Invite the new owner instead. An app with a pending ownership transfer, or one that’s moving to another workspace, is rejected too.
You need to own the app, or be an owner or admin of its workspace with an Enterprise workspace or approved partner status.
This is limited to 30 requests a minute per workspace. Some workspaces have a different limit.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"new_owner_user_id": "6706af53b9c1e2004a37d85f",
"keep_sender_as_collaborator": false
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member"
payload = {
"new_owner_user_id": "6706af53b9c1e2004a37d85f",
"keep_sender_as_collaborator": False
}
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({
new_owner_user_id: '6706af53b9c1e2004a37d85f',
keep_sender_as_collaborator: false
})
};
fetch('https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member', 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/apps/{app_id}/ownership/transfer/workspace-member",
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([
'new_owner_user_id' => '6706af53b9c1e2004a37d85f',
'keep_sender_as_collaborator' => false
]),
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/apps/{app_id}/ownership/transfer/workspace-member"
payload := strings.NewReader("{\n \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\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://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/ownership/transfer/workspace-member")
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 \"new_owner_user_id\": \"6706af53b9c1e2004a37d85f\",\n \"keep_sender_as_collaborator\": false\n}"
response = http.request(request)
puts response.read_body{
"app_id": "6820f3a4e7b91d003c45a1f2",
"app_name": "Acme CRM",
"new_owner_id": "6706af53b9c1e2004a37d85f",
"app_type": "user_app",
"target_workspace_id": "67f2c8e01a3b5d004e92d7a1"
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app.
Body
The workspace member who becomes the app's owner.
ID of the Base44 user who becomes the owner. They have to be an owner, admin, editor, or member of the app's workspace.
1"6706af53b9c1e2004a37d85f"
Whether the app's current owner keeps editor access to the app after the transfer (true) or loses their direct access to it (false). An owner or admin of the workspace the app ends up in keeps access through that workspace either way. Defaults to false.
false
Response
The app, with its new owner.
The app after its ownership changed.
ID of the app.
"6820f3a4e7b91d003c45a1f2"
Name of the app.
"Acme CRM"
ID of the Base44 user who owns the app now.
"6706af53b9c1e2004a37d85f"
Type of the app, for example user_app or user_agent, or null when it isn't set.
"user_app"
ID of the workspace the app is in.
"67f2c8e01a3b5d004e92d7a1"
Was this page helpful?