Skip to content

Reference

API reference

Every endpoint of the reblogger.ai REST API v1, generated from our OpenAPI 3.1 document.

Basics

Base URL

https://reblogger.ai/api/v1

Authentication

Authorization: Bearer rb_live_…

JSON in, JSON out, snake_case everywhere. Errors are application/problem+json (error codes), and every response carries rate-limit headers. Generate a typed client from the spec with any OpenAPI generator:

Shell
npx openapi-typescript https://reblogger.ai/api/v1/openapi.json -o reblogger.d.ts

Articles

Create, list, read, edit and delete articles.

Create an article

POST/api/v1/articles
Bearer API keyarticles:write20 requests / minute

Starts an asynchronous generation from a URL or a topic. Credits are reserved immediately and refunded if the generation fails. Poll GET /generations/{id}, stream GET /generations/{id}/events, or register a webhook to know when the article is ready. Send an Idempotency-Key header to safely retry: a repeated key returns the original generation with status 200.

Parameters

  • Idempotency-Keystringin header

    Unique key (≤ 100 chars) to make retries safe. Replays return the original generation.

Request body · application/json

  • sourceArticleSourcerequired

    Where the article comes from: a URL to rewrite or a topic to write about.

    › Child attributes

    One of:

    type: "url" — Rewrite an existing article into a new, original post.

    • type"url"required
    • urlstringrequired

      Public http(s) URL of the article to rewrite.

      uri · max length 2,048

    type: "topic" — Write a new article from a topic.

    • type"topic"required
    • topicstringrequired

      What the article should be about.

      min length 3 · max length 500

    • keywordsarray<string>optional

      Up to 10 secondary keywords to weave in.

      max 10 items

  • languageenumoptionaldefault "en"

    Output language (ISO code), one of 26 supported languages.

    endeesfritnlptpt-BRruplsvdanoficstrarhijakozhidukroelhu
  • modelstringoptional

    Text model id from GET /v1/models. Defaults to your account default (Claude Sonnet 5.5).

    max length 64

  • image_modelstring | nulloptional

    Image model id from GET /v1/models, or null for no images.

    max length 64

  • lengthenumoptionaldefault "medium"

    Target length: short ≈ 800 words, medium ≈ 1,500 words, long ≈ 2,500 words, pillar ≈ 4,000 words.

    shortmediumlongpillar
  • toneenumoptionaldefault "professional"

    Writing tone.

    professionalfriendlyconversationalauthoritativewittyacademicpersuasive
  • audiencestringoptional

    Who the article is for, e.g. "small business owners".

    max length 200

  • point_of_viewenumoptionaldefault "second"

    Narrative point of view: first (I/we), second (you) or third person.

    firstsecondthird
  • focus_keywordstringoptional

    Primary SEO keyword. Chosen automatically when omitted.

    max length 100

  • include_faqbooleanoptionaldefault true

    Append an FAQ section (also returned as structured faq).

  • include_takeawaysbooleanoptionaldefault true

    Add a "Key takeaways" box after the introduction.

  • image_countintegeroptionaldefault 1

    Number of AI images (cover + inline), capped by your plan.

    0–3

  • brand_voice_idstringoptional

    Brand voice id from your dashboard.

    max length 40

  • instructionsstringoptional

    Extra instructions for the writer (max 2,000 characters).

    max length 2,000

  • rewrite_strengthenumoptionaldefault "full"

    URL sources only: how far to move away from the source wording.

    lightmoderatefull
  • callback_urlstringoptional

    HTTPS URL that receives an unsigned POST when the generation finishes. Re-fetch the article via the API.

    uri · max length 2,048

Example request
{
  "source": {
    "type": "topic",
    "topic": "Balcony vegetable gardening for beginners",
    "keywords": [
      "container gardening"
    ]
  },
  "language": "en",
  "length": "medium",
  "tone": "friendly",
  "include_faq": true,
  "image_count": 1
}

Responses

