All component endpoints authenticate via
EF-Access-Key. The brand user’s role must have components module access.List Components
Return all components for a brand with pagination. This endpoint does not includehtml, css, or config in the response — use Get Component Content or Get Component Builder Config for full content.
string
required
The brand/project ID
number
Results per page (1–100, default: 25)
number
Page number (default: 1)
Request
cURL
JavaScript
Get All Components (unpaginated)
Return all components for a brand in a single array, without pagination (nobuilder config filter is applied).
This endpoint returns a lightweight shape:
id, name, code, type, screenshot, and (unless ?short=true) config. It does not return html or css. For HTML use Get Component Content; for GrapesJS config use Get Component Builder Config.string
required
The brand/project ID
string
Filter by type. Pass
editor to return only visual-builder components.boolean
When
true, omits config from the response — returns only id, name, code, type, and screenshot. Useful for lightweight dropdowns.Request
cURL
Get Component
Retrieve a single component’s metadata (not full content). Accepts either a numeric ID or the component’scode string.
string
required
The brand/project ID
string
required
Numeric ID or
code string (e.g. custom-hero-section)Request
cURL (by ID)
cURL (by code)
Create Component
Create a new reusable component. This is the only endpoint that acceptshtml, css, and config — Update Component is metadata-only.
string
required
The brand/project ID
string
required
Display name shown in the component library
string
Unique identifier used to embed the component in pages (e.g.
custom-guarantee-badge). Auto-generated if omitted. Components are automatically prefixed with custom-.string
HTML markup for the component
string
CSS styles scoped to this component
object
Builder config object. Required for visual-builder components; omit for plain HTML components.
Request
cURL
Python
JavaScript
Update Component
Update a component’s metadata only — name and code slug. This endpoint does not accept or persisthtml, css, or config. To update a component’s HTML content use Update Component Content. To replace a component entirely, delete it and re-create it with Create Component.
string
required
The brand/project ID
string
required
Numeric ID or
code stringstring
required
Display name. Required even if you are not changing it — send the current name.
string
Rename the component’s code slug. If changed, all pages that reference this component are automatically updated to use the new code.
Request
cURL (rename code)
cURL (rename by current code)
Update Component Content
Update the HTML content of a component. Use this endpoint to publish new HTML or save a draft for later review. This is separate from Update Component, which only handles metadata.string
required
The brand/project ID
string
required
Numeric ID or
code stringstring
required
The HTML content to save
boolean
When
true, the HTML is saved as a draft revision and the live component is not updated. Draft revisions are returned by Get Component Content until discarded or published. When omitted (or false), the HTML is published immediately and any existing draft revisions are discarded.number
When saving a draft, pass an existing
revision_id to update that specific draft instead of creating a new one.number
When publishing (not a draft), pass the
revision_id you last read. If the server has a newer draft, the request returns 409 with code: "revision_conflict".Request
cURL (publish)
cURL (save as draft)
JavaScript (publish)
Get Component Content
Read the current content of a component. If a draft revision exists, the draft HTML is returned along with itsrevision_id. Pass ?published=true to always get the live published content, ignoring any draft.
string
required
The brand/project ID
string
required
Numeric ID or
code stringboolean
When
true, returns the published (live) HTML even if a draft revision exists.Request
cURL
Discard Draft
Discard all draft revisions for a component, reverting to the live published content.string
required
The brand/project ID
string
required
Numeric ID or
code stringRequest
cURL
Get Component Builder Config
Read the full builder config for a component, ready to load into the builder. The server injects brand assets intoconfig.assets, normalizes style selectors, and removes empty ID components before returning.
string
required
The brand/project ID
string
required
Numeric ID or
code stringnumber
Load a specific revision’s config instead of the current published state.
Request
cURL
Save Component Builder Config
Save a full builder config — component tree, styles, rendered HTML, CSS, and interactions — for a component. The server processes the payload before storing it and returns the processed result. You must replace your local state with the returned config and HTML before any subsequent save (see Server-side processing below).string
required
The brand/project ID
string
required
Numeric ID or
code stringstring
required
The full builder config as a JSON string (not a nested object — stringify it before sending).
string
required
Rendered HTML output from the builder
string
Rendered CSS output from the builder
array
Interaction definitions attached to this component
string
Omit (or any value other than
revision) to publish immediately. Pass revision to save as a draft without touching the live component.number
When saving a draft (
type=revision), pass an existing revision_id to update that draft instead of creating a new one. Revisions older than 1 hour are always replaced with a new draft regardless.Request
cURL (publish)
cURL (save as draft)
JavaScript
Server-side processing
The server modifies the config, HTML, and CSS you send before storing them. The response always contains the processed versions. You must store and re-send the returned values — not your original pre-send state — otherwise the next save will be operating on stale data. What gets modified:
Corruption guard: If
config.data[0] has a single key "0" (a known serialization artifact), the save is aborted with 422 to prevent data loss. This means the config was malformed before being sent — fetch a fresh copy with GET /builder and retry.
Snapshot on publish: Before overwriting the live component, the server creates a revision snapshot of the current published state (at most once per hour). These snapshots are accessible via Get Component Revisions.
Get Component Revisions
List revision history for a component. Revisions are created automatically as hourly snapshots when publishing, and explicitly when saving a draft.string
required
The brand/project ID
string
required
Numeric ID or
code stringRequest
cURL
Delete Component
Delete a component. If the component is still referenced on one or more pages, the request returns a409 error to prevent accidental data loss. Pass ?force=1 to delete regardless.
string
required
The brand/project ID
string
required
Numeric ID or
code stringboolean
Pass
1 to delete even if the component is still referenced on pages. Pages that reference the component by code will render an empty slot where the component was.Request
cURL
cURL (force delete)
Get Component Usage
Check how many pages reference a component. Optionally return the list of pages for display in tooling.string
required
The brand/project ID
string
required
Numeric ID or
code stringstring
Pass
pages to include the list of pages that reference this component (capped at 50).Request
cURL
Clone Component
Create a copy of a component within the same brand. The clone gets a new auto-generated code and can optionally receive a new name.string
required
The brand/project ID
string
required
Numeric ID or
code string of the component to clonestring
Name for the cloned component. If omitted, the trailing number in the original name is auto-incremented (e.g.
Hero 1 → Hero 2).Request
cURL
Automated Component Provisioning
Provision a full set of reusable brand components in one run. Because PUT does not update content, the correct pattern for programmatic provisioning is to check whether each component exists first, then create it if it does not — not an upsert.Python
Node.js