{
"items": [
{
"profile_status": "success",
"linkedin_url": "https://www.linkedin.com/in/example-person-000000",
"first_name": "Example",
"last_name": "Person",
"full_name": "Example Person",
"company_name": "Example Company",
"job_title": "Example role",
"location": "Example City",
"domain": "example.org",
"linkedin_company_url": "https://www.linkedin.com/company/example-company",
"headline": "Example role at Example Company",
"reaction_type": "COMMENT",
"comment": "Example comment",
"post_url": "https://www.linkedin.com/posts/example_activity-7376356221991178240"
}
],
"pagination": {
"next_cursor": "pje1.synthetic_cursor",
"has_more": true
},
"billing": {
"credits_consumed": 1,
"credits_refunded": 24,
"outcomes": {
"success": 1,
"not_found": 0,
"error": 0
}
}
}{
"status": "pending",
"code": "page_pending",
"idempotency_key": "00000000-0000-4000-8000-000000000001",
"retry_after_ms": 15000,
"message": "Retry the identical page with this Idempotency-Key to retrieve its result."
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}Post commenters
Retrieve and enrich people who commented on a LinkedIn post. Rate limit: 180 requests per fixed minute per workspace, shared by post-likers and post-commenters; pagination requests and retries count.
{
"items": [
{
"profile_status": "success",
"linkedin_url": "https://www.linkedin.com/in/example-person-000000",
"first_name": "Example",
"last_name": "Person",
"full_name": "Example Person",
"company_name": "Example Company",
"job_title": "Example role",
"location": "Example City",
"domain": "example.org",
"linkedin_company_url": "https://www.linkedin.com/company/example-company",
"headline": "Example role at Example Company",
"reaction_type": "COMMENT",
"comment": "Example comment",
"post_url": "https://www.linkedin.com/posts/example_activity-7376356221991178240"
}
],
"pagination": {
"next_cursor": "pje1.synthetic_cursor",
"has_more": true
},
"billing": {
"credits_consumed": 1,
"credits_refunded": 24,
"outcomes": {
"success": 1,
"not_found": 0,
"error": 0
}
}
}{
"status": "pending",
"code": "page_pending",
"idempotency_key": "00000000-0000-4000-8000-000000000001",
"retry_after_ms": 15000,
"message": "Retry the identical page with this Idempotency-Key to retrieve its result."
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"idempotency_key": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry_after_ms": 1
}limit) before retrieving the page. Unused slots are refunded. Each successfully enriched profile consumes one credit. Definitive not_found and failed error outcomes remain in the page and are refunded, so they have zero net credit cost. An uncertain response can retain its reservation until the same page finishes; it does not prove a refund.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 HTTP429 before provider or billing work. 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
Omitcursor on the first request. When pagination.next_cursor is not null, send it unchanged with the same post URL and limit to fetch the next page. The page size is 1–25 (default 25). The provider and continuation account remain pinned to the cursor. New cursors expire after 10 minutes and are bound to the workspace, post, engagement type, and page size.
Optional retrieval metadata contains reported_total, returned_count, status, and stop_reason. A provider_exhausted status means that provider has no further cursor; it does not guarantee that every LinkedIn engagement was accessible. Provider 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 theIdempotency-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, and cursor 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 results remain replayable for 24 hours after completion, including after the input cursor expires. Already-saved profile or billing work can also resume after cursor expiry. An expired cursor cannot start a new provider fetch. A reservation for unresolved work does not automatically become a refund after 24 hours.
Pending and error responses
A202 response with status: "pending" and code: "page_pending" means the bridge did not respond 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.
| Response | Next action |
|---|---|
409 replay_in_progress | Wait, then retry the identical page with the same key. |
409 replay_request_mismatch | Restore the original request fields for that key. Use a new key only for intentionally different work. |
503 account_busy, rate_limited, or provider_unavailable | Keep the page and key unchanged. Wait for the supplied delay and retry with bounded backoff. |
503 provider_page_unavailable | Retry the same cursor and key; continuation stays on its pinned provider. |
503 account_restart_required | Start again without a cursor and with a new key. Deduplicate results already received. |
Other 502 or 503 responses carrying idempotency_key | Preserve the original body and returned key. Retry with bounded backoff; do not assume that an uncertain profile or billing response was refunded. |
429 Too Many Requests | Wait and retry the same page and key with bounded exponential backoff. |
Billing recovery
A failed provider discovery attempt is refunded before a new attempt is funded. Once a page has been saved, retries resume its profile enrichment or billing settlement without rediscovering the page or repeating successfully settled profile charges. Keep the same key throughout recovery.Next step
Use Post likers for the other engagement type, or read the post engagement workflow for the dashboard flow.Authorizations
Use an Airschool workspace API key. Never expose the key in client-side code.
Headers
Create a UUID for this page and reuse it with the identical endpoint, post_url, limit and cursor 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
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.
An HTTP(S) LinkedIn post URL containing an activity identifier.
1 - 2048Number of engagements to request on this page.
1 <= x <= 25An opaque cursor returned by the preceding page. Send it unchanged.
1 - 8192Response
A page of enriched LinkedIn post engagements.
The requested engagements with public profile fields and enrichment status.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The provider selected for this page. Treat this value as informational.
b2benrichment, rapidapi, rapidapi_pnd, unipile Optional retrieval evidence. Exhausting a provider cursor does not prove all LinkedIn engagements were accessible.
Show child attributes
Show child attributes