Custom fonts
Custom fonts API endpoints let you upload and manage custom fonts on a Webflow site.
It uses seven OAuth v2 endpoints under /v2/sites/{site_id}/custom_fonts.
The upload flow uses the same presigned-S3 handshake as the Assets API: Webflow returns signed S3 fields, and you POST the font binary directly to S3. The Webflow API server never receives the raw font bytes.
Supported formats
The API accepts the following font formats:
- WOFF2 (
.woff2) - WOFF (
.woff) - TrueType (
.ttf) - OpenType (
.otf) - Embedded OpenType (
.eot)
For security reasons, SVG fonts are not supported.
Sites that have pre-existing SVG fonts continue to return format: "svg" in read responses, but you cannot upload new SVG fonts through the API.
Upload handshake
Uploading a font is a two-step process.
Register the font with Webflow
Send a POST request to /v2/sites/{site_id}/custom_fonts with the font metadata and the MD5 hash of the binary, as in this example:
The API returns 202 Accepted with a customFont object and an upload object.
The upload object contains a presigned url and a fields map to use in the next step.
Upload the binary to S3
Send a POST request that includes the font binary as multipart/form-data to upload.url.
Include every key from upload.fields as a form field, then append the binary in a field named file.
The file field must be the last field in the multipart form.
Any fields after file are ignored.
The API returns 201 Created on success.
The font is immediately available in the site’s typography picker and in published-site rendering.
Examples
Foundry or font-platform integration
This example shows how a foundry or font-platform app provisions a licensed font into a user’s Webflow site.
Multi-site brand font sync
This example shows how an agency dashboard keeps the same brand fonts in sync across every site it manages.
AI or MCP agent typography setup
This example shows how an AI agent uploads a brand font and verifies it is accessible before proceeding to dependent steps.
Limitations
- Supported formats: WOFF2, WOFF, TTF, OTF, EOT. SVG fonts are not accepted.
- File size: Uploads exceeding 4 MB are rejected by S3 with an
EntityTooLargeerror. - Per-site limit: Each site has an internal cap on total custom fonts. Exceeding the cap returns
409 Conflict. - Variable font axes: Each font supports a maximum of 16 variable axes.
- Batch delete: A single batch delete request supports 1–100 font IDs.