Skip to main content
GET
Per-post analytics (library)

Authorizations

Authorization
string
header
required

Pass Authorization: Bearer scripe_sk_live_<...> (or scripe_sk_test_<...> for test keys) on every request. Keys are scoped to a single workspace and can be revoked from the Scripe dashboard.

The same header also accepts an OAuth 2.1 access token (scripe_oat_*); both credentials share one scope vocabulary and every operation below documents the scope it requires. An API key can hold every scope named on this surface except webhooks:manage, which is grantable to OAuth tokens only today — the webhook-endpoint operations answer 403 scope_missing to every API key. Operations that name no scope accept any valid token of the workspace.

Headers

Scripe-Api-Version
string

Pin the API version. Format YYYY-MM-DD. Omit to receive the currently rolling default. Unknown versions return 400 version_unsupported.

Example:

"2026-08-10"

Query Parameters

projectId
string

One project id, or a comma-separated list. If omitted, defaults to all available projects.

Example:

"proj_a1b2c3d4e5f6g7h8"

postId
string

Report on specific Scripe posts: one post_… id or a comma-separated list of up to 50. This is how "how did THIS post do?" is answered — the response contains only those posts, with no date range to work out and no page to scan.

A named post that has no metrics is reported in meta rather than silently absent, because an empty page reads as "no engagement" when the truth may be "never published". An id the reported-on project(s) do not contain is a 400, never an empty page.

Example:

"post_a1b2c3d4e5f6g7h8"

dateFrom
string<date-time>

ISO 8601 or YYYY-MM-DD lower bound (inclusive).

dateTo
string<date-time>

ISO 8601 or YYYY-MM-DD upper bound (inclusive).

limit
integer
default:50

Page size. Default 50, max 200. Values above the max are clamped silently; only a non-integer or a value below 1 is rejected with bad_pagination.

Required range: 1 <= x <= 200
offset
integer
default:0
Required range: x >= 0
sort
enum<string>
default:recent

Ordering. impressions ranks by views and engagement by total interactions — neither ranks by engagement rate.

Available options:
recent,
impressions,
engagement
content
enum<string>
default:preview

How much of each post body to return. preview returns the first ~280 characters cut on a word boundary and sets content_truncated; full returns the whole body; none omits it (content: null, content_truncated: true when a body exists).

Available options:
preview,
full,
none

Response

Page of per-post analytics.

data
object[]
required
pagination
object
required
meta
object

Present only when postId was passed. It exists so a filtered answer can be read correctly: data: [] on its own says "no engagement", which is a claim about a post that may never have been published at all.