Skip to content
Docs

Create a post

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

POSTapi.lempile.com/posts

Posts from the account's own X, in its own browser: words, up to 4 images or one video, or a GIF from X's GIF search. To reply, use POST /posts/{post_id}/comments.

Paced per account (see Errors and limits): at least 45 seconds between writes and 70 writes in 24 hours. The request waits up to 140 seconds; if X doesn't confirm by then, the answer is 504 errors/timeout and the receipt tells you what happened.

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

    The X account (also accepted as ?account_id=).

  • textstringrequired

    The post's words. More than 280 characters needs X Premium on the account: without it X keeps the post in its box and the answer is 422 errors/not_sent.

    ≤ 3000 chars
  • attachmentsarray of string · binary

    Multipart only: up to 4 images (JPEG, PNG, WebP or GIF, 8 MB each), or one MP4 of up to 50 MB on its own.

  • gifstring

    A GIF from X's own GIF search, as JSON {"query": "...", "url": "..."} (a string in a form field): query 2–40 letters, digits, spaces, ' or -; url a result from GET /posts/gifs. Not with attachments.

  • dry_runboolean

    Does everything but press Post: answers 200 PostDryRun, nothing is posted.

Responses

200

Dry run: everything but the Post button.

›

application/json

  • objectany
    AlwaysPostDryRun
  • providerany
    AlwaysX
  • not_sentany
    Alwaystrue
  • gifobject
201

Posted.

›

application/json

  • objectany
    AlwaysPostCreated
  • providerany
    AlwaysX
  • post_idstring
400

errors/missing_parameters, errors/invalid_parameters, errors/missing_idempotency_key or errors/invalid_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

errors/in_progress: the same key is still running or its outcome isn't known yet. errors/account_busy: an X Article is being built 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

errors/not_sent (the browser stopped before Post; code says why: post_not_accepted when X kept the post in its box, gif_not_found, browser_busy…), errors/post_button_disabled, errors/idempotency_key_reused, errors/x_app_not_loaded, errors/proxy_auth_failed or errors/proxy_unreachable.

›

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, errors/daily_limit or errors/browser_busy, 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…

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…

504

errors/timeout: Post was pressed but X didn't confirm in time. Read the receipt before sending again.

›

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?