Channels
Ghost
How an agent publishes to a Ghost blog through uplika: the integration key, Markdown with photos, drafts and edits.
Quick reference
| Name | Type | Description |
|---|---|---|
characters | text | 30,000 |
images | media | up to 40 per post; more than that and the first 40 go out with a warning |
carousel | media | no carousel; images sit in the post one after another |
video | media | not supported |
text alone | media | allowed |
posts / 24h | limit | 1,000 |
deletes / 24h | limit | Ghost through the Admin API, with no documented daily cap or time limit |
status | state | live |
These numbers come from the same file the server validates against. The title is required and counted in code points. Posts take photos only.
How does the body reach Ghost?
Markdown, rendered by Ghost as written. Put each photo on its own line as ; uplika copies it to the Ghost site. Naver Blog syntax such as @group or {.small} is refused.
How do I publish my first post?
Call publish with Markdown content and options.ghost.title. Add options.ghost.draftOnly to keep it as a Ghost draft.
curl -X POST https://api.uplika.com/v1/posts \
-H "Authorization: Bearer $UPLIKA_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Intro.\n\n",
"accountIds": ["conn_..."],
"options": { "ghost": { "title": "Release notes", "tags": ["news"] } }
}'What options.ghost takes
| Name | Type | Description |
|---|---|---|
titleRequired | string | Required. The post title, up to 255 characters. |
tags | string[] | Tag names; Ghost creates new ones. A name starting with # is refused (Ghost would make it a hidden internal tag). On an edit, leave it out to keep the current tags. |
featureImageMediaId | string | Media id of a JPEG, PNG, GIF or WebP for the feature image; Uplika uploads a copy to Ghost. On an edit, leave it out to keep the current one. |
draftOnly | boolean | Save it as a Ghost draft instead of publishing; the permalink is then its Ghost editor page. Not the same as draft on the post, which keeps it on Uplika. |
content | string | Text for this channel only. When set it replaces the shared content for this channel, and the length and media checks use it. Leave it out to use the shared content. |
Generated from the same schema the server validates with. GET /v1/platforms returns it too.
What is not available?
Newsletter email: uplika never sends one, posts only go to the site. Members-only posts, video, comments and view counts are not offered. update_post rewrites in place and keeps tags and the feature image you leave out.
Frequently asked
Whose name is on the post?
With an integration key Ghost lists the site owner as the author; a staff access token posts as that user.
Why does connecting say the API URL is wrong?
Paste the integration's API URL, not the public site address. On Ghost(Pro) it ends in .ghost.io even with a custom domain.
What if someone edits the post in Ghost at the same time?
uplika rereads and retries once; if it is still being edited, update_post fails with ghost_update_collision rather than overwrite it.