curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize"
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}/emails/system/{email_type}/materialize', 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}/emails/system/{email_type}/materialize",
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}/emails/system/{email_type}/materialize"
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}/emails/system/{email_type}/materialize")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize")
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{
"template_id": "68c1f0a2b3d4e5f6a7b8c9d0",
"name": "PasswordReset",
"created": true
}Customize application email
Gives the app its own version of an application email, as an email template you can change. The template starts as a copy of the email the app sends today, with placeholders such as {{first_name}} and {{action_url}} where the recipient’s details go. Ask the AI to change it through Send chat message.
Base44 sends four application emails for the app: password reset (password_reset), sign-up verification (email_verification), invitation (user_invite), and access approval (access_approved). They use the app’s brand automatically. From now on, the app sends its own version. For email_verification, that also needs the app to send from its own email domain and the version to pass a review, and Preview application email reports in authored_status which version is sent. Delete the template with Delete email template to go back to the Base44 version.
Calling this again returns the template the app already has, with created set to false.
Creating the template needs a paid workspace plan.
This is limited to 10 requests per minute per app for each workspace’s personal API keys, so every key in a workspace shares one allowance. Some workspaces have a different limit.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize"
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}/emails/system/{email_type}/materialize', 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}/emails/system/{email_type}/materialize",
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}/emails/system/{email_type}/materialize"
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}/emails/system/{email_type}/materialize")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/emails/system/{email_type}/materialize")
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{
"template_id": "68c1f0a2b3d4e5f6a7b8c9d0",
"name": "PasswordReset",
"created": true
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app the emails belong to.
The application email: password_reset, email_verification, user_invite, or access_approved.
Response
The app's template for the email.
The app's own template for an application email.
ID of the template. Use it with Get email template.
"68c1f0a2b3d4e5f6a7b8c9d0"
Name of the template: PasswordReset, EmailVerification, UserInvite, or AccessApproved.
"PasswordReset"
true when this request created the template, and false when the app already had it.
true
Was this page helpful?