ワンクリックで
ghost-admin-api
Interact with Ghost CMS Admin API — publish posts, manage pages/tags/members, upload images, send newsletters.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Interact with Ghost CMS Admin API — publish posts, manage pages/tags/members, upload images, send newsletters.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Run 6-persona BMAD analysis for strategic product/business decisions, with agent cross-validation.
Initialize a new project with BMAD methodology — pull docs from Outline Cloud, setup _bmad structure, generate epics and stories, commit to develop branch. Reusable for any new product going through BMAD analysis.
Manual 3-persona adversarial security review for PRs — Blind Hunter, Edge Case Hunter, Acceptance Auditor. Use when Pi/ZAI are unreliable for analytical tasks.
EmbeddingGemma ONNX — CPU-only local embedding (onnxruntime+tokenizers, NO optimum/transformers). Model setup, embed function, Qdrant connection. Use embeddinggemma-knowledge or embeddinggemma-novel for specific use cases.
Full Discord server management via REST API — channels, roles, members, permissions. Bot has ADMINISTRATOR access.
Comprehensive fullstack QA standard operating procedure — functional, security, visual, responsive, and data integrity testing. 5-layer pipeline with conditional checks, reusable patterns, and structured reporting. General-purpose — not framework-specific.
| name | ghost-admin-api |
| description | Interact with Ghost CMS Admin API — publish posts, manage pages/tags/members, upload images, send newsletters. |
| version | 2.0.0 |
| license | MIT |
| tags | ["ghost","cms","blog","publishing","api","newsletter"] |
Manage Ghost CMS via Admin API — publish posts, manage content, upload images, send newsletters. Works with any self-hosted Ghost 5.x/6.x instance.
{24hex}:{64hex})pip install PyJWTGHOST_ADMIN_URL=https://your-ghost-domain.com/ghost/api/admin
GHOST_ADMIN_KEY=24hex_id:64hex_secret
The GhostAdmin class is documented here but NOT installed as a pip package. Copy it from references/code_examples.md inline into your script.
g = GhostAdmin()
print(g.site_info())
| Operation | Method | Path |
|---|---|---|
| Create post | POST | /posts/?source=html |
| List posts | GET | /posts/ |
| Update post | PUT | /posts/{id}/?source=html |
| Delete post | DELETE | /posts/{id}/ |
| Upload image | POST | /images/upload/ |
| List tags | GET | /tags/ |
| Create tag | POST | /tags/ |
| List members | GET | /members/ |
| Site info | GET | /site/ |
| Send newsletter | PUT | /posts/{id}/?newsletter={slug}&email_segment=all |
Full endpoint reference →
references/api_endpoints.md
Ghost Admin API uses JWT tokens generated from the Admin API Key:
import jwt, time
def make_token(key_id, key_secret):
return jwt.encode(
{"iat": int(time.time()), "exp": int(time.time()) + 300, "aud": "/admin/"},
bytes.fromhex(key_secret), algorithm="HS256", headers={"kid": key_id}
)
Required headers for every request:
Authorization: Ghost {jwt_token}
Accept-Version: v6.27
Content-Type: application/json
User-Agent: YourApp/1.0
User-Agent header required — Cloudflare blocks without it (1010 error)Accept-Version — must match your Ghost version{"posts": [...]}, {"tags": [...]}, etc.updated_at required for PUT — always GET first to prevent conflicts?source=html is CRITICAL — without it, html field is silently ignored → empty post?formats=html,lexical — default GET returns empty html field?limit=all caps at 100)json.loads()html is non-emptynewsletter field in POST body is silently ignored — use PUT query params instead| Format | How to Send | Notes |
|---|---|---|
| HTML (recommended) | ?source=html + "html": "..." | Auto-converts to Lexical |
| Lexical (native) | "lexical": "..." | Full fidelity — see references/content-formats.md |
Styled HTML (
<div>,style,class) requires<!--kg-card-begin: html-->wrapper.
For programmatic post building, use references/lexical_builder.py — copy functions inline into your script:
from lexical_builder import text_node, heading_node, build_lexical, rich_paragraph
blocks = [
heading_node("Section Title"),
rich_paragraph(["Normal text ", ("bold text", "bold"), ("linked", "https://example.com")]),
]
lexical_json = build_lexical(blocks)
| File | Description |
|---|---|
references/api_endpoints.md | Complete API endpoint reference (all resources, params, bodies) |
references/code_examples.md | GhostAdmin Python class + usage examples |
references/workflows.md | Common workflows: publish, schedule, newsletter, bulk audit |
references/pitfalls.md | Common errors, gotchas, and fixes |
references/content-formats.md | Lexical format details and HTML conversion |
references/lexical_builder.py | Python helper functions to build Lexical JSON |