curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend', 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/resend",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/resend")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "68d4b1e9c2a7f3001e5b8c40",
"app_id": "6820f3a4e7b91d003c45a1f2",
"new_owner_email": "jane@acme.com",
"status": "pending",
"expires_at": "2026-10-05T09:23:41.512000Z"
}Resend ownership transfer
Sends the app’s pending ownership transfer invitation to its recipient again.
A transfer starts in the builder, when the app’s owner or a workspace admin invites a new owner by email. The recipient gets an email with a link, and the transfer completes only once they sign in and accept it. Nothing about the app changes until then. An invitation expires 7 days after it’s sent. Resending restarts those 7 days, including for an invitation that already expired. The link in earlier emails keeps working. Check which transfer is pending with Get pending ownership transfer.
A transfer can’t be resent once the recipient has started accepting it, or once the app’s owner or workspace has changed since it was sent.
You need to own the app or be an owner or admin of its workspace. A workspace admin who doesn’t own the app also needs an Enterprise workspace or approved partner status. For a transfer to someone outside the workspace, the owner has to be a workspace owner or admin too, with the same Enterprise or partner requirement.
Invitation emails are limited to 5 an hour and 20 a day per caller, and to 3 an hour and 10 a day per recipient. Inviting a new owner in the builder counts toward the same limits.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend', 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/resend",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/resend")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/ownership/transfer/resend")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "68d4b1e9c2a7f3001e5b8c40",
"app_id": "6820f3a4e7b91d003c45a1f2",
"new_owner_email": "jane@acme.com",
"status": "pending",
"expires_at": "2026-10-05T09:23:41.512000Z"
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app.
Response
The transfer, with its new expiry.
An ownership transfer waiting for its recipient to accept it.
ID of the ownership transfer.
"68d4b1e9c2a7f3001e5b8c40"
ID of the app being transferred.
"6820f3a4e7b91d003c45a1f2"
Email address the transfer invitation was sent to.
"jane@acme.com"
Either pending, while the invitation waits for the recipient, or accepting, while the recipient's acceptance is being applied.
"pending"
When the invitation expires, as a UTC timestamp in ISO 8601 format. The recipient can't accept it after that.
"2026-10-05T09:23:41.512000Z"
Was this page helpful?