Skip to main content
POST
Retrieve one synchronous page of people who commented on a LinkedIn post, with public profile fields enriched for each returned engagement.
With enrich_profiles omitted or true, reserve limit × 0.2 credits and charge 0.2 credits per successfully enriched profile. Unused slots and definitive not_found or error outcomes are refunded. Uncertain work keeps its reservation until the identical request is reconciled.

Extraction-only mode

Set enrich_profiles: false to return available engagement fields without profile lookups. Rows use profile_status: "not_enriched". This works with V1 and V2 workspace keys. Extraction-only costs 1 credit per fresh native provider page, including valid empty terminal pages. limit controls returned people; one response can consume several native pages. Cached remainder slices and identical same-key retries are free. Read billing.credits_consumed for the actual charge. V1 balances update asynchronously through its billing queue. Keep enrich_profiles: false and the returned cursor for continuation; use a new key for the next page. A response can preserve paid rows with retrieval.status: "partial" and stop_reason: "insufficient_credits" or "provider_failure". Keep those rows, billing and cursor. An uncertain page_attempt_pending outcome must retain the original body and key for reconciliation; starting fresh can repeat work and charges.

Rate limit

The limit is 180 requests per minute per workspace, shared by Post likers and Post commenters, including different API keys for the same workspace. Pagination requests and retries each count toward this limit. The counter uses a fixed minute window and resets at the next minute boundary. Requests above the limit receive HTTP 429 without starting the page or charging credits. Wait until the next minute, then retry the identical page with the same Idempotency-Key using bounded backoff. This is a request limit, not a guarantee of enrichment throughput; the maximum page size remains 25.

Pagination

Omit cursor on the first request. When pagination.next_cursor is not null, send it unchanged with the same post URL, limit, and enrich_profiles mode to fetch the next page. The page size is 1–25 (default 25). New cursors expire after 10 minutes and are bound to the workspace, post, engagement type, page size, and enrichment mode. Optional retrieval metadata contains reported_total, returned_count, status, and stop_reason, and can include retrieved_total. A partial status with stop_reason: "provider_total_mismatch" means fewer engagements could be retrieved than the post reports. A provider_exhausted status means there are no more pages available for this request; it does not guarantee that every LinkedIn engagement was accessible. Reported totals can change, and comment events are not the same count as unique authors. Public pagination does not promise every reply returned by the dashboard’s background extraction.

Safe retries

Supply an optional UUID in the Idempotency-Key header. Save that key together with the endpoint and exact request body before sending the request. Reuse the same key with the identical post_url, limit, cursor, and enrich_profiles mode if the response is lost or processing is uncertain. Use a new key for the next page. The code examples read AIRSCALE_PAGE_KEY from your environment. Set it to a UUID once for each new page, and keep that value for every retry of that page. Replace the synthetic post URL and cursor with your own values. Omitting the header remains supported. However, an independent retry without the original key can reserve credits again. When a pending or uncertain response includes idempotency_key, retain and send that returned key even if your first request omitted the header. Completed enriched results remain replayable for 24 hours after completion, including after the input cursor expires. An expired cursor cannot fetch a new extraction-only page; an exact saved retry can finish an outstanding refund before returning invalid_cursor. A reservation for unresolved work does not automatically become a refund after 24 hours.

Pending and error responses

A 202 response with status: "pending" and code: "page_pending" means the request did not finish within 90 seconds. The outcome is unconfirmed; processing may still be running or may not have started. Wait for Retry-After (15 seconds for this response), then resend the identical page with the returned idempotency_key. The body also supplies retry_after_ms. If a cooldown outlasts an unfetched cursor, wait for the cooldown, then begin a fresh traversal without the cursor and with a new key. Deduplicate earlier results. A fresh traversal is new billable work. Saved work and completed replay results can still be recovered under the rules above.

Avoid duplicate charges

Retry the same page with the same key to resume it without charging again for profiles already paid for. Keep that key until you receive a final result. Starting again with a new key is a new billable request.

Next step

Use Post likers for the other engagement type, or read the post engagement workflow for the dashboard flow.

Authorizations

Authorization
string
header
required

Use an Airscale workspace API key. Never expose the key in client-side code.

Headers

Idempotency-Key
string<uuid>

Create a UUID for this page and reuse it with the identical endpoint, post_url, limit, cursor and enrich_profiles mode on every retry. Use a new key for the next page. Completed results are replayable for 24 hours after completion. Omitting the header is supported, but an independent retry without the original key can reserve credits again.

Body

application/json

Provide a LinkedIn post URL, an optional page size from 1 to 25, and the opaque cursor when continuing pagination. The JSON body must not exceed 128 KiB.

post_url
string<uri>
required

An HTTP(S) LinkedIn post URL containing an activity identifier.

Required string length: 1 - 2048
limit
integer
default:25

Number of engagements to request on this page.

Required range: 1 <= x <= 25
enrich_profiles
boolean
default:true

Omitted or true enriches profiles at 0.2 credits per successful profile. False returns available engagement fields without profile lookups and costs 1 credit per fresh native provider page, including empty terminal pages; cached slices and identical retries are free. Keep the mode unchanged when continuing a cursor.

cursor
string | null

An opaque cursor returned by the preceding page. Send it unchanged.

Required string length: 1 - 8192

Response

A page of LinkedIn post engagements with profile enrichment or extraction-only fields, depending on enrich_profiles.

items
object[]
required

The requested engagements with public profile fields and enrichment status.

pagination
object
required
billing
object
required
retrieval
object

Optional pagination details. Reaching the last available page does not guarantee that every LinkedIn engagement was accessible.