curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/openapi-spec \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/openapi-spec"
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/apps/{app_id}/openapi-spec', 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}/openapi-spec",
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/apps/{app_id}/openapi-spec"
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/apps/{app_id}/openapi-spec")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/openapi-spec")
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{
"openapi": "3.0.3",
"info": {
"title": "Nordwind Furniture API",
"version": "1.0.0"
},
"servers": [
{
"description": "API server",
"url": "https://my-crm-3c45a1f2.base44.app/api"
}
],
"paths": {
"/entities/Task": {
"get": {
"summary": "List Task records"
}
}
},
"components": {
"schemas": {
"Task": {
"type": "object"
}
}
}
}Get app API reference
Returns a reference for the app’s own API, the one its code and other systems use to work with its data. It covers:
- Each entity’s endpoints to list, read, create, update, and delete records
- The app’s users
- Its backend functions
- Its agents
The reference is built from the app as it is now, so it can include entities and functions that haven’t been published yet. Server addresses use the app’s base44.app address, even when it also has a custom domain.
This is limited to 30 requests a minute per caller for each app. Some workspaces have a different limit.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/openapi-spec \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/openapi-spec"
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/apps/{app_id}/openapi-spec', 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}/openapi-spec",
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/apps/{app_id}/openapi-spec"
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/apps/{app_id}/openapi-spec")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/openapi-spec")
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{
"openapi": "3.0.3",
"info": {
"title": "Nordwind Furniture API",
"version": "1.0.0"
},
"servers": [
{
"description": "API server",
"url": "https://my-crm-3c45a1f2.base44.app/api"
}
],
"paths": {
"/entities/Task": {
"get": {
"summary": "List Task records"
}
}
},
"components": {
"schemas": {
"Task": {
"type": "object"
}
}
}
}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.
Path Parameters
ID of the app.
Response
The app's API reference, as an OpenAPI 3.0.3 document.
An OpenAPI 3.0.3 document describing the app's own API.
OpenAPI version of the document.
"3.0.3"
Title and description of the app's API. The title is the app's name followed by API.
{
"title": "Nordwind Furniture API",
"version": "1.0.0"
}
The app's API address, built from its slug.
[
{
"description": "API server",
"url": "https://my-crm-3c45a1f2.base44.app/api"
}
]
One entry per endpoint of the app's entities, backend functions, and agents.
{
"/entities/Task": { "get": { "summary": "List Task records" } }
}
A schema for each entity, and the api_key header the app's API authenticates with.
{
"schemas": { "Task": { "type": "object" } }
}
Was this page helpful?