202Generation queued.CreateArticleResponse
› Response attributes
  • generationGenerationrequired
    › Child attributes
    • idstringrequired
    • object"generation"required
    • statusenumrequired
      queuedrunningsucceededfailedcanceled
    • stagestringrequired

      Current pipeline stage, e.g. queued, extracting, outlining, writing, images, seo, finishing, done.

    • progressintegerrequired

      0–100

    • article_idstring | nullrequired
    • modelstringrequired
    • credits_chargedintegerrequired
    • sourceenumrequired
      dashboardapiwordpressmcptrial
    • errorobject | nullrequired
    • created_atstringrequired

      date-time

    • started_atstring | nullrequired

      date-time

    • finished_atstring | nullrequired

      date-time

  • article_idstringrequired
  • linksobjectrequired
    › Child attributes
    • selfstringrequired

      uri

    • eventsstringrequired

      uri

    • articlestringrequired

      uri

Example · application/json
{
  "generation": {
    "id": "cmh1x0gen7f2k0001",
    "object": "generation",
    "status": "queued",
    "stage": "queued",
    "progress": 0,
    "article_id": "cmh1x0art9q3m0001",
    "model": "claude-sonnet-5.5",
    "credits_charged": 1,
    "source": "api",
    "error": null,
    "created_at": "2026-10-31T09:24:11.000Z",
    "started_at": null,
    "finished_at": null
  },
  "article_id": "cmh1x0art9q3m0001",
  "links": {
    "self": "https://reblogger.ai/api/v1/generations/cmh1x0gen7f2k0001",
    "events": "https://reblogger.ai/api/v1/generations/cmh1x0gen7f2k0001/events",
    "article": "https://reblogger.ai/api/v1/articles/cmh1x0art9q3m0001"
  }
}
200Idempotent replay — the generation created by an earlier request with the same key.CreateArticleResponse
› Response attributes
  • generationGenerationrequired
    › Child attributes
    • idstringrequired
    • object"generation"required
    • statusenumrequired
      queuedrunningsucceededfailedcanceled
    • stagestringrequired

      Current pipeline stage, e.g. queued, extracting, outlining, writing, images, seo, finishing, done.

    • progressintegerrequired

      0–100

    • article_idstring | nullrequired
    • modelstringrequired
    • credits_chargedintegerrequired
    • sourceenumrequired
      dashboardapiwordpressmcptrial
    • errorobject | nullrequired
    • created_atstringrequired

      date-time

    • started_atstring | nullrequired

      date-time

    • finished_atstring | nullrequired

      date-time

  • article_idstringrequired
  • linksobjectrequired
    › Child attributes
    • selfstringrequired

      uri

    • eventsstringrequired

      uri

    • articlestringrequired

      uri

List articles

GET/api/v1/articles
Bearer API keyarticles:read

Newest first. Paginate with starting_after=<next_cursor> while has_more is true.

Parameters

  • limitintegerin querydefault 20

    Page size (1–100).

  • starting_afterstringin query

    Cursor: the id of the last article from the previous page.

  • statusenumin query

    Filter by status.

    generating · ready · failed · archived

  • languagestringin query

    Filter by language code.

Responses

200A page of articles.ArticleList
› Response attributes
  • object"list"required
  • dataarray<ArticleSummary>required
    › Child attributes
    • idstringrequired
    • object"article"required
    • statusenumrequired
      generatingreadyfailedarchived
    • titlestringrequired
    • slugstringrequired
    • languagestringrequired
    • excerptstring | nullrequired
    • word_countintegerrequired
    • cover_imageobject | nullrequired
    • sourceobjectrequired
      › Child attributes
      • typeenumrequired
        urltopic
      • urlstring | nullrequired
      • titlestring | nullrequired
      • topicstring | nullrequired
    • modelstring | nullrequired
    • created_atstringrequired

      date-time

    • updated_atstringrequired

      date-time

  • has_morebooleanrequired
  • next_cursorstring | nullrequired
