Skip to content
Docs

Publish an Article

Early access. Tell us what you're building and we'll set you up. Contact us

POSTapi.lempile.com/articles

Builds one X Article in a new draft (title, every block in order, cover), reads the draft back, and publishes it only if X kept exactly those blocks; otherwise nothing is published and the draft stays in the account's Drafts. It takes minutes, so this answers 202 and GET /articles/{key} says where it is. The same key never builds twice. Paced like posts unless dry_run.

Scope: accounts.write.

Authentication

X-API-KEY header·A Lempile API key, made in the dashboard under Access tokens.

Headers

  • Idempotency-Keystringrequired

    1–200 characters of A-Z a-z 0-9 . _ : -. The same key with the same request replays the first answer; see Write receipts.

    ≤ 200 chars

Request body

  • account_idstringrequired
  • titlestringrequired
    ≤ 200 chars
  • coverArticleFile
    ›Show fields
    • namestringrequired
    • content_typestringrequired
      One ofimage/jpegimage/pngimage/webp
    • data_base64stringrequired
  • blocksarray of ArticleBlockrequired

    Images: 30 at most, 8 MB each, 40 MB in all.

    ≥ 1 items · ≤ 200 items
    ›Show fields
    • Option 1object
      ›Show fields
      • kindanyrequired
        Alwaystext
      • htmlstringrequired
        ≤ 100000 chars
      • plainstring
    • Option 2object
      ›Show fields
      • kindanyrequired
        Alwaysimage
      • altstring
      • fileArticleFilerequired
        ›Show fields
        • namestringrequired
        • content_typestringrequired
          One ofimage/jpegimage/pngimage/webp
        • data_base64stringrequired
    • Option 3object
      ›Show fields
      • kindanyrequired
        Alwayscode
      • textstringrequired
        ≤ 100000 chars
  • dry_runboolean

    Builds and checks the draft but never publishes.

Responses

202

Building.

›

application/json

  • objectany
    AlwaysArticleJob
  • idstring
  • account_idstring
  • statusstring
    One ofbuildingpublisheddraftnot_sentunknown
  • urlstring
  • article_idstring
  • draft_urlstring
  • codestring
  • detailstring
400

Invalid body or Idempotency-Key.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

401

Missing or invalid API key ({error, message}), errors/disconnected_account, or errors/reauth_required when X is signed out in the account's browser.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

402

subscription_required: the workspace has no active trial or subscription.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

404

errors/resource_not_found: no such account in this workspace, or it isn't an X account.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

409

account_busy: another Article is building on this account.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

422

not_sent: nothing was published; code and detail say why.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

423

errors/x_account_locked: X shows the account its lock page (x.com/account/access). Nothing was done; someone has to pass X's check.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

429

errors/too_fast or errors/daily_limit.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

503

errors/service_unavailable (the account isn't ready, or the browser runner can't be reached), errors/no_client_session, or errors/maintenance with retry_at.

›

application/problem+json

  • typestringrequired
  • titlestring
  • statusintegerrequired
  • detailstring
  • retry_atstring · date-time
  • codestring

    The browser's own reason, when it refused before the click: replies_limited, post_not_accepted, gif_not_found, browser_busy…

Was this page helpful?