curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld', 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}/seo/preview/json-ld",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$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}/seo/preview/json-ld"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
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}/seo/preview/json-ld")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"result": {
"entities": [
{
"confidence": 0.85,
"entity_name": "Product",
"field_mapping": {
"name": "title"
},
"json_ld_template": {
"@context": "https://schema.org",
"@type": "Product",
"name": "{title}"
},
"schema_type": "Product"
}
]
}
}Preview JSON-LD
Returns the Schema.org markup Base44 generates from the app’s entities, so you can see it before publishing it.
Base44 matches each entity to the Schema.org type its fields look most like, and leaves out any entity it can’t match with reasonable confidence, so an app whose entities are all app-specific returns an empty list. Each entry carries the markup as a template: {field} placeholders name the entity fields, and Base44 injects the template into the page as it stands rather than filling it in per record.
Nothing here publishes the markup. Save the entries you want as custom_json_ld with Update SEO settings, and note that saving is not enough on its own. Base44 injects saved markup only into a page of a search-eligible app, with seo_disabled off and platform_jsonld_injection_enabled on. Base44 counts an app as search-eligible when it’s public. A private or workspace app never is, and an app that requires a login qualifies only where Base44 has turned search indexing on for it. Check all three when markup you saved isn’t on the page.
confidence as a string, or leave it out, if you save these entries. The number this endpoint returns is stored as-is, and the copy of your settings that serves the live site can’t hold a fractional number, so saving it that way stops that copy updating. Base44’s own generator writes confidence as a string for the same reason.This endpoint is limited to 30 requests per minute per app, and that budget is shared with the app’s other SEO endpoints.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld', 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}/seo/preview/json-ld",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$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}/seo/preview/json-ld"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
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}/seo/preview/json-ld")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/seo/preview/json-ld")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"result": {
"entities": [
{
"confidence": 0.85,
"entity_name": "Product",
"field_mapping": {
"name": "title"
},
"json_ld_template": {
"@context": "https://schema.org",
"@type": "Product",
"name": "{title}"
},
"schema_type": "Product"
}
]
}
}Was this page helpful?