I would like to receive the custom settings via the Content API or the Admin API. Is that possible?
But I have not found an endpoint. I thought it was settings.
One option if you can edit the theme would be to make a page template that writes out the values you want. There might well be an endpoint, but that’s a workaround if there isn’t.
You’re full of good ideas, Cathy.
I would never have thought of that, thank you.
I will create a page with the slug “custom_settings” with the ones I need.
The admin API exposes them via /ghost/api/admin/custom_theme_settings/, but it’s not available for token-based authentication
Many thanks for the hint.
This means that only “user authentication” is an option.
It’s not ideal for using Ghost as a headless CMS.
I will try Cathy’s suggestion first.
On the other hand, there is still direct access to the database in the backend ![]()
At the same time, headless Ghost implies you won’t be using the native ghost theme layer, so custom settings “isn’t needed”.
But I can see some benefits of doing this, like allowing staff to have a UI to make some minor changes instead of editing the headless code
That’s the point, it’s more flexible.
I have made it with Cathy’s suggestion:
- custom-settings.hbs
{
"header_style": "{{@custom.header_style}}",
"body_font": "{{@custom.body_font}}",
"header_and_footer_color": "{{@custom.header_and_footer_color}}",
"post_feed_style": "{{@custom.post_feed_style}}"
}
- routes.yaml
routes:
/custom-settings/:
template: custom-settings
content_type: application/json
collections:
/:
...
On the clientside I use fetch, not the GhostContentAPI:
export async function getCustomSettings() {
return await fetch(`${API_URL}/custom-settings/`).then(async (res) => {
const obj = await res.text()
return JSON.parse(obj)
}).catch(error => {
console.error("getCustomSettings error:", error);
})
}
That’s all.
You can use like:
const customSettings = await getCustomSettings()
console.log('customSettings', customSettings, customSettings.body_font, ....)
