{
  "openapi": "3.1.0",
  "info": {
    "title": "Fetchin API",
    "version": "1.0.0",
    "description": "Public B2B data API for fetching posts and profile information"
  },
  "servers": [
    {
      "url": "https://api.fetchin.io",
      "description": "Production server"
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error",
          "code"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Human-readable description of what went wrong. For display/logging; do not branch on this string."
          },
          "code": {
            "type": "string",
            "enum": [
              "MISSING_PARAMETER",
              "INVALID_PARAMETER",
              "INVALID_URN",
              "UNAUTHENTICATED",
              "INVALID_API_KEY",
              "FORBIDDEN",
              "NOT_FOUND",
              "PROFILE_NOT_FOUND",
              "POST_NOT_FOUND",
              "COMPANY_NOT_FOUND",
              "ENDPOINT_REMOVED",
              "RATE_LIMITED",
              "QUOTA_EXHAUSTED",
              "INTERNAL_ERROR",
              "UPSTREAM_ERROR",
              "SERVICE_UNAVAILABLE",
              "UPSTREAM_TIMEOUT"
            ],
            "description": "Stable, machine-readable error code. Branch your integration on this value, not on the HTTP status alone or the message text."
          },
          "details": {
            "type": "object",
            "additionalProperties": true,
            "description": "Optional structured context. On QUOTA_EXHAUSTED it carries the balance breakdown at the moment of the rejection - creditsRemaining, subscriptionCreditsRemaining, paygCreditsRemaining - plus buyCreditsUrl, the self-serve page for buying more credits. Always additive and never guaranteed: read it for diagnostics and logs, but branch on `code` and do not require any field of it."
          }
        }
      },
      "ProfileImage": {
        "type": "object",
        "description": "One size of an image. Read the size from `width` and `height`, never from the URL: the size written in the URL path is the size that was requested and can differ from the file served. Image URLs are signed and stop working after an expiry date the source sets (their `e=` query parameter), which we do not control; download an image to keep it rather than storing its URL.",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Image URL"
          },
          "width": {
            "type": "integer",
            "description": "Width in pixels, as declared by the source. Omitted when it declares none."
          },
          "height": {
            "type": "integer",
            "description": "Height in pixels, as declared by the source. Omitted when it declares none."
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Bad request - a required parameter is missing or a value is invalid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "missingParameter": {
                "value": {
                  "error": "Missing profileUrlOrUrn parameter",
                  "code": "MISSING_PARAMETER"
                }
              },
              "invalidParameter": {
                "value": {
                  "error": "limit must be a number between 1 and 100",
                  "code": "INVALID_PARAMETER"
                }
              },
              "invalidUrn": {
                "value": {
                  "error": "Invalid URN format: urn:li:member:123456789",
                  "code": "INVALID_URN"
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Unauthorized - the X-API-Key header is missing or invalid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "missingApiKey": {
                "value": {
                  "error": "Missing API key. Include X-API-Key header.",
                  "code": "UNAUTHENTICATED"
                }
              },
              "invalidApiKey": {
                "value": {
                  "error": "Invalid API key",
                  "code": "INVALID_API_KEY"
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Not found - the request was served successfully but the requested professional entity does not exist.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "profileNotFound": {
                "value": {
                  "error": "LinkedIn profile not found",
                  "code": "PROFILE_NOT_FOUND"
                }
              },
              "postNotFound": {
                "value": {
                  "error": "Unable to find post from url",
                  "code": "POST_NOT_FOUND"
                }
              },
              "companyNotFound": {
                "value": {
                  "error": "Unable to find company slug from urn",
                  "code": "COMPANY_NOT_FOUND"
                }
              }
            }
          }
        }
      },
      "PaymentRequired": {
        "description": "Payment required - you are out of credits (QUOTA_EXHAUSTED): the plan allowance for the current period is spent AND no pay-as-you-go credits are left. Buy pay-as-you-go credits (self-serve, https://fetchin.io/credits), upgrade your plan, or wait for renewal; retrying will not help and no Retry-After is sent. Distinct from the per-second rate limit, which is a 429 (RATE_LIMITED).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "quotaExhausted": {
                "value": {
                  "error": "Quota exceeded. Upgrade your plan or wait for renewal.",
                  "code": "QUOTA_EXHAUSTED",
                  "details": {
                    "creditsRemaining": 0,
                    "subscriptionCreditsRemaining": 0,
                    "paygCreditsRemaining": 0,
                    "buyCreditsUrl": "https://fetchin.io/credits"
                  }
                }
              }
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Too many requests - your per-second rate limit (RATE_LIMITED) was exceeded. Back off and retry, honoring the Retry-After header. (Running out of credits is a separate 402 PaymentRequired / QUOTA_EXHAUSTED, and buying credits never raises this per-second limit.)",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying the request.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "rateLimited": {
                "value": {
                  "error": "Rate limit exceeded. Try again later.",
                  "code": "RATE_LIMITED"
                }
              }
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "Service unavailable - our API is temporarily unable to serve this request (capacity exhausted or overloaded). This is on our side, not yours and not an upstream service outage. Retry with backoff, honoring the Retry-After header.",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying the request.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "serviceUnavailable": {
                "value": {
                  "error": "Service temporarily unable to serve this request. Please retry.",
                  "code": "SERVICE_UNAVAILABLE"
                }
              }
            }
          }
        }
      },
      "InternalError": {
        "description": "Internal server error - an unexpected error occurred in our API. Safe to retry; contact support if it persists.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "examples": {
              "internalError": {
                "value": {
                  "error": "Internal server error",
                  "code": "INTERNAL_ERROR"
                }
              }
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "paths": {
    "/api/v1/subscription": {
      "get": {
        "summary": "Get subscription and quota status",
        "description": "Return the authenticated account's current subscription state: plan, remaining/used/total credits, per-second rate limit (RPS), renewal date, and whether the subscription is active (in good standing) or affected by a non-payment or scheduled cancellation. Use it to programmatically confirm access before routing traffic. This endpoint is free — it does not consume credits — and returns a `200` even when your quota is exhausted (so you can detect exactly why calls are failing). Credits come from two balances - the monthly plan allowance and any pay-as-you-go credits bought outright (valid 12 months from purchase) - and `creditsRemaining` is their sum, broken out by `subscriptionCreditsRemaining` and `paygCreditsRemaining`. Values reflect our billing store and may lag real-time usage by a few seconds. Treat `creditsRemaining > 0` as \"can I call the API right now?\" - a pay-as-you-go-only account has no subscription and reports `status: \"free\"` with `active: false` while still being able to call every endpoint. This endpoint is also metered on its OWN budget of 1 request per second per account, counted separately from your plan's per-second limit: polling it never consumes plan RPS (it returns `X-RateLimit-Cost: 0`), and a 429 here means you exceeded 1 req/s on this endpoint alone, not that your plan budget is spent. Because the call spends none of the plan window it does not report it, so this response carries no `X-RateLimit-Remaining` or `X-RateLimit-Reset`; `X-RateLimit-Limit` still shows your plan's RPS.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Current subscription and quota status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "plan",
                    "active",
                    "status",
                    "creditsRemaining",
                    "creditsLimit",
                    "creditsUsed",
                    "renewalDate",
                    "rpsLimit",
                    "cancelAtPeriodEnd"
                  ],
                  "properties": {
                    "plan": {
                      "type": "string",
                      "description": "Plan identifier (e.g. \"free\", \"custom\").",
                      "example": "custom"
                    },
                    "active": {
                      "type": "boolean",
                      "description": "Whether the subscription is in good standing. False when the billing status is past_due, incomplete, canceled or unpaid. Note: a false value here means a billing issue; check `creditsRemaining` separately to know if you still have credits.",
                      "example": true
                    },
                    "status": {
                      "type": "string",
                      "description": "Raw billing status. Branch on this rather than the HTTP status. `free` and `active` are good standing; `past_due`/`incomplete`/`unpaid` indicate a payment problem; `canceled` means the subscription has ended.",
                      "enum": [
                        "active",
                        "free",
                        "trialing",
                        "past_due",
                        "incomplete",
                        "unpaid",
                        "canceled"
                      ],
                      "example": "active"
                    },
                    "creditsRemaining": {
                      "type": "integer",
                      "description": "Total credits you can still spend: the plan allowance left for the current billing period PLUS your pay-as-you-go credits. This is the figure to gate traffic on. It can exceed creditsLimit, since pay-as-you-go credits are not part of the plan allowance.",
                      "example": 684230
                    },
                    "subscriptionCreditsRemaining": {
                      "type": "integer",
                      "description": "Optional. The plan half of creditsRemaining: credits left in the current billing period, which are discarded at renewal. Spent before pay-as-you-go credits.",
                      "example": 184230
                    },
                    "paygCreditsRemaining": {
                      "type": "integer",
                      "description": "Optional. The pay-as-you-go half of creditsRemaining: credits left across every one-time purchase you hold. Spent after the plan allowance, soonest-expiring first. 0 when you hold none.",
                      "example": 500000
                    },
                    "paygExpiresAt": {
                      "type": ["string", "null"],
                      "format": "date-time",
                      "description": "Optional. When your soonest-expiring pay-as-you-go credits lapse (ISO 8601), or null when you hold none. Each purchase expires 12 months after its own date and is never extended by a later one.",
                      "example": "2027-03-02T00:00:00.000Z"
                    },
                    "creditsLimit": {
                      "type": "integer",
                      "description": "Credits allotted by the plan for the current billing period. Excludes pay-as-you-go credits, so it is not a ceiling on creditsRemaining.",
                      "example": 250000
                    },
                    "creditsUsed": {
                      "type": "integer",
                      "description": "Plan credits consumed so far in the current billing period, i.e. creditsLimit minus subscriptionCreditsRemaining. Pay-as-you-go credits spent are not counted here.",
                      "example": 65770
                    },
                    "renewalDate": {
                      "type": "string",
                      "format": "date-time",
                      "description": "When the current billing period ends and the plan allowance is replaced (ISO 8601). Pay-as-you-go credits are untouched by this date; they keep their own 12-month expiry.",
                      "example": "2026-07-15T00:00:00.000Z"
                    },
                    "rpsLimit": {
                      "type": "integer",
                      "description": "Maximum sustained requests per second for this account.",
                      "example": 20
                    },
                    "cancelAtPeriodEnd": {
                      "type": "boolean",
                      "description": "Whether the subscription is set to end at the current period's end (no renewal).",
                      "example": false
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "description": "Too many requests - you exceeded this endpoint's own budget of 1 request per second per account (RATE_LIMITED). Your plan's per-second budget is untouched by these calls and is not what was exceeded: slow this polling loop, not your data requests. Honor the Retry-After header.",
            "headers": {
              "Retry-After": {
                "description": "Number of seconds to wait before retrying the request.",
                "schema": { "type": "integer" }
              }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Error" },
                "examples": {
                  "rateLimited": {
                    "value": {
                      "error": "This endpoint allows 1 request(s) per second per account, counted separately from your plan's 10 RPS \u2014 which this call does not consume.",
                      "code": "RATE_LIMITED"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/posts": {
      "get": {
        "summary": "Get posts from a profile",
        "description": "Fetch posts from a professional profile using its URN, public identifier (slug) or URL",
        "parameters": [
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example `urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`), a public identifier/slug (also fine; example `williamhgates`), or a full profile URL (example `https://www.linkedin.com/in/williamhgates`; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the `/in/` prefix.",
            "schema": {
              "type": "string",
              "example": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of posts to fetch (default: 10). A higher value is clamped to 100; 0 or a negative value is a 400.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Not supported on this endpoint. This feed is cursor-paginated and ignores offsets, so a non-zero value is rejected with 400 rather than silently returning the first page again. Page with `paginationToken` instead.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "deprecated": true
          },
          {
            "name": "paginationToken",
            "in": "query",
            "required": false,
            "description": "Cursor for the next page: pass back the `paginationToken` from the previous response, unchanged. Omit it to start from the beginning. A value this API did not issue is rejected with 400. Keep paging while `hasMore` is true.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeReposts",
            "in": "query",
            "required": false,
            "description": "Also return the reposts WITHOUT commentary, which are otherwise filtered out. Each one comes back as the repost itself: `postType: \"repost\"`, `id` = the repost's own activity URN, `date` = when it was reposted, `content` = \"\", no counts of its own (`reactionCount`, `commentCount`, `sharesCount`, `reactionsByType` omitted), the reposting profile or page as `author` and `profile`, `repostedBy`, and the original post nested under `resharedPost` with its own counts - the same shape a quote repost has. Collaborative posts are also returned when this is on. Accepts true/false (or 1/0); any other value is a free 400. The price does not change.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched posts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "posts": {
                      "type": "array",
                      "description": "Posts on this page. Reposts without commentary are filtered out unless `includeReposts=true`, so a page can hold fewer items than `count` while more remain — trust `hasMore`.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "urn:li:activity:1234567890",
                            "description": "Activity URN. References the post in the `urn:li:activity:*` namespace."
                          },
                          "shareUrn": {
                            "type": "string",
                            "example": "urn:li:ugcPost:7123456789012345678",
                            "description": "Share URN. References the same post as `id` but in the `urn:li:share:*` or `urn:li:ugcPost:*` namespace (depends on the post type)."
                          },
                          "content": {
                            "type": "string",
                            "example": "This is a post content..."
                          },
                          "date": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "reactionCount": {
                            "type": "integer",
                            "description": "Omitted on a `repost` item, which has no counts of its own."
                          },
                          "commentCount": {
                            "type": "integer",
                            "description": "Omitted on a `repost` item, which has no counts of its own."
                          },
                          "sharesCount": {
                            "type": "integer",
                            "description": "Number of times the post was reshared. Omitted on a `repost` item, which has no counts of its own."
                          },
                          "imageUrl": {
                            "type": "string"
                          },
                          "videoUrl": {
                            "type": "string"
                          },
                          "carouselPdfUrl": {
                            "type": "string"
                          },
                          "profile": {
                            "type": "object",
                            "required": [
                              "urn",
                              "name",
                              "headline",
                              "url",
                              "imageUrl"
                            ],
                            "properties": {
                              "urn": {
                                "type": "string",
                                "example": "urn:li:fsd_profile:ACoAAABCDEF"
                              },
                              "name": {
                                "type": "string",
                                "example": "John Doe"
                              },
                              "headline": {
                                "type": "string",
                                "example": "Software Engineer at Tech Company"
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/in/johndoe"
                              },
                              "imageUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/..."
                              }
                            }
                          },
                          "resharedPostUrn": {
                            "type": "string",
                            "example": "urn:li:activity:7123456789012345670",
                            "description": "Set when the author reshared someone else's post WITH their own commentary: the URN of the quoted post, which is also returned in full as `resharedPost`. Absent on an original post, so `!resharedPostUrn` selects originals only. Also set on a `repost` item (`includeReposts=true`)."
                          },
                          "postType": {
                            "type": "string",
                            "enum": [
                              "text",
                              "image",
                              "document",
                              "article",
                              "linkedinVideo",
                              "job",
                              "event",
                              "celebration",
                              "repost"
                            ],
                            "example": "image",
                            "description": "Kind of content attached to the post. 'article' means a link preview card is attached; long-form articles the member published are NOT returned by this endpoint. 'job', 'event' and 'celebration' are shared cards, detailed in the object of the same name. 'repost' is a repost without commentary, returned only with `includeReposts=true`."
                          },
                          "shareUrl": {
                            "type": "string",
                            "example": "https://www.linkedin.com/posts/williamhgates_my-time-in-rwanda-...",
                            "description": "Public permalink to the post."
                          },
                          "reactionsByType": {
                            "type": "object",
                            "description": "Reaction counts broken down by type. Only the types the post actually received are present, and they sum to `reactionCount`. Keys: `like`, `praise`, `empathy`, `interest`, `appreciation`, `entertainment`, `superLike`. Omitted on a `repost` item, and on a quoted post whose counts the source did not provide.",
                            "additionalProperties": {
                              "type": "integer"
                            },
                            "example": {
                              "like": 4139,
                              "empathy": 159,
                              "praise": 104,
                              "appreciation": 63,
                              "interest": 23
                            }
                          },
                          "images": {
                            "type": "array",
                            "description": "Every image of the post with its dimensions (empty for non-image posts). `imageUrl` is the first one, kept for backward compatibility.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string",
                                  "example": "https://media.licdn.com/dms/image/..."
                                },
                                "width": {
                                  "type": "integer",
                                  "example": 2048
                                },
                                "height": {
                                  "type": "integer",
                                  "example": 1365
                                }
                              }
                            }
                          },
                          "video": {
                            "type": ["object", "null"],
                            "description": "Video attached to the post, or null. `videoUrl` mirrors `video.url`.",
                            "properties": {
                              "url": {
                                "type": "string",
                                "example": "https://dms.licdn.com/playlist/vid/..."
                              },
                              "duration": {
                                "type": "integer",
                                "example": 60000,
                                "description": "Duration in milliseconds."
                              },
                              "thumbnail": {
                                "type": ["string", "null"]
                              },
                              "progressiveStreams": {
                                "type": "array",
                                "description": "Available renditions (bitrate/resolution variants).",
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "authorProfileId": {
                            "type": "string",
                            "example": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
                            "description": "Author id, the same value as the `profileId` returned by `/profile`."
                          },
                          "authorType": {
                            "type": "string",
                            "enum": [
                              "Person",
                              "Company"
                            ],
                            "example": "Person",
                            "description": "Whether the post was published by a member or by an organization page."
                          },
                          "permissions": {
                            "type": "object",
                            "description": "What the post allows, as published.",
                            "properties": {
                              "canReact": {
                                "type": "boolean"
                              },
                              "canPostComments": {
                                "type": "boolean"
                              },
                              "canShare": {
                                "type": "boolean"
                              },
                              "commentingDisabled": {
                                "type": "boolean"
                              },
                              "allowedCommentersScope": {
                                "type": "string",
                                "example": "ALL"
                              },
                              "shareAudience": {
                                "type": "string",
                                "example": "PUBLIC"
                              },
                              "isActivity": {
                                "type": "boolean"
                              },
                              "rootShare": {
                                "type": "boolean",
                                "description": "False when the post quotes another one."
                              }
                            }
                          },
                          "author": {
                            "type": "object",
                            "description": "Who published the item, member or organization page. On a `repost` item it is the reposting profile; inside `resharedPost`, the original author.",
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ]
                              },
                              "id": {
                                "type": "string",
                                "description": "The profile id (`ACoAA...`) for a person, the numeric company id for a page."
                              },
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string",
                                "description": "Professional profile URL, or the company page URL without a `/posts` suffix."
                              },
                              "info": {
                                "type": "string",
                                "description": "The headline for a person, the follower line for a page (e.g. \"29,282,565 followers\"), as the feed renders it."
                              },
                              "followerCount": {
                                "type": "number",
                                "description": "Companies only: the follower count `info` states, as a number.",
                                "example": 29282565
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "Persons only: profile slug."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Companies only: page slug."
                              },
                              "numericId": {
                                "type": "string",
                                "description": "Numeric member or company id, when the feed carries it."
                              },
                              "avatar": {
                                "type": "object",
                                "description": "Picture or logo, largest rendition.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "width": {
                                    "type": "integer"
                                  },
                                  "height": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "mentions": {
                            "type": "array",
                            "description": "The members and companies tagged in the text, one entry each. Empty when there are none.",
                            "items": {
                              "type": "object",
                              "required": [
                                "type",
                                "id",
                                "name",
                                "url"
                              ],
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "person",
                                    "company"
                                  ]
                                },
                                "id": {
                                  "type": "string",
                                  "description": "The profile id (`ACoAA...`) for a person, the numeric company id for a company."
                                },
                                "publicIdentifier": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "firstName": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "lastName": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "universalName": {
                                  "type": "string",
                                  "description": "Companies only."
                                },
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "contentAttributes": {
                            "type": "array",
                            "description": "Annotated ranges of `content`: tags, mentions, hashtags and links. `start` and `length` index into `content`.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "start": {
                                  "type": "integer"
                                },
                                "length": {
                                  "type": "integer"
                                },
                                "type": {
                                  "type": "string",
                                  "description": "Kind of range, e.g. `COMPANY_NAME`, `PROFILE_MENTION`, `HASHTAG`, `HYPERLINK`."
                                },
                                "hyperlink": {
                                  "type": "string",
                                  "description": "Where a link range points."
                                },
                                "hashtag": {
                                  "type": "string"
                                },
                                "company": {
                                  "type": "object",
                                  "description": "The resolved company of a `COMPANY_NAME` range.",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "profile": {
                                  "type": "object",
                                  "description": "The resolved member of a `PROFILE_MENTION` range.",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "firstName": {
                                      "type": "string"
                                    },
                                    "lastName": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    },
                                    "publicIdentifier": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "job": {
                            "type": "object",
                            "description": "The shared job, on `postType: \"job\"`. Each field is present when the card carries it.",
                            "properties": {
                              "id": {
                                "type": "string",
                                "example": "4012345678"
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/jobs/view/4012345678/"
                              },
                              "title": {
                                "type": "string",
                                "example": "Senior Product Manager"
                              },
                              "companyName": {
                                "type": "string",
                                "example": "Microsoft"
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Numeric company id.",
                                "example": "1035"
                              },
                              "companyUrl": {
                                "type": "string",
                                "example": "https://www.linkedin.com/company/microsoft/"
                              },
                              "location": {
                                "type": "string",
                                "example": "Redmond, WA"
                              },
                              "companyLogoUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "event": {
                            "type": "object",
                            "description": "The shared event, on `postType: \"event\"`. Each field is present when the card carries it. No timestamp is available for the event.",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "dateText": {
                                "type": "string",
                                "description": "The date line exactly as displayed, time zone included.",
                                "example": "Sun, Sep 6, 5:30 AM - 6:30 AM UTC"
                              },
                              "location": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "bannerUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "celebration": {
                            "type": "object",
                            "description": "The celebration card, on `postType: \"celebration\"`. Each field is present when the card carries it.",
                            "properties": {
                              "headline": {
                                "type": "string"
                              },
                              "subtitle": {
                                "type": "string"
                              },
                              "imageUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "resharedPost": {
                            "type": "object",
                            "description": "The quoted post in full, whenever `resharedPostUrn` is set: the same shape as an item of `posts`. Its `reactionCount`, `commentCount`, `sharesCount`, `reactionsByType` and `reactionTypeCounts` are OMITTED when the source did not provide them - usually the case for a quoted post - never reported as 0.",
                            "additionalProperties": true
                          },
                          "repostedBy": {
                            "type": "object",
                            "description": "Only on a `postType: \"repost\"` item: who reposted.",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "When a person reposted."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "When a page reposted."
                              }
                            }
                          }
                        }
                      }
                    },
                    "paginationToken": {
                      "type": ["string", "null"],
                      "example": "dXJuOmxpOmFjdGl2aXR5Ojc0ODk4OTQ2NzU5MjgwMjcxMzY=",
                      "description": "Cursor to pass back as `paginationToken` to fetch the next page."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether the feed holds more posts behind this page. Keep paging while true."
                    },
                    "pageSize": {
                      "type": "integer",
                      "example": 10,
                      "description": "The `count` this page was requested with."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/posts/search": {
      "post": {
        "summary": "Search posts",
        "description": "Search public professional posts by keyword and filters. The request is a JSON body, not query parameters. `query` supports quoted phrases, AND/OR/NOT and parentheses, with a hard ceiling of 5 boolean operators that comes from the underlying search - a 6th is refused with 400 rather than silently matching nothing. Filters cover recency (`postedWithin`, `postedAfter`), attachment kind (`contentType`), the author (`authorProfiles`, `authorCompanies`, `authorJobTitle`) and mentions (`mentionsCompanies`); every filter is validated against a closed list of values, so a typo is a free 400 instead of a billed page that quietly ignored it. A filter whose effect we could not confirm is refused with a free 400 rather than offered: an unrecognised filter is silently ignored by the underlying search, which would return a plausible but completely unfiltered page you paid for. `sortBy` has NO default: omit it and the underlying search applies its own ordering, which the response reports as `sort: null`. Pages are walked with an opaque `cursor` - author searches included - and one query is exhausted after a few hundred results, so reach further by splitting it by date window or by author. `total` gives the number of matching posts the source reports: an estimate that moves between pages, so walk until `cursor` is null. Billing is a flat **1 credit per call** whatever comes back, zero results included; a 400, a 402 and a 503 cost nothing.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Send `query`, or at least one of `authorProfiles` / `authorCompanies`. Every other field is optional. `null` reads as \"field omitted\" everywhere. The body is validated strictly: an unknown key, an unrecognised enum value or a list that is too long is rejected with 400 and costs nothing, rather than being accepted and ignored.",
                "properties": {
                  "query": {
                    "type": "string",
                    "maxLength": 500,
                    "description": "The search terms. Supports quoted phrases, `AND` / `OR` / `NOT`, parentheses with nesting up to 5 levels, and hashtag terms. **At most 5 boolean operators** - this is a limit of the underlying search, and a 6th is refused with 400 rather than silently matching nothing, so split the query into several searches and combine the results. At most 20 quoted phrases. Curly quotes, lowercase operators, single-quote delimiters and a bare `&` are normalised silently, and the interpreted query is echoed back as the response's `query`. Required unless `authorProfiles` or `authorCompanies` is set.",
                    "example": "\"head of growth\" AND (saas OR fintech) NOT intern"
                  },
                  "sortBy": {
                    "type": "string",
                    "enum": [
                      "relevance",
                      "date"
                    ],
                    "description": "How to order the results. **No default**: omit it and the underlying search applies its own ordering, which the response reports as `sort: null`. `date` is newest first. `date` cannot be combined with a hashtag term in `query` (400), and on a tight `postedWithin` window it returns markedly fewer results than no sort at all."
                  },
                  "postedWithin": {
                    "type": "string",
                    "enum": [
                      "24h",
                      "week",
                      "month"
                    ],
                    "description": "Keep only posts published within this window. Applied by the search itself, so it also changes which results exist."
                  },
                  "postedAfter": {
                    "type": [
                      "string",
                      "integer"
                    ],
                    "description": "Keep only posts published at or after this instant, as an ISO-8601 timestamp or an epoch in milliseconds. Must not be in the future and at most 365 days ago. Applied by us after the search runs, so a page filtered this way comes back short and still costs its 1 credit. Combine it with `postedWithin` to narrow inside a window.",
                    "example": "2026-10-01T00:00:00Z"
                  },
                  "contentType": {
                    "type": "array",
                    "description": "Keep only posts carrying one of these kinds of attachment. Values OR together.",
                    "uniqueItems": true,
                    "minItems": 1,
                    "maxItems": 5,
                    "items": {
                      "type": "string",
                      "enum": [
                        "image",
                        "video",
                        "liveVideo",
                        "jobPost",
                        "document"
                      ]
                    },
                    "example": [
                      "document"
                    ]
                  },
                  "authorProfiles": {
                    "type": "array",
                    "description": "Keep only posts published by these people. 1 to 25 values, each a profile id or any profile URL containing one; a 26th is refused with 400 (`'authorProfiles' must contain between 1 and 25 entries.`). A slug on its own is not accepted here - resolve it with `GET /api/v1/profile` first. Can be sent without `query` to page a set of authors.",
                    "minItems": 1,
                    "maxItems": 25,
                    "items": {
                      "type": "string"
                    },
                    "example": [
                      "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
                    ]
                  },
                  "authorCompanies": {
                    "type": "array",
                    "description": "Keep only posts published by these organization pages. 1 to 10 values, each a numeric page id, a page urn, or a page URL ending in a numeric id. Can be sent without `query`.",
                    "minItems": 1,
                    "maxItems": 10,
                    "items": {
                      "type": "string"
                    },
                    "example": [
                      "1035"
                    ]
                  },
                  "mentionsCompanies": {
                    "type": "array",
                    "description": "Keep only posts that mention these organization pages. 1 to 10 numeric page ids, urns or URLs.",
                    "minItems": 1,
                    "maxItems": 10,
                    "items": {
                      "type": "string"
                    },
                    "example": [
                      "1035"
                    ]
                  },
                  "authorJobTitle": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100,
                    "description": "Keep only posts whose author's current title matches this free text. Matched as a phrase.",
                    "example": "Head of Growth"
                  },
                  "maxResults": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50,
                    "default": 50,
                    "description": "How many results this page may return. 50 is both the default and the hard ceiling; a larger value is refused with 400 because the underlying search answers nothing at all above it. A page can return fewer results than this: results are de-duplicated by post id within the page (a 50-result request measured 49), and the last page of a walk is short by nature."
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 1024,
                    "description": "Opaque cursor for the next page. Pass back the `cursor` from the previous response, byte for byte, with the same `query` and filters; omit it to start a new search. A cursor issued for a different query, or any value this API did not issue, is refused with 400. Keep paging while `cursor` is not `null`."
                  }
                }
              },
              "examples": {
                "keywords": {
                  "summary": "Boolean keyword search, newest first",
                  "value": {
                    "query": "\"head of growth\" AND (saas OR fintech)",
                    "postedWithin": "week",
                    "sortBy": "date",
                    "maxResults": 25
                  }
                },
                "byAuthor": {
                  "summary": "Everything an author posted this month, no keywords",
                  "value": {
                    "authorCompanies": [
                      "1035"
                    ],
                    "postedWithin": "month",
                    "maxResults": 50
                  }
                },
                "documentsOnly": {
                  "summary": "Only posts carrying a document",
                  "value": {
                    "query": "pricing benchmark",
                    "contentType": [
                      "document"
                    ]
                  }
                },
                "nextPage": {
                  "summary": "The next page of the first search",
                  "value": {
                    "query": "\"head of growth\" AND (saas OR fintech)",
                    "postedWithin": "week",
                    "sortBy": "date",
                    "maxResults": 25,
                    "cursor": "eyJ2IjoxLCJxIjoiOWYyYzFlN2E0YjhkMzA1NiIsImYiOiJjMWE0ZTkwYjdkMzI2ODU0IiwiaSI6MjUsIm4iOjI1LCJjIjowfQ"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of matching posts. Billed 1 credit, including when `results` is empty. Observed latency, not a guarantee: ~1-2 s for a small page and 4.5-7 s for a full 50-result page.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "query",
                    "sort",
                    "results",
                    "cursor"
                  ],
                  "properties": {
                    "query": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The query as it was interpreted, after normalisation - so every silent rewrite is auditable. `null` on an author-only search."
                    },
                    "sort": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "enum": [
                        "relevance",
                        "date",
                        null
                      ],
                      "description": "The ordering that was applied, echoed from the request. `null` when `sortBy` was omitted, meaning the underlying search used its own ordering, which we do not name."
                    },
                    "total": {
                        "type": "integer",
                        "description": "How many posts the source counts for this search: an estimate, revised from one page to the next. Omitted when the source does not report one.",
                        "example": 378
                    },
                    "results": {
                      "type": "array",
                      "description": "Matching posts, de-duplicated within the page. Can hold fewer items than `maxResults`, and can be empty - which still costs 1 credit.",
                      "items": {
                        "type": "object",
                        "description": "One matching post.",
                        "required": [
                          "id",
                          "entityId",
                          "url",
                          "date",
                          "isEdited",
                          "postType",
                          "media",
                          "author",
                          "mentions",
                          "hashtags",
                          "outboundLinks",
                          "isRepost"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Activity URN of the post (`urn:li:activity:*`). Stable; de-duplicate on this value.",
                            "example": "urn:li:activity:7486820978292072449"
                          },
                          "entityId": {
                            "type": "string",
                            "description": "The numeric part of `id`, for convenience.",
                            "example": "7486820978292072449"
                          },
                          "shareUrn": {
                            "type": "string",
                            "description": "The same post in the `urn:li:share:*` / `urn:li:ugcPost:*` namespace, when the card carries it.",
                            "example": "urn:li:ugcPost:7486820977411145728"
                          },
                          "shareUrl": {
                            "type": "string",
                            "description": "Public permalink to the post, as the card carries it. Keyed on the share id, so it can differ from `url`; both open the same post.",
                            "example": "https://www.linkedin.com/feed/update/urn:li:activity:7486820978292072449/"
                          },
                          "url": {
                            "type": "string",
                            "description": "Permalink keyed on the activity id, always present and always in this form.",
                            "example": "https://www.linkedin.com/feed/update/urn:li:activity:7486820978292072449/"
                          },
                          "date": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the post was PUBLISHED, derived from the post id. An edited post reports its original publication date, not the date of the edit - see `isEdited`."
                          },
                          "postedAgoShort": {
                            "type": "string",
                            "description": "The post's age at fetch time, computed from `date` in English units: `s`, `m`, `h`, `d`, `w`, `mo`, `yr`. The same whichever account served the request. Informational; compute ages from `date`.",
                            "example": "3d"
                          },
                          "isEdited": {
                            "type": "boolean",
                            "description": "`true` when the post was edited after publication. The text returned is the current one; `date` is still the original publication date."
                          },
                          "content": {
                            "type": "string",
                            "description": "The post's own text, verbatim - every line is kept, including lines that start with `$`. Omitted when the post carries no text of its own, which happens on an image, video or document posted without a caption."
                          },
                          "postType": {
                            "type": "string",
                            "description": "What the post is, derived from the attachment that rendered: `text`, `image`, `video`, `document`, `article`, `poll`, `job`, `event`, `newsletter`, `celebration`, or `other` for an attachment kind added after this was written. `article` means a link preview card is attached. On a repost, the original's kind is `resharedPost.postType`.",
                            "example": "image"
                          },
                          "media": {
                            "type": "array",
                            "description": "Every attachment of the post, in the order the card rendered them. Empty on a text-only post and on a repost, whose original's attachments are under `resharedPost`.",
                            "items": {
                              "type": "object",
                              "description": "One attachment, as published. Which fields are filled depends on `type`. URLs served by the source's CDN are signed and expire; download what you keep.",
                              "required": [
                                "type"
                              ],
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "description": "Kind of attachment: `image`, `video`, `document`, `article`, `poll`, `job`, `event`, `newsletter` or `celebration`.",
                                  "example": "image"
                                },
                                "url": {
                                  "type": "string",
                                  "description": "The attachment's own URL: the image, the link of an article card, the playable MP4 of a video (highest resolution), the full PDF of a document, the page of a job (`https://www.linkedin.com/jobs/view/<id>/`) or of an event (`https://www.linkedin.com/events/<id>/`)."
                                },
                                "title": {
                                  "type": "string",
                                  "description": "The uploader's own title on a video; the document's real title (omitted when it has none); the job title; the event name; the question of a poll."
                                },
                                "subtitle": {
                                  "type": "string"
                                },
                                "assetUrn": {
                                  "type": "string"
                                },
                                "aspectRatio": {
                                  "type": "number"
                                },
                                "width": {
                                  "type": "integer"
                                },
                                "height": {
                                  "type": "integer"
                                },
                                "thumbnailUrl": {
                                  "type": "string",
                                  "description": "The video's poster frame, the hiring company's logo on a job, the event's banner, an article card's image."
                                },
                                "pageCount": {
                                  "type": "integer",
                                  "description": "Documents: number of pages."
                                },
                                "carousel": {
                                  "type": "boolean",
                                  "description": "`true` when a document attachment renders as a carousel."
                                },
                                "options": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "description": "Polls: the answer labels."
                                },
                                "entityId": {
                                  "type": "string",
                                  "description": "Jobs: the job id. Events: the event id."
                                },
                                "durationMs": {
                                  "type": "integer",
                                  "description": "Videos: playable length in milliseconds."
                                },
                                "streams": {
                                  "type": "array",
                                  "description": "Videos: every MP4 rendition, best first. `url` is the first of them.",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "url": {
                                        "type": "string"
                                      },
                                      "height": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                },
                                "coverPages": {
                                  "type": "array",
                                  "description": "Documents: the image URLs of the preview pages.",
                                  "items": {
                                    "type": "string"
                                  }
                                },
                                "companyName": {
                                  "type": "string",
                                  "description": "Jobs: the hiring company, as the card shows it."
                                },
                                "location": {
                                  "type": "string",
                                  "description": "Jobs: the location line, as the card shows it."
                                },
                                "dateText": {
                                  "type": "string",
                                  "description": "Events: the date line exactly as displayed. Reported only when the result was rendered in English, with no guarantee about the time zone it is expressed in. There is no event timestamp."
                                },
                                "pollOptions": {
                                  "type": "array",
                                  "description": "Polls: each answer with its votes.",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "text": {
                                        "type": "string"
                                      },
                                      "votes": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                },
                                "totalVotes": {
                                  "type": "integer",
                                  "description": "Polls: how many members voted."
                                },
                                "newsletterTitle": {
                                  "type": "string",
                                  "description": "Newsletter issues: the newsletter's name."
                                }
                              }
                            }
                          },
                          "images": {
                            "type": "array",
                            "description": "Every image of the post, with dimensions, largest rendition each. Omitted when the post has none. On the rare page served by the fallback search, only the first 4 are listed and `imageCount` gives the total.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string"
                                },
                                "width": {
                                  "type": "integer"
                                },
                                "height": {
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "imageCount": {
                            "type": "integer",
                            "description": "The post's number of images. Omitted when the post has none."
                          },
                          "imageUrl": {
                            "type": "string",
                            "description": "First entry of `images`. Kept for parity with `GET /api/v1/posts`."
                          },
                          "article": {
                            "type": "object",
                            "description": "The link preview card, when one is attached.",
                            "properties": {
                              "title": {
                                "type": "string",
                                "description": "The linked article's own title (on a newsletter issue too)."
                              },
                              "subtitle": {
                                "type": "string"
                              },
                              "link": {
                                "type": "string"
                              },
                              "image": {
                                "type": "string"
                              },
                              "newsletterTitle": {
                                "type": "string",
                                "description": "Newsletter issues only: the newsletter's name."
                              }
                            }
                          },
                          "author": {
                            "type": "object",
                            "description": "Who published the post. One shape for both people and organization pages; read `type` to tell them apart. Complete whatever the language of the account that served the request. A field that could not be read is omitted rather than guessed.",
                            "required": [
                              "type"
                            ],
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ],
                                "description": "`profile` when a person published the post, `company` when an organization page did."
                              },
                              "id": {
                                "type": "string",
                                "description": "Author id: the profile id (`ACoAA...`) when `type` is `profile`, the numeric page id when it is `company`. The profile id is the same value as the `profileId` returned by `GET /api/v1/profile`, so posts can be joined to profiles.",
                                "example": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
                              },
                              "numericId": {
                                "type": "string",
                                "description": "Numeric member id, when known. Not resolvable to a profile on its own; prefer `id`. On a repost it is omitted when it cannot be attributed to this author with certainty."
                              },
                              "name": {
                                "type": "string",
                                "example": "Bill Gates"
                              },
                              "url": {
                                "type": "string",
                                "description": "Public professional profile or page URL of the author.",
                                "example": "https://www.linkedin.com/in/williamhgates"
                              },
                              "info": {
                                "type": "string",
                                "description": "Kept for parity with `GET /api/v1/posts`: the member's headline on `type: \"profile\"`, the page's follower line (`\"1,289 followers\"`) on `type: \"company\"`."
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "Profile slug, without the `/in/` prefix. Only on `type: \"profile\"`.",
                                "example": "williamhgates"
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Page slug, without the path prefix. Only on `type: \"company\"`.",
                                "example": "microsoft"
                              },
                              "followerCount": {
                                  "type": "integer",
                                  "description": "The page's follower count, as a number. Only on `type: \"company\"`.",
                                  "example": 1289
                              },
                              "headline": {
                                "type": "string",
                                "description": "The member's headline. Only on `type: \"profile\"`.",
                                "example": "Chair, Gates Foundation and Founder, Breakthrough Energy"
                              },
                              "avatar": {
                                "type": "object",
                                "description": "Author picture, largest rendition the card offered. Read the size from `width`/`height`, not from the URL. The URL is signed by the source and stops working after its expiry; download the file to keep it.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "width": {
                                    "type": "integer"
                                  },
                                  "height": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "website": {
                                "type": "string",
                                "description": "Call-to-action link on the author card, reported whenever present."
                              },
                              "websiteLabel": {
                                "type": "string",
                                "description": "Label of that call-to-action link. It is interface text, so it is reported only when the result was rendered in English."
                              },
                              "isPremium": {
                                "type": "boolean",
                                "description": "`true` when the author card carries a premium badge. Omitted otherwise - an absent badge is not proof that the account is not premium."
                              }
                            }
                          },
                          "reactionCount": {
                            "type": "integer",
                            "description": "Total reactions, as a SNAPSHOT at fetch time. Re-read the post to refresh it. Omitted, never reported as 0, when the page carried no count for the post - a 0 is a real zero. The same holds for `commentCount`, `sharesCount`, `reactionTypeCounts` and `reactionsByType`."
                          },
                          "commentCount": {
                            "type": "integer",
                            "description": "Total comments, as a snapshot at fetch time. Omitted when the page carried no count."
                          },
                          "sharesCount": {
                            "type": "integer",
                            "description": "Times the post was reshared, as a snapshot at fetch time. The plural spelling matches `GET /api/v1/posts`. Omitted when the page carried no count."
                          },
                          "reactionTypeCounts": {
                            "type": "array",
                            "description": "The complete reaction breakdown in the source's own order, zeros included: `LIKE`, `PRAISE`, `EMPATHY`, `INTEREST`, `APPRECIATION`, `ENTERTAINMENT`, `SUPER_LIKE`. Omitted when the page carried no count.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string"
                                },
                                "count": {
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "reactionsByType": {
                            "type": "object",
                            "description": "Only the reaction types the post received, keyed `like`, `praise`, `empathy`, `interest`, `appreciation`, `entertainment`, `superLike`; the values sum to `reactionCount` (same rule as `GET /api/v1/posts`). Omitted when the page carried no count.",
                            "additionalProperties": {
                              "type": "integer"
                            }
                          },
                          "mentions": {
                            "type": "array",
                            "description": "Entities mentioned in the post text. Empty when there are none.",
                            "items": {
                              "type": "object",
                              "description": "An entity mentioned in the post text.",
                              "required": [
                                "type",
                                "name",
                                "url"
                              ],
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "person",
                                    "company"
                                  ]
                                },
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "hashtags": {
                            "type": "array",
                            "description": "Hashtags in the post text, without the leading `#`. Empty when there are none.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "outboundLinks": {
                            "type": "array",
                            "description": "Links in the post text. Empty when there are none.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "isRepost": {
                            "type": "boolean",
                            "description": "`true` when this post quotes another one. The quoted post, attachments included, is in `resharedPost`; the reposter's own `media` is then empty and `images` / `article` are omitted."
                          },
                          "resharedPost": {
                            "type": "object",
                            "description": "The quoted post, when `isRepost` is `true`: its own author, text and attachments, so a repost is usable without a second call. Engagement counts are not carried here - fetch the quoted post by its `id` if you need them.",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "shareUrn": {
                                "type": "string"
                              },
                              "date": {
                                "type": "string",
                                "format": "date-time"
                              },
                              "author": {
                                "type": "object",
                                "description": "Who published the post. One shape for both people and organization pages; read `type` to tell them apart. Complete whatever the language of the account that served the request. A field that could not be read is omitted rather than guessed.",
                                "required": [
                                  "type"
                                ],
                                "properties": {
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "profile",
                                      "company"
                                    ],
                                    "description": "`profile` when a person published the post, `company` when an organization page did."
                                  },
                                  "id": {
                                    "type": "string",
                                    "description": "Author id: the profile id (`ACoAA...`) when `type` is `profile`, the numeric page id when it is `company`. The profile id is the same value as the `profileId` returned by `GET /api/v1/profile`, so posts can be joined to profiles.",
                                    "example": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
                                  },
                                  "numericId": {
                                    "type": "string",
                                    "description": "Numeric member id, when known. Not resolvable to a profile on its own; prefer `id`. On a repost it is omitted when it cannot be attributed to this author with certainty."
                                  },
                                  "name": {
                                    "type": "string",
                                    "example": "Bill Gates"
                                  },
                                  "url": {
                                    "type": "string",
                                    "description": "Public professional profile or page URL of the author.",
                                    "example": "https://www.linkedin.com/in/williamhgates"
                                  },
                                  "info": {
                                    "type": "string",
                                    "description": "Kept for parity with `GET /api/v1/posts`: the member's headline on `type: \"profile\"`, the page's follower line (`\"1,289 followers\"`) on `type: \"company\"`."
                                  },
                                  "publicIdentifier": {
                                    "type": "string",
                                    "description": "Profile slug, without the `/in/` prefix. Only on `type: \"profile\"`.",
                                    "example": "williamhgates"
                                  },
                                  "universalName": {
                                    "type": "string",
                                    "description": "Page slug, without the path prefix. Only on `type: \"company\"`.",
                                    "example": "microsoft"
                                  },
                                  "followerCount": {
                                      "type": "integer",
                                      "description": "The page's follower count, as a number. Only on `type: \"company\"`.",
                                      "example": 1289
                                  },
                                  "headline": {
                                    "type": "string",
                                    "description": "The member's headline. Only on `type: \"profile\"`.",
                                    "example": "Chair, Gates Foundation and Founder, Breakthrough Energy"
                                  },
                                  "avatar": {
                                    "type": "object",
                                    "description": "Author picture, largest rendition the card offered. Read the size from `width`/`height`, not from the URL. The URL is signed by the source and stops working after its expiry; download the file to keep it.",
                                    "properties": {
                                      "url": {
                                        "type": "string"
                                      },
                                      "width": {
                                        "type": "integer"
                                      },
                                      "height": {
                                        "type": "integer"
                                      }
                                    }
                                  },
                                  "website": {
                                    "type": "string",
                                    "description": "Call-to-action link on the author card, reported whenever present."
                                  },
                                  "websiteLabel": {
                                    "type": "string",
                                    "description": "Label of that call-to-action link. It is interface text, so it is reported only when the result was rendered in English."
                                  },
                                  "isPremium": {
                                    "type": "boolean",
                                    "description": "`true` when the author card carries a premium badge. Omitted otherwise - an absent badge is not proof that the account is not premium."
                                  }
                                }
                              },
                              "content": {
                                "type": "string"
                              },
                              "postType": {
                                "type": "string",
                                "description": "What the original is, from its attachments. Omitted when it has none."
                              },
                              "media": {
                                "type": "array",
                                "description": "The original's attachments, same shape as `media` above.",
                                "items": {
                                  "type": "object",
                                  "description": "One attachment, as published. Which fields are filled depends on `type`. URLs served by the source's CDN are signed and expire; download what you keep.",
                                  "required": [
                                    "type"
                                  ],
                                  "properties": {
                                    "type": {
                                      "type": "string",
                                      "description": "Kind of attachment: `image`, `video`, `document`, `article`, `poll`, `job`, `event`, `newsletter` or `celebration`.",
                                      "example": "image"
                                    },
                                    "url": {
                                      "type": "string",
                                      "description": "The attachment's own URL: the image, the link of an article card, the playable MP4 of a video (highest resolution), the full PDF of a document, the page of a job (`https://www.linkedin.com/jobs/view/<id>/`) or of an event (`https://www.linkedin.com/events/<id>/`)."
                                    },
                                    "title": {
                                      "type": "string",
                                      "description": "The uploader's own title on a video; the document's real title (omitted when it has none); the job title; the event name; the question of a poll."
                                    },
                                    "subtitle": {
                                      "type": "string"
                                    },
                                    "assetUrn": {
                                      "type": "string"
                                    },
                                    "aspectRatio": {
                                      "type": "number"
                                    },
                                    "width": {
                                      "type": "integer"
                                    },
                                    "height": {
                                      "type": "integer"
                                    },
                                    "thumbnailUrl": {
                                      "type": "string",
                                      "description": "The video's poster frame, the hiring company's logo on a job, the event's banner, an article card's image."
                                    },
                                    "pageCount": {
                                      "type": "integer",
                                      "description": "Documents: number of pages."
                                    },
                                    "carousel": {
                                      "type": "boolean",
                                      "description": "`true` when a document attachment renders as a carousel."
                                    },
                                    "options": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "description": "Polls: the answer labels."
                                    },
                                    "entityId": {
                                      "type": "string",
                                      "description": "Jobs: the job id. Events: the event id."
                                    },
                                    "durationMs": {
                                      "type": "integer",
                                      "description": "Videos: playable length in milliseconds."
                                    },
                                    "streams": {
                                      "type": "array",
                                      "description": "Videos: every MP4 rendition, best first. `url` is the first of them.",
                                      "items": {
                                        "type": "object",
                                        "properties": {
                                          "url": {
                                            "type": "string"
                                          },
                                          "height": {
                                            "type": "integer"
                                          }
                                        }
                                      }
                                    },
                                    "coverPages": {
                                      "type": "array",
                                      "description": "Documents: the image URLs of the preview pages.",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "companyName": {
                                      "type": "string",
                                      "description": "Jobs: the hiring company, as the card shows it."
                                    },
                                    "location": {
                                      "type": "string",
                                      "description": "Jobs: the location line, as the card shows it."
                                    },
                                    "dateText": {
                                      "type": "string",
                                      "description": "Events: the date line exactly as displayed. Reported only when the result was rendered in English, with no guarantee about the time zone it is expressed in. There is no event timestamp."
                                    },
                                    "pollOptions": {
                                      "type": "array",
                                      "description": "Polls: each answer with its votes.",
                                      "items": {
                                        "type": "object",
                                        "properties": {
                                          "text": {
                                            "type": "string"
                                          },
                                          "votes": {
                                            "type": "integer"
                                          }
                                        }
                                      }
                                    },
                                    "totalVotes": {
                                      "type": "integer",
                                      "description": "Polls: how many members voted."
                                    },
                                    "newsletterTitle": {
                                      "type": "string",
                                      "description": "Newsletter issues: the newsletter's name."
                                    }
                                  }
                                }
                              },
                              "images": {
                                "type": "array",
                                "description": "The original's images, same shape as `images` above.",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "url": {
                                      "type": "string"
                                    },
                                    "width": {
                                      "type": "integer"
                                    },
                                    "height": {
                                      "type": "integer"
                                    }
                                  }
                                }
                              },
                              "article": {
                                "type": "object",
                                "description": "The original's link preview card, same shape as `article` above.",
                                "properties": {
                                  "title": {
                                    "type": "string",
                                    "description": "The linked article's own title (on a newsletter issue too)."
                                  },
                                  "subtitle": {
                                    "type": "string"
                                  },
                                  "link": {
                                    "type": "string"
                                  },
                                  "image": {
                                    "type": "string"
                                  },
                                  "newsletterTitle": {
                                    "type": "string",
                                    "description": "Newsletter issues only: the newsletter's name."
                                  }
                                }
                              },
                              "mentions": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "description": "An entity mentioned in the post text.",
                                  "required": [
                                    "type",
                                    "name",
                                    "url"
                                  ],
                                  "properties": {
                                    "type": {
                                      "type": "string",
                                      "enum": [
                                        "person",
                                        "company"
                                      ]
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    }
                                  }
                                }
                              },
                              "hashtags": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "outboundLinks": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "commentingDisabled": {
                            "type": "boolean",
                            "description": "`true` when comments are closed to the account that read the post: turned off by the author, or limited to the author's connections or to a group's members. Omitted when the setting is not reported, rather than defaulted."
                          },
                          "group": {
                            "type": "object",
                            "description": "Present only on a post published in a group: the group's `id`, `name` and `url`.",
                            "properties": {
                              "id": {
                                "type": "string",
                                "example": "4521873"
                              },
                              "name": {
                                "type": "string",
                                "example": "SaaS Growth Leaders"
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/groups/4521873/"
                              }
                            }
                          }
                        }
                      }
                    },
                    "cursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Opaque cursor for the next page, or `null` when this result set is exhausted - the only end-of-results signal (`total` is an estimate and cannot end a walk). Returned on author searches too. Pass it back unchanged with the same query and filters. Consecutive pages can repeat posts, notably on dense result sets sorted by date: de-duplicate on `id`. One query is exhausted after a few hundred results."
                    },
                    "partial": {
                      "type": "object",
                      "description": "Present only when at least one card on the page could not be read and was dropped, so a short page is never silently short. Diagnostic and additive: log it, do not branch on the keys of `reasons`.",
                      "properties": {
                        "droppedResults": {
                          "type": "integer"
                        },
                        "reasons": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "query": "\"head of growth\" AND (saas OR fintech)",
                  "sort": null,
                  "results": [
                    {
                      "id": "urn:li:activity:7486820978292072449",
                      "entityId": "7486820978292072449",
                      "shareUrn": "urn:li:ugcPost:7486820977411145728",
                      "shareUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7486820978292072449/",
                      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7486820978292072449/",
                      "date": "2026-10-04T16:33:39.632Z",
                      "postedAgoShort": "3d",
                      "isEdited": false,
                      "content": "We just hired our first Head of Growth. Three things I wish I had known before writing the job description for a SaaS company this size...",
                      "postType": "image",
                      "media": [
                        {
                          "type": "image",
                          "url": "https://media.licdn.com/dms/image/v2/D4E22AQ.../feedshare-shrink_2048_1536/0/1759590819000?e=1762992000&v=beta&t=...",
                          "width": 2048,
                          "height": 1365,
                          "aspectRatio": 1.5
                        }
                      ],
                      "images": [
                        {
                          "url": "https://media.licdn.com/dms/image/v2/D4E22AQ.../feedshare-shrink_2048_1536/0/1759590819000?e=1762992000&v=beta&t=...",
                          "width": 2048,
                          "height": 1365
                        }
                      ],
                      "imageUrl": "https://media.licdn.com/dms/image/v2/D4E22AQ.../feedshare-shrink_2048_1536/0/1759590819000?e=1762992000&v=beta&t=...",
                      "author": {
                        "type": "profile",
                        "id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
                        "name": "Marie Dupont",
                        "url": "https://www.linkedin.com/in/marie-dupont",
                        "publicIdentifier": "marie-dupont",
                        "info": "Co-founder & CEO at Northbound",
                        "headline": "Co-founder & CEO at Northbound",
                        "avatar": {
                          "url": "https://media.licdn.com/dms/image/v2/D4E03AQ.../profile-displayphoto-shrink_400_400/0/1726000000000?e=1762992000&v=beta&t=...",
                          "width": 400,
                          "height": 400
                        }
                      },
                      "reactionCount": 412,
                      "commentCount": 37,
                      "sharesCount": 8,
                      "reactionTypeCounts": [
                        {
                          "type": "LIKE",
                          "count": 351
                        },
                        {
                          "type": "PRAISE",
                          "count": 33
                        },
                        {
                          "type": "EMPATHY",
                          "count": 12
                        },
                        {
                          "type": "INTEREST",
                          "count": 9
                        },
                        {
                          "type": "APPRECIATION",
                          "count": 7
                        },
                        {
                          "type": "ENTERTAINMENT",
                          "count": 0
                        },
                        {
                          "type": "SUPER_LIKE",
                          "count": 0
                        }
                      ],
                      "reactionsByType": {
                        "like": 351,
                        "praise": 33,
                        "empathy": 12,
                        "interest": 9,
                        "appreciation": 7
                      },
                      "mentions": [
                        {
                          "type": "company",
                          "name": "Northbound",
                          "url": "https://www.linkedin.com/company/northbound"
                        }
                      ],
                      "hashtags": [
                        "hiring",
                        "saas"
                      ],
                      "outboundLinks": [
                        "https://northbound.example.com/careers"
                      ],
                      "isRepost": false,
                      "commentingDisabled": false
                    },
                    {
                      "id": "urn:li:activity:7489894675928027136",
                      "entityId": "7489894675928027136",
                      "shareUrn": "urn:li:share:7489894675324166145",
                      "shareUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7489894675928027136/",
                      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7489894675928027136/",
                      "date": "2026-10-06T04:07:26.255Z",
                      "postedAgoShort": "1d",
                      "isEdited": true,
                      "content": "This matches what we see on the fintech side too.",
                      "postType": "text",
                      "media": [],
                      "author": {
                        "type": "company",
                        "id": "1035",
                        "name": "Northbound",
                        "url": "https://www.linkedin.com/company/northbound",
                        "universalName": "northbound"
                      },
                      "reactionCount": 64,
                      "commentCount": 3,
                      "sharesCount": 1,
                      "reactionTypeCounts": [
                        {
                          "type": "LIKE",
                          "count": 58
                        },
                        {
                          "type": "PRAISE",
                          "count": 4
                        },
                        {
                          "type": "EMPATHY",
                          "count": 1
                        },
                        {
                          "type": "INTEREST",
                          "count": 1
                        },
                        {
                          "type": "APPRECIATION",
                          "count": 0
                        },
                        {
                          "type": "ENTERTAINMENT",
                          "count": 0
                        },
                        {
                          "type": "SUPER_LIKE",
                          "count": 0
                        }
                      ],
                      "reactionsByType": {
                        "like": 58,
                        "praise": 4,
                        "empathy": 1,
                        "interest": 1
                      },
                      "mentions": [],
                      "hashtags": [],
                      "outboundLinks": [],
                      "isRepost": true,
                      "resharedPost": {
                        "id": "urn:li:activity:7486820978292072449",
                        "shareUrn": "urn:li:ugcPost:7486820977411145728",
                        "date": "2026-10-04T16:33:39.632Z",
                        "author": {
                          "type": "profile",
                          "id": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
                          "name": "Marie Dupont",
                          "url": "https://www.linkedin.com/in/marie-dupont",
                          "publicIdentifier": "marie-dupont",
                          "headline": "Co-founder & CEO at Northbound"
                        },
                        "content": "We just hired our first Head of Growth. Three things I wish I had known before writing the job description for a SaaS company this size...",
                        "postType": "image",
                        "media": [
                          {
                            "type": "image",
                            "url": "https://media.licdn.com/dms/image/v2/D4E22AQ.../feedshare-shrink_2048_1536/0/1759590819000?e=1762992000&v=beta&t=...",
                            "width": 2048,
                            "height": 1365,
                            "aspectRatio": 1.5
                          }
                        ],
                        "images": [
                          {
                            "url": "https://media.licdn.com/dms/image/v2/D4E22AQ.../feedshare-shrink_2048_1536/0/1759590819000?e=1762992000&v=beta&t=...",
                            "width": 2048,
                            "height": 1365
                          }
                        ],
                        "hashtags": [
                          "hiring",
                          "saas"
                        ]
                      }
                    }
                  ],
                  "cursor": "eyJ2IjoxLCJxIjoiOWYyYzFlN2E0YjhkMzA1NiIsImYiOiJjMWE0ZTkwYjdkMzI2ODU0IiwiaSI6NTAsIm4iOjUwLCJjIjowfQ"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/post/comments": {
      "get": {
        "summary": "Get comments from a post",
        "description": "Fetch comments from a professional post including author information and replies (subcomments). Comments come back in the source's order for `sortBy`: `relevance` (default) returns a ranked SUBSET of the thread (measured: 224 of 299 top-level comments), `recent` returns the complete thread newest first and is the way to walk every comment or pick up new ones. Pages advance with `start`.",
        "parameters": [
          {
            "name": "postUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "Professional post URL or URN: `urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, a group post as `urn:li:groupPost:<groupId>-<postId>`, or any post URL containing one. A repost without commentary answers with the original post's comments.",
            "schema": {
              "type": "string",
              "example": "https://www.linkedin.com/posts/username_post-slug-1234567890-abcd"
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "description": "Order of the comments. `relevance` (default) is the source's own ranking and returns a ranked SUBSET of the thread (measured: 224 of 299 top-level comments). `recent` returns the COMPLETE thread, newest first: use it to walk every comment or to pick up new ones. Any other value is a 400 that costs nothing.",
            "schema": {
              "type": "string",
              "enum": [
                "relevance",
                "recent"
              ],
              "default": "relevance"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of comments to fetch (default: 100)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Offset of the first item to return. This endpoint pages by offset: advance `start` by the number of items you received. Keep requesting while `hasMore` is true; an empty page ends the list.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "paginationToken",
            "in": "query",
            "required": false,
            "description": "Returned for continuity with the other endpoints. It does not advance this thread - page with `start`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched comments",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "comments": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "urn": {
                            "type": "string",
                            "example": "urn:li:comment:(ugcPost:7287782484287606784,7287957733851484162)"
                          },
                          "text": {
                            "type": "string",
                            "example": "Great post! Thanks for sharing."
                          },
                          "createdAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "reactionCount": {
                            "type": "integer"
                          },
                          "reactionTypeCounts": {
                            "type": "array",
                            "description": "The comment's reactions per type, in the source's order, when provided.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string"
                                },
                                "count": {
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "replyCount": {
                            "type": "integer",
                            "description": "Replies the comment received, when the source states it."
                          },
                          "edited": {
                            "type": "boolean",
                            "description": "`true` when the comment was edited after it was posted."
                          },
                          "pinned": {
                            "type": "boolean",
                            "description": "`true` when the comment is pinned to the top of the thread."
                          },
                          "authorIsPostAuthor": {
                            "type": "boolean",
                            "description": "`true` when the comment was written by the post's own author."
                          },
                          "contributed": {
                            "type": "boolean",
                            "description": "`true` when the comment is a contribution to a collaborative article."
                          },
                          "permalink": {
                            "type": "string",
                            "description": "Direct link to the comment."
                          },
                          "author": {
                            "type": "object",
                            "required": [
                              "id",
                              "name",
                              "headline",
                              "profilePictureUrl",
                              "profileUrl"
                            ],
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ],
                                "description": "`profile` for a member, `company` for a company page."
                              },
                              "id": {
                                "type": "string",
                                "example": "urn:li:fsd_profile:ACoAABCDEFG",
                                "description": "`urn:li:fsd_profile:<profileId>` for a member, `urn:li:fsd_company:<companyId>` for a company page."
                              },
                              "name": {
                                "type": "string",
                                "example": "Jane Doe"
                              },
                              "headline": {
                                "type": "string",
                                "example": "Software Engineer at Tech Company",
                                "description": "The member's headline; for a company page, its follower line (e.g. \"1,207 followers\")."
                              },
                              "profilePictureUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/..."
                              },
                              "profileUrl": {
                                "type": "string",
                                "example": "https://www.linkedin.com/in/janedoe",
                                "description": "Profile URL of the member, or the company page URL without a `/posts` suffix."
                              },
                              "profileId": {
                                "type": "string",
                                "description": "Members only: the profile id (`ACoAA...`)."
                              },
                              "publicId": {
                                "type": "string",
                                "description": "Members only: the public identifier (`/in/<publicId>`)."
                              },
                              "memberId": {
                                "type": "string",
                                "description": "Members only: the numeric member id."
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Company pages only: the numeric company id."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Company pages only: the page's public identifier."
                              }
                            },
                            "description": "Who wrote the comment: a member or a company page - read `type`."
                          },
                          "replies": {
                            "type": "array",
                            "description": "Array of reply comments (subcomments), same structure as a comment with an empty `replies` array.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "urn": {
                                  "type": "string"
                                },
                                "text": {
                                  "type": "string"
                                },
                                "createdAt": {
                                  "type": "string",
                                  "format": "date-time"
                                },
                                "reactionCount": {
                                  "type": "integer"
                                },
                                "author": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "headline": {
                                      "type": "string"
                                    },
                                    "profilePictureUrl": {
                                      "type": "string"
                                    },
                                    "profileUrl": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "replies": {
                                  "type": "array",
                                  "items": {}
                                }
                              }
                            }
                          }
                        }
                      },
                      "description": "Top-level comments in the source's order for `sortBy`, each with its replies nested."
                    },
                    "total": {
                      "type": "integer",
                      "description": "Number of top-level comments the source reports for the post (replies not included). Omitted when the source does not report one.",
                      "example": 42
                    },
                    "paginationToken": {
                      "type": "string",
                      "description": "Token for fetching the next page"
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more comments are available. Always false on an empty page."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/profile": {
      "get": {
        "summary": "Get profile information",
        "description": "Fetch profile details using profile URL or URN. Consumes 1 credit, or 2 with `fullProfile=true` (the second credit when at least one of the two extra pages was read); 1 rate-limit unit either way.",
        "parameters": [
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example `urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`), a public identifier/slug (also fine; example `williamhgates`), or a full profile URL (example `https://www.linkedin.com/in/williamhgates`; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the `/in/` prefix.",
            "schema": {
              "type": "string",
              "example": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
            }
          },
          {
            "name": "fullProfile",
            "in": "query",
            "required": false,
            "description": "Also read two further pages of the member's profile. The detailed experience page adds `experiences[].workplaceType` (where each role was performed, on the roles where the member stated it) and `relatedProfiles` (the profiles the source suggests alongside this one); the profile-details panel adds `verifications` (what the member has verified). Costs 2 credits instead of 1 and still 1 rate-limit unit. The second credit is charged when at least one of the two extra pages was read, and `partial.sections` then names whichever fields are missing; it costs 1 only when neither page could be read, and the rest of the profile is unaffected either way. An organization URL costs 1 (it has neither page). The balance is checked against 2 before the call runs, so with 1 credit left the call returns 402. The experience list is read up to 50 top-level entries (successive roles at one employer count as one); past that, `partial.sections` names `workplaceType` and retrying will not change it. Accepts true/1 and false/0 in any letter case; omitted or empty means false; any other value, or the parameter sent twice, returns 400 INVALID_PARAMETER at no cost.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched profile",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Profile URN (unique identifier)",
                      "example": "urn:li:fsd_profile:ACoAAABCDEF"
                    },
                    "firstName": {
                      "type": "string"
                    },
                    "lastName": {
                      "type": "string",
                      "description": "Profile last name. Some members restrict their full surname to their own contacts; for those profiles this is the publicly displayed initial (e.g. \"D.\") and lastNameInitialOnly is true. The full surname is not available through any request in that case."
                    },
                    "lastNameInitialOnly": {
                      "type": "boolean",
                      "description": "Present and true only when lastName is an initial because the member restricts it. Absent otherwise, never false."
                    },
                    "title": {
                      "type": "string",
                      "description": "Professional headline. A member can publish their profile in several languages and the source does not translate between them. This is the English version when the member published one, otherwise the version in their primaryLocale. Deterministic: two calls return the same language. Every version they did publish is in titleLocalized / descriptionLocalized."
                    },
                    "titleLocalized": {
                      "type": "object",
                      "additionalProperties": { "type": "string" },
                      "description": "title in each language the member published, keyed by locale (\"fr_FR\", \"en_US\")."
                    },
                    "description": {
                      "type": "string",
                      "description": "About/summary section. A member can publish their profile in several languages and the source does not translate between them. This is the English version when the member published one, otherwise the version in their primaryLocale. Deterministic: two calls return the same language. Every version they did publish is in titleLocalized / descriptionLocalized. Line breaks are returned exactly as the source stores them: for some profiles the source holds this text with its line breaks already removed, and they are not reconstructed by guesswork."
                    },
                    "descriptionLocalized": {
                      "type": "object",
                      "additionalProperties": { "type": "string" },
                      "description": "description in each language the member published, keyed by locale."
                    },
                    "location": {
                      "type": "string"
                    },
                    "profilePictureUrl": {
                      "type": "string",
                      "description": "Profile picture URL, largest size available. Always a string: when the member has no photo of their own it holds a generic placeholder image and `profilePictureUrls` is absent."
                    },
                    "profilePictureUrls": {
                      "type": "array",
                      "description": "Every size of the profile picture, smallest first, one entry per distinct size (how many varies: a small original comes in fewer sizes); the last entry is the image `profilePictureUrl` points to (the framed picture when the member displays a photo frame). ABSENT, not empty and not null, when the member has no photo of their own, which is how to tell a real photo from the placeholder in `profilePictureUrl`. Not returned for organization records.",
                      "items": {
                        "$ref": "#/components/schemas/ProfileImage"
                      }
                    },
                    "experiences": {
                      "type": "array",
                      "description": "Complete work experience history, ordered most recent first. Every position is returned in a single call - there is no pagination to follow, including for members with dozens of past employers and for members holding many successive roles at the same one. If a section could not be completed, the top-level `partial` object names it.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Company name"
                          },
                          "jobTitle": {
                            "type": "string",
                            "description": "Job title/role"
                          },
                          "description": {
                            "type": "string",
                            "description": "Role description"
                          },
                          "dateRange": {
                            "type": "string",
                            "description": "Date range"
                          },
                          "current": {
                            "type": "boolean",
                            "description": "Whether this is the role the member designates as their PRIMARY one (the one shown at the top of their profile). At most one experience is true across the whole response, and it is false when the designated role has already ended. This is a designation, not a date test - use `ongoing` to find every role still running."
                          },
                          "positionUrn": {
                            "type": "string",
                            "description": "URN of this position entity; join key for currentPosition.positionUrn",
                            "example": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)"
                          },
                          "positionGroupUrn": {
                            "type": "string",
                            "description": "Which stint this role belongs to. A stint is one continuous period at one employer: roles sharing it were held back to back there and sit next to each other in `experiences`. A member who leaves an employer and returns has TWO stints, i.e. two different values with the same `company.companyId`, so group by this rather than by `companyId`. Opaque, and consistent within one response only: the same stint is not guaranteed the same value on a later fetch. Omitted in the rare case the grouping is not available."
                          },
                          "positionGroupId": {
                            "type": "string",
                            "description": "The key inside `positionGroupUrn`, in the spirit of `companyId` / `geoId`. It is a 40-character hexadecimal string, not a number. Only meaningful together with the profile it came from, so never use it on its own."
                          },
                          "locationName": {
                            "type": "string",
                            "description": "Job location as the member sees it, in THEIR own profile language (e.g. \"Barcelona, Cataluna, Espana\"). Free text - use geoId/geoUrn to normalise or group. The profile language is reported in the top-level primaryLocale."
                          },
                          "employmentType": {
                            "type": "string",
                            "description": "Employment type (e.g., Freelance, Part-time)"
                          },
                          "workplaceType": {
                            "type": "string",
                            "enum": [
                              "On-site",
                              "Hybrid",
                              "Remote"
                            ],
                            "description": "Only with `fullProfile=true`. Where the role was performed, always one of these three English values. Present only on roles where the member stated it (often a minority); absent means unknown (not stated, or not readable or attributable to this exact role with certainty), never on-site, and it is never guessed. Not the same thing as `employmentType` (Full-time, Part-time...), which says on what terms the role was held."
                          },
                          "timePeriod": {
                            "type": "object",
                            "properties": {
                              "startDate": {
                                "type": "object",
                                "properties": {
                                  "month": {
                                    "type": "number"
                                  },
                                  "year": {
                                    "type": "number"
                                  }
                                }
                              },
                              "endDate": {
                                "type": ["object", "null"],
                                "properties": {
                                  "month": {
                                    "type": "number"
                                  },
                                  "year": {
                                    "type": "number"
                                  }
                                }
                              }
                            }
                          },
                          "totalDuration": {
                            "type": "string",
                            "description": "Duration string (e.g., 3 yrs 1 mo)"
                          },
                          "company": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string",
                                "description": "Company profile URL"
                              },
                              "logo": {
                                "type": "string",
                                "description": "Company logo URL"
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Numeric company id (e.g. \"8736\"), parsed from the company URN",
                                "example": "8736"
                              },
                              "urn": {
                                "type": "string",
                                "description": "Full company URN",
                                "example": "urn:li:fsd_company:8736"
                              }
                            },
                            "description": "Company details. Three cases: the employer has a professional page (url/logo/companyId/urn present alongside name); the member typed an employer with no page (name only); or the member saved no employer at all (name is \"\" and company is omitted - employmentType usually carries the meaning). An empty name means \"no employer entered\", never \"employer has no page\"."
                          },
                          "ongoing": {
                            "type": "boolean",
                            "description": "Whether the role is still running: a start date and no end date - exactly the entries whose dateRange ends in \"Present\". Independent of `current`: ANY number of experiences can be ongoing, and someone holding four concurrent roles has four. An entry saved with no dates at all is false rather than assumed ongoing."
                          },
                          "geoLocationName": {
                            "type": "string",
                            "description": "The standardized location caption behind locationName, in the same language."
                          },
                          "geoUrn": {
                            "type": "string",
                            "description": "Stable identifier for the position location, e.g. \"urn:li:fsd_geo:107025191\". Language-independent - the right key to join or group on."
                          },
                          "geoId": {
                            "type": "string",
                            "description": "Numeric tail of geoUrn, e.g. \"107025191\"."
                          },
                          "locationNameLocalized": {
                            "type": "object",
                            "description": "Every language the source holds for this location caption, keyed by locale, e.g. {\"es_ES\": \"Barcelona, Cataluna, Espana\"}.",
                            "additionalProperties": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    },
                    "educations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "School/University name"
                          },
                          "description": {
                            "type": "string",
                            "description": "Degree and field combined"
                          },
                          "dateRange": {
                            "type": "string",
                            "description": "Date range"
                          },
                          "current": {
                            "type": "boolean",
                            "description": "Whether this is the person's current (ongoing) education. At most one education is true."
                          },
                          "educationUrn": {
                            "type": "string",
                            "description": "URN of this education entity; join key for currentSchool.educationUrn",
                            "example": "urn:li:fsd_profileEducation:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,157656829)"
                          },
                          "degreeName": {
                            "type": "string",
                            "description": "Degree name (e.g., MBA, MSEE)"
                          },
                          "fieldOfStudy": {
                            "type": "string",
                            "description": "Field of study"
                          },
                          "grade": {
                            "type": "string",
                            "description": "Grade or honors, as free text (e.g. \"First Class Honours\")"
                          },
                          "details": {
                            "type": "string",
                            "description": "The member's own free-text description of this education entry. Distinct from `description`, which stays the synthesized degree + field string."
                          },
                          "schoolLogo": {
                            "type": "string",
                            "description": "School logo URL"
                          },
                          "schoolUrl": {
                            "type": "string",
                            "description": "School profile URL"
                          },
                          "timePeriod": {
                            "type": "object",
                            "properties": {
                              "startDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "number"
                                  }
                                }
                              },
                              "endDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "number"
                                  }
                                }
                              }
                            }
                          },
                          "ongoing": {
                            "type": "boolean",
                            "description": "Whether the studies are still running: a start year and no end year. Note an ongoing education dateRange reads \"2022\", not \"2022 - Present\"."
                          },
                          "activities": {
                            "type": "string",
                            "description": "The \"activities and societies\" line the member entered for this entry, e.g. \"Nature Club, LTS, Elocution\". Omitted when blank."
                          }
                        }
                      }
                    },
                    "volunteerCauses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Volunteer causes listed on the profile"
                    },
                    "skills": {
                      "type": "array",
                      "description": "Professional skills listed on the profile. Complete list, returned in the same single call as the rest of the profile.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Skill name"
                          }
                        }
                      }
                    },
                    "languages": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Language name"
                          },
                          "proficiency": {
                            "type": "string",
                            "description": "Proficiency level"
                          }
                        }
                      }
                    },
                    "certifications": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Certification name"
                          },
                          "organizationName": {
                            "type": "string",
                            "description": "Issuing organization's name"
                          },
                          "organizationUrl": {
                            "type": "string",
                            "description": "Issuing organization's professional page URL, when available"
                          },
                          "issuedDate": {
                            "type": "string",
                            "description": "When the certification was issued (e.g. Jun 2018). When the credential also expires, this string carries both dates (Jun 2018 - Jun 2026) for backward compatibility - read expirationDate for the expiry on its own."
                          },
                          "authority": {
                            "type": "string",
                            "deprecated": true,
                            "description": "Legacy alias of organizationName, kept for backward compatibility"
                          },
                          "dateRange": {
                            "type": "string",
                            "deprecated": true,
                            "description": "Legacy alias of issuedDate, kept for backward compatibility"
                          },
                          "expirationDate": {
                            "type": "string",
                            "description": "When the credential expires (e.g. Jun 2026). Omitted when it does not expire."
                          },
                          "credentialId": {
                            "type": "string",
                            "description": "The credential ID the member entered, as free text. Omitted when blank."
                          },
                          "credentialUrl": {
                            "type": "string",
                            "description": "The \"show credential\" link the member entered. Omitted when blank."
                          },
                          "organizationLogo": {
                            "type": "string",
                            "description": "Issuing organization logo image URL, when a professional page is linked."
                          }
                        }
                      }
                    },
                    "coverImageUrl": {
                      "type": "string",
                      "description": "Profile banner/background image URL"
                    },
                    "coverImageUrls": {
                      "type": "array",
                      "description": "Every size of the banner image, smallest first. Banners are not square, so use both `width` and `height`. Absent when the member has no banner, in which case `coverImageUrl` is absent too.",
                      "items": {
                        "$ref": "#/components/schemas/ProfileImage"
                      }
                    },
                    "publicIdentifier": {
                      "type": "string",
                      "description": "Public identifier (slug)"
                    },
                    "profileId": {
                      "type": "string",
                      "description": "Member identifier"
                    },
                    "countryCode": {
                      "type": "string",
                      "description": "ISO country code"
                    },
                    "geoLocationName": {
                      "type": "string",
                      "description": "Full geographic location string"
                    },
                    "geoCountryName": {
                      "type": "string",
                      "description": "Country name"
                    },
                    "geoUrn": {
                      "type": "string",
                      "description": "Geo URN"
                    },
                    "connectionType": {
                      "type": "string",
                      "description": "Relationship to the authenticated account"
                    },
                    "creatorInfo": {
                      "type": "object",
                      "description": "Creator mode information",
                      "properties": {
                        "hashTags": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Creator hashtags"
                        },
                        "website": {
                          "type": ["string", "null"],
                          "description": "Creator website URL"
                        }
                      }
                    },
                    "jobTitle": {
                      "type": "string",
                      "description": "Title of the member DESIGNATED PRIMARY role (the same entry flagged current in experiences). A designation, not a date test: if the member has not updated their profile since that role ended, jobTitle still reflects it while the matching experience shows ongoing:false."
                    },
                    "companyName": {
                      "type": "string",
                      "description": "Employer of that same designated role. Same caveat as jobTitle. Derived from the position itself, whereas currentPosition reflects the block the member chooses to DISPLAY at the top of their profile - so currentPosition can be null while jobTitle/companyName are set."
                    },
                    "companyPublicId": {
                      "type": "string",
                      "description": "Current company public identifier slug"
                    },
                    "companyLinkedinUrl": {
                      "type": "string",
                      "description": "Current company profile URL"
                    },
                    "currentPosition": {
                      "type": ["object", "null"],
                      "description": "Explicit \"current company\" block from the top of the profile page. Object when the member displays it, null when they don't (an ongoing primary position may still exist in experiences).",
                      "properties": {
                        "positionUrn": {
                          "type": "string",
                          "description": "URN of the designated position; matches experiences[].positionUrn",
                          "example": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)"
                        },
                        "title": {
                          "type": "string",
                          "description": "Role title of the designated position",
                          "example": "Co-chair"
                        },
                        "name": {
                          "type": "string",
                          "description": "Company name",
                          "example": "Gates Foundation"
                        },
                        "companyId": {
                          "type": "string",
                          "description": "Numeric company id, usable with the company endpoints",
                          "example": "8736"
                        },
                        "companyUrn": {
                          "type": "string",
                          "description": "Full company URN",
                          "example": "urn:li:fsd_company:8736"
                        },
                        "publicIdentifier": {
                          "type": "string",
                          "description": "Company page slug",
                          "example": "gates-foundation"
                        },
                        "url": {
                          "type": "string",
                          "description": "Company page URL",
                          "example": "https://www.linkedin.com/company/gates-foundation/"
                        }
                      }
                    },
                    "currentSchool": {
                      "type": ["object", "null"],
                      "description": "Explicit \"education\" block from the top of the profile page. Object when the member displays it, null when they don't.",
                      "properties": {
                        "educationUrn": {
                          "type": "string",
                          "description": "URN of the designated education entry; matches educations[].educationUrn",
                          "example": "urn:li:fsd_profileEducation:(ACoAABESIloBBibfTXhrzlOSTVNOHzLIIbQoDWw,363452424)"
                        },
                        "name": {
                          "type": "string",
                          "description": "School name",
                          "example": "ESILV - Ecole Supérieure d'Ingénieurs Léonard de Vinci"
                        },
                        "schoolId": {
                          "type": "string",
                          "description": "Legacy school id from urn:li:fsd_school:<id>; distinct from companyId",
                          "example": "42867"
                        },
                        "schoolUrn": {
                          "type": "string",
                          "description": "Full school URN",
                          "example": "urn:li:fsd_school:42867"
                        },
                        "companyId": {
                          "type": "string",
                          "description": "Numeric organization id of the school's page, usable with the company endpoints",
                          "example": "15142508"
                        },
                        "publicIdentifier": {
                          "type": "string",
                          "description": "School page slug",
                          "example": "esilvparis"
                        },
                        "url": {
                          "type": "string",
                          "description": "School page URL",
                          "example": "https://www.linkedin.com/school/esilvparis/"
                        }
                      }
                    },
                    "followerCount": {
                      "type": "number",
                      "description": "Number of followers"
                    },
                    "connectionsCount": {
                      "type": "number",
                      "description": "Number of connections"
                    },
                    "creator": {
                      "type": "boolean",
                      "description": "Whether Creator mode is enabled"
                    },
                    "influencer": {
                      "type": "boolean",
                      "description": "Whether the profile carries the platform's long-standing editorial recognition. Distinct from topVoice: a profile can have one without the other."
                    },
                    "topVoice": {
                      "type": "boolean",
                      "description": "Present and true when the profile carries a recognised-voice badge. ABSENT (not false) when it does not, which is the case for most profiles \u2014 treat an absent key as falsy. The badge's display label is not returned because the source translates it per reading session."
                    },
                    "premium": {
                      "type": "boolean",
                      "description": "Whether the profile has Premium"
                    },
                    "isVerified": {
                      "type": "boolean",
                      "description": "Whether the profile has a verification badge"
                    },
                    "memberId": {
                      "type": "string",
                      "description": "Numeric internal member id (e.g. \"251749025\"). Distinct from `id`/`profileId`, which carry the `urn:li:fsd_profile:…` form.",
                      "example": "251749025"
                    },
                    "openToWork": {
                      "type": "boolean",
                      "description": "Whether the profile shows the public #OPEN_TO_WORK photo frame. Reflects the publicly visible badge only; recruiter-only 'open to work' is not exposed."
                    },
                    "hiring": {
                      "type": "boolean",
                      "description": "Whether the profile shows the public #HIRING photo frame. A profile picture carries one frame at most, so hiring and openToWork are never both true."
                    },
                    "inRemembrance": {
                      "type": "boolean",
                      "description": "Whether the account has been officially memorialized ('In Remembrance'). Only a memorialized account returns true: a regular profile whose headline mentions the member has passed away returns false."
                    },
                    "openProfile": {
                      "type": "boolean",
                      "description": "Whether the member runs an open profile: anyone can message them directly without being one of their connections, and without spending a paid message credit. Unrelated to `openToWork`, and not the same as `premium` (some non-premium members are reachable this way). An ABSENT openProfile means unknown, never false: on a small share of calls it cannot be determined, the key is omitted and partial.sections includes openProfile; requesting the profile again normally returns it. A memorialized account (inRemembrance true) always returns false, since nobody can message it. It is the only status boolean that can be absent on a person profile."
                    },
                    "joinDate": {
                      "type": "object",
                      "description": "Approximate account creation date (month + year).",
                      "properties": {
                        "month": {
                          "type": "number"
                        },
                        "year": {
                          "type": "number"
                        }
                      }
                    },
                    "birthDate": {
                      "type": "object",
                      "description": "The member's birthday, only when their privacy settings make it visible to us; absent when they hide it or never entered it. Members choose who can see it, so one who limits it to a narrower audience may appear on some calls and not on others. Included in every call at no extra cost. Always a month and a day; the year only when the member shares it, which is rare.",
                      "properties": {
                        "month": {
                          "type": "number",
                          "description": "1-12"
                        },
                        "day": {
                          "type": "number",
                          "description": "1-31"
                        },
                        "year": {
                          "type": "number",
                          "description": "Only when the member shows it"
                        }
                      },
                      "required": [
                        "month",
                        "day"
                      ],
                      "example": {
                        "month": 7,
                        "day": 4
                      }
                    },
                    "websites": {
                      "type": "array",
                      "description": "The websites listed in the member's contact info, only when their privacy settings make them visible to us, in the order the member listed them. Absent (never an empty array) when there are none to show. Included in every call at no extra cost. Not the same as creatorInfo.website, the single link a creator pins to their profile.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "url": {
                            "type": "string",
                            "example": "https://www.gatesnotes.com"
                          },
                          "category": {
                            "type": "string",
                            "description": "The type the member picked for it, e.g. PERSONAL, COMPANY, BLOG, PORTFOLIO or OTHER"
                          }
                        },
                        "required": [
                          "url"
                        ]
                      }
                    },
                    "url": {
                      "type": "string",
                      "description": "Canonical public URL of the professional profile page",
                      "example": "https://www.linkedin.com/in/williamhgates/"
                    },
                    "pronoun": {
                      "type": "string",
                      "description": "Publicly displayed pronouns (e.g. \"she/her\"). Omitted when the member doesn't display pronouns.",
                      "example": "she/her"
                    },
                    "recommendations": {
                      "type": "array",
                      "description": "Recommendations received by the member. Best-effort: omitted when this section could not be fetched, empty array when the member has none.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "caption": {
                            "type": "string",
                            "description": "The recommender's headline at the time of the fetch (the context line shown under the author's name)"
                          },
                          "description": {
                            "type": "string",
                            "description": "The recommendation text"
                          },
                          "authorFullname": {
                            "type": "string",
                            "description": "The recommender's full name"
                          },
                          "authorUrl": {
                            "type": "string",
                            "description": "The recommender's public profile page URL"
                          },
                          "createdAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the recommendation was written, ISO 8601. Omitted when the source carries no timestamp."
                          },
                          "lastModifiedAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When it was last edited, ISO 8601. Equal to createdAt when it was never edited."
                          }
                        }
                      }
                    },
                    "testScores": {
                      "type": "array",
                      "description": "Test scores listed on the profile",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Test name (e.g. \"TOEIC\")"
                          },
                          "score": {
                            "type": "string",
                            "description": "Score, as free text (e.g. \"990\")"
                          },
                          "date": {
                            "type": "string",
                            "description": "When the test was taken (e.g. Jun 2018)"
                          }
                        }
                      }
                    },
                    "industry": {
                      "type": "string",
                      "description": "The member self-declared industry, e.g. \"Information Technology & Services\". Uses the industry vocabulary the profile page itself displays, which is NOT the same list as the industry field on the company endpoint - do not join the two. Omitted when the member lists none."
                    },
                    "industryUrn": {
                      "type": "string",
                      "description": "Stable identifier for industry, e.g. \"urn:li:fsd_industry:96\"."
                    },
                    "primaryLocale": {
                      "type": "string",
                      "description": "The language the member AUTHORED their profile in, e.g. \"es_ES\". It does not by itself say which language the free text beside it is in - see title and description. For language-independent values use geoUrn, industryUrn or companyId."
                    },
                    "supportedLocales": {
                      "type": "array",
                      "items": { "type": "string" },
                      "description": "Every language the member published their profile in, e.g. [\"fr_FR\",\"en_US\"]. A member who wrote their profile once gets a single-entry array, so more than one entry is the signal that titleLocalized / descriptionLocalized have something to choose from."
                    },
                    "entityType": {
                      "type": "string",
                      "enum": [
                        "Person",
                        "Company"
                      ],
                      "description": "\"Person\" for a member profile. \"Company\" when an organization identifier was supplied: a company, school or showcase URL is accepted here for backward compatibility and returns a REDUCED record (organization name in firstName, tagline in title, empty experiences/educations). Prefer GET /api/v1/company for organizations."
                    },
                    "publications": {
                      "type": "array",
                      "description": "Publications listed on the profile, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Publication title."
                          },
                          "publisher": {
                            "type": "string",
                            "description": "Publisher or journal."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "url": {
                            "type": "string",
                            "description": "Link to the publication."
                          },
                          "publishedDate": {
                            "type": "string",
                            "description": "Publication date, e.g. Sep 2021."
                          },
                          "publishedOn": {
                            "type": "object",
                            "description": "The same date structured, when finer than month is available.",
                            "properties": {
                              "year": {
                                "type": "integer"
                              },
                              "month": {
                                "type": "integer"
                              },
                              "day": {
                                "type": "integer"
                              }
                            }
                          },
                          "authors": {
                            "type": "array",
                            "description": "Credited co-authors.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "fullName": {
                                  "type": "string",
                                  "description": "The contributor name. Omitted when a credited member profile could not be resolved - never an empty string."
                                },
                                "publicIdentifier": {
                                  "type": "string",
                                  "description": "Public identifier (slug), when the contributor is a member."
                                },
                                "profileUrn": {
                                  "type": "string",
                                  "description": "Profile URN, usable directly as profileUrlOrUrn on this endpoint."
                                },
                                "url": {
                                  "type": "string",
                                  "description": "Public profile URL."
                                },
                                "headline": {
                                  "type": "string",
                                  "description": "Headline at the time of the fetch."
                                }
                              }
                            }
                          },
                          "publicationUrn": {
                            "type": "string",
                            "description": "URN of this publication entry."
                          }
                        }
                      }
                    },
                    "projects": {
                      "type": "array",
                      "description": "Projects listed on the profile, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string",
                            "description": "Project title."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "url": {
                            "type": "string",
                            "description": "Project link."
                          },
                          "dateRange": {
                            "type": "string",
                            "description": "Formatted range, e.g. \"Apr 2018 - Mar 2019\". Empty string when the member gave no dates."
                          },
                          "timePeriod": {
                            "type": "object",
                            "description": "Structured start/end dates.",
                            "properties": {
                              "startDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "endDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "contributors": {
                            "type": "array",
                            "description": "Credited collaborators.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "fullName": {
                                  "type": "string",
                                  "description": "The contributor name. Omitted when a credited member profile could not be resolved - never an empty string."
                                },
                                "publicIdentifier": {
                                  "type": "string",
                                  "description": "Public identifier (slug), when the contributor is a member."
                                },
                                "profileUrn": {
                                  "type": "string",
                                  "description": "Profile URN, usable directly as profileUrlOrUrn on this endpoint."
                                },
                                "url": {
                                  "type": "string",
                                  "description": "Public profile URL."
                                },
                                "headline": {
                                  "type": "string",
                                  "description": "Headline at the time of the fetch."
                                }
                              }
                            }
                          },
                          "positionUrn": {
                            "type": "string",
                            "description": "Set when the project is attached to a role. Joins to experiences[].positionUrn."
                          },
                          "educationUrn": {
                            "type": "string",
                            "description": "Set when the project is attached to a school. Joins to educations[].educationUrn."
                          },
                          "projectUrn": {
                            "type": "string",
                            "description": "URN of this project entry."
                          }
                        }
                      }
                    },
                    "patents": {
                      "type": "array",
                      "description": "Patents listed on the profile, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string",
                            "description": "Patent title."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "url": {
                            "type": "string",
                            "description": "Link to the patent record."
                          },
                          "issuer": {
                            "type": "string",
                            "description": "Patent office, as the member typed it (e.g. \"us\"). Free text, not a controlled vocabulary."
                          },
                          "patentNumber": {
                            "type": "string",
                            "description": "Patent number as entered."
                          },
                          "applicationNumber": {
                            "type": "string",
                            "description": "Application number as entered."
                          },
                          "pending": {
                            "type": "boolean",
                            "description": "Whether the patent is still an application rather than granted. Always present."
                          },
                          "issuedDate": {
                            "type": "string",
                            "description": "When granted, e.g. Jan 2017. Omitted while pending."
                          },
                          "filedDate": {
                            "type": "string",
                            "description": "When filed, e.g. Dec 2024."
                          },
                          "issuedOn": {
                            "type": "object",
                            "description": "issuedDate structured.",
                            "properties": {
                              "year": {
                                "type": "integer"
                              },
                              "month": {
                                "type": "integer"
                              },
                              "day": {
                                "type": "integer"
                              }
                            }
                          },
                          "filedOn": {
                            "type": "object",
                            "description": "filedDate structured.",
                            "properties": {
                              "year": {
                                "type": "integer"
                              },
                              "month": {
                                "type": "integer"
                              },
                              "day": {
                                "type": "integer"
                              }
                            }
                          },
                          "inventors": {
                            "type": "array",
                            "description": "Credited inventors.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "fullName": {
                                  "type": "string",
                                  "description": "The contributor name. Omitted when a credited member profile could not be resolved - never an empty string."
                                },
                                "publicIdentifier": {
                                  "type": "string",
                                  "description": "Public identifier (slug), when the contributor is a member."
                                },
                                "profileUrn": {
                                  "type": "string",
                                  "description": "Profile URN, usable directly as profileUrlOrUrn on this endpoint."
                                },
                                "url": {
                                  "type": "string",
                                  "description": "Public profile URL."
                                },
                                "headline": {
                                  "type": "string",
                                  "description": "Headline at the time of the fetch."
                                }
                              }
                            }
                          },
                          "patentUrn": {
                            "type": "string",
                            "description": "URN of this patent entry."
                          }
                        }
                      }
                    },
                    "honors": {
                      "type": "array",
                      "description": "Honors and awards listed on the profile, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string",
                            "description": "Award title."
                          },
                          "issuer": {
                            "type": "string",
                            "description": "Who granted it, as free text."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "issuedDate": {
                            "type": "string",
                            "description": "When it was awarded, e.g. Oct 2018. A single date - an award has no end."
                          },
                          "positionUrn": {
                            "type": "string",
                            "description": "Joins to experiences[].positionUrn when attached to a role."
                          },
                          "educationUrn": {
                            "type": "string",
                            "description": "Joins to educations[].educationUrn when attached to a school."
                          },
                          "honorUrn": {
                            "type": "string",
                            "description": "URN of this award entry."
                          }
                        }
                      }
                    },
                    "organizations": {
                      "type": "array",
                      "description": "Organizations the member belongs to, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Organization name."
                          },
                          "positionHeld": {
                            "type": "string",
                            "description": "The role the member held there, e.g. \"Membership Chairperson\"."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "dateRange": {
                            "type": "string",
                            "description": "Formatted range, e.g. \"2015 - Jun 2016\". Empty string when no dates were given."
                          },
                          "timePeriod": {
                            "type": "object",
                            "description": "Structured start/end dates.",
                            "properties": {
                              "startDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "endDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "positionUrn": {
                            "type": "string",
                            "description": "Joins to experiences[].positionUrn when attached to a role."
                          },
                          "educationUrn": {
                            "type": "string",
                            "description": "Joins to educations[].educationUrn when attached to a school."
                          },
                          "organizationUrn": {
                            "type": "string",
                            "description": "URN of this entry."
                          }
                        }
                      }
                    },
                    "courses": {
                      "type": "array",
                      "description": "Courses listed on the profile, in display order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Course name."
                          },
                          "number": {
                            "type": "string",
                            "description": "Course code as entered, e.g. \"Fin335\". Omitted when blank."
                          },
                          "positionUrn": {
                            "type": "string",
                            "description": "Joins to experiences[].positionUrn when attached to a role."
                          },
                          "educationUrn": {
                            "type": "string",
                            "description": "Joins to educations[].educationUrn when attached to a school."
                          },
                          "courseUrn": {
                            "type": "string",
                            "description": "URN of this entry."
                          }
                        }
                      }
                    },
                    "volunteerExperiences": {
                      "type": "array",
                      "description": "Volunteering ROLES: what the member did and for whom, in display order. Distinct from volunteerCauses, which is only the list of causes they say they care about.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "role": {
                            "type": "string",
                            "description": "What the member did, e.g. \"Pianist\", \"Instructor\"."
                          },
                          "name": {
                            "type": "string",
                            "description": "Organization name, following the same convention as experiences[].name."
                          },
                          "cause": {
                            "type": "string",
                            "description": "The cause this role served, as a stable identifier, e.g. \"EDUCATION\". Omitted when not set."
                          },
                          "description": {
                            "type": "string",
                            "description": "The member own description. Omitted when blank."
                          },
                          "dateRange": {
                            "type": "string",
                            "description": "Formatted range, e.g. \"Mar 2014 - Present\". Empty string when no dates were given."
                          },
                          "timePeriod": {
                            "type": "object",
                            "description": "Structured start/end dates.",
                            "properties": {
                              "startDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "endDate": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "integer"
                                  },
                                  "month": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "company": {
                            "type": "object",
                            "description": "The organization page, when it has one - same shape as experiences[].company, so companyId can be passed straight to the company endpoint.",
                            "properties": {
                              "url": {
                                "type": "string",
                                "description": "Organization page URL."
                              },
                              "name": {
                                "type": "string",
                                "description": "Organization name."
                              },
                              "logo": {
                                "type": "string",
                                "description": "Logo image URL."
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Numeric company id."
                              },
                              "urn": {
                                "type": "string",
                                "description": "Full company URN."
                              }
                            }
                          },
                          "volunteerExperienceUrn": {
                            "type": "string",
                            "description": "URN of this entry."
                          }
                        }
                      }
                    },
                    "verifications": {
                      "type": "array",
                      "description": "Only with fullProfile=true. What the member has verified. An empty array means the panel was read and nothing is verified; an ABSENT key means the option was not requested or the panel could not be read, and then partial.sections names 'verifications'. Not the same as isVerified, which is a plain boolean on every call and is not derived from this.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "enum": ["IDENTITY", "WORKPLACE", "EDUCATIONAL_INSTITUTION"],
                            "description": "Normalized category. ABSENT when the category could not be recognized — the panel is rendered in a natural language and no category is guessed; `label` still carries the original wording."
                          },
                          "label": {
                            "type": "string",
                            "description": "The category as the source wrote it, e.g. \"Identity\". The language can vary between calls, so do not key logic on it."
                          },
                          "detail": {
                            "type": "string",
                            "description": "The source's own one-line explanation, verbatim. Free text, so no date is parsed out of it."
                          }
                        },
                        "required": ["label"]
                      }
                    },
                    "relatedProfiles": {
                      "type": "array",
                      "description": "Only with `fullProfile=true`. The profiles the source suggests alongside this one, typically up to 10. An empty array means the source suggested none; an absent key means the option was not requested or the extra page could not be read (then `partial.sections` names `relatedProfiles`). Two calls are not guaranteed to return the same suggestions.",
                      "items": {
                        "type": "object",
                        "required": [
                          "publicIdentifier",
                          "url"
                        ],
                        "properties": {
                          "publicIdentifier": {
                            "type": "string",
                            "description": "Public identifier (slug), usable directly as `profileUrlOrUrn` on this endpoint."
                          },
                          "url": {
                            "type": "string",
                            "description": "Public profile URL.",
                            "example": "https://www.linkedin.com/in/jane-doe/"
                          },
                          "name": {
                            "type": "string",
                            "description": "Name as shown on the suggestion. Omitted when not shown."
                          },
                          "headline": {
                            "type": "string",
                            "description": "Headline at the time of the fetch. Omitted when not shown."
                          },
                          "profilePictureUrl": {
                            "type": "string",
                            "description": "Profile picture, largest size. Omitted when no photo is shown (no placeholder here)."
                          },
                          "profilePictureUrls": {
                            "type": "array",
                            "description": "Every size of that picture, smallest first. Omitted when no photo is shown.",
                            "items": {
                              "$ref": "#/components/schemas/ProfileImage"
                            }
                          }
                        }
                      }
                    },
                    "partial": {
                      "type": "object",
                      "description": "Present ONLY when part of the response is knowingly incomplete; its absence means nothing was dropped. A profile is assembled from several upstream reads, and when one cannot be completed the affected array is shorter than the member real data - previously indistinguishable from a genuinely short list.",
                      "properties": {
                        "sections": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Names of the response fields that may be short or missing, e.g. [\"experiences\"]. Possible values: an array that came back shorter than the member real list (experiences, educations, skills, certifications, languages, testScores, publications, projects, patents, honors, organizations, courses, volunteerExperiences); a best-effort field that could not be fetched, or only in part, on this call (recommendations and recommendationsGiven: absent or shorter than the member real list; joinDate, birthDate, websites and openProfile: absent; joinDate, birthDate and websites come from the same read and are listed together; when birthDate is listed it could not be read on this call, otherwise the member's birthday was not visible to us); and with fullProfile=true only, relatedProfiles (the extra page could not be read) and workplaceType (some or all roles could not be checked for one; it is a field of each experience, not a top-level one), and verifications (the profile-details panel could not be read)."
                        },
                        "totals": {
                          "type": "object",
                          "description": "How large the source says each affected section really is, when it reports a size. Keyed by the same names, except experienceGroups - which counts STINTS, because that is the unit the source reports. A stint is one continuous period at one employer, so this is neither a count of roles nor a count of distinct employers: a member who left an employer and came back counts it twice (see experiences[].positionGroupUrn).",
                          "additionalProperties": {
                            "type": "integer"
                          }
                        }
                      }
                    },
                    "recommendationsGiven": {
                      "type": "array",
                      "description": "Recommendations the member WROTE for other people. Best-effort, exactly like `recommendations`: an empty array means they wrote none, while an ABSENT key means the fetch failed and `partial` will say so. Note the named person here is the RECIPIENT, whereas in `recommendations` it is the author.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "description": {
                            "type": "string",
                            "description": "The recommendation text."
                          },
                          "caption": {
                            "type": "string",
                            "description": "The recipient's headline at the time of the fetch."
                          },
                          "recipientFullname": {
                            "type": "string",
                            "description": "Full name of the person who was recommended."
                          },
                          "recipientUrl": {
                            "type": "string",
                            "description": "The recipient's public profile page URL."
                          },
                          "createdAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the recommendation was written, ISO 8601. Omitted when the source carries no timestamp."
                          },
                          "lastModifiedAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When it was last edited, ISO 8601. Equal to createdAt when it was never edited."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/company": {
      "get": {
        "summary": "Get company",
        "description": "Get detailed information about a company / organization. Consumes 1 credit.",
        "parameters": [
          {
            "name": "companyUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The company / organization to fetch. Accepts a company page URL (example `https://www.linkedin.com/company/doctolib`; school and showcase URLs work too), a public identifier/slug (example `doctolib`), or a company URN (example `urn:li:fsd_company:4999584`). Member profile inputs (a `/in/<slug>` URL or a `urn:li:fsd_profile:…`) are rejected with INVALID_PARAMETER.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.linkedin.com/company/doctolib"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched company",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Company URN (unique identifier)",
                      "example": "urn:li:fsd_company:4999584"
                    },
                    "companyId": {
                      "type": "string",
                      "description": "Numeric company id as a string",
                      "example": "4999584"
                    },
                    "name": {
                      "type": "string",
                      "example": "Doctolib"
                    },
                    "publicIdentifier": {
                      "type": "string",
                      "description": "Public identifier (slug)",
                      "example": "doctolib"
                    },
                    "url": {
                      "type": "string",
                      "description": "Canonical company page URL",
                      "example": "https://www.linkedin.com/company/doctolib/"
                    },
                    "websiteUrl": {
                      "type": "string",
                      "description": "The company's own website"
                    },
                    "domain": {
                      "type": "string",
                      "description": "Website domain, minus a leading www.",
                      "example": "doctolib.com"
                    },
                    "industry": {
                      "type": "string",
                      "description": "Primary industry in the current taxonomy, matching the label shown on the company's public page",
                      "example": "Software Development"
                    },
                    "industryV1": {
                      "type": "string",
                      "description": "The same company's industry in the legacy taxonomy, for integrations that pinned the older labels. Not a renaming of `industry`: a company can sit under two unrelated entries in the two taxonomies, so this must not be used as a translation table. Prefer `industry`.",
                      "example": "Computer Software"
                    },
                    "employeeCount": {
                      "type": "number",
                      "description": "Number of employees on the platform"
                    },
                    "employeeCountRange": {
                      "type": "object",
                      "properties": {
                        "start": {
                          "type": "number"
                        },
                        "end": {
                          "type": "number",
                          "description": "Absent for open-ended brackets"
                        }
                      }
                    },
                    "foundedOn": {
                      "type": "object",
                      "properties": {
                        "year": {
                          "type": "number"
                        },
                        "month": {
                          "type": "number"
                        },
                        "day": {
                          "type": "number"
                        }
                      }
                    },
                    "headquarter": {
                      "type": "object",
                      "properties": {
                        "line1": {
                          "type": "string"
                        },
                        "line2": {
                          "type": "string"
                        },
                        "city": {
                          "type": "string",
                          "example": "Levallois-Perret"
                        },
                        "geographicArea": {
                          "type": "string",
                          "description": "State / region",
                          "example": "Île-de-France"
                        },
                        "postalCode": {
                          "type": "string"
                        },
                        "country": {
                          "type": "string",
                          "description": "ISO country code",
                          "example": "FR"
                        },
                        "description": {
                          "type": "string",
                          "description": "Office label, e.g. \"Headquarters\""
                        },
                        "headquarter": {
                          "type": "boolean",
                          "description": "true for the headquarters entry"
                        }
                      }
                    },
                    "locations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "line1": {
                            "type": "string"
                          },
                          "line2": {
                            "type": "string"
                          },
                          "city": {
                            "type": "string",
                            "example": "Levallois-Perret"
                          },
                          "geographicArea": {
                            "type": "string",
                            "description": "State / region",
                            "example": "Île-de-France"
                          },
                          "postalCode": {
                            "type": "string"
                          },
                          "country": {
                            "type": "string",
                            "description": "ISO country code",
                            "example": "FR"
                          },
                          "description": {
                            "type": "string",
                            "description": "Office label, e.g. \"Headquarters\""
                          },
                          "headquarter": {
                            "type": "boolean",
                            "description": "true for the headquarters entry"
                          }
                        }
                      }
                    },
                    "followerCount": {
                      "type": "number"
                    },
                    "logoUrl": {
                      "type": "string"
                    },
                    "coverImageUrl": {
                      "type": "string",
                      "description": "Cover/background image URL"
                    },
                    "description": {
                      "type": "string"
                    },
                    "specialities": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "phone": {
                      "type": "string"
                    },
                    "tagline": {
                      "type": "string"
                    },
                    "companyType": {
                      "type": "string",
                      "description": "The company's legal type as an English label, e.g. \"Public Company\", \"Privately Held\", \"Self-Employed\", \"Sole Proprietorship\", \"Partnership\", \"Government Agency\", \"Nonprofit\", \"Educational\".",
                      "example": "Privately Held"
                    },
                    "companyTypeCode": {
                      "type": "string",
                      "description": "The same type as a stable code, e.g. \"PUBLIC_COMPANY\", \"PRIVATELY_HELD\". Branch on this rather than on the label.",
                      "example": "PRIVATELY_HELD"
                    },
                    "hashtags": {
                      "type": "array",
                      "description": "Hashtags the page lists on its profile, in its order, without the `#`.",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "microsoftlife",
                        "microsoft"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/company/batch": {
      "post": {
        "summary": "Get companies in batch",
        "description": "Fetch up to 50 companies in one call: `GET /api/v1/company` once per entry, with the same company object for each one found and a per-entry error for the others, in input order. The response is 200 even when some or all entries failed - read `found` or each entry's `error`. Billing: 1 credit per company returned; not-found and failed entries are free. The balance is checked for the whole batch (one credit per distinct entry) before any work, otherwise 402 QUOTA_EXHAUSTED. Validation errors are 400 and free. Rate limit: the batch uses your plan's per-second limit - the request takes one unit and each company after the first consumes one more from the same budget, waiting for it when the window is full, so a 50-company batch on a 5 req/s plan takes about 10 seconds. Entries that could not be fetched within 90 seconds come back with an error `RATE_LIMITED` (status 429) and are not billed.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "companies"
                ],
                "properties": {
                  "companies": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 50,
                    "description": "1 to 50 companies, each a company page URL, a public identifier (universal name, e.g. `microsoft`) or a URN (`urn:li:fsd_company:1035`). Duplicates (same text, case-insensitive) are fetched, billed and returned once. Refused with a free 400: not an array or empty (`'companies' must be an array of 1 to 50 company URLs, public identifiers or URNs.`), more than 50 entries (`'companies' accepts at most 50 entries (received N).`), an entry that is not a non-empty string (`'companies[i]' must be a non-empty string.`).",
                    "items": {
                      "type": "string"
                    },
                    "example": [
                      "https://www.linkedin.com/company/doctolib",
                      "microsoft",
                      "urn:li:fsd_company:1441"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "One result per distinct input, in input order. Billed 1 credit per entry returned with a `company`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "results",
                    "found",
                    "notFound",
                    "failed"
                  ],
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "input"
                        ],
                        "description": "Exactly one of `company` or `error` is present.",
                        "properties": {
                          "input": {
                            "type": "string",
                            "description": "The entry as sent (trimmed)."
                          },
                          "company": {
                            "type": "object",
                            "description": "The same object as GET /api/v1/company returns. Billed 1 credit.",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Company URN (unique identifier)",
                                "example": "urn:li:fsd_company:4999584"
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Numeric company id as a string",
                                "example": "4999584"
                              },
                              "name": {
                                "type": "string",
                                "example": "Doctolib"
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "Public identifier (slug)",
                                "example": "doctolib"
                              },
                              "url": {
                                "type": "string",
                                "description": "Canonical company page URL",
                                "example": "https://www.linkedin.com/company/doctolib/"
                              },
                              "websiteUrl": {
                                "type": "string",
                                "description": "The company's own website"
                              },
                              "domain": {
                                "type": "string",
                                "description": "Website domain, minus a leading www.",
                                "example": "doctolib.com"
                              },
                              "industry": {
                                "type": "string",
                                "description": "Primary industry in the current taxonomy, matching the label shown on the company's public page",
                                "example": "Software Development"
                              },
                              "industryV1": {
                                "type": "string",
                                "description": "The same company's industry in the legacy taxonomy, for integrations that pinned the older labels. Not a renaming of `industry`: a company can sit under two unrelated entries in the two taxonomies, so this must not be used as a translation table. Prefer `industry`.",
                                "example": "Computer Software"
                              },
                              "employeeCount": {
                                "type": "number",
                                "description": "Number of employees on the platform"
                              },
                              "employeeCountRange": {
                                "type": "object",
                                "properties": {
                                  "start": {
                                    "type": "number"
                                  },
                                  "end": {
                                    "type": "number",
                                    "description": "Absent for open-ended brackets"
                                  }
                                }
                              },
                              "foundedOn": {
                                "type": "object",
                                "properties": {
                                  "year": {
                                    "type": "number"
                                  },
                                  "month": {
                                    "type": "number"
                                  },
                                  "day": {
                                    "type": "number"
                                  }
                                }
                              },
                              "headquarter": {
                                "type": "object",
                                "properties": {
                                  "line1": {
                                    "type": "string"
                                  },
                                  "line2": {
                                    "type": "string"
                                  },
                                  "city": {
                                    "type": "string",
                                    "example": "Levallois-Perret"
                                  },
                                  "geographicArea": {
                                    "type": "string",
                                    "description": "State / region",
                                    "example": "Île-de-France"
                                  },
                                  "postalCode": {
                                    "type": "string"
                                  },
                                  "country": {
                                    "type": "string",
                                    "description": "ISO country code",
                                    "example": "FR"
                                  },
                                  "description": {
                                    "type": "string",
                                    "description": "Office label, e.g. \"Headquarters\""
                                  },
                                  "headquarter": {
                                    "type": "boolean",
                                    "description": "true for the headquarters entry"
                                  }
                                }
                              },
                              "locations": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "line1": {
                                      "type": "string"
                                    },
                                    "line2": {
                                      "type": "string"
                                    },
                                    "city": {
                                      "type": "string",
                                      "example": "Levallois-Perret"
                                    },
                                    "geographicArea": {
                                      "type": "string",
                                      "description": "State / region",
                                      "example": "Île-de-France"
                                    },
                                    "postalCode": {
                                      "type": "string"
                                    },
                                    "country": {
                                      "type": "string",
                                      "description": "ISO country code",
                                      "example": "FR"
                                    },
                                    "description": {
                                      "type": "string",
                                      "description": "Office label, e.g. \"Headquarters\""
                                    },
                                    "headquarter": {
                                      "type": "boolean",
                                      "description": "true for the headquarters entry"
                                    }
                                  }
                                }
                              },
                              "followerCount": {
                                "type": "number"
                              },
                              "logoUrl": {
                                "type": "string"
                              },
                              "coverImageUrl": {
                                "type": "string",
                                "description": "Cover/background image URL"
                              },
                              "description": {
                                "type": "string"
                              },
                              "specialities": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "phone": {
                                "type": "string"
                              },
                              "tagline": {
                                "type": "string"
                              },
                              "companyType": {
                                "type": "string",
                                "description": "The company's legal type as an English label, e.g. \"Public Company\", \"Privately Held\", \"Self-Employed\", \"Sole Proprietorship\", \"Partnership\", \"Government Agency\", \"Nonprofit\", \"Educational\".",
                                "example": "Privately Held"
                              },
                              "companyTypeCode": {
                                "type": "string",
                                "description": "The same type as a stable code, e.g. \"PUBLIC_COMPANY\", \"PRIVATELY_HELD\". Branch on this rather than on the label.",
                                "example": "PRIVATELY_HELD"
                              },
                              "hashtags": {
                                "type": "array",
                                "description": "Hashtags the page lists on its profile, in its order, without the `#`.",
                                "items": {
                                  "type": "string"
                                },
                                "example": [
                                  "microsoftlife",
                                  "microsoft"
                                ]
                              }
                            }
                          },
                          "error": {
                            "type": "object",
                            "description": "Why this entry was not returned. Not billed.",
                            "required": [
                              "code",
                              "message",
                              "status"
                            ],
                            "properties": {
                              "code": {
                                "type": "string",
                                "description": "Same codes as a single call: `COMPANY_NOT_FOUND`, `RATE_LIMITED` (the batch ran out of time waiting for your rate limit), `INVALID_PARAMETER` / `INVALID_URN` (not a usable company input), `SERVICE_UNAVAILABLE`, `INTERNAL_ERROR`.",
                                "example": "COMPANY_NOT_FOUND"
                              },
                              "message": {
                                "type": "string",
                                "description": "Human-readable description. Do not branch on it."
                              },
                              "status": {
                                "type": "integer",
                                "description": "The HTTP status a single GET /api/v1/company call would have returned for this entry.",
                                "example": 404
                              }
                            }
                          }
                        }
                      }
                    },
                    "found": {
                      "type": "integer",
                      "description": "Entries returned with a `company` - the credits billed."
                    },
                    "notFound": {
                      "type": "integer",
                      "description": "Entries whose error has status 404."
                    },
                    "failed": {
                      "type": "integer",
                      "description": "Every other error: rate limit, invalid entry, failure on our side."
                    }
                  }
                },
                "example": {
                  "results": [
                    {
                      "input": "https://www.linkedin.com/company/doctolib",
                      "company": {
                        "id": "urn:li:fsd_company:4999584",
                        "companyId": "4999584",
                        "name": "Doctolib",
                        "publicIdentifier": "doctolib",
                        "url": "https://www.linkedin.com/company/doctolib/",
                        "industry": "Software Development",
                        "employeeCount": 3714,
                        "followerCount": 323490,
                        "companyType": "Privately Held",
                        "companyTypeCode": "PRIVATELY_HELD"
                      }
                    },
                    {
                      "input": "this-company-does-not-exist-123",
                      "error": {
                        "code": "COMPANY_NOT_FOUND",
                        "message": "Unable to find company data from slug",
                        "status": 404
                      }
                    }
                  ],
                  "found": 1,
                  "notFound": 1,
                  "failed": 0
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        }
      }
    },
    "/api/v1/company/posts": {
      "get": {
        "summary": "Get posts published by a company page",
        "description": "Fetch the posts published by a company / organization page, with engagement metrics. Each item in `posts` has the same shape as items returned by `GET /api/v1/posts`, so the same client types cover both feeds. The source serves a company page's posts in its own relevance order, not by date, and has no date-sorted feed for a company page: to follow a company's posts newest first, use `POST /api/v1/posts/search` with `authorCompanies: [<company id>]` and `sortBy: \"date\"`. Costs 1 credit per call, whatever `count` is.",
        "parameters": [
          {
            "name": "companyUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The company / organization whose posts to fetch. Accepts a company page URL (example `https://www.linkedin.com/company/microsoft`; a trailing slash is ignored), a public identifier/slug on its own (also fine; example `microsoft`), or an organization URN (example `urn:li:fsd_organizationalPage:1035`). The slug is the last path segment of a company page URL, so pass just the slug, not the `/company/` prefix. A member profile input (a `/in/<slug>` URL or a `urn:li:fsd_profile:...`) is rejected with a free 400 INVALID_PARAMETER - \"Expected a company page, not a member profile.\" - use `GET /api/v1/posts` for people.",
            "schema": {
              "type": "string",
              "example": "microsoft"
            }
          },
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": false,
            "description": "Accepted as an alternative name for `companyUrlOrUrn`, because `GET /api/v1/posts` has always taken company pages under it. Pass either name; when both are given, `companyUrlOrUrn` wins.",
            "schema": {
              "type": "string",
              "example": "https://www.linkedin.com/company/microsoft"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of posts to fetch per page (default: 10). A higher value is clamped to 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Not supported on this endpoint. This feed is cursor-paginated and ignores offsets, so a non-zero value is rejected with 400 rather than silently returning the first page again. Page with `paginationToken` instead.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "deprecated": true
          },
          {
            "name": "paginationToken",
            "in": "query",
            "required": false,
            "description": "Cursor for the next page: pass back the `paginationToken` from the previous response, unchanged. Omit it to start from the beginning. A value this API did not issue is rejected with 400. Keep paging while `hasMore` is true. The token carries the source's ranking session and stays valid for about one hour; an expired token still returns a page, but it may overlap the pages you already have, so de-duplicate on `id`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeReposts",
            "in": "query",
            "required": false,
            "description": "Also return the reposts WITHOUT commentary, which are otherwise filtered out. Each one comes back as the repost itself: `postType: \"repost\"`, `id` = the repost's own activity URN, `date` = when it was reposted, `content` = \"\", no counts of its own (`reactionCount`, `commentCount`, `sharesCount`, `reactionsByType` omitted), the reposting profile or page as `author` and `profile`, `repostedBy`, and the original post nested under `resharedPost` with its own counts - the same shape a quote repost has. Collaborative posts are also returned when this is on. Accepts true/false (or 1/0); any other value is a free 400. The price does not change.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched the company page's posts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "posts": {
                      "type": "array",
                      "description": "Posts on this page, in the order the source ranks them. This feed is NOT chronological - it is relevance-ranked and there is no date-sorted feed for a company page, so `date` moves both ways within and across pages; never use a date as a paging boundary. Same item shape as GET /api/v1/posts. Reposts the page made without its own commentary are filtered out unless `includeReposts=true`, so a page can hold fewer items than `count` - including NONE, while `hasMore` is still true - so read `pageSize` to tell a page of filtered rows from an exhausted feed, and trust `hasMore`.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "urn:li:activity:7488411205392719872",
                            "description": "Activity URN. References the post in the `urn:li:activity:*` namespace."
                          },
                          "shareUrn": {
                            "type": "string",
                            "example": "urn:li:ugcPost:7488411204611784704",
                            "description": "Share URN. References the same post as `id` but in the `urn:li:share:*` or `urn:li:ugcPost:*` namespace (depends on the post type)."
                          },
                          "content": {
                            "type": "string",
                            "example": "Agents are changing how teams build...",
                            "description": "Post text. An empty string when the post carries no text of its own (media posted without a caption). Always a string, never missing."
                          },
                          "date": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "reactionCount": {
                            "type": "integer",
                            "description": "Omitted on a `repost` item, which has no counts of its own."
                          },
                          "commentCount": {
                            "type": "integer",
                            "description": "Omitted on a `repost` item, which has no counts of its own."
                          },
                          "sharesCount": {
                            "type": "integer",
                            "description": "Number of times the post was reshared. Omitted on a `repost` item, which has no counts of its own."
                          },
                          "imageUrl": {
                            "type": "string"
                          },
                          "videoUrl": {
                            "type": "string"
                          },
                          "carouselPdfUrl": {
                            "type": "string"
                          },
                          "profile": {
                            "type": "object",
                            "description": "The publishing organization. All fields are always present.",
                            "required": [
                              "urn",
                              "name",
                              "headline",
                              "url",
                              "imageUrl"
                            ],
                            "properties": {
                              "urn": {
                                "type": "string",
                                "example": "urn:li:fsd_organizationalPage:1035"
                              },
                              "name": {
                                "type": "string",
                                "example": "Microsoft",
                                "description": "Name of the company page."
                              },
                              "headline": {
                                "type": "string",
                                "example": "29,282,565 followers",
                                "description": "The page's follower line as the feed renders it. The feed carries no tagline: read `tagline` from GET /api/v1/company, or `author.followerCount` for the count as a number."
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/company/microsoft/",
                                "description": "Company page URL, without a `/posts` suffix."
                              },
                              "imageUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/...",
                                "description": "Company logo image URL."
                              }
                            }
                          },
                          "postType": {
                            "type": "string",
                            "enum": [
                              "text",
                              "image",
                              "document",
                              "article",
                              "linkedinVideo",
                              "job",
                              "event",
                              "celebration",
                              "repost"
                            ],
                            "example": "image",
                            "description": "Kind of content attached to the post. 'article' means a link preview card is attached; long-form articles the member published are NOT returned by this endpoint. 'job', 'event' and 'celebration' are shared cards, detailed in the object of the same name. 'repost' is a repost without commentary, returned only with `includeReposts=true`."
                          },
                          "shareUrl": {
                            "type": "string",
                            "example": "https://www.linkedin.com/posts/microsoft_agents-are-changing-...",
                            "description": "Public permalink to the post."
                          },
                          "reactionsByType": {
                            "type": "object",
                            "description": "Reaction counts broken down by type. Only the types the post actually received are present, and they sum to `reactionCount`. Keys: `like`, `praise`, `empathy`, `interest`, `appreciation`, `entertainment`, `superLike`. Omitted on a `repost` item, and on a quoted post whose counts the source did not provide.",
                            "additionalProperties": {
                              "type": "integer"
                            },
                            "example": {
                              "like": 2744,
                              "praise": 219,
                              "interest": 141,
                              "empathy": 78
                            }
                          },
                          "images": {
                            "type": "array",
                            "description": "Every image of the post with its dimensions (empty for non-image posts). `imageUrl` is the first one, kept for backward compatibility.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string",
                                  "example": "https://media.licdn.com/dms/image/..."
                                },
                                "width": {
                                  "type": "integer",
                                  "example": 1920
                                },
                                "height": {
                                  "type": "integer",
                                  "example": 1080
                                }
                              }
                            }
                          },
                          "video": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Video attached to the post, or null. `videoUrl` mirrors `video.url`.",
                            "properties": {
                              "url": {
                                "type": "string",
                                "example": "https://dms.licdn.com/playlist/vid/..."
                              },
                              "duration": {
                                "type": "integer",
                                "example": 74000,
                                "description": "Duration in milliseconds."
                              },
                              "thumbnail": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "progressiveStreams": {
                                "type": "array",
                                "description": "Available renditions (bitrate/resolution variants).",
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "authorType": {
                            "type": "string",
                            "enum": [
                              "Company"
                            ],
                            "example": "Company",
                            "description": "Always `Company` on this endpoint: the author is an organization page, not a member."
                          },
                          "permissions": {
                            "type": "object",
                            "description": "What the post allows, as published.",
                            "properties": {
                              "canReact": {
                                "type": "boolean"
                              },
                              "canPostComments": {
                                "type": "boolean"
                              },
                              "canShare": {
                                "type": "boolean"
                              },
                              "commentingDisabled": {
                                "type": "boolean"
                              },
                              "allowedCommentersScope": {
                                "type": "string",
                                "example": "ALL"
                              },
                              "shareAudience": {
                                "type": "string",
                                "example": "PUBLIC"
                              },
                              "isActivity": {
                                "type": "boolean"
                              },
                              "rootShare": {
                                "type": "boolean",
                                "description": "False when the post quotes another one."
                              }
                            }
                          },
                          "author": {
                            "type": "object",
                            "description": "The publishing page (`type: \"company\"`), or on a `repost` item the reposting page; inside `resharedPost`, the original author. Same shape as on GET /api/v1/posts.",
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ]
                              },
                              "id": {
                                "type": "string",
                                "description": "The profile id (`ACoAA...`) for a person, the numeric company id for a page."
                              },
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string",
                                "description": "Professional profile URL, or the company page URL without a `/posts` suffix."
                              },
                              "info": {
                                "type": "string",
                                "description": "The headline for a person, the follower line for a page (e.g. \"29,282,565 followers\"), as the feed renders it."
                              },
                              "followerCount": {
                                "type": "number",
                                "description": "Companies only: the follower count `info` states, as a number.",
                                "example": 29282565
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "Persons only: profile slug."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Companies only: page slug."
                              },
                              "numericId": {
                                "type": "string",
                                "description": "Numeric member or company id, when the feed carries it."
                              },
                              "avatar": {
                                "type": "object",
                                "description": "Picture or logo, largest rendition.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "width": {
                                    "type": "integer"
                                  },
                                  "height": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "mentions": {
                            "type": "array",
                            "description": "The members and companies tagged in the text, one entry each. Empty when there are none.",
                            "items": {
                              "type": "object",
                              "required": [
                                "type",
                                "id",
                                "name",
                                "url"
                              ],
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "person",
                                    "company"
                                  ]
                                },
                                "id": {
                                  "type": "string",
                                  "description": "The profile id (`ACoAA...`) for a person, the numeric company id for a company."
                                },
                                "publicIdentifier": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "firstName": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "lastName": {
                                  "type": "string",
                                  "description": "Persons only."
                                },
                                "universalName": {
                                  "type": "string",
                                  "description": "Companies only."
                                },
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "contentAttributes": {
                            "type": "array",
                            "description": "Annotated ranges of `content`: tags, mentions, hashtags and links. `start` and `length` index into `content`.",
                            "items": {
                              "type": "object",
                              "properties": {
                                "start": {
                                  "type": "integer"
                                },
                                "length": {
                                  "type": "integer"
                                },
                                "type": {
                                  "type": "string",
                                  "description": "Kind of range, e.g. `COMPANY_NAME`, `PROFILE_MENTION`, `HASHTAG`, `HYPERLINK`."
                                },
                                "hyperlink": {
                                  "type": "string",
                                  "description": "Where a link range points."
                                },
                                "hashtag": {
                                  "type": "string"
                                },
                                "company": {
                                  "type": "object",
                                  "description": "The resolved company of a `COMPANY_NAME` range.",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    }
                                  }
                                },
                                "profile": {
                                  "type": "object",
                                  "description": "The resolved member of a `PROFILE_MENTION` range.",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "firstName": {
                                      "type": "string"
                                    },
                                    "lastName": {
                                      "type": "string"
                                    },
                                    "url": {
                                      "type": "string"
                                    },
                                    "publicIdentifier": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "job": {
                            "type": "object",
                            "description": "The shared job, on `postType: \"job\"`. Each field is present when the card carries it.",
                            "properties": {
                              "id": {
                                "type": "string",
                                "example": "4012345678"
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/jobs/view/4012345678/"
                              },
                              "title": {
                                "type": "string",
                                "example": "Senior Product Manager"
                              },
                              "companyName": {
                                "type": "string",
                                "example": "Microsoft"
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Numeric company id.",
                                "example": "1035"
                              },
                              "companyUrl": {
                                "type": "string",
                                "example": "https://www.linkedin.com/company/microsoft/"
                              },
                              "location": {
                                "type": "string",
                                "example": "Redmond, WA"
                              },
                              "companyLogoUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "event": {
                            "type": "object",
                            "description": "The shared event, on `postType: \"event\"`. Each field is present when the card carries it. No timestamp is available for the event.",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "dateText": {
                                "type": "string",
                                "description": "The date line exactly as displayed, time zone included.",
                                "example": "Sun, Sep 6, 5:30 AM - 6:30 AM UTC"
                              },
                              "location": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "bannerUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "celebration": {
                            "type": "object",
                            "description": "The celebration card, on `postType: \"celebration\"`. Each field is present when the card carries it.",
                            "properties": {
                              "headline": {
                                "type": "string"
                              },
                              "subtitle": {
                                "type": "string"
                              },
                              "imageUrl": {
                                "type": "string"
                              }
                            }
                          },
                          "resharedPost": {
                            "type": "object",
                            "description": "The quoted post in full, whenever `resharedPostUrn` is set: the same shape as an item of `posts`. Its `reactionCount`, `commentCount`, `sharesCount`, `reactionsByType` and `reactionTypeCounts` are OMITTED when the source did not provide them - usually the case for a quoted post - never reported as 0.",
                            "additionalProperties": true
                          },
                          "repostedBy": {
                            "type": "object",
                            "description": "Only on a `postType: \"repost\"` item: who reposted.",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "publicIdentifier": {
                                "type": "string",
                                "description": "When a person reposted."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "When a page reposted."
                              }
                            }
                          }
                        }
                      }
                    },
                    "paginationToken": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": "dXJuOmxpOmFjdGl2aXR5Ojc0ODUxMDk4ODc2NTQzMjE2NjQ=",
                      "description": "Cursor to pass back as `paginationToken` to fetch the next page. Valid for about one hour. Decide on `hasMore`, not on the presence of this value."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether the feed holds more posts behind this page. Keep paging while true; false at the end of the feed."
                    },
                    "pageSize": {
                      "type": "integer",
                      "example": 5,
                      "description": "How many rows the feed returned for this page before reposts were filtered out of `posts`. Compare it with the length of `posts` to tell a feed that ran short from a page that happened to be mostly reposts."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/profile/reactions": {
      "get": {
        "summary": "Get posts a profile has reacted to",
        "description": "Fetch posts that a professional profile has reacted to (liked, loved, etc.) with the reaction type and full post details. The `post` object in each reaction has the same shape as items returned by `GET /api/v1/posts`.",
        "parameters": [
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example `urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`), a public identifier/slug (also fine; example `williamhgates`), or a full profile URL (example `https://www.linkedin.com/in/williamhgates`; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the `/in/` prefix. Member profiles only: a company page URL or URN is rejected with a `400` error, free of charge.",
            "schema": {
              "type": "string",
              "example": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of reactions to fetch (default: 10)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Not supported on this endpoint. This feed is cursor-paginated and ignores offsets, so a non-zero value is rejected with 400 rather than silently returning the first page again. Page with `paginationToken` instead.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "deprecated": true
          },
          {
            "name": "paginationToken",
            "in": "query",
            "required": false,
            "description": "Cursor for the next page: pass back the `paginationToken` from the previous response, unchanged. Omit it to start from the beginning. A value this API did not issue is rejected with 400. Keep paging while `hasMore` is true.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched profile reactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "reactions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "reactionType": {
                            "type": "string",
                            "enum": [
                              "LIKE",
                              "EMPATHY",
                              "ENTERTAINMENT",
                              "INTEREST",
                              "PRAISE",
                              "APPRECIATION"
                            ],
                            "description": "The type of reaction: LIKE (Like), EMPATHY (Love), ENTERTAINMENT (Funny), INTEREST (Insightful), PRAISE (Celebrate), APPRECIATION (Support)"
                          },
                          "post": {
                            "type": "object",
                            "description": "The post that was reacted to. Same shape as items from GET /api/v1/posts.",
                            "properties": {
                              "id": {
                                "type": "string",
                                "example": "urn:li:activity:1234567890",
                                "description": "Activity URN. References the post in the `urn:li:activity:*` namespace."
                              },
                              "shareUrn": {
                                "type": "string",
                                "example": "urn:li:share:7123456789012345678",
                                "description": "Share URN. References the same post as `id` but in the `urn:li:share:*` namespace."
                              },
                              "content": {
                                "type": "string",
                                "example": "This is a post content..."
                              },
                              "date": {
                                "type": "string",
                                "format": "date-time"
                              },
                              "reactionCount": {
                                "type": "integer"
                              },
                              "commentCount": {
                                "type": "integer"
                              },
                              "sharesCount": {
                                "type": "integer",
                                "description": "Number of times the post was reshared."
                              },
                              "imageUrl": {
                                "type": "string"
                              },
                              "videoUrl": {
                                "type": "string"
                              },
                              "carouselPdfUrl": {
                                "type": "string"
                              },
                              "profile": {
                                "type": "object",
                                "required": [
                                  "urn",
                                  "name",
                                  "headline",
                                  "url",
                                  "imageUrl"
                                ],
                                "properties": {
                                  "urn": {
                                    "type": "string",
                                    "example": "urn:li:fsd_profile:ACoAAABCDEF"
                                  },
                                  "name": {
                                    "type": "string",
                                    "example": "John Doe"
                                  },
                                  "headline": {
                                    "type": "string",
                                    "example": "Software Engineer at Tech Company"
                                  },
                                  "url": {
                                    "type": "string",
                                    "example": "https://www.linkedin.com/in/johndoe"
                                  },
                                  "imageUrl": {
                                    "type": "string",
                                    "example": "https://media.licdn.com/dms/image/..."
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "paginationToken": {
                      "type": "string",
                      "description": "Token for fetching the next page"
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more reactions are available"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/profile/comments": {
      "get": {
        "summary": "Get comments a profile has written",
        "description": "Fetch the comments a member has made, in the order the feed returns them, each paired with the full context of the post it was written on (text, author, media and engagement counts). This is the inverse of `GET /api/v1/post/comments`, which takes a post and returns the comments left on it. `count` is a ceiling, not a promise: a page can come back with fewer items while more remain, so page while `hasMore` is true rather than stopping on a short page.",
        "parameters": [
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The professional profile whose comments to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example `urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`), a public identifier/slug (also fine; example `williamhgates`), or a full profile URL (example `https://www.linkedin.com/in/williamhgates`; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the `/in/` prefix. Member profiles only: a company page URL or URN is rejected with a `400` error, free of charge.",
            "schema": {
              "type": "string",
              "example": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of comments to fetch per page (default: 10). Values above 100 are clamped to 100. This is a ceiling: a page can return slightly fewer items without meaning the feed is exhausted.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Not supported on this endpoint. This feed is cursor-paginated and ignores offsets, so a non-zero value is rejected with 400 rather than silently returning the first page again. Page with `paginationToken` instead.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "deprecated": true
          },
          {
            "name": "paginationToken",
            "in": "query",
            "required": false,
            "description": "Cursor for the next page: pass back the `paginationToken` from the previous response, unchanged. Omit it to start from the beginning. Pass it back verbatim: a token this API did not issue is NOT rejected here, it is forwarded, and the page comes back empty and still costs a credit. Keep paging while `hasMore` is true.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched the comments the profile has written",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "comments": {
                      "type": "array",
                      "description": "Comments the profile wrote, in the order the feed returns them.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "commentText": {
                            "type": "string",
                            "description": "Text of the comment.",
                            "example": "Congratulations to the whole team."
                          },
                          "commentUrn": {
                            "type": "string",
                            "description": "Unique identifier of the comment.",
                            "example": "urn:li:comment:(urn:li:activity:7486820978292072449,7486901233445109760)"
                          },
                          "commentLink": {
                            "type": "string",
                            "description": "Permalink to the comment."
                          },
                          "isPinned": {
                            "type": "boolean",
                            "description": "Whether the post's author pinned this comment to the top of the thread."
                          },
                          "createdAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the comment was written."
                          },
                          "stats": {
                            "type": "object",
                            "description": "Engagement on the comment itself.",
                            "properties": {
                              "totalReactions": {
                                "type": "integer",
                                "description": "Total reactions the comment received."
                              },
                              "comments": {
                                "type": "integer",
                                "description": "Number of replies to this comment."
                              },
                              "reactions": {
                                "type": "object",
                                "description": "Per-type breakdown of the comment's reactions.",
                                "properties": {
                                  "like": {
                                    "type": "integer"
                                  },
                                  "appreciation": {
                                    "type": "integer"
                                  },
                                  "empathy": {
                                    "type": "integer"
                                  },
                                  "interest": {
                                    "type": "integer"
                                  },
                                  "praise": {
                                    "type": "integer"
                                  }
                                }
                              }
                            }
                          },
                          "commenter": {
                            "type": "object",
                            "description": "Who wrote the comment - the profile that was requested.",
                            "properties": {
                              "name": {
                                "type": "string",
                                "example": "Bill Gates"
                              },
                              "subtitle": {
                                "type": "string",
                                "description": "The line shown under the commenter's name, usually their headline.",
                                "example": "Chair, Gates Foundation and Founder, Breakthrough Energy"
                              },
                              "url": {
                                "type": "string",
                                "example": "https://www.linkedin.com/in/williamhgates"
                              },
                              "profilePictureUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/..."
                              }
                            }
                          },
                          "post": {
                            "type": "object",
                            "description": "The post the comment was written on.",
                            "properties": {
                              "postText": {
                                "type": "string",
                                "description": "Text of the post."
                              },
                              "postUrl": {
                                "type": "string",
                                "description": "Public permalink to the post."
                              },
                              "postUrn": {
                                "type": "string",
                                "description": "The bare numeric activity id of the post, without any URN prefix.",
                                "example": "7486820978292072449"
                              },
                              "date": {
                                "type": "string",
                                "format": "date-time",
                                "description": "When the post was published."
                              },
                              "author": {
                                "type": "object",
                                "description": "Who published the post.",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "headline": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": "string"
                                  },
                                  "profilePictureUrl": {
                                    "type": "string",
                                    "nullable": true,
                                    "description": "Profile picture URL of the post author, or null when they have none."
                                  }
                                }
                              },
                              "stats": {
                                "type": "object",
                                "description": "Engagement on the post.",
                                "properties": {
                                  "totalReactions": {
                                    "type": "integer"
                                  },
                                  "comments": {
                                    "type": "integer"
                                  },
                                  "reposts": {
                                    "type": "integer",
                                    "description": "Number of times the post was reshared."
                                  },
                                  "reactions": {
                                    "type": "object",
                                    "description": "Per-type breakdown of the post's reactions.",
                                    "properties": {
                                      "like": {
                                        "type": "integer"
                                      },
                                      "appreciation": {
                                        "type": "integer"
                                      },
                                      "empathy": {
                                        "type": "integer"
                                      },
                                      "interest": {
                                        "type": "integer"
                                      },
                                      "praise": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                }
                              },
                              "images": {
                                "type": "array",
                                "description": "Images attached to the post. Absent on posts without images.",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "url": {
                                      "type": "string"
                                    },
                                    "width": {
                                      "type": "integer"
                                    },
                                    "height": {
                                      "type": "integer"
                                    }
                                  }
                                }
                              },
                              "video": {
                                "type": "object",
                                "nullable": true,
                                "description": "Video attached to the post. Absent or null on posts without a video.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "duration": {
                                    "type": "integer",
                                    "description": "Duration in milliseconds."
                                  },
                                  "thumbnail": {
                                    "type": "string"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "paginationToken": {
                      "type": "string",
                      "description": "Token for fetching the next page. Only present when more comments are available."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more comments are available."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/profile/articles": {
      "get": {
        "summary": "Get articles a profile has published",
        "description": "Fetch the long-form articles a member has published (their articles tab), newest first. Metadata only: no engagement counts and no article body. This is the one profile feed paged by offset rather than by cursor, so `start` is supported here and there is no `paginationToken`. Advance `start` by the `count` you requested (the response returns that value as `nextStart`) and keep paging while `hasMore` is true. `count` is a ceiling, not a quota: a page can hold fewer articles than requested because the window indexes the underlying list and items it cannot represent are dropped from the page, so a short page is not the end of the feed - only an empty page is.",
        "parameters": [
          {
            "name": "profileUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example `urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc`), a public identifier/slug (also fine; example `williamhgates`), or a full profile URL (example `https://www.linkedin.com/in/williamhgates`; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the `/in/` prefix. Member profiles only: a company page URL or URN is rejected with a `400` error, free of charge.",
            "schema": {
              "type": "string",
              "example": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of articles to fetch per page (default: 10). A value above 100 is clamped to 100, not rejected. The value is a ceiling: a page can come back with fewer articles than requested.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Offset of the first article to return, counted from the newest. Supported on this endpoint: this feed is paged by offset, not by cursor. Pass 0 (or omit) for the first page, then advance by the `count` you requested - the response hands you that value as `nextStart`. Keep paging while `hasMore` is true.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "example": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched profile articles",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "articles": {
                      "type": "array",
                      "description": "Published articles, newest first.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "articleUrn": {
                            "type": "string",
                            "example": "urn:li:linkedInArticle:7280956270201704448",
                            "description": "The article's identifier."
                          },
                          "articleId": {
                            "type": "string",
                            "example": "7280956270201704448",
                            "description": "The bare numeric id, without the URN prefix."
                          },
                          "title": {
                            "type": "string",
                            "example": "What I learned shipping software for thirty years",
                            "description": "Title of the article."
                          },
                          "url": {
                            "type": "string",
                            "example": "https://www.linkedin.com/pulse/what-i-learned-shipping-software-thirty-years-williamhgates",
                            "description": "Public permalink to the article, with tracking parameters already stripped, so the value is stable across calls."
                          },
                          "description": {
                            "type": "string",
                            "example": "Every release teaches you something the last one could not. Here are the lessons that kept coming back, and the ones I had to...",
                            "description": "The opening of the article body as the feed returns it, roughly 150 characters. Not the full text."
                          },
                          "publishedAt": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "example": "2026-07-14T08:12:03.000Z",
                            "description": "ISO 8601 publication timestamp, derived from the article id. Null when the id is not decodable - never a guessed date."
                          },
                          "coverImageUrl": {
                            "type": "string",
                            "nullable": true,
                            "example": "https://media.licdn.com/dms/image/...",
                            "description": "The largest available cover image. Null when the article has none."
                          },
                          "readTimeMinutes": {
                            "type": "integer",
                            "nullable": true,
                            "example": 9,
                            "description": "Reading time in minutes, as estimated upstream. Null when it cannot be read."
                          },
                          "subtitle": {
                            "type": "string",
                            "example": "by Ada Lovelace \u2022 9 min read",
                            "description": "The byline verbatim, as shown on the article card."
                          }
                        }
                      }
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether the feed holds more articles behind this page. Stop paging when it is false; a short page is not the end of the feed."
                    },
                    "nextStart": {
                      "type": "integer",
                      "example": 10,
                      "description": "The `start` value to request next. Present only when `hasMore` is true."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/post/reactions": {
      "get": {
        "summary": "Get reactions on a post",
        "description": "Fetch who reacted to a specific professional post, including their reaction type and profile information. Reactors can be members or company pages. A repost without commentary answers with the original post's reactions.",
        "parameters": [
          {
            "name": "postUrlOrUrn",
            "in": "query",
            "required": true,
            "description": "Professional post URL or URN: `urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, a group post as `urn:li:groupPost:<groupId>-<postId>`, or any post URL containing one.",
            "schema": {
              "type": "string",
              "example": "https://www.linkedin.com/posts/username_post-slug-1234567890-abcd"
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "description": "Number of reactions to fetch (default: 100)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            }
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "description": "Offset of the first item to return. This endpoint pages by offset: advance `start` by the number of items you received. Keep requesting while `hasMore` is true; an empty page ends the list.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully fetched post reactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "reactions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "reactionType": {
                            "type": "string",
                            "enum": [
                              "LIKE",
                              "EMPATHY",
                              "ENTERTAINMENT",
                              "INTEREST",
                              "PRAISE",
                              "APPRECIATION"
                            ],
                            "description": "The type of reaction: LIKE (Like), EMPATHY (Love), ENTERTAINMENT (Funny), INTEREST (Insightful), PRAISE (Celebrate), APPRECIATION (Support)"
                          },
                          "actor": {
                            "type": "object",
                            "required": [
                              "urn",
                              "name",
                              "headline",
                              "profileUrl",
                              "profilePictureUrl"
                            ],
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ],
                                "description": "`profile` for a member, `company` for a company page."
                              },
                              "urn": {
                                "type": "string",
                                "example": "urn:li:fsd_profile:ACoAABBfDXAB9eK9V6vEHbzfQXZ-wcjke_QuT7g",
                                "description": "`urn:li:fsd_profile:<profileId>` for a member, `urn:li:fsd_company:<companyId>` for a company page."
                              },
                              "name": {
                                "type": "string",
                                "example": "Jane Doe"
                              },
                              "headline": {
                                "type": "string",
                                "example": "Software Engineer at Tech Company"
                              },
                              "profileUrl": {
                                "type": "string",
                                "example": "https://www.linkedin.com/in/kevin-piacentini/",
                                "description": "`https://www.linkedin.com/in/<publicId>/` for a member (keyed on the profile id when the public identifier is unknown), the company page URL for a page."
                              },
                              "profilePictureUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/...",
                                "description": "Picture URL of the reactor, or the source's generic placeholder image when the reactor has none - see `picture`."
                              },
                              "picture": {
                                "type": "object",
                                "description": "The reactor's real picture or logo, largest rendition. Absent when the reactor has no picture, which is how a placeholder `profilePictureUrl` is told apart from a real one.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "width": {
                                    "type": "integer"
                                  },
                                  "height": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "publicId": {
                                "type": "string",
                                "description": "Members only: the member's public identifier (`/in/<publicId>`).",
                                "example": "kevin-piacentini"
                              },
                              "profileId": {
                                "type": "string",
                                "description": "Members only: the profile id (`ACoAA...`)."
                              },
                              "memberId": {
                                "type": "string",
                                "description": "Members only: the numeric member id."
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Company pages only: the numeric company id."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Company pages only: the page's public identifier."
                              }
                            },
                            "description": "Who reacted: a member or a company page - read `type`."
                          }
                        }
                      }
                    },
                    "total": {
                      "type": "integer",
                      "description": "Number of reactions the source reports for the post. Omitted when it reports none. A complete walk can end a few short of it, because the source withholds a few reactors."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more reactions are available"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/api/v1/post/engagement": {
      "get": {
        "summary": "Get Post Engagement",
        "description": "Fetch a post's comments and reactions in a single call. Bills 2 credits and 2 rate-limit units; all-or-nothing (0 credits on error).",
        "parameters": [
          {
            "name": "postUrlOrUrn",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Professional post URL or URN"
          },
          {
            "name": "commentCount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100
            },
            "description": "Number of comments to fetch (1-100)"
          },
          {
            "name": "commentStart",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            },
            "description": "Offset of the first item to return. This endpoint pages by offset: advance `start` by the number of items you received. Keep requesting while `hasMore` is true; an empty page ends the list."
          },
          {
            "name": "commentPaginationToken",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Token for the next page of comments"
          },
          {
            "name": "reactionCount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100
            },
            "description": "Number of reactions to fetch (1-100)"
          },
          {
            "name": "reactionStart",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            },
            "description": "Offset of the first item to return. This endpoint pages by offset: advance `start` by the number of items you received. Keep requesting while `hasMore` is true; an empty page ends the list."
          }
        ],
        "responses": {
          "200": {
            "description": "Combined comments and reactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "post": {
                      "type": "string",
                      "description": "The resolved post identifier"
                    },
                    "comments": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      },
                      "description": "Comments (same shape as GET /post/comments)"
                    },
                    "commentsPaginationToken": {
                      "type": "string",
                      "description": "Token for the next page of comments (absent when none)"
                    },
                    "commentsHasMore": {
                      "type": "boolean"
                    },
                    "commentsTotal": {
                      "type": "integer",
                      "description": "Number of top-level comments the source reports for the post (replies not included), as `total` on GET /post/comments. Omitted when not reported."
                    },
                    "reactions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "reactionType": {
                            "type": "string",
                            "enum": [
                              "LIKE",
                              "EMPATHY",
                              "ENTERTAINMENT",
                              "INTEREST",
                              "PRAISE",
                              "APPRECIATION"
                            ],
                            "description": "The type of reaction: LIKE (Like), EMPATHY (Love), ENTERTAINMENT (Funny), INTEREST (Insightful), PRAISE (Celebrate), APPRECIATION (Support)"
                          },
                          "actor": {
                            "type": "object",
                            "required": [
                              "urn",
                              "name",
                              "headline",
                              "profileUrl",
                              "profilePictureUrl"
                            ],
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "profile",
                                  "company"
                                ],
                                "description": "`profile` for a member, `company` for a company page."
                              },
                              "urn": {
                                "type": "string",
                                "example": "urn:li:fsd_profile:ACoAABBfDXAB9eK9V6vEHbzfQXZ-wcjke_QuT7g",
                                "description": "`urn:li:fsd_profile:<profileId>` for a member, `urn:li:fsd_company:<companyId>` for a company page."
                              },
                              "name": {
                                "type": "string",
                                "example": "Jane Doe"
                              },
                              "headline": {
                                "type": "string",
                                "example": "Software Engineer at Tech Company"
                              },
                              "profileUrl": {
                                "type": "string",
                                "example": "https://www.linkedin.com/in/kevin-piacentini/",
                                "description": "`https://www.linkedin.com/in/<publicId>/` for a member (keyed on the profile id when the public identifier is unknown), the company page URL for a page."
                              },
                              "profilePictureUrl": {
                                "type": "string",
                                "example": "https://media.licdn.com/dms/image/...",
                                "description": "Picture URL of the reactor, or the source's generic placeholder image when the reactor has none - see `picture`."
                              },
                              "picture": {
                                "type": "object",
                                "description": "The reactor's real picture or logo, largest rendition. Absent when the reactor has no picture, which is how a placeholder `profilePictureUrl` is told apart from a real one.",
                                "properties": {
                                  "url": {
                                    "type": "string"
                                  },
                                  "width": {
                                    "type": "integer"
                                  },
                                  "height": {
                                    "type": "integer"
                                  }
                                }
                              },
                              "publicId": {
                                "type": "string",
                                "description": "Members only: the member's public identifier (`/in/<publicId>`).",
                                "example": "kevin-piacentini"
                              },
                              "profileId": {
                                "type": "string",
                                "description": "Members only: the profile id (`ACoAA...`)."
                              },
                              "memberId": {
                                "type": "string",
                                "description": "Members only: the numeric member id."
                              },
                              "companyId": {
                                "type": "string",
                                "description": "Company pages only: the numeric company id."
                              },
                              "universalName": {
                                "type": "string",
                                "description": "Company pages only: the page's public identifier."
                              }
                            },
                            "description": "Who reacted: a member or a company page - read `type`."
                          }
                        }
                      }
                    },
                    "reactionsHasMore": {
                      "type": "boolean"
                    },
                    "reactionsTotal": {
                      "type": "integer",
                      "description": "Number of reactions the source reports for the post, as `total` on GET /post/reactions. A complete walk can end a few short of it. Omitted when not reported."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    }
  }
}
