Template assets
Logos, images and custom fonts live in your organisation's asset library. Templates reference them by renderPath, which PDFox resolves when it renders previews and PDFs.
list_assets, scope asset:read) and upload them (upload_asset, scope asset:write). Deleting assets is done in the dashboard or with DELETE /v1/assets/{assetId}.Uploading assets
Upload in the dashboard under Settings → Assets, with upload_asset over MCP, or with POST /v1/assets. Files can be up to 20 MB.
| Asset type | Accepted files |
|---|---|
image / logo | JPEG, PNG, WebP, GIF, SVG |
font | WOFF, WOFF2, TTF, OTF |
Uploads need a plan with custom assets enabled (customAssetsEnabled, otherwise ASSETS_NOT_ENABLED). Fonts also need font uploads (fontUploadEnabled, otherwise FONT_UPLOAD_NOT_ENABLED). Your plan also caps the asset count and total storage. list_assets returns all of these values.
upload_asset takes filename, assetType, mimeType (for example image/png or font/woff2) and base64Data: the file bytes as standard base64 with no data: prefix. Agents should upload files the user provides, not generate placeholder logos.
Using assets in templates
Each asset has a renderPath of the form /assets/{assetId}/content?orgId={orgId}. Copy it exactly as returned into your HTML or CSS:
| Asset type | Usage in template |
|---|---|
| Image / logo | <img src="renderPath" /> |
| Custom font | @font-face { font-family: 'Brand'; src: url('renderPath'); } |
For fonts, list_assets and upload_asset also return a fontFamily name and a ready-made @font-face cssSnippet.
MCP: list assets
Call list_assets (no parameters) before writing any template that uses a logo, image or font. If the asset exists, use its renderPath. If it doesn't, upload it with upload_asset and use the returned renderPath.
renderPath PDFox returns. Don't invent paths, change them, or point at external image URLs. PDFox resolves render paths for your organisation when it renders, so they work in previews and in generated PDFs.