linkedin_unipile_profile
A LinkedIn member or company: read their profile and their activity. Acting
on a member (endorsing a skill, a Sales Navigator / Recruiter action) is
linkedin_unipile_act (op="endorse" / "update_member").
identifier = public slug (marie-dupont; a full linkedin.com/in/… or
/company/… URL is brought back to it) or URN (ACoAA…). NOT the
numeric member_id from linkedin_unipile_search: the v2 API rejects it
(400 Invalid User ID) — go through the slug, which these ops resolve for you.
op:
"person" (default): full profile (dated career, schools, network). ⚠️ LinkedIn may throttle a section (often
experience): the response then carriesthrottled_sections=[…]with the section empty despite a*_total_count> 0. This is an UPSTREAM rate-limit, not an absence of data: retry later (minutes), reduce concurrency (≤8 in parallel), and in a batch handle these targets in a deferred catch-up pass. Also CHECK that the returnedpublic_identifier/id == the requested one before writing (reject + retry otherwise)."company": company profile. Cached 6h per account (~static profiles) — the same company looked up again does not consume the upstream quota (~100 profiles/12h per account).
"me": profile of the connected account itself (the "me" under which the other ops act). No
identifier."posts" / "comments": what a member publishes / comments — to spot a post to comment on/like, or what a prospect engages with. Each item's text is served as an EXCERPT (600 characters, cut marked
text_truncated: true): the raw is 55-75 KB for 10 posts, and triage is done on the header.text_max_chars=Nonereturns the full text,op="get"oflinkedin_unipile_posta specific post. To slim further,fields(e.g.["text","posted_at","social_id"]) keeps only those fields —id/social_idare always kept so you can chain."reactions": posts a member has liked.
"followers" / "following": followers of the connected account, or of a member via
identifier. Paginated.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "linkedin_unipile_profile"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | person (default) | company | me | posts | comments | reactions | followers | following. | person |
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| limit | No | page size. | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| cursor | No | pagination (posts, comments, reactions, followers, following). | |
| fields | No | op="posts"/"comments" — field projection (slims heavily). | |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| _account | No | Compte à OPÉRER quand plusieurs existent. `oto_identity(op='list')`. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| sections | No | op="person" — sections to include ("*" = all), comma separated: experience, education, languages, skills, certifications, volunteer_experience, projects, recommendations, interests, recruiting_activity (Recruiter only). `<name>_preview` = its first entries only (lighter, less throttling), `*_preview` = every section that way. Any other name is refused, naming these. The About text is NOT a section: it always comes back, as `bio`. | * |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| identifier | No | public slug or URN of the member / company. Required except op="me"; optional for followers/following (default = you). | |
| text_max_chars | No | op="posts"/"comments" — text length of each item (default 600; `None` = full text). |