A read-only API for retrieving LinkedIn profiles, companies, job postings, and post
engagement. Every endpoint is a `GET`; there are no write operations.
## Response envelope
All responses share the same envelope:
```json
{
"success": true,
"data": {},
"cursor": null,
"hasMore": false
}
```
| Field | Type | Description |
|---|---|---|
| `success` | boolean | Whether the request succeeded |
| `data` | object or array | The payload |
| `cursor` | string or null | Value to pass as `start` for the next page |
| `hasMore` | boolean | Whether more results are available |
On failure, `success` is `false`, `data` is `null`, and an `error` object describes
what went wrong.
## Pagination
List endpoints accept `start` and `count`. To fetch the next page, send the `cursor`
value from the previous response as `start`. Continue until `hasMore` is `false`.
Note that `cursor` is a string, for example `"25"`.
```
GET /people/search?keyword=developer&start=0&count=25 → cursor "25", hasMore true
GET /people/search?keyword=developer&start=25&count=25 → next page
```
## Working with posts
Post listings return two identifiers. Use `ugcPostId` — not `activityId` — as the
`postId` path parameter when fetching comments or reactions for a post.
## Null values
Fields are populated from public LinkedIn data, which varies by record. Any field
documented as nullable may be absent for a given profile, company, or job. Write
clients defensively rather than assuming a field is present.