curl --request GET \
--url https://app.base44.com/api/billing/tiers \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/billing/tiers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/billing/tiers', 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/billing/tiers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/billing/tiers"
req, _ := http.NewRequest("GET", 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.get("https://app.base44.com/api/billing/tiers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/billing/tiers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"tiers": [
{
"name": "pro",
"display_name": "Pro",
"rank": 4,
"hidden": false,
"limits": {
"monthly_message_credits": 500,
"monthly_integration_credits": 20000
},
"features": [
"Unlimited apps",
"Custom domains"
],
"pricing": {
"monthly_usd": 5000,
"yearly_usd": 48000
},
"price_ids": {
"monthly_usd": "price_1QZk4LDr56L89dkKp0Pro0Mo",
"yearly_usd": "price_1QZk4LDr56L89dkKp0Pro0Yr"
},
"wix_product_id": "5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63"
}
],
"hierarchy": [
"free",
"lite",
"starter",
"builder",
"pro",
"elite"
],
"free_tier": "free",
"recommended_tier": "pro",
"currency": "usd"
}{
"detail": [
{
"type": "less_than_equal",
"loc": [
"query",
"limit"
],
"msg": "Input should be less than or equal to 100",
"input": "101",
"ctx": {
"le": 100
}
}
]
}List plans
Lists Base44’s plans with their limits, prices, and the IDs you need to change one.
You can call this without credentials. Then currency follows the country the request comes from. With a token, it follows your workspace: a paid workspace sees the currency it pays in, and a free one the currency it can check out in. An invalid or read-only token is ignored, and you get the answer for no credentials.
Prices are in the smallest currency unit, such as cents, and can be null while Base44 can’t load them. Retry later rather than treating a null price as free.
Use price_ids with Change plan on a Stripe-billed workspace, and wix_product_id with Change Wix plan on a Wix-billed one.
Plans come in hierarchy order, and the default limit of 100 returns every plan on one page. To page through them, pass a smaller limit and send each next_cursor back as cursor. A cursor carries the rest of the query, so send it alone. hierarchy always lists every plan.
curl --request GET \
--url https://app.base44.com/api/billing/tiers \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/billing/tiers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/billing/tiers', 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/billing/tiers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/billing/tiers"
req, _ := http.NewRequest("GET", 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.get("https://app.base44.com/api/billing/tiers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/billing/tiers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"tiers": [
{
"name": "pro",
"display_name": "Pro",
"rank": 4,
"hidden": false,
"limits": {
"monthly_message_credits": 500,
"monthly_integration_credits": 20000
},
"features": [
"Unlimited apps",
"Custom domains"
],
"pricing": {
"monthly_usd": 5000,
"yearly_usd": 48000
},
"price_ids": {
"monthly_usd": "price_1QZk4LDr56L89dkKp0Pro0Mo",
"yearly_usd": "price_1QZk4LDr56L89dkKp0Pro0Yr"
},
"wix_product_id": "5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63"
}
],
"hierarchy": [
"free",
"lite",
"starter",
"builder",
"pro",
"elite"
],
"free_tier": "free",
"recommended_tier": "pro",
"currency": "usd"
}{
"detail": [
{
"type": "less_than_equal",
"loc": [
"query",
"limit"
],
"msg": "Input should be less than or equal to 100",
"input": "101",
"ctx": {
"le": 100
}
}
]
}Authorizations
Personal access token, sent as Authorization: Bearer <token>. Each operation lists the permission it needs: read_only or full_access. A full-access token can call every operation. A read-only token can call only the operations that list read_only; anything else returns 403 read_only_credential_route_not_allowed.
Query Parameters
Plans per page, 1 to 100. Defaults to 100, which fits every plan.
1 <= x <= 100next_cursor from the previous page. Send it alone.
Response
Every plan, with its limits and prices.
Base44's plans.
The plans on this page, in hierarchy order. With the default limit, every plan.
Show child attributes
Show child attributes
[ { "display_name": "Pro", "features": ["Unlimited apps", "Custom domains"], "hidden": false, "limits": { "monthly_integration_credits": 20000, "monthly_message_credits": 500 }, "name": "pro", "price_ids": { "monthly_usd": "price_1QZk4LDr56L89dkKp0Pro0Mo", "yearly_usd": "price_1QZk4LDr56L89dkKp0Pro0Yr" }, "pricing": { "monthly_usd": 5000, "yearly_usd": 48000 }, "rank": 4, "wix_product_id": "5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63" } ]
Plan IDs from smallest to largest.
[ "free", "lite", "starter", "builder", "pro", "elite" ]
ID of the free plan.
"free"
ID of the plan Base44 recommends.
"pro"
Currency you're shown and charged in. wix_product_id is for this currency.
usd, ils, eur, gbp, brl "usd"
Send as cursor to get the next page. null on the last page.
"gAAAAABn7vJ0q2kX"
Was this page helpful?