Manage the custom fonts available to your project. Fonts are scoped to a single project — uploads through this API land in the project that owns the API token you authenticate with.
The uuid returned for each font is the font code that templates reference via the fontFamily field on text layers.
A single font object — returned by POST, GET /fonts/{uuid}, and PATCH:
{
"uuid": "f1abc123def456",
"title": "Helvetica Neue",
"filename": "HelveticaNeue-Regular.ttf",
"created_at": "2026-05-06T11:24:00+00:00"
}
The list endpoint wraps results in a cursor-paginated envelope:
{
"data": [
{
"uuid": "f1abc123def456",
"title": "Helvetica Neue",
"filename": "HelveticaNeue-Regular.ttf",
"created_at": "2026-05-06T11:24:00+00:00"
}
],
"links": {
"first": null,
"last": null,
"prev": "...",
"next": "..."
},
"meta": {
"path": "https://api.placid.app/api/rest/fonts",
"per_page": 20
}
}
| Field | Values |
|---|---|
font.uuid |
The font code. Use this value as the fontFamily on text layers when generating creatives. |
font.title |
The display title you set when uploading the font. |
font.filename |
The original filename of the uploaded font file. |
font.is_legacy |
Only present when the request used ?include_legacy=1. true for legacy account-wide fonts (uploaded before per-project fonts existed); false for project-scoped fonts. |
font.created_at |
ISO 8601 timestamp of when the font was uploaded. |
data |
(Index only) Array of fonts. |
links.prev |
(Index only) Link to previous cursored page. |
links.next |
(Index only) Link to next cursored page. |
Get a list of the custom fonts in your project. The endpoint returns 20 items per page using cursor pagination.
| Method | URI |
|---|---|
| GET | https://api.placid.app/api/rest/fonts |
| Name | Type | Description |
|---|---|---|
include_legacy |
boolean |
(Optional) When truthy, also includes legacy account-wide fonts (those uploaded before per-project fonts existed). Defaults to false. Use this to get the full set of fonts usable in this project. |
# Project-scoped fonts only (default)
curl -X GET https://api.placid.app/api/rest/fonts \
-H "Authorization: Bearer YOUR_API_TOKEN"
# Project-scoped + legacy account-wide fonts
curl -X GET "https://api.placid.app/api/rest/fonts?include_legacy=1" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Get a single font by its uuid. Returns 404 if no font with that uuid exists in your project.
| Method | URI |
|---|---|
| GET | https://api.placid.app/api/rest/fonts/{uuid} |
| Path parameter | Description |
|---|---|
uuid |
The font uuid (code). |
| Name | Type | Description |
|---|---|---|
include_legacy |
boolean |
(Optional) When truthy, also allows retrieving a legacy account-wide font (those uploaded before per-project fonts existed). Defaults to false. |
curl -X GET https://api.placid.app/api/rest/fonts/f1abc123def456 \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"uuid": "f1abc123def456",
"title": "Helvetica Neue",
"filename": "HelveticaNeue-Regular.ttf",
"created_at": "2026-05-06T11:24:00+00:00"
}
Upload a new custom font file to your project. The file is sent as multipart/form-data.
You must confirm that you have the right to use the font by sending a truthy terms_accepted value with every upload.
| Method | URI |
|---|---|
| POST | https://api.placid.app/api/rest/fonts |
POST /api/rest/fonts HTTP/1.1
Host: api.placid.app
Authorization: Bearer YOUR_API_TOKEN
Content-Type: multipart/form-data
Content-Disposition: form-data; name="file"; filename="HelveticaNeue-Regular.ttf"
Content-Type: font/ttf
[Binary data for the font file]
Content-Disposition: form-data; name="title"
Helvetica Neue
Content-Disposition: form-data; name="terms_accepted"
1
| Field | Type | Description |
|---|---|---|
file |
file | Required. The font file. Supported formats: ttf, otf, woff, woff2. |
title |
string | Optional display title. Falls back to the filename if omitted. Max 200 characters. |
terms_accepted |
boolean | Required. Must be truthy (1, true, yes, on). Confirms that you own the font or have the right to use it. |
{info} Note: The font file must be sent as
Content-Type: multipart/form-data.
The created font is returned. Use the returned uuid as the fontFamily value on text layers.
{
"uuid": "f1abc123def456",
"title": "Helvetica Neue",
"filename": "HelveticaNeue-Regular.ttf",
"created_at": "2026-05-06T11:24:00+00:00"
}
Update the display title of a font. The font file itself cannot be replaced — upload a new font instead if you need a different file.
| Method | URI |
|---|---|
| PATCH | https://api.placid.app/api/rest/fonts/{uuid} |
| Path parameter | Description |
|---|---|
uuid |
The font uuid (code). |
curl -X PATCH https://api.placid.app/api/rest/fonts/f1abc123def456 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "title": "Helvetica Neue Bold" }'
| Field | Type | Description |
|---|---|---|
title |
string | Required. The new display title. Max 200 characters. |
The updated font is returned.
{
"uuid": "f1abc123def456",
"title": "Helvetica Neue Bold",
"filename": "HelveticaNeue-Regular.ttf",
"created_at": "2026-05-06T11:24:00+00:00"
}
Permanently delete a font from your project.
By default, if the font is still referenced by one or more templates the request fails with HTTP 409 Conflict and the response lists the blocking templates. Update or remove those references first, then retry — or pass force=1 to delete anyway.
| Method | URI |
|---|---|
| DELETE | https://api.placid.app/api/rest/fonts/{uuid} |
| Path parameter | Description |
|---|---|
uuid |
The font uuid (code). |
| Name | Type | Description |
|---|---|---|
force |
boolean |
(Optional) When truthy, deletes the font even if templates still reference it. The references are not rewritten — those templates will fall back to the default font on the next render. Defaults to false. |
# Default — fails with 409 if any template references the font
curl -X DELETE https://api.placid.app/api/rest/fonts/f1abc123def456 \
-H "Authorization: Bearer YOUR_API_TOKEN"
# Force-delete even if templates still reference the font
curl -X DELETE "https://api.placid.app/api/rest/fonts/f1abc123def456?force=1" \
-H "Authorization: Bearer YOUR_API_TOKEN"
If the font is still in use and force is not set, the response is 409 Conflict:
{
"message": "Font is still in use and cannot be deleted. Pass force=1 to delete anyway.",
"templates_using_font": [
{
"uuid": "tmpl_abc123",
"title": "Instagram Story"
}
]
}