List X authored posts

Read one synchronous, cursor-paginated authored-post page. The connection must preserve its X app identity and include users.read, tweet.read, and offline.access. Filtering happens after the upstream scan, so returned_count can be lower than scanned_count. x_credits_billing_v1 controls customer accounting only.
https://api.unipost.dev
GET/v1/accounts/:account_id/posts?{external_user_id}&{limit}&{cursor}&{start_time}&{end_time}&{exclude_reposts}&{exclude_replies_to_others}
Authorization
In header · Bearer <token>
Required header · string
Path
string
Query
Required · string
Required · integer
string
string
string
boolean
boolean

Authorization

AuthorizationBearer <token>In header
Workspace API key.
Idempotency-KeystringRequired header
Caller-owned key for this exact logical page. Reuse it only when retrying identical parameters.

Path Params

account_idstring
Connected X account ID.

Query Params

external_user_idstringRequired
Managed User that owns the connected account.
limitintegerRequired
Upstream resources to scan. Must be between 5 and 100; UniPost never silently reduces it.
cursorstring
Opaque cursor returned by the preceding request. Cursors are scoped to the account, Managed User, time range, and filters.
start_timestring
Optional inclusive RFC 3339 lower bound.
end_timestring
Optional exclusive RFC 3339 upper bound. Must be after start_time.
exclude_repostsboolean
Exclude reposts after UniPost scans the upstream page.
exclude_replies_to_othersboolean
Exclude replies to other users while retaining self-replies.

Response Body

200
data[]array
Normalized posts authored by the connected X account, deduplicated by external_post_id.
data[].account_idstring
UniPost connected-account ID.
data[].external_post_idstring
Stable X post ID and the deduplication key.
data[].textstring
Post text returned by X.
data[].created_atstring
RFC 3339 publication time.
data[].content_typestring
original_post, reply, quote, or repost, with repost > reply > quote precedence.
data[].is_replyboolean
Whether the post is a reply.
data[].is_self_replyboolean
Whether the reply targets the same connected author.
data[].is_repostboolean
Whether the post is a repost.
data[].is_quoteboolean
Whether the post quotes another post.
data[].thread.thread_idstring
X conversation ID used as thread_id. Thread position is not exposed because X does not return a reliable authored-timeline position.
data[].mediaarray
Normalized media types: image, video, or gif.
data[].public_metricsobject
Likes, replies, reposts, quotes, and impressions.
meta.limitinteger
Requested upstream scan limit.
meta.scanned_countinteger
Resources successfully mapped or filtered and used for final Credits charging.
meta.returned_countinteger
Posts remaining after validation, deduplication, and filters.
meta.has_moreboolean
Whether another upstream page is available.
meta.next_cursorstring
Opaque next-page cursor when has_more is true.
meta.cursor_expires_atstring
RFC 3339 cursor expiry, normally seven days after issuance.
meta.creditsobject
Accounting mode and, when enabled, estimate, reservation, charge, and release.
meta.credits.accounting_enabledboolean
Whether customer Credits accounting applied.
meta.credits.bypass_reasonstring
feature_disabled or customer_x_app when customer accounting is bypassed.
meta.replayedboolean
Present and true for an exact idempotent replay. Absence means false.
request_idstring
Request identifier for logs and support.
400
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
401
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
403
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
404
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
409
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
422
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
429
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.
502
error.codestring
Stable uppercase machine-readable error code.
error.messagestring
Human-readable error message.
error.detailsobject
Credits affordability or retry-cursor details when available.
error.details.retry_cursorstring
Refreshed opaque cursor when a retry delay would outlive the submitted cursor. Retry the same logical page with the same Idempotency-Key.
error.details.retry_cursor_expires_atstring
RFC 3339 expiry for retry_cursor.
error.is_retriableboolean
Whether the same logical page may be retried.
request_idstring
Request identifier for support.

Pagination, idempotency, and errors

Treat each filter set and cursor as a new logical page with a new Idempotency-Key. Reuse the same key only for an exact retry. A cursor is opaque and expires; INVALID_CURSOR means restart from a fresh first page. If error.details.retry_cursor is present, retry that cursor with the same logical-page key.

Handle VALIDATION_ERROR, IDEMPOTENCY_KEY_REQUIRED, ACCOUNT_NOT_FOUND, WRONG_PLATFORM, ACCOUNT_ACCESS_DENIED, ACCOUNT_REAUTHORIZATION_REQUIRED, IDEMPOTENCY_CONFLICT, READ_IN_PROGRESS, READ_SETTLEMENT_PENDING, RATE_LIMITED, and X_UPSTREAM_ERROR by stable code. For retriable states, inspect is_retriable and the HTTP Retry-After header before replaying the exact request.

Customer Credits accounting is disabled, so the endpoint stays available and reports accounting_enabled=false with bypass_reason=feature_disabled. Workspace-owned X apps report bypass_reason=customer_x_app.