Brand voice training is now live —See what’s new →
Developers

API Reference

Integrate GhostPostt into your own tools, workflows, and applications. Available on Agency plan.

● API v1 — Stable

Authentication

All API requests must include your API key in the Authorization header as a Bearer token. Generate an API key from Settings → Developer → API Keys.

Request header
Authorization: Bearer gp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API access is available on Agency plan only. Your API key carries full account permissions — keep it secret and never expose it in client-side code.

Base URL: https://api.ghostpostt.ai/v1

POST /generate

Submit a URL for processing. Returns a full output bundle asynchronously via webhook, or synchronously if wait: true is set.

POST/v1/generate

Request body

ParameterTypeDescription
url requiredstringThe publicly accessible URL to repurpose.
outputs optionalstring[]Which outputs to generate. Defaults to all available on your plan. Options: "x_thread", "linkedin", "instagram", "threads", "seo_blog"
voice_id optionalstringID of a saved brand voice profile to apply. Retrieve IDs from /v1/voices.
voice_strength optionalnumberHow strongly to apply the voice (0.0 – 1.0). Default: 0.7.
wait optionalbooleanIf true, waits for generation to complete and returns the full bundle synchronously. Default: false. Timeout: 30s.
webhook_url optionalstringURL to POST results to when generation completes. Required if wait is false.
Example request
curl -X POST https://api.ghostpostt.ai/v1/generate \ -H "Authorization: Bearer gp_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/article", "outputs": ["x_thread", "linkedin"], "wait": true }'
Response
{ "id": "gen_01HXYZ...", "status": "completed", "created_at": "2026-05-09T12:00:00Z", "url": "https://example.com/article", "brief": { "title": "Example Article Title", "word_count": 1240, "key_topics": ["AI", "content", "creators"] }, "outputs": { "x_thread": ["Tweet 1 text...", "Tweet 2..."], "linkedin": "Full LinkedIn post text..." } }

GET /outputs

Retrieve a list of past generation results for your account.

GET/v1/outputs
ParameterTypeDescription
limit optionalnumberMax results to return. Default: 20. Max: 100.
cursor optionalstringPagination cursor from the previous response.

GET /voices

Returns a list of saved brand voice profiles for your account.

GET/v1/voices

Rate limits

  • Requests per minute: 60
  • Concurrent generations: 5
  • Generations per month: subject to your plan limit (unlimited on Agency)

Rate limit headers are included in every response: X-RateLimit-Remaining and X-RateLimit-Reset.

Error codes

CodeMeaning
400Bad request — missing or invalid parameters
401Unauthorized — invalid or missing API key
402Payment required — plan limit reached or subscription lapsed
422URL could not be fetched or parsed
429Rate limit exceeded
500Internal server error — retry after a few seconds

Webhooks

When wait: false, GhostPostt will POST the completed generation to your webhook_url. The payload is identical to the synchronous response format.

Validate webhook authenticity using the X-GhostPostt-Signature header — an HMAC-SHA256 signature of the raw request body using your webhook secret (configured in Settings → Developer).