Assets

Learn how assets move from draft to publish, what each status means, and how to configure custom rules for every asset type.

Asset types at a glance

TypeBest forLocalizationCustom rules
TextHeadlines, blurbs, labels, CTA copyYesMax length
JSONStructured content, settings, collectionsYesPer-field validation, required, hidden, max length
HTMLRich content with formatting, edited as markup or through a toolbarYesTag, attribute, content-quality, and media rules
ImagePhotos, logos, graphicsNo, single file onlyFormat, size, dimensions, animation, EXIF handling
DocumentMenus, price lists, contracts, brochuresNo, single file onlyFormat and size

Draft to publish workflow

  1. 1

    Create the asset

    Start from the project Assets page. Choose a type and give the asset a unique tag.

  2. 2

    Create a draft

    If the asset shows No Draft Version, use Create New Draft from the version panel before editing.

  3. 3

    Edit the content

    Use the main editor for your asset type. Non-image assets can also add locales from the left metadata panel. The first locale you add becomes the default locale.

  4. 4

    Set asset rules and client behavior

    In the left metadata panel, configure any asset-specific rules, then set whether the asset is Editable and whether Approval Needed is on. This is typically a one-time setup, so you can skip this step on subsequent edits.

  5. 5

    Choose the next state

    Use the header toggle to mark the draft as Ready to Publish. If the asset requires approval and the current user is a client/editor, the same toggle is shown as Ready for Review.

  6. 6

    Save the draft

    Click Save Draft. Save stays disabled until something has changed. For HTML assets, you must validate first. For image assets, an image must exist before the draft can move forward.

  7. 7

    Publish or submit for review

    Use Publish when the draft has no unsaved changes. If approval is required, client users submit the draft for review. Owners and admins can approve, reject, or publish directly from the review banner.

Asset statuses

StatusHow it gets setWhat it means
DraftCreate a draft, or save with the ready toggle offWork-in-progress content that is not ready to go live
Ready to PublishTurn on the ready toggle and save, or approve a review-pending assetThe draft is ready and can be published
Review PendingA client/editor submits a ready draft for review when approval is requiredAn owner/admin needs to review the draft before it goes live
PublishedPublish from the publish modal or use Publish Directly from the review bannerThis version is live through the API
DisabledOwner/admin clicks Disable in the editor header The content is withheld, but the tag is still returned with a null value so your code can null-check it instead of hitting a missing key. An asset that was never published is left out of the Client key's response entirely, and a Secret key sees the null either way so you can build against it.

Taking content off your site

Disabling an asset stops its content being served without deleting anything. The draft, the published version and the full version history are all kept, and enabling puts the same content back. Use it when something needs to come down now (an offer that ended, a page section that is wrong) and you want it back later.

What your site receives

The tag stays in the response with a null value rather than disappearing. A missing key and an empty one behave differently in most languages, and a key that vanishes without warning is the version more likely to break a live page.

200 OK, hero-banner disabled
{
  "assets": {
    "hero-title": "Welcome to our site",
    "hero-banner": null
  }
}

So handle it the way you would any content that might not be set yet:

{assets.heroBanner && <Banner src={assets.heroBanner} />}

One difference between your keys

An asset that has never been published is left out of the Client key's response entirely rather than coming back as null. Nothing has ever read that tag from your live site, so there is nothing to keep stable, and a tag that has never been public should not be named in a public response.

Your Secret key returns null either way, so you can disable a draft that has not shipped yet and still see exactly what your site will do once it has. Build against the Secret key and the behavior will match when you go live.

Disable, roll back, or delete?

  • Disable when the content should stop showing but you want it back. Nothing is lost and enabling restores it immediately.
  • Roll back when a publish was wrong and the previous version was right. Your site keeps serving that tag, just the earlier content.
  • Delete when the asset should not exist. This removes the content and its history, and the tag disappears from the API, so anything reading it will need changing.

Anyone who can edit an asset can disable it, so a client editor can take their own content down without waiting for you. Every disable and enable is recorded in the project's activity log, so it stays clear who took something down and when.