Example · application/json
{
  "object": "list",
  "data": [
    {
      "id": "cmh1x0art9q3m0001",
      "object": "article",
      "status": "ready",
      "title": "How to Start a Vegetable Garden on a Balcony",
      "slug": "balcony-vegetable-garden",
      "language": "en",
      "excerpt": "No yard? No problem. Here is how to grow tomatoes, herbs and greens in containers on even the smallest balcony.",
      "word_count": 1532,
      "cover_image": {
        "url": "https://cdn.reblogger.ai/u/abc/cover.webp",
        "alt": "Tomato plants in pots on a sunny balcony"
      },
      "source": {
        "type": "topic",
        "url": null,
        "title": null,
        "topic": "Balcony vegetable gardening for beginners"
      },
      "model": "claude-sonnet-5.5",
      "created_at": "2026-10-31T09:24:11.000Z",
      "updated_at": "2026-10-31T09:24:11.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Retrieve an article

GET/api/v1/articles/{id}
Bearer API keyarticles:read

Returns the full article including HTML, Markdown, SEO metadata and images. Add ?include=blocks for Gutenberg block markup.

Parameters

  • idstringin pathrequired

    The article id.

  • includeenumin query

    Comma-separated extras. blocks adds content_blocks (Gutenberg markup).

    blocks

Responses

200The article.Article
› Response attributes
  • idstringrequired
  • object"article"required
  • statusenumrequired
    generatingreadyfailedarchived
  • titlestringrequired
  • slugstringrequired
  • languagestringrequired
  • excerptstring | nullrequired
  • word_countintegerrequired
  • cover_imageobject | nullrequired
  • sourceobjectrequired
    › Child attributes
    • typeenumrequired
      urltopic
    • urlstring | nullrequired
    • titlestring | nullrequired
    • topicstring | nullrequired
  • modelstring | nullrequired
  • created_atstringrequired

    date-time

  • updated_atstringrequired

    date-time

  • meta_titlestring | nullrequired
  • meta_descriptionstring | nullrequired
  • focus_keywordstring | nullrequired
  • keywordsarray<string>required
  • tagsarray<string>required
  • categoriesarray<string>required
  • faqarray<object>required
    › Child attributes
    • questionstringrequired
    • answerstringrequired
  • imagesarray<object>required
    › Child attributes
    • urlstringrequired
    • altstringrequired
    • widthintegeroptional
    • heightintegeroptional
    • sectioninteger | nullrequired

      Section index the image belongs to; null = cover image.

  • reading_minutesintegerrequired
  • seoobject | nullrequired
  • settingsobject (map) | nullrequired

    The generation options used (snake_case).

  • content_htmlstringrequired

    Sanitized HTML body (no <h1>; use title).

  • content_markdownstringrequired
  • content_blocksstringoptional

    Gutenberg block markup. Only present with ?include=blocks.

Example · application/json
{
  "id": "cmh1x0art9q3m0001",
  "object": "article",
  "status": "ready",
  "title": "How to Start a Vegetable Garden on a Balcony",
  "slug": "balcony-vegetable-garden",
  "language": "en",
  "excerpt": "No yard? No problem. Here is how to grow tomatoes, herbs and greens in containers on even the smallest balcony.",
  "word_count": 1532,
  "cover_image": {
    "url": "https://cdn.reblogger.ai/u/abc/cover.webp",
    "alt": "Tomato plants in pots on a sunny balcony"
  },
  "source": {
    "type": "topic",
    "url": null,
    "title": null,
    "topic": "Balcony vegetable gardening for beginners"
  },
  "model": "claude-sonnet-5.5",
  "created_at": "2026-10-31T09:24:11.000Z",
  "updated_at": "2026-10-31T09:24:11.000Z",
  "meta_title": "Balcony Vegetable Garden: A Beginner’s Guide (2026)",
  "meta_description": "Grow fresh vegetables on a balcony: the best containers, soil, sun requirements and 12 easy crops for small spaces.",
  "focus_keyword": "balcony vegetable garden",
  "keywords": [
    "container gardening",
    "small space gardening"
  ],
  "tags": [
    "gardening",
    "urban living"
  ],
  "categories": [
    "Home & Garden"
  ],
  "faq": [
    {
      "question": "How much sun does a balcony garden need?",
      "answer": "Most vegetables need 6–8 hours of direct sun…"
    }
  ],
  "images": [
    {
      "url": "https://cdn.reblogger.ai/u/abc/cover.webp",
      "alt": "Tomato plants in pots on a sunny balcony",
      "width": 1536,
      "height": 1024,
      "section": null
    }
  ],
  "reading_minutes": 7,
  "seo": {
    "score": 92,
    "checks": [
      {
        "id": "kw_title",
        "ok": true,
        "weight": 12,
        "label": "Focus keyword in title"
      }
    ]
  },
  "settings": {
    "language": "en",
    "length": "medium",
    "tone": "friendly",
    "image_count": 1
  },
  "content_html": "<p>Fresh tomatoes from your own balcony…</p><h2>Choose the right containers</h2><p>…</p>",
  "content_markdown": "Fresh tomatoes from your own balcony…\n\n## Choose the right containers\n\n…"
}

Update an article

PATCH/api/v1/articles/{id}
Bearer API keyarticles:write

Edit metadata or replace the Markdown body; content_html, word_count and the SEO score are recomputed. Articles that are still generating cannot be edited.

Parameters

  • idstringin pathrequired

    The article id.

Request body · application/json

  • titlestringoptional

    min length 1 · max length 300

  • slugstringoptional

    max length 120

  • excerptstring | nulloptional

    max length 1,000

  • meta_titlestring | nulloptional

    max length 120

  • meta_descriptionstring | nulloptional

    max length 320

  • focus_keywordstring | nulloptional

    max length 100

  • keywordsarray<string>optional

    max 30 items

  • tagsarray<string>optional

    max 30 items

  • categoriesarray<string>optional

    max 10 items

  • content_markdownstringoptional

    New Markdown body. content_html, word count and SEO score are recomputed.

    max length 200,000

  • statusenumoptional

    Archive or un-archive a finished article.

    readyarchived
Example request
{
  "title": "Balcony Vegetable Gardening: The Complete Guide",
  "tags": [
    "gardening",
    "balcony"
  ]
}

Responses

200The updated article.Article
› Response attributes
  • idstringrequired
  • object"article"required
  • statusenumrequired
    generatingreadyfailedarchived
  • titlestringrequired
  • slugstringrequired
  • languagestringrequired
  • excerptstring | nullrequired
  • word_countintegerrequired
  • cover_imageobject | nullrequired
  • sourceobjectrequired
    › Child attributes
    • typeenumrequired
      urltopic
    • urlstring | nullrequired
    • titlestring | nullrequired
    • topicstring | nullrequired
  • modelstring | nullrequired
  • created_atstringrequired

    date-time

  • updated_atstringrequired

    date-time

  • meta_titlestring | nullrequired
  • meta_descriptionstring | nullrequired
  • focus_keywordstring | nullrequired
  • keywordsarray<string>required
  • tagsarray<string>required
  • categoriesarray<string>required
  • faqarray<object>required
    › Child attributes
    • questionstringrequired
    • answerstringrequired
  • imagesarray<object>required
    › Child attributes
    • urlstringrequired
    • altstringrequired
    • widthintegeroptional
    • heightintegeroptional
    • sectioninteger | nullrequired

      Section index the image belongs to; null = cover image.

  • reading_minutesintegerrequired
  • seoobject | nullrequired
  • settingsobject (map) | nullrequired

    The generation options used (snake_case).

  • content_htmlstringrequired

    Sanitized HTML body (no <h1>; use title).

  • content_markdownstringrequired
  • content_blocksstringoptional

    Gutenberg block markup. Only present with ?include=blocks.

Delete an article

DELETE/api/v1/articles/{id}
Bearer API keyarticles:write

Permanently deletes the article. A still-queued generation is canceled and refunded first.

Parameters

  • idstringin pathrequired

    The article id.

Responses

200Deleted.Deleted
› Response attributes
  • idstringrequired
  • objectstringrequired
  • deletedtruerequired
Example · application/json
{
  "id": "cmh1x0art9q3m0001",
  "object": "article",
  "deleted": true
}
  • 401Missing, invalid or revoked API key.invalid_api_key
  • 404The resource does not exist or belongs to another account.not_found
  • 409The resource is in a state that does not allow this operation.conflict
  • 429Too many requests. Honor `Retry-After`.rate_limited

Generations

Track asynchronous generation jobs: status, live events and cancellation.

Retrieve a generation

GET/api/v1/generations/{id}
Bearer API keyarticles:read

Status (queued → running → succeeded | failed | canceled), current stage and progress (0–100).

Parameters

  • idstringin pathrequired

    The generation id.

Responses

200The generation.Generation
› Response attributes
  • idstringrequired
  • object"generation"required
  • statusenumrequired
    queuedrunningsucceededfailedcanceled
  • stagestringrequired

    Current pipeline stage, e.g. queued, extracting, outlining, writing, images, seo, finishing, done.

  • progressintegerrequired

    0–100

  • article_idstring | nullrequired
  • modelstringrequired
  • credits_chargedintegerrequired
  • sourceenumrequired
    dashboardapiwordpressmcptrial
  • errorobject | nullrequired
  • created_atstringrequired

    date-time

  • started_atstring | nullrequired

    date-time

  • finished_atstring | nullrequired

    date-time

Example · application/json
{
  "id": "cmh1x0gen7f2k0001",
  "object": "generation",
  "status": "running",
  "stage": "writing",
  "progress": 46,
  "article_id": "cmh1x0art9q3m0001",
  "model": "claude-sonnet-5.5",
  "credits_charged": 1,
  "source": "api",
  "error": null,
  "created_at": "2026-10-31T09:24:11.000Z",
  "started_at": "2026-10-31T09:24:11.000Z",
  "finished_at": null
}

Stream generation events (SSE)

GET/api/v1/generations/{id}/events
Bearer API keyarticles:read

A text/event-stream of progress events: stage, source, outline, section_delta, section_done, image, seo, and finally done or error. Every event has an id; reconnect with Last-Event-ID (or ?last_event_id=) to resume. The stream closes after done/error.

Parameters

  • idstringin pathrequired

    The generation id.

  • Last-Event-IDstringin header

    Resume after this event id.

Responses

200Event stream.
Example · text/event-stream
id: 812
event: stage
data: {"stage":"writing","progress":40}

id: 813
event: section_delta
data: {"section":0,"text":"Containers are the "}

Cancel a generation

POST/api/v1/generations/{id}/cancel
Bearer API keyarticles:write

Only queued generations can be canceled. Credits are refunded.

Parameters

  • idstringin pathrequired

    The generation id.

Responses

200The canceled generation.Generation
› Response attributes
  • idstringrequired
  • object"generation"required
  • statusenumrequired
    queuedrunningsucceededfailedcanceled
  • stagestringrequired

    Current pipeline stage, e.g. queued, extracting, outlining, writing, images, seo, finishing, done.

  • progressintegerrequired

    0–100

  • article_idstring | nullrequired
  • modelstringrequired
  • credits_chargedintegerrequired
  • sourceenumrequired
    dashboardapiwordpressmcptrial
  • errorobject | nullrequired
  • created_atstringrequired

    date-time

  • started_atstring | nullrequired

    date-time

  • finished_atstring | nullrequired

    date-time

Example · application/json
{
  "id": "cmh1x0gen7f2k0001",
  "object": "generation",
  "status": "canceled",
  "stage": "queued",
  "progress": 0,
  "article_id": "cmh1x0art9q3m0001",
  "model": "claude-sonnet-5.5",
  "credits_charged": 1,
  "source": "api",
  "error": null,
  "created_at": "2026-10-31T09:24:11.000Z",
  "started_at": null,
  "finished_at": "2026-10-31T09:24:11.000Z"
}
  • 401Missing, invalid or revoked API key.invalid_api_key
  • 404The resource does not exist or belongs to another account.not_found
  • 409The resource is in a state that does not allow this operation.conflict
  • 429Too many requests. Honor `Retry-After`.rate_limited

Account

Your plan, credits and the models available to you.

List models

GET/api/v1/models
Bearer API keyarticles:read

Text and image models you can use right now, with their credit cost and whether your plan includes them. Respects EU data residency.

Responses

200Available models.ModelList
› Response attributes
  • object"model_list"required
  • regionenumrequired
    globaleu
  • defaultobjectrequired
    › Child attributes
    • textstringrequired
    • imagestring | nullrequired
  • text_modelsarray<TextModel>required
    › Child attributes
    • idstringrequired
    • vendorenumrequired
      anthropicopenaigooglemistral
    • labelstringrequired
    • tierenumrequired
      fastbalancedpremium
    • creditsintegerrequired

      Credits per article up to ~2,000 words. Long (+1) and pillar (+2) lengths cost extra.

    • descriptionstringrequired
    • eu_availablebooleanrequired

      Can run on an EU-resident endpoint.

    • allowedbooleanrequired

      Included in your plan.

    • recommendedbooleanrequired
  • image_modelsarray<ImageModel>required
    › Child attributes
    • idstringrequired
    • vendorenumrequired
      openaigooglereplicate
    • labelstringrequired
    • tierenumrequired
      fastbalancedpremium
    • eu_availablebooleanrequired
  • lengthsobject (map)required
Example · application/json
{
  "object": "model_list",
  "region": "global",
  "default": {
    "text": "claude-sonnet-5.5",
    "image": "nano-banana-2"
  },
  "text_models": [
    {
      "id": "claude-sonnet-5.5",
      "vendor": "anthropic",
      "label": "Claude Sonnet 5.5",
      "tier": "balanced",
      "credits": 1,
      "description": "Our default. Natural, nuanced writing with excellent structure.",
      "eu_available": true,
      "allowed": true,
      "recommended": true
    }
  ],
  "image_models": [
    {
      "id": "nano-banana-2",
      "vendor": "google",
      "label": "Nano Banana 2",
      "tier": "fast",
      "eu_available": true
    }
  ],
  "lengths": {
    "short": {
      "words": 800,
      "extra_credits": 0,
      "allowed": true
    },
    "medium": {
      "words": 1500,
      "extra_credits": 0,
      "allowed": true
    },
    "long": {
      "words": 2500,
      "extra_credits": 1,
      "allowed": false
    },
    "pillar": {
      "words": 4000,
      "extra_credits": 2,
      "allowed": false
    }
  }
}

Retrieve your account

GET/api/v1/account
Bearer API keyaccount:read

Responses

200Your account.Account
› Response attributes
  • idstringrequired
  • object"account"required
  • emailstringrequired
  • namestringrequired
  • planenumrequired
    freestarterproagency
  • creditsintegerrequired

    Current credit balance.

  • featuresobjectrequired
    › Child attributes
    • tiersarray<enum>required
      fastbalancedpremium
    • apibooleanrequired
    • mcpbooleanrequired
    • webhooksbooleanrequired
    • brand_voicesintegerrequired
    • sitesintegerrequired
    • eu_residencybooleanrequired
    • max_lengthenumrequired
      mediumlongpillar
    • max_imagesintegerrequired
    • priority_queuebooleanrequired
  • eu_data_residencybooleanrequired

    EU data residency is active for this account.

Example · application/json
{
  "id": "usr_8f2k",
  "object": "account",
  "email": "[email protected]",
  "name": "Robin",
  "plan": "pro",
  "credits": 87,
  "features": {
    "tiers": [
      "fast",
      "balanced",
      "premium"
    ],
    "api": true,
    "mcp": true,
    "webhooks": true,
    "brand_voices": 5,
    "sites": 5,
    "eu_residency": true,
    "max_length": "pillar",
    "max_images": 3,
    "priority_queue": false
  },
  "eu_data_residency": false
}

Webhooks

Signed HTTP callbacks when a generation finishes.

List webhook endpoints

GET/api/v1/webhooks
Bearer API keyarticles:read

Responses

200Your endpoints (secrets are never returned here).WebhookEndpointList
› Response attributes
  • object"list"required
  • dataarray<WebhookEndpoint>required
    › Child attributes
    • idstringrequired
    • object"webhook_endpoint"required
    • urlstringrequired
    • eventsarray<enum>required
      generation.succeededgeneration.failed
    • activebooleanrequired
    • created_atstringrequired

      date-time

    • secretstringoptional

      Signing secret. Only returned once, when the endpoint is created.

Create a webhook endpoint

POST/api/v1/webhooks
Bearer API keyarticles:write

Requires a plan with webhooks (Starter and up). The secret is only returned in this response — store it to verify signatures.

Request body · application/json

  • urlstringrequired

    HTTPS endpoint that receives signed POST requests.

    uri · max length 2,048

  • eventsarray<enum>optional

    Events to subscribe to (default: all).

    generation.succeededgeneration.failed
Example request
{
  "url": "https://example.com/hooks/reblogger",
  "events": [
    "generation.succeeded",
    "generation.failed"
  ]
}

Responses

201The endpoint, including its signing secret.WebhookEndpoint
› Response attributes
  • idstringrequired
  • object"webhook_endpoint"required
  • urlstringrequired
  • eventsarray<enum>required
    generation.succeededgeneration.failed
  • activebooleanrequired
  • created_atstringrequired

    date-time

  • secretstringoptional

    Signing secret. Only returned once, when the endpoint is created.

Example · application/json
{
  "id": "cmh1x0whk2b8n0001",
  "object": "webhook_endpoint",
  "url": "https://example.com/hooks/reblogger",
  "events": [
    "generation.succeeded",
    "generation.failed"
  ],
  "active": true,
  "created_at": "2026-10-31T09:24:11.000Z",
  "secret": "whsec_9JcU2v…"
}

Delete a webhook endpoint

DELETE/api/v1/webhooks/{id}
Bearer API keyarticles:write

Parameters

  • idstringin pathrequired

    The webhook endpoint id.

Responses

200Deleted.Deleted
› Response attributes
  • idstringrequired
  • objectstringrequired
  • deletedtruerequired

Utilities

Helpers such as URL extraction.

Extract a web page

POST/api/v1/extract
Bearer API keyarticles:read30 requests / hour per account

Fetches a public page and returns its main article text as Markdown — the same extractor used for URL sources. Costs no credits.

Request body · application/json

  • urlstringrequired

    Public page to extract.

    uri · max length 2,048

Example request
{
  "url": "https://example.com/blog/some-post"
}

Responses

200The extracted source.ExtractedSource
› Response attributes
  • object"extracted_source"required
  • urlstringrequired
  • titlestringrequired
  • markdownstringrequired
  • excerptstring | nullrequired
  • site_namestring | nullrequired
  • bylinestring | nullrequired
  • languagestring | nullrequired
  • published_atstring | nullrequired
  • word_countintegerrequired
  • viaenumrequired
    wordpress-apireadability

OpenAPI document

GET/api/v1/openapi.json
No authentication

This document.

Responses

200OpenAPI 3.1 JSON.

WordPress

Endpoints used by the reblogger WordPress plugin.

Exchange a connect code

POST/api/v1/connect/exchange
No authentication

Used by the WordPress plugin after the user approves the connection on reblogger.ai. Exchanges the one-time code (valid for a few minutes, single use) for a site-scoped API key. site_url must match the site that started the flow. No authentication; rate-limited per IP.

Request body · application/json

  • codestringrequired

    One-time code from the reblogger.ai connect redirect.

    min length 8 · max length 200

  • site_urlstringrequired

    The WordPress site URL that started the connect flow.

    min length 4 · max length 2,048

Example request
{
  "code": "rbc_3KfP0…",
  "site_url": "https://myblog.example"
}

Responses

200The API key for this site.ConnectExchangeResponse
› Response attributes
  • api_keystringrequired

    Site-scoped API key. Store it securely; it is not shown again.

  • siteobjectrequired
    › Child attributes
    • idstringrequired
    • urlstringrequired
  • accountobjectrequired
    › Child attributes
    • emailstringrequired
    • planstringrequired
    • creditsintegerrequired
Example · application/json
{
  "api_key": "rb_live_…",
  "site": {
    "id": "cmh1x0sit4c1p0001",
    "url": "https://myblog.example"
  },
  "account": {
    "email": "[email protected]",
    "plan": "starter",
    "credits": 30
  }
}

Disconnect a site

DELETE/api/v1/connect
Bearer API key

Revokes the calling (site) API key and removes the site connection. Requires API-key auth.

Responses

200Disconnected.
Example · application/json
{
  "object": "connection",
  "api_key_id": "cmh1x0key…",
  "site_id": "cmh1x0sit…",
  "deleted": true
}

Webhook events

Sent to your registered endpoints as signed POST requests. See Webhooks for signature verification.

generation.succeeded

Sent when an article is ready. Verify the `x-reblogger-signature` header, then fetch the article.

generation.failed

Sent when a generation fails. Credits have already been refunded.

› Event payload attributes
  • idstringrequired

    Unique event id; use it to de-duplicate retries.

  • typeenumrequired
    generation.succeededgeneration.failed
  • createdstringrequired

    date-time

  • dataGenerationrequired
    › Child attributes
    • idstringrequired
    • object"generation"required
    • statusenumrequired
      queuedrunningsucceededfailedcanceled
    • stagestringrequired

      Current pipeline stage, e.g. queued, extracting, outlining, writing, images, seo, finishing, done.

    • progressintegerrequired

      0–100

    • article_idstring | nullrequired
    • modelstringrequired
    • credits_chargedintegerrequired
    • sourceenumrequired
      dashboardapiwordpressmcptrial
    • errorobject | nullrequired
    • created_atstringrequired

      date-time

    • started_atstring | nullrequired

      date-time

    • finished_atstring | nullrequired

      date-time