> ## Documentation Index
> Fetch the complete documentation index at: https://docs.edges.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Updates

> New updates and improvements!

<Update label="2026-06-22" description="Platform health — limits, retries & data quality">
  ### Improvements

  * **Extract LinkedIn People** (`linkedin-extract-people`) — Experience `date` fields now return employment date ranges only. `profile_country` is inferred from recent experience locations when LinkedIn does not expose it directly (remote/hybrid locations excluded). [Extract LinkedIn People](/v1/api/actions/linkedin-extract-people)
  * **Extract LinkedIn People Experiences** (`linkedin-extract-people-experiences`) — Fixed `title` and `company_name` mapping; tenure values are no longer placed in `company_name`. [Extract LinkedIn People Experiences](/v1/api/actions/linkedin-extract-people-experiences)
  * **LinkedIn Search People** (`linkedin-search-people`) — Async runs that hit a monthly LinkedIn limit (`LIMIT_REACHED`) are now automatically retried when the limit resets instead of failing permanently. [Search LinkedIn People Async](/v1/api/actions/linkedin-search-people-async)
  * **Async & schedule runs** — Maximum automatic retries increased from 5 to 10 (up to 11 attempts per run including the initial attempt). [Execution Modes](/v1/runs/overview#async-mode)

  ### API

  * **`NO_DATA_AVAILABLE`** — New error label returned when no data is found for an input (`No data was found for this input.`). [Error Reference](/v1/error-reference)
  * **Extract Sales Navigator Company** (`salesnavigator-extract-company`) — Output field `profile_image_url` is deprecated. [Extract Sales Navigator Company](/v1/api/actions/salesnavigator-extract-company)

  ### Documentation

  * **Identity rate limits** — Updated default identity-wide caps: 50/min, 500/15m, 2,500/4h, 15,000/24h. [LinkedIn Smart Limits](/v1/linkedin/limits)
  * **Rate limits** — Documented monthly `LIMIT_REACHED` auto-retry for async people search. [Rate Limits](/v1/runs/rate-limits)
  * **Extract LinkedIn People** — Documented `profile_country` inference and experience `date` field behavior. [Extract LinkedIn People](/v1/api/actions/linkedin-extract-people)
  * **Extract LinkedIn People Experiences** — Documented `title` / `company_name` field mapping. [Extract LinkedIn People Experiences](/v1/api/actions/linkedin-extract-people-experiences)
</Update>

<Update label="2026-06-09" description="Extract LinkedIn People capacity restored">
  ### API

  * **Extract LinkedIn People** (`linkedin-extract-people`) — Profile enrichments quota restored to full capacity: **10,000 / 24 h** (`LK_PROFILE_ENRICHMENTS`). Most previously unavailable fields are back; three output fields remain missing or `null`: `birth_date`, `linkedin_thread_id`, and `connected_at`. [Extract LinkedIn People](/v1/api/actions/linkedin-extract-people)

  ### Documentation

  * **Extract LinkedIn People** — Updated unavailable-fields notice and limits reference to reflect restored capacity and the three remaining gaps. [LinkedIn Smart Limits](/v1/linkedin/limits)
</Update>

<Update label="2026-06-08" description="Mark LinkedIn message as read">
  ### API

  * **Mark LinkedIn Message as Read** — New action `linkedin-mark-message-as-read` (live/async/schedule). Mark a conversation as read using its `linkedin_thread_id`. Requires an [Engagement Identity](/v1/identities/engagement). [Mark LinkedIn Message as Read](/v1/api/actions/linkedin-mark-message-as-read)
</Update>

<Update label="2026-06-04" description="Incremental sync for page followers">
  ### API

  * **Extract LinkedIn Page Followers** (`linkedin-extract-page-followers`) — Incremental sync (`sync_mode: "incremental"`) is now supported in async and schedule modes. Fetch only new followers since the last run. Requires an [Engagement Identity](/v1/identities/engagement). [Extract LinkedIn Page Followers](/v1/api/actions/linkedin-extract-page-followers)
</Update>

<Update label="2026-05-28" description="Sales Nav reliability & identity mapping">
  ### API

  * **Sales Navigator InMail Profile** — Improved error handling when a target user blocks us: we now check remaining InMail credits and return proper errors.
  * **Sales Navigator ID ↔ LinkedIn handle mapping** — New actions [`linkedin-extract-salesnavigator-profile-id`](/v1/api/actions/linkedin-extract-salesnavigator-profile-id) (handle/URL → SN ID) and [`linkedin-extract-linkedin-profile-handle`](/v1/api/actions/linkedin-extract-linkedin-profile-handle) (SN ID/URL → handle).

  ### Improvements

  * **Extract LinkedIn People** (`linkedin-extract-people`) — Added `number_share_connections` to the output for visibility into mutual connections. [Extract LinkedIn People](/v1/api/actions/linkedin-extract-people)
  * **Extract LinkedIn People Experiences** (`linkedin-extract-people-experiences`) — Improved handling of `job_time_period` values that do not include a month. [Extract LinkedIn People Experiences](/v1/api/actions/linkedin-extract-people-experiences)
  * **Extract LinkedIn Event Attendees** (`linkedin-extract-event-attendees`) — Fixed data handling for private/blocked profiles with consistent nullability and safe access. The number of results returned may differ from the count shown on LinkedIn when some attendees have private profile settings. [Extract LinkedIn Event Attendees](/v1/api/actions/linkedin-extract-event-attendees)

  ### Documentation

  * **Only extract unique profile** — Clarified the `only_extract_unique_profile` behavior in docs.
  * **Sales Navigator schema differences** — Documented fields temporarily unavailable when data is sourced from Sales Navigator on `linkedin-extract-people` and `linkedin-extract-company`.
  * **New identity ramp-up** — Documented 5-day and first-day hourly capacity ramp-up for newly connected identities. [LinkedIn Smart Limits](/v1/linkedin/limits#new-identity-ramp-up)

  ### Platform

  * **LinkedIn cookies lifecycle** — Persist additional cookies on refresh and login to improve session stability and stealth.
  * **LinkedIn Search Generic** — Improved `linkedin_profile_id` handling and validation to reduce malformed or ambiguous IDs.
</Update>

<Update label="2026-05-19" description="LinkedIn Smart Limits documentation">
  ### Documentation

  * **LinkedIn Smart Limits** — Quotas and per-minute caps in the limits reference are aligned with `IntAccLimits` (24 h and \~31 d windows). Added default rate caps when an action omits them (5/s, 30/min, 300/15 min, 1,200/4 h, 7,000/24 h), plus limits for profile components, saved searches, posts, activity extracts, and InMail. [LinkedIn Smart Limits](/v1/linkedin/limits)
</Update>

<Update label="2026-04-28" description="Sales Nav messages & conversations">
  ### API

  * **Extract Sales Navigator Messages** — New action `salesnavigator-extract-messages` (live/async/schedule). [Extract Sales Navigator Messages](/v1/api/actions/salesnavigator-extract-messages)
  * **Extract Sales Navigator Conversations** — New action `salesnavigator-extract-conversations` (live/async/schedule). [Extract Sales Navigator InMail Conversations](/v1/api/actions/salesnavigator-extract-conversations)

  ### Correction

  * **Uniform `linkedin_profile_url` format** — `linkedin_profile_url` values no longer include `miniProfileUrn` query parameters, so the same canonical URL shape is used consistently across Edges endpoints.
  * **Current company in header** — On [`linkedin-extract-people`](/v1/api/actions/linkedin-extract-people), `company_name` now matches the company name shown in the profile **header** when the **`highlights`** parameter is enabled.
</Update>

<Update label="2026-04-14" description="LinkedIn protections, limits & platform hardening">
  ### Improvements & Fixes

  * **LinkedIn protections** — Stricter **per-action** limits, broader **async** safeguards, and **higher minimum delays** on sensitive extractors to cut throttling risk and better protect identities.
  * **Extract LinkedIn People** (`linkedin-extract-people`) — Fixed profile **country** resolution. [Extract LinkedIn People](/v1/api/actions/linkedin-extract-people)
  * **Extract LinkedIn Company Viewers** — Fixed **missing profile pictures** in viewer results. [Extract LinkedIn Company Viewers](/v1/api/actions/linkedin-extract-company-viewers)
</Update>

<Update label="2026-04-01" description="Dashboard identity search, async pacing & Sales Nav metrics">
  ### API

  * **Search Sales Navigator Company Metrics** — New action `salesnavigator-search-company-metrics`: total-count metrics for a Sales Navigator **company** search, with its own request/response schema.
  * **Search Sales Navigator People Metrics (rename)** — `salesnavigator-search-metrics` is renamed to `salesnavigator-search-people-metrics`.
  * **Backward compatibility** — `salesnavigator-search-metrics` remains accepted as an alias; existing callers are not broken.

  ### App

  * **Search identities by UID** — You can search for identities by their **UID** in the [Identities](https://app.edges.run/identities) page in the dashboard.

  ### Improvements

  * **LinkedIn outreach (async only)** — `linkedin-inmail-profile`, `linkedin-message-profile`, `linkedin-visit-profile`, `linkedin-connect-profile`, and `salesnavigator-inmail-profile` now have stricter pacing in **async** : big volume will take a little bit longer as usual; **live mode is unchanged** : you still have to space your call yourself.
  * **LinkedIn checkpoint / CAPTCHA** — Fewer automatic attempts to solve captcha during identity login checkpoints (reduces **524** timeouts). If resolution still does not complete in time, responses may return a **`CAPTCHA`** checkpoint; poll [`POST /v1/identities/{identity_uid}/integrations/linkedin/checkpoint`](/v1/api/linkedin/checkpoint) with `{}` until it clears, then handle any next checkpoint per [Resolve LinkedIn Checkpoint](/v1/api/linkedin/checkpoint).

  ### Documentation

  * **Resolve LinkedIn Checkpoint** — Documented **CAPTCHA after maximum attempts**, reduced captcha attempt limit (**524** mitigation), polling with `{}`, and follow-on checkpoints. [Checkpoint API](/v1/api/linkedin/checkpoint)
</Update>

<Update label="2026-03-12" description="Incremental Sync & Cursor Pagination">
  ### API

  * **Incremental Sync Mode** — New `sync_mode` parameter (`full` or `incremental`) for async and scheduled runs. Fetch only new data since the last retrieval instead of the full dataset. Available on engagement-free actions with Engagement Identities only. [Learn more](/v1/runs/overview#incremental-sync-mode)
  * **Continue a Run** — New endpoint [`POST /v1/runs/{run_uid}/continue`](/v1/api/runs/continue) to trigger incremental updates on async runs.
  * **Cursor-based pagination on run outputs & inputs** — `/v1/runs/{run_uid}/outputs` and `/v1/runs/{run_uid}/inputs` now use cursor-based pagination by default via `X-Pagination-Next`. The `offset` parameter is deprecated. [Pagination guide](/v1/runs/pagination#paginating-run-outputs--inputs)

  ### Improvements

  * **Proxy Retry Logic** — `502` proxy errors are now retried internally with sticky IP fallback before being returned, reducing transient failures.
  * **Identity Sync** — Webhook notifications are no longer sent during pending in-app challenges.
  * `LK_BAD_COOKIE` errors now return the affected `identity_uid`.
  * **Identity `is_active` property** — Identities now expose an `is_active` field. Inactive engagement identities are excluded from subscription renewals.
  * **Output: `headline` deprecated, use `summary`** — On Search Sales Navigator People, Saved People, Company Employees, Search LinkedIn People, and Search LinkedIn Company Employees, the `headline` output is deprecated (retroactive). Use **`summary`**, which now correctly contains the profile summary; `headline` was a naming mistake. [Action docs](/v1/api/actions/salesnavigator-search-people).
  * **Extract Sales Navigator Company** — New action. Inputs: **`sales_navigator_company_url`** or **`sales_navigator_company_id`**. Outputs include **`country`**, **`city`**, **`postalCode`** and full company profile data. [Action docs](/v1/api/actions/salesnavigator-extract-company).

  ### App

  * **Subscription & pricing display** — Credits plan: discounted **base\_prices** and **total\_price** when a credit discount applies; **total\_price** when a global discount applies. **Engagement identities**: count and **total\_price** (with discount when applicable) are shown; engagement price is added to the selected plan total so you see the full amount (credits + engagement identities). Subscription modal shows the credit plan total with or without discounts applied.
  * **`LIMIT_REACHED` errors** — Now include **`params.appendix`** and **`params.timespan`** to distinguish the limit: third-party API (`API_FUSE_LIMIT` daily, `API_RATE_LIMIT` per minute) vs product limits (`MINUTE_LIMIT`, `DAILY_LIMIT`). Integrations should inspect **`appendix`** for better retry logic. [Rate Limits](/v1/runs/rate-limits#differentiating-limit_reached-with-appendix) · [Error Reference](/v1/error-reference).

  ### Documentation

  * **Engagement Identity pricing** — Billing is based on the **peak number of active Engagement Identities** during the month. Documented when an Engagement Identity is active (LinkedIn integration added or action called) vs inactive (30 days without any action, or 5 days after syncing without calling an action). [Engagement Identities](/v1/identities/engagement#pricing--billing)
  * **Error Reference** — Error page updated: expanded [Quick Reference Table](/v1/error-reference#quick-reference-table) with all error labels, HTTP codes, categories, and retry guidance; [Error scopes](/v1/error-reference#understanding-error-scopes); [Handling 429](/v1/error-reference#handling-rate-limit-errors-429) (Edges vs LinkedIn, `params.appendix` / `params.timespan`); [Handling 424](/v1/error-reference#handling-linkedin-errors-424) LinkedIn errors with example code. [Error Reference](/v1/error-reference)
</Update>

<Update label="2026-02-26" description="Sales Nav Company, Limits & Flows">
  ### API

  * **Extract Sales Navigator Company** — New action to extract full Sales Navigator company data (revenue, description, employee counts, etc.) from a company page. [Extract Sales Navigator Company](/v1/api/actions/salesnavigator-extract-company)

  ### Improvements & Fixes

  * **Extract LinkedIn Conversations** — Maximum conversations limit increased to 15,000; related validations updated. Error handling improved.
  * **Extract LinkedIn School Alumnis** — Maximum alumni results limit set to 1,000.
  * **Extract LinkedIn Company Affiliates** — Added safe optional chaining when accessing organization data to avoid runtime errors on missing fields.
</Update>

<Update label="2026-02-18" description="Education Output, ID Types & Fixes">
  ### API

  * **Extract LinkedIn Company Viewers** — New action to extract viewers of a LinkedIn company page. Requires page admin access and a Premium page; returns viewers from the past year. [Extract LinkedIn Company Viewers](/v1/api/actions/linkedin-extract-company-viewers)
  * **Extract LinkedIn People Educations** — New action to extract education history (schools, degrees, fields of study, dates). [Extract LinkedIn People Educations](/v1/api/actions/linkedin-extract-people-educations)
  * **Extract LinkedIn People — Education output** — New fields: `title` (degree + field of study), `field_of_study`, `school_description`. **Breaking:** `degree_name` is now correctly filled (first part of `title` before comma) or empty; it was previously sometimes filled with `field_of_study`.
  * **ID type changes** — Several IDs changed from string to integer: `linkedin_school_id`, `linkedin_company_id`, `original_linkedin_company_id`, `company_id` in extract-people, experiences, company, company-employees-insights, recruiter-lite-search-people.
  * **LinkedIn experience outputs** — Added `job_contract_type`, unblocking richer profile refresh data for migrations.
  * **Outputs APIs** — Added `extracted_at` so consumers can reliably track when data was fetched.
  * **Extract LinkedIn People Post/React/Comment Activity** — Output restructure:
    * **Deleted:** `linkedin_original_post_url`
    * **Deprecated:** `original_author`
    * **Added** `source_post`: source post info (2nd level) with `linkedin_post_id`, `linkedin_post_url`, `content`, `author`; returns `null` when no 2nd level post
    * **Added** `linkedin_activity_id`: unique ID depending on post type (original, simple reshare, reshare with comment)
    * **Added** `activity_author`: person who performs the activity
    * **Updated** `author`: now correctly filled with the author of the first-level (visible) post
    * [Post levels table](https://www.notion.so/linkedin-extract-people-post-activity-2e818c28ccb280a5981dc18a54682e17?pvs=21)

  ### Improvements & Fixes

  * **Billing** — Next billed amount displayed on the platform now takes into account any discount applied on the subscription.
  * **Sales Navigator** — Fixed company keyword search when spaces were double-encoded, restoring results for multi-word queries.
  * **Runs** — Treated `STATUS_404` and `NO_RESULT` as successful “no data” outcomes, reducing false failed runs while keeping transparency via `last_info`.
  * **Experience location** — Improved completeness by inheriting the parent location when sub-experiences omit it.
  * **Accounts** — Prevents false "no access" errors for some valid accounts.

  ### Post Activity — Known Limitations

  * **Group posts:** When the post is a group post, `author` may be empty (not handled).
  * **Component posts:** Some posts (e.g. `article`, `conversationComponent`) may not have an `author` or require alternative resolution.
</Update>

<Update label="2026-01-27" description="Run Inputs API, Callbacks & Docs">
  ### API

  * **Get Run Inputs** — New endpoint to list all inputs for a run (including failed) and their errors. [Get Run Inputs](/v1/api/runs/inputs)
  * **Runs** — Error responses 404/409/422 added on run endpoints; `auth_type` removed from account schemas.

  ### Documentation

  * **Callbacks** — Data completeness: “all” vs “final” modes, how to verify and fetch results. [Managing Callbacks](/v1/runs/callbacks)
  * **Extract Post Activity** — “Understanding Author Fields” (author, activity\_author, source\_post). [Extract LinkedIn People Post Activity](/v1/api/actions/linkedin-extract-people-post-activity#understanding-author-fields)
  * **Run Outputs** — Not available for live runs (explicit 422). [Get Run Outputs](/v1/api/runs/outputs)
  * **Runs overview** — Get run inputs added to [endpoints table](/v1/runs/overview#available-endpoints-for-runs).
  * **Search Company Employees** — Reuse a people search URL on a company in one call. [Search Sales Navigator Company Employees](/v1/api/actions/salesnavigator-search-company-employees)
  * **Message & InMail** — Voice/video format detection and conversion; Sales Navigator InMail unchanged. [Message](/v1/api/actions/linkedin-message-profile) · [InMail](/v1/api/actions/linkedin-inmail-profile)

  ### Improvements & Fixes

  * **Run Outputs** — Pagination fix; 422 for live runs instead of empty response.
  * **Workspace** — OAuth page white-label (your logo); credit override no longer blocks when below plan.
  * **Retries** — Internal automatic retries (proxy, limits, Sales Navigator). Do not change your implementation, but decrease error rates.
  * **Actions** — `linkedin_profile_id` in more outputs; Search Metrics returns 0 values and supports `#` in URLs; Post Activity returns `linkedin_activity_id`; identities list pagination fixed.

  ### What This Means for You

  * **Recover missed data** — New inputs endpoint and clearer callback rules.
  * **Voice & video** — Message and InMail send audio/video as voice or video messages where supported.
  * **Company search** — Reuse a people search on a company in one call.
  * **Fewer manual retries** — More cases trigger automatic retry.
  * **Clearer API** — Pagination fixed; live runs return explicit error.
  * **Workspace** — OAuth logo, credit override fix.
</Update>

<Update label="2026-01-15" description="v1.2.6 – Unified Cursor Pagination">
  ### Deprecations

  #### Page-Based Pagination Deprecated (Live Mode)

  The `page` parameter is now **deprecated** in favor of cursor-based pagination on 38 live mode endpoints.

  | Parameter | Status                                               |
  | --------- | ---------------------------------------------------- |
  | `page`    | **Deprecated** (still functional, removed from docs) |
  | `token`   | **Deprecated** (still functional, removed from docs) |
  | `cursor`  | **New** - recommended approach                       |

  > The deprecated parameters remain backward compatible. Existing integrations will continue to work, but we recommend migrating to cursors for new implementations.

  **Migration steps:**

  1. Replace `page` parameter with `cursor`
  2. Replace `token` parameter usage with `cursor`
  3. Use the `cursor` value from `X-Pagination-Next` header
  4. Handle cursor expiration - cursors expire after **24 hours** (restart from beginning if error)

  **Affected endpoints:** 38 action `/run/live` endpoints (e.g., `linkedin-extract-*`, `salesnavigator-*`, `recruiterlite-*`)

  **Not affected:** Core API endpoints (`/runs`, `/schedules`) continue using `limit/offset` pagination.

  ### Improvements

  * **Unified pagination**: Single cursor approach replaces mixed page/token system
  * **Data consistency**: Cursors ensure stable pagination (valid for 24 hours)
  * **Simpler implementation**: Always follow `X-Pagination-Next` header (no need to distinguish pagination types)

  ### API Parameter Updates

  * `run_uid` path parameter now includes UUID format validation and description

  ### What This Means for You

  * **Existing integrations continue to work** - `page` and `token` remain functional (backward compatible)
  * **New integrations should use `cursor`** - recommended for all new implementations
  * **Async/Schedule modes unchanged** - automatic pagination continues to work the same way
  * **SDK users**: The `nextPage` helper still works - it returns the cursor URL
</Update>

<Update label="2026-01-09" description="v1.2.5 – Reliability, Richer Data">
  ### 🚀 What's New

  This release focuses on improved LinkedIn reliability, richer profile data, and new automation features.

  ### 🔒 LinkedIn Connection Reliability

  * **Fixed**: LinkedIn accounts now reconnect smoothly without false authentication errors
  * **Fixed**: Sales Navigator "upgrade required" errors no longer appear when visiting profiles within your daily limits
  * Users should experience far fewer connection interruptions when running LinkedIn workflows

  ### 📬 LinkedIn Invitation Management

  New actions for managing your LinkedIn invitations with precision:

  | Action                   | Description                                                     |
  | ------------------------ | --------------------------------------------------------------- |
  | **Accept Invitation**    | Accept a single invitation provided as input                    |
  | **Withdraw Invitation**  | Withdraw a single invitation provided as input                  |
  | **Accept Invitations**   | Accept all pending invitations (now supports async execution)   |
  | **Withdraw Invitations** | Withdraw all pending invitations (now supports async execution) |

  These actions enable selective invitation workflows, giving you precise control over which invitations to accept or decline.

  ### 💰 Richer LinkedIn Profile Data

  When searching LinkedIn Sales Navigator, you now get enhanced profile information:

  * **Dynamic headlines** shown by LinkedIn
  * **Job summaries** and descriptions
  * **Work experience details** previously unavailable

  This richer data enables better targeting and more personalized outreach.

  ### ⚡ One-Shot Callbacks for Automation Tools

  New callback option for customers using automation platforms like n8n, Make, or Zapier:

  * Receive **one notification when a job finishes** instead of multiple callbacks during execution
  * Dramatically reduces costs for webhook-based integrations
  * Set `callback.on` to `final` instead of `all` to enable this mode

  ### 📊 Better Run Visibility

  * **Output counts** are now visible directly in run details
  * Know exactly how many results each run produced
  * Clearer ROI tracking and performance monitoring

  ### 🔐 Clearer Error Messages

  When LinkedIn credentials are invalid, you now receive clear, actionable error messages instead of confusing codes. This makes troubleshooting faster and reduces frustration.

  ### 📝 What This Means for You

  * **More Reliable**: LinkedIn authentication and Sales Navigator access issues are resolved
  * **Better Targeting**: Richer profile data enables more personalized outreach
  * **Lower Integration Costs**: One-shot callbacks can reduce automation platform costs significantly
  * **Clearer Insights**: See exactly what each run produces with output counts
</Update>

<Update label="2025-12-24" description="v1.2.4 – Sales Navigator Actions & Error Handling">
  ### 🚀 What's New

  This release enhances Sales Navigator and LinkedIn actions with improved error handling, new callback fields, and standardized error responses.

  ### 🔔 Scheduled Run Tracking in Callbacks

  Callback payloads now include a new field for scheduled runs:

  ```json theme={null}
  {
    "scheduled_run_uid": "<uuid>"
  }
  ```

  This UUID field is included when the callback originates from a scheduled run, making it easier to correlate callbacks with their scheduled execution context.

  ### ✨ Enhanced Error Responses

  We've significantly improved error response documentation across Sales Navigator and LinkedIn actions with detailed examples and new status codes:

  | Status Code                  | Description                            | Change                          |
  | ---------------------------- | -------------------------------------- | ------------------------------- |
  | **400** Bad Request          | Invalid parameters or input            | Now includes detailed examples  |
  | **402** Payment Required     | Access denied due to plan limitations  | **New**                         |
  | **422** Unprocessable Entity | Action aborted                         | **New**                         |
  | **424** Failed Dependency    | Integration or external service errors | Expanded with multiple examples |
  | **429** Too Many Requests    | Rate limit exceeded                    | **New** (replaces 500)          |

  #### Rate Limit Response Details

  429 responses now include detailed rate limit information:

  ```json theme={null}
  {
    "error": {
      "code": 429,
      "status": "Too Many Requests",
      "details": {
        "Retry-After": "60",
        "X-RateLimit-Limit": "2",
        "X-RateLimit-Reset": "1754402101",
        "X-RateLimit-Type": "/v1/actions"
      },
      "message": "Rate limit exceeded (/v1/actions)"
    }
  }
  ```

  ### 🔧 Bug Fixes & Improvements

  #### LinkedIn Post Extraction

  * 🐛 Sanitize LinkedIn post URLs by stripping query parameters to avoid duplicate/mismatched post references and improve cache/canonicalization correctness

  #### Identity and Authentication

  * ✨ If a `SN_ACCOUNT_UPGRADE` error occurs, the related identity will be ignored for 60 seconds, reducing repeated failures and improving overall action reliability (later, this will apply only to `managed` identities)

  #### Cross-Action Error Messaging

  * ✨ Standardized error messages across actions for consistency, aligning error codes/messages and improving client-side parsing

  ### 📝 What This Means for You

  * **Better Debugging**: Detailed error examples help identify issues faster
  * **Improved Rate Limit Handling**: 429 responses with headers enable smarter retry logic
  * **Scheduled Run Correlation**: New `scheduled_run_uid` field links callbacks to their schedule
  * **More Reliable Actions**: Automatic identity cooldown on SN upgrade errors prevents cascading failures
  * **Cleaner Post URLs**: Post extraction now handles URLs with query parameters correctly
</Update>

<Update label="2025-12-17" description="v1.2.3 – LinkedIn Actions & API Improvements">
  ### 🚀 What's New

  This release improves LinkedIn invitation handling, adds new output fields for post activity, and standardizes API error responses.

  ### 🔔 LinkedIn Invitations — Schema Improvements

  We've refactored LinkedIn invitation actions for better consistency and reliability:

  #### Standardized Invitation Identifiers

  All invitation-related actions now use consistent identifiers:

  * `linkedin_invitation_id` — String identifier for the invitation
  * `linkedin_invitation_urn` — LinkedIn URN for stable reference

  | Action                           | Changes                                                          |
  | -------------------------------- | ---------------------------------------------------------------- |
  | **Accept Invitations**           | Simplified input — now requires only `linkedin_invitation_urn`   |
  | **Extract Received Invitations** | Renamed `sent_time` → `sent_date` for consistency                |
  | **Extract Sent Invitations**     | Now returns `linkedin_invitation_id` + `linkedin_invitation_urn` |
  | **Withdraw Invitations**         | Output now returns invitation IDs instead of profile URL         |

  > ⚠️ **Migration Note**: If you're using invitation actions, update your integrations to use the new field names.

  ### ✨ LinkedIn Post Activity — Author Information

  The **People Post Activity** action now includes detailed author information:

  * `author` — The person who shared/posted the content
  * `original_author` — The original content creator (for reshares)

  Both objects include profile identifiers, details (firstname, lastname, headline), URLs, and images.

  ### 🔧 Bug Fixes & Improvements

  #### LinkedIn Post Commenters

  * 🐛 Fixed missing `first_name` and `last_name` fields — these were returning empty strings even when `full_name` was populated

  #### LinkedIn Post Likers

  * 🐛 Removed `linkedin_company_id` from output (field only applied to company likes)

  #### LinkedIn Search Content

  * ✨ Added `linkedin_company_url` to output

  #### InMail & Message File Attachments

  * 🐛 Fixed file validation for Base64-encoded attachments
  * 🐛 Fixed filename extension validation regex

  #### API Error Responses

  * ✨ Added standardized error schemas: `PaymentRequired` (402), `Forbidden` (403), `NotFound` (404), `UnprocessableEntity` (422), `TooManyRequests` (429)

  #### Pagination

  * ✨ Updated default page size to 100 for improved throughput on applicable actions

  ### 📚 Documentation

  * ✨ Added [`POST /runs/{run_uid}/cancel`](/v1/api/runs/cancel) — Cancel an async/schedule run
  * ✨ Added [`GET /runs/{run_uid}/status`](/v1/api/runs/status) — Lightweight run status polling
  * ✨ Added [`GET /runs/{run_uid}/outputs`](/v1/api/runs/outputs) — Poll for run outputs without callbacks
</Update>

<Update label="2025-12-10" description="v1.2.2 – Webhook Improvements & Bug Fixes">
  ### 🚀 What's New

  Major refactors landed around account rotation and integration limits, introducing caching layers that reduce load and standardize identity handling. HTTP service robustness improved (compressed responses, stricter content-length checks), and several LinkedIn actions received targeted fixes. Run callbacks now include additional identifiers/headers and OpenAPI updates, and error labels were standardized across the stack for clearer diagnostics.

  ### 🔔 Improved Webhook Delivery Identification & Deduplication

  We're introducing two important enhancements to our webhook callback system to make delivery tracking and deduplication more reliable for all integrators.

  #### 📌 New Stable Callback Reference (`callback_ref_uid`)

  Webhook payloads now include a new field:

  ```json theme={null}
  {
    "callback_ref_uid": "<uuid>"
  }
  ```

  This identifier is:

  * **Stable across retries**
  * **Unique per callback event**
  * Designed specifically to allow **safe deduplication** on the client side

  This ensures that even if your endpoint receives multiple retries, you can always identify which callbacks correspond to the same logical event.

  #### 📌 New Delivery Attempt Headers

  Webhook requests now include two additional HTTP headers:

  | Header             | Description                                                                                       |
  | ------------------ | ------------------------------------------------------------------------------------------------- |
  | **X-Callback-Ref** | Stable callback identifier, identical across retries (same as `callback_ref_uid` in the payload). |
  | **X-Run-Callback** | Unique identifier for each delivery attempt. Changes on every retry.                              |

  These headers allow you to:

  * Track each individual delivery attempt
  * Log retries more easily
  * Distinguish between *event identity* (stable) and *delivery attempt identity* (per retry)

  #### 📘 Why this matters

  These changes bring our webhook behavior in line with industry best practices and make it easier to:

  * Detect and safely ignore duplicate callbacks
  * Correlate retries with the same logical event
  * Debug delivery attempts via unique identifiers
  * Keep payloads stable and idempotent

  #### ✅ Summary

  * **`callback_ref_uid`** is now included in the payload → *stable event identifier*
  * **`X-Callback-Ref`** → stable ID in headers
  * **`X-Run-Callback`** → unique per delivery attempt
  * Retries always resend the **same payload**, preserving the original run status and data

  📘 [Managing Callbacks Documentation](/v1/runs/callbacks)

  ### 🔧 Action Fixes

  #### LinkedIn Job Search

  * 🐛 Handled missing job data by throwing a descriptive action error, preventing silent failures.

  #### LinkedIn Post Likers Extraction

  * 🐛 Removed `linkedin_profile_handle` from the output schema because the source does not provide it.

  #### Company Enrichment

  * 🐛 Fixed company domain resolution during company enrichment to return the correct domain.
</Update>

<Update label="2025-11-26" description="v1.2.1 – Stability & Reliability Improvements">
  ### 🚀 Edges New Release

  This release focuses on improving platform stability, reliability, and user experience across LinkedIn automations, engagement identities, and core API functionality.

  ### 🔒 Improved LinkedIn Session Stability

  * **Enhanced IP Management**: Implemented a new progressive IP rotation system that significantly improves LinkedIn session reliability
  * **Fewer Connection Errors**: Reduced intermittent failures and reconnection issues during LinkedIn operations
  * **Better Error Handling**: More reliable login, refresh, and checkpoint flows with improved retry logic
  * **Smoother Workflows**: Users should experience fewer session-related interruptions and more stable automation runs

  ### 💰 Engagement Identities Billing Enhancements

  * **Improved Billing Accuracy**: New buffer mechanism ensures more accurate usage tracking and billing for engagement identities
  * **Multiple Plan Tiers**: Support for tiered pricing plans based on usage volume, providing better flexibility and cost optimization
  * **Better Timeframe Validation**: Enhanced validation ensures billing stays within subscription timeframes for accurate charges
  * **Clearer Error Messages**: Improved error messages when creating identities to distinguish between "No plan available" and "No more room in plan" scenarios

  ### 📊 Sales Navigator & LinkedIn Actions Improvements

  * **Increased Limits**: Sales Navigator company employee search now supports up to **2,500 results** (previously 1,000) per request
  * **Enhanced Profile Data**: Company logo URLs are now included in profile experiences when extracting people data
  * **Fixed Post-Likers Actions**: Resolved issues with post-likers actions when using "share" URLs as input
  * **Better Pagination**: Fixed error 424 issues on multiple-output actions by preventing unnecessary pagination when no results are available
  * **Improved Post Commenters**: Enhanced validation for post commenters extraction to handle edge cases more reliably

  ### 🔧 API & Automation Improvements

  * **Output Retrieval by Run UUID**: You can now retrieve outputs directly by Run UUID, making it easier to access run results
  * **Better Workflow Support**: Enhanced workflow schemas with improved support for optional steps and output anchoring
  * **Real Dates from IDs**: Actions now return accurate dates when retrieving data by ID

  ### 🛠️ Platform Reliability

  * **Automated Data Retention**: Implemented automated cleanup of old runs and usage data to maintain optimal platform performance
    * Runs older than 90 days are automatically archived
    * Usage records older than 5 days are cleaned up
    * This ensures faster queries and better overall system performance

  ### 📝 What This Means for You

  * **More Reliable Automations**: LinkedIn actions should run more smoothly with fewer session interruptions
  * **Better Billing Accuracy**: Engagement identities billing is now more precise and transparent
  * **Increased Capacity**: Sales Navigator searches can now handle larger result sets
  * **Improved Developer Experience**: Better error messages and API capabilities make integration easier
  * **Faster Performance**: Automated data retention keeps the platform running smoothly over time
</Update>

<Update label="2025-11-05" description="v1.2.0 – Latest Release">
  ### 🚀 Edges New Release

  New release adds several new features and improvements to the Edges platform.

  * New [Engagement Identities](/v1/identities/engagement) mode for running LinkedIn outreach actions without consuming credits
  * Improved UI overall with updated components for better fluidity and user experience

  ### 💰 Engagement Identities Pricing & Billing

  * **New billing model**: Engagement Identities are billed monthly based on peak usage
  * **Starting at \$7.99/identity/month** with dynamic pricing that decreases with volume
  * **Credit-free outreach**: Run a comprehensive set of outreach actions (connect, message, follow, engage) without consuming credits
  * **Flexible usage**: Convert existing identities to engagement mode or create new ones via API
  * **Live monitoring**: Track current billing status and peak usage

  📘 [Learn more about Engagement Identities](/v1/identities/engagement)

  ### 🚀 Update on Extract LinkedIn People

  Here are the main changes:

  * 👔 **With the experiences parameter**, we now retrieve only the first **five companies' experiences**. The total number may vary depending on the profile. If you want more experiences, use the [`linkedin-extract-people-experiences`](/v1/api/actions/linkedin-extract-people-experiences) endpoint.

  * 💡 **With the skills parameter**, we now get only a **few skills (one or two)** — again, this can vary by profile. If you want more skills, use the [`linkedin-extract-people-skills`](/v1/api/actions/linkedin-extract-people-skills) endpoint.

  * 📋 Both actions use the same input payload as `linkedin-extract-people`.

  * ⚠️ **Note:** these two new actions share the same limit. We'll define the daily and per-minute request limits in a future release.

  ### 🔧 Technical Updates

  * **Rate limit simplification**: Simplified rate limiting system (plans-based rate limits will be introduced in the next release cycle)
</Update>

<Update label="2025-10-29" description="New Action & Fixes">
  ### ✨ New Action

  * **[Extract LinkedIn Received Invitations](/v1/api/actions/linkedin-extract-received-invitations)** — New `linkedin-extract-received-invitations` action to extract invitations you've received on LinkedIn, including sender details, messages, and timestamps.

  ### 🔧 Improvements

  * **Enhanced LinkedIn Native Login**: Improved stability with broader support for LinkedIn challenge handling, ensuring more reliable authentication flows.
  * **Better Profile Data Extraction**: Enhanced "experiences" field parsing in the [`linkedin-extract-people`](/v1/api/actions/linkedin-extract-people) action for more accurate profile information.
  * **Live Mode Enhancements**: `custom_data` is now included in both responses and errors for `live` execution mode, improving compatibility with automation tools and making it easier to track and reconcile requests.
</Update>

<Update label="2025-10-15" description="v1.1.0 – New Public Release">
  ### 🚀 Edges New Release

  New release adds several new features and improvements to the Edges platform.

  * New [Credit Consumption endpoint](/v1/api/workspace/consumption) to track credit usage
  * New [Get Identity Limits endpoint](/v1/api/identities/limits) to track limits usage per identity and action
  * New [Generate Login Links endpoint](/v1/api/identities/login-links) to create new login links for identities
  * Improved documentation and examples in [FAQ](/v1/faq-troubleshooting#how-to-track-credits-consumption%3F), [Native Login](/v1/identities/add-manage-identities#native-linkedin-login-link), and [LinkedIn Limits](/v1/linkedin/limits#2-edges-smart-limits) sections.

  ### 🔔 Enhanced Integration Webhooks

  * **New Event Type**: Added `AUTH_UPDATED` webhook event for monitoring LinkedIn account level changes
  * **Enhanced Payload**: Webhook data now includes:
    * `name`: LinkedIn account name
    * `level`: Account type (Classic, Sales Navigator, Premium, Recruiter Lite)
  * **Better Monitoring**: Real-time notifications when users upgrade or change their LinkedIn account levels

  📘 [Integration Webhooks Documentation](/v1/identities/linkedin#webhooks)

  ### 📚 Documentation Improvements

  * **API Consistency**: Updated endpoint descriptions from "List all" to "List" for better clarity
  * **LinkedIn Limitations**: Added clear documentation about group member extraction limitations
  * **Sales Navigator**: Enhanced filtering capabilities with updated OpenAPI specifications

  ### 🔧 Technical Updates

  * Updated OpenAPI specifications with new Sales Navigator filters
  * Improved API documentation consistency across all listing endpoints
  * Enhanced error handling and limitation documentation
</Update>

<Update label="2025-09-24" description="v1.0.0 – Public Release">
  ### 🚀 Edges v1 – Public Release

  Edges is now publicly available — an API-first automation platform built to run precise, scalable and fully observable actions on top of platforms like LinkedIn and Sales Navigator.

  ***

  ### 📦 TypeScript SDK

  The [Edges TypeScript SDK](https://www.npmjs.com/package/@edgesrun/sdk) offers a type-safe and minimal way to interact with the Edges API.\
  It handles authentication and exposes all endpoints for:

  * Action execution (`live`, `async`, `schedule`)
  * Identity & integration management
  * Run tracking & callbacks

  ***

  ### ⚙️ New API Core

  Edges exposes a fully documented and production-grade REST API with:

  * Modular **actions**, identified by scope (e.g. `linkedin-extract-people`)
  * Modern **execution modes**: `live`, `async`, `schedule`
  * Strong separation between **members** (dashboard users) and **identities** (automated accounts)
  * Robust **pagination**, **rate limits** and **error tracing**

  📚 [Explore the full API Reference](/v1/api/)

  ***

  ### 👥 Identity-Centric Design

  * Identities represent your automation accounts (e.g. a LinkedIn profile)
  * Create and manage identities independently from workspace members
  * Use native login or cookie-based authentication
  * Monitor integration status with webhooks

  📘 [How to connect a LinkedIn Identity](/v1/identities/linkedin)

  ***

  ### 🔁 Async, Schedule & Callbacks

  * Run **bulk actions** at scale via the `async` mode
  * Program runs to start **later** (`schedule_at`) or **recurrently** with `cron` via the `schedule` mode
  * Provide a `callback_url` to get results pushed when ready
  * Enrich callback payloads with your own `custom_data` to simplify reconciliation

  📘 [Execution Modes Overview](/v1/runs/overview) & [Async Callback Guide](/v1/runs/callbacks)

  ***

  ### ✉️ Featured Actions

  * **LinkedIn** Authentication, Extract, Search, Find, Intents, Messaging & Engage
  * **Sales Navigator** Search, Metrics & Engage
  * **Recruiter Lite** Search

  ***

  ### 🧠 Developer Experience First

  * Full OpenAPI-based, comprehensive documentation
  * Instant authentication with API keys
  * Built-in account rotation logic and identity modes
  * Tracking and observability with run UIDs, callbacks and callbacks api
  * Fast iteration cycles

  📘 [Getting Started Guide](/v1/quickstart)
</Update>

#### LinkedIn Post Activity

* **Added** [Understanding Author Fields](/v1/api/actions/linkedin-extract-people-post-activity#understanding-author-fields) for **Extract LinkedIn People Post Activity**:
  * `activity_author` — Person who performs the activity (e.g., reshared).
  * `author` — Author of the first-level (visible) post.
  * `source_post` — Source post (2nd level) when the visible post is a reshare; includes `author`, `linkedin_post_id`, `linkedin_post_url`, `content_text`; `null` when there is no 2nd level.
  * Examples for original post, reshare without comment, reshare with comment, and reshare of a post that shares another post.