Side panel controls

  • Add Locale adds additional locales for text, JSON, and HTML assets.
  • Editable controls whether Editors can change the asset.
  • Approval Needed controls whether Editors must submit changes for review before publishing, or may publish directly.
  • Release Lock frees an asset that is currently locked for editing.

If an asset is not editable, approval settings have no effect for editors.

Version history

  • Create a new draft from an existing published asset.
  • Open older versions from the version history list.
  • Restore an older version into the current draft.
  • If no draft exists, restoring a version creates one first.

Image assets can warn about version limits before creating another draft.

Custom rules by asset type

Text assets

Text assets are the simplest type. Use them for plain strings that should not include markup.

  • Set Max Length in the side panel.
  • The configured max length must be 5000 or less.
  • The editor also enforces plain-text safety rules such as blocking HTML/script tags and invalid control characters.

JSON assets

JSON assets support field-level validation based on the fields detected from your current JSON structure.

  • Select a field from the side panel search box.
  • Turn on Enable rules for that field.
  • The field type is auto-detected and displayed as String, Number, Array, Boolean, or Url.
  • Optional field rules include Max Length and Required.
  • Per-field max length must be 5000 or less.

HTML assets

HTML assets always pass through sanitization, and they must be validated before they can be saved. Validation also refuses content the visual editor cannot represent.

  • Turn on Enable Custom HTML Rules in the side panel.
  • Tag level rules: allow iframe, style tags, inline styles, allowed CSS properties, tables, video/audio, and code/pre blocks.
  • Attribute level rules: allow class, id, data attributes, target blank, rel, and loading lazy.
  • Content quality rules: max HTML length.
  • Media rules: allow external images, restrict allowed image domains, require alt text, and auto-inject loading lazy.
  • Max HTML Length must be between 1 and 100,000.

Visual editor (HTML assets)

HTML assets can be edited as markup or through a toolbar. The choice is saved per asset, so hand-tuned markup can stay in code mode while simpler content uses the toolbar.

  • Turn on Use the visual editor in the side panel.
  • The toolbar follows the rules above. Turning off code and pre removes those buttons, and allowing tables adds the table button.
  • Covers headings, bold, italic, underline, strikethrough, lists, quotes, dividers, links, images, code, and tables.
  • It has no equivalent for layout markup such as div, span, figure, iframe, video, or style.
  • If the content uses any of those, the editor names them when the asset opens and Validate refuses to pass until the visual editor is switched off. Code mode keeps that markup intact.
  • Opening an asset in the visual editor never changes what is stored. Content is only rewritten once you edit it.
  • Pasted content is reduced to the formatting the rules allow, so markup from another page cannot arrive intact.

Image assets

Image assets store a single file and do not support localization. Responsive variants are generated for raster uploads.

  • Turn on Enable Custom Image Rules in the side panel.
  • Allowed File Formats: allow all image formats or restrict uploads to selected MIME types.
  • File Size Constraints: set the max file size in bytes.
  • Dimension Constraints: set minimum and maximum width and height. Use 0 to disable a dimension constraint.
  • Image Type Restrictions: allow or block animated images.
  • Privacy & Security: strip EXIF metadata such as location and camera data.

Default behavior when custom image rules are off

  • Baseline image formats are accepted by the editor.
  • Max file size is 5 MB on a free project and 25 MB on a paid slot, measured after image conversion. See Limits.
  • No dimension restrictions are applied.
  • Animated images are allowed.
  • EXIF metadata is stripped for privacy.

Document assets

A document is stored exactly as you upload it. An image can be decoded and rebuilt, which is what makes most of its rules possible; a PDF cannot, so a document has only two rules and relies on a malware scan instead.

  • Allowed File Formats: PDF only. A rule can narrow this further but cannot add formats.
  • File Size Constraints: set the max file size in bytes. Your project's ceiling still applies and wins when it is lower.
  • The format is confirmed by reading the file itself, so renaming something to .pdf does not get it accepted.
  • Every upload is scanned for malware before it is stored. A file that fails the scan is refused and never reaches storage.
  • Documents are not localized. Each asset holds one file.

Publishing is blocked when the draft is not ready

Publish remains unavailable if the draft has unsaved changes. HTML must validate before save, and image drafts must satisfy the active image rules before publish.