Getting Started
Create TribeTale API credentials and make your first authenticated request.
Choose the API
Use the Admin API when your integration needs to create, update, publish, upload, or manage private resources. Admin API requests are mounted under /ghost/api/admin and require a short-lived JWT signed with an Admin API key.
Use the Content API when your integration only needs to read published content. Content API requests are mounted under /ghost/api/content and authenticate with ?key=<content api key>.
AI assistants should connect through the TribeTale MCP server instead of handling raw API keys directly.
Create an integration
- Open TribeTale admin.
- Create a Custom Integration.
- Copy the Admin API key. It has the format
id:secret. - Copy the Content API key if you need read-only public content access.
Sign Admin API requests
Admin API requests use this header:
Authorization: Ghost <JWT>Create the JWT with:
- Algorithm:
HS256 - Header
kid: the key id before the:in the Admin API key - Signing secret: the hex-decoded bytes from the secret after the
: audclaim: the API path, for example/ghost/api/admin/- Maximum age: 5 minutes
Create a draft post
This request creates a draft post from HTML. Replace the token and host with values from your integration environment.
curl -X POST 'https://example.com/ghost/api/admin/posts/?source=html' \
-H 'Authorization: Ghost <JWT>' \
-H 'Content-Type: application/json' \
-d '{
"posts": [
{
"title": "Hello from the API",
"html": "<p>This draft was created through TribeTale.</p>",
"status": "draft"
}
]
}'Publish to a newsletter
To publish a post and attach it to a newsletter, update the post with status: published and pass the newsletter slug in the query string.
curl -X PUT 'https://example.com/ghost/api/admin/posts/{id}/?newsletter=<slug>' \
-H 'Authorization: Ghost <JWT>' \
-H 'Content-Type: application/json' \
-d '{
"posts": [
{
"id": "{id}",
"status": "published",
"updated_at": "2026-06-03T16:00:00.000Z"
}
]
}'The updated_at value must match the current post version. Read the post first, then send the latest timestamp with the publish request.
Read published content
Content API requests use the content key as a query parameter:
curl 'https://example.com/ghost/api/content/posts/?key=<content api key>'