---
title: "Preview JSON-LD"
method: GET
path: "/api/apps/{app_id}/seo/preview/json-ld"
---

# Preview JSON-LD

`GET /api/apps/{app_id}/seo/preview/json-ld`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

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's `json_ld_template` marks which entity field fills each property using a placeholder. For example, `{"name": "{title}"}` means `name` comes from this entity's `title` field.

There's no mechanism that fills in a placeholder for you. To use a field, edit `json_ld_template` yourself before saving it with [Update SEO settings](/api-reference/update-seo-settings), replacing `{title}` with an actual value, for example `{"name": "Acme CRM"}` instead of `{"name": "{title}"}`. Base44 injects whatever you save exactly as written, on every page the entry applies to. There's no per-record substitution, so a hardcoded value shows up identically everywhere rather than varying by record.

Save the whole entry, including its `json_ld_template` key, as one of the objects in `custom_json_ld` with [Update SEO settings](/api-reference/update-seo-settings). Saving alone isn't enough for the markup to appear on the page. See [When JSON-LD markup goes live](/developers/references/apps-api/sections/seo#when-json-ld-markup-goes-live) for what else has to be true.

Save `confidence` as a string, or leave it out.
<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Path parameters

- `app_id` string, required — ID of the app.

## Response `200`

The generated Schema.org markup.

- JsonLdPreviewResponse — The preview.
  - `result` JsonLdPreview, required — The Schema.org markup Base44 would publish for this app.
    - `entities` JsonLdEntity[] — One entry per entity Base44 could match to a Schema.org type. Empty when none of the app's entities match one confidently.
      - `entity_name` string, required — Name of the app entity this markup describes.
      - `schema_type` string, required — The Schema.org type Base44 matched the entity to.
      - `confidence` number, required — How sure the match is, 0 to 1. Base44 leaves out any entity below 0.2.
      - `json_ld_template` object, required — The JSON-LD Base44 would inject, with `{field}` placeholders naming the entity fields that fill it. Written verbatim into the page, so the placeholders are not substituted per record.
      - `field_mapping` object, required — Which entity field fills each Schema.org property, keyed by property.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, you used a workspace API key, or you used a read-only personal access token. These endpoints accept a user's credentials only, and none of them accept a read-only credential, including the ones that only read.
- `404` — App not found.
- `429` — Rate limit exceeded. The base limit is 30 requests per minute, shared with the app's other SEO endpoints. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/base44/apis/base44-app-management-api/revisions/cf164639a9bf?raw)
