Read dated cumulative post metric observations
/sites/{site_id}/linkedin/posts/{post_id}/metrics-historylinkedin:readStored organic lifetime post counters by UTC capture date, not daily activity. Existing latest observations seed the first row; future refreshes preserve daily snapshots. Requires linkedin:read and explicit site access. Parent post ownership is checked. No LinkedIn call or credit charge.
| Request | GET https://satelliteai.io/api/v1/sites/{site_id}/linkedin/posts/{post_id}/metrics-history |
| Permission | linkedin:read |
| Response | A list (cursor or offset paginated): data is array of LinkedInPostMetricObservation. |
| Operation ID | listLinkedInPostMetricHistory |
More context and worked examples are in the developer guide.
Example request
curl --fail-with-body \
'https://satelliteai.io/api/v1/sites/123/linkedin/posts/321/metrics-history' \
-H "Authorization: Bearer $SATELLITE_API_KEY"Replace the example IDs with values returned by the discovery endpoints. Example values are placeholders, not real records.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
site_idrequired | path | integer | ID from GET /sites. min 1 |
post_idrequired | path | integer | min 1 |
limit | query | integer | Maximum rows per page. default 50 · min 1 · max 100 |
cursor | query | string | Opaque next_cursor from the prior response. Expires after 24 hours; bound to integration, permissions, sites and unchanged filters. Restart pagination if access changes. max length 4096 |
start_date | query | string (date) | Inclusive UTC capture-date boundary (YYYY-MM-DD). |
end_date | query | string (date) | Inclusive UTC capture-date boundary (YYYY-MM-DD). |
Unknown or repeated query parameters return 400.
Data dictionary
Stored results. Lists can be empty when no history has been imported yet. Cumulative organic post metrics observed on a capture date. These are observations, not daily activity increments. Do not sum them.
[] marks an array element. nullable means the value can be null; treat it as unknown, not zero. always present means the key is always included in the object.
| Field | Type | Description |
|---|---|---|
data[].id | integer | Satellite identifier for this record. min 1 |
data[].site_id | integer | Satellite site ID (from GET /sites). min 1 |
data[].org_urn | stringnullable | max length 4096 |
data[].post_urn | stringnullable | max length 4096 |
data[].snapshot_date | string (date)nullable | Observation date, not a proven reporting period. |
data[].metrics_fetched_at | string (date-time)nullable | |
data[].created_at | string (date-time)nullable | When Satellite created the record (UTC, RFC 3339). |
data[].updated_at | string (date-time)nullable | When Satellite last updated the record (UTC, RFC 3339). |
data[].impressions | integernullable | |
data[].unique_impressions | integernullable | Unique within the reported period. Never sum daily unique impressions into a range unique total. |
data[].clicks | integernullable | |
data[].reactions | integernullable | |
data[].comments | integernullable | |
data[].shares | integernullable | |
data[].engagement_rate | numbernullable | Stored percentage, not a 0-to-1 fraction. |
data[].provider_engagement_rate | numbernullable | Provider-reported organic engagement as a fraction, not a percent. |
data[].truncated_fields | array of string | Fields exceeding public text, URL, JSON, or array limits. |
data[].provider_engagement_rate_unit | string | one of: fraction |
data[].content_scope | string | one of: organic |
data[].metric_period | string | one of: lifetime |
data[].observation_history | boolean | one of: True |
data[].timezone | string | one of: UTC |
Response metadata
| Field | Type | Description |
|---|---|---|
meta.request_id | string | Request identifier; also returned in X-Request-ID. Include it in support requests. |
meta.api_version | string | API version that produced the response. one of: v1 |
meta.limit | integer | Maximum records per page applied to this request. min 1 · max 100 |
meta.has_more | boolean | True when another page is available. |
meta.next_cursor | stringnullable | Opaque cursor for the next page; send as cursor. Null on the last page. |
meta.availability | string | available when stored data exists; not_available when it does not. one of: available, not_available |
meta.billing | object | Present for paid live SERP requests; replayed receipts describe the original debit, not an additional charge. |
meta.billing.operation | stringalways present | one of: client_api_serp_refresh |
meta.billing.credits_charged | integeralways present | min 0 |
meta.billing.transaction_id | integeralways present | |
meta.billing.replayed | booleanalways present | |
meta.source | stringalways present | one of: stored |
meta.org_urn | stringnullable | max length 4096 |
meta.metric_period | string | one of: lifetime |
meta.observation_history | boolean |
Error responses
Errors return {"error": {"code", "message", "request_id"}}. See error handling for retry guidance.
| HTTP | When |
|---|---|
400 | Invalid or repeated query parameter, filter, limit, or cursor. |
401 | Missing, invalid, expired, or revoked credential. |
403 | Required scope, active integration, or company API entitlement is unavailable. |
404 | The resource is missing or outside the granted company/site boundary. |
413 | The response or stored artifact exceeds the configured retrieval limit. |
429 | API request quota exceeded. Retry after the indicated interval. |
503 | A required storage, rate-limit, or artifact dependency is unavailable. |