{"openapi":"3.1.0","info":{"title":"HeyReagent API","version":"1.0.0","summary":"LinkedIn actions on your own account: one POST per action.","description":"Each action is one POST to /v1/actions/<name>, with your key in the Authorization header and the action's inputs as the JSON body. MCP and API for LinkedIn. Not affiliated with LinkedIn. Docs: https://heyreagent.com/docs","termsOfService":"https://heyreagent.com/terms"},"servers":[{"url":"https://api.heyreagent.com"}],"security":[{"key":[]}],"tags":[{"name":"Profile"},{"name":"Network"},{"name":"Messages"},{"name":"InMail"},{"name":"Search"},{"name":"Posts"},{"name":"Sales Navigator"},{"name":"Recruiter"},{"name":"Jobs"},{"name":"Insight"},{"name":"Account"}],"paths":{"/v1/actions/get_my_profile":{"post":{"operationId":"get_my_profile","summary":"Get my profile","description":"Read who each of your connected LinkedIn accounts is.\n\nOne row per live account. An account that could not be read has error in place of the profile fields.\n\nDocs: https://heyreagent.com/docs/actions/get_my_profile","tags":["Profile"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender. Omit to report every live sender in this setup."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: accounts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_profile":{"post":{"operationId":"get_profile","summary":"Get a profile","description":"Read one person's profile in short, with their recent posts and their company.\n\nThe answer holds no id and no link for the person. For their member id use get_profile_details.\n\nA connectionId that matches no live account is not refused: the profile is read through a shared account and readVia says \"house\".\n\nDocs: https://heyreagent.com/docs/actions/get_profile","tags":["Profile"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"profileUrl":{"type":"string","description":"The person's LinkedIn profile URL (https://linkedin.com/in/…) or public identifier."},"connectionId":{"type":"string","description":"Which sender to read through. Omit to use the first live sender."}},"required":["profileUrl"]},"example":{"profileUrl":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: profile, readVia, recentPosts, company, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/update_my_profile":{"post":{"operationId":"update_my_profile","summary":"Update my profile","description":"Read, preview a change to, or change your own profile.\n\nWhat comes back depends on action. Called with no field: \"current_profile\", with profileUrl, experience[].id and education[].id. With a field and confirm false: \"preview\", with changes, and locationOptions when the place name matched more than one place. With confirm true: \"updated\".\n\nTo edit an existing experience or education entry pass its id; without one a new entry is added.\n\nlocation is a place name the action looks up itself; locationId overrides it.\n\nDocs: https://heyreagent.com/docs/actions/update_my_profile","tags":["Profile"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Whose profile to edit: the LinkedIn account id from list_linkedin_accounts. May be omitted only when the setup has exactly one live sender."},"headline":{"type":"string","maxLength":220,"description":"New headline — the line under the name (max 220 characters)."},"about":{"type":"string","maxLength":2600,"description":"New About section (max 2600 characters). Replaces the whole section."},"location":{"type":"string","maxLength":120,"description":"New profile location as a place name, e.g. \"Austin, Texas\". Matched to a LinkedIn place — the preview shows the match."},"locationId":{"type":"string","description":"An exact LinkedIn place id, taken from locationOptions in a preview. Overrides location."},"postalCode":{"type":"string","description":"5-digit postal code to go with the location (optional)."},"websiteLink":{"type":"object","properties":{"type":{"type":"string","enum":["WEBSITE","PORTFOLIO","BLOG","NEWSLETTER","STORE"],"description":"What the link is."},"url":{"type":"string","format":"uri","description":"The full https:// URL."},"displayOn":{"type":"string","enum":["EVERYWHERE","PROFILE_ONLY"],"description":"Where LinkedIn shows it (default EVERYWHERE)."}},"required":["type","url"],"description":"The link shown near the top of the profile."},"experience":{"type":"object","properties":{"id":{"type":"string","description":"Id of the experience to EDIT (from the preview's current.experience). Omit to ADD a new one."},"role":{"type":"string","maxLength":100,"description":"Job title. Required when adding."},"company":{"type":"string","maxLength":100,"description":"Company name. Required when adding."},"companyId":{"type":"string","description":"LinkedIn company id, to link the entry to that company page (e.g. a companyId from search_companies)."},"location":{"type":"string","maxLength":120,"description":"Where the job is / was, as free text."},"presence":{"type":"string","enum":["ON_SITE","HYBRID","REMOTE"]},"startDate":{"type":"object","properties":{}},"endDate":{"type":"object","properties":{},"description":"Omit for a current position."},"description":{"type":"string","maxLength":2000},"notifyNetwork":{"type":"boolean","description":"true = let LinkedIn announce it to the network. Default false (no announcement)."}},"description":"Add or edit ONE experience entry."},"education":{"type":"object","properties":{"id":{"type":"string","description":"Id of the education entry to EDIT (from the preview's current.education). Omit to ADD a new one."},"school":{"type":"string","maxLength":150,"description":"School name. Required when adding."},"degree":{"type":"string","maxLength":100},"fieldOfStudy":{"type":"string","maxLength":100},"grade":{"type":"string","maxLength":80},"activities":{"type":"string","maxLength":500},"description":{"type":"string","maxLength":2000},"startDate":{"type":"object","properties":{}},"endDate":{"type":"object","properties":{}},"notifyNetwork":{"type":"boolean","description":"true = let LinkedIn announce it to the network. Default false (no announcement)."}},"description":"Add or edit ONE education entry."},"addSkills":{"type":"array","items":{"type":"string","maxLength":80},"maxItems":20,"description":"Skills to ADD to the profile, by name (up to 20 per call). Skills already on the profile are kept; removing a skill is not possible here."},"pictureUrl":{"type":"string","format":"uri","description":"New PROFILE picture: a public https:// link straight to a JPEG or PNG file (max 8MB). LinkedIn applies its default crop."},"coverPictureUrl":{"type":"string","format":"uri","description":"New COVER (banner) picture: a public https:// link straight to a JPEG or PNG file (max 8MB). LinkedIn's banner is 1584×396."},"openToWork":{"type":"object","properties":{"jobTitles":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":5,"description":"Job titles the person is open to (1–5), by name — each is matched to LinkedIn's own title list."},"workplaces":{"type":"array","items":{"type":"string","enum":["ON_SITE","HYBRID","REMOTE"]},"description":"Which workplace types: ON_SITE, HYBRID, REMOTE."},"onSiteLocations":{"type":"array","items":{"type":"string"},"maxItems":5,"description":"Places for on-site / hybrid work, by name. Required when workplaces has ON_SITE or HYBRID."},"remoteLocations":{"type":"array","items":{"type":"string"},"maxItems":5,"description":"Places (usually countries) for remote work, by name. Required when workplaces has REMOTE."},"startDate":{"type":"string","enum":["IMMEDIATELY","FLEXIBLE"]},"employmentTypes":{"type":"array","items":{"type":"string","enum":["FULL_TIME","PART_TIME","CONTRACT","INTERNSHIP","TEMPORARY"]}},"visibility":{"type":"string","enum":["RECRUITERS_ONLY","ALL"],"description":"RECRUITERS_ONLY = only people using LinkedIn Recruiter see it. ALL = everyone sees it, with the green #OpenToWork frame on the profile photo — ask the user which, never assume."}},"required":["jobTitles","workplaces","visibility"],"description":"Set the \"open to work\" job preferences. It cannot be turned off from here."},"confirm":{"type":"boolean","description":"false (default) = preview only, nothing changes. true = change the profile now (only after the user said yes)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: action, account, message, profileUrl, experience, education, locationOptions, changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_profile_details":{"post":{"operationId":"get_profile_details","summary":"Get a profile in depth","description":"Read one person's profile in depth, live, with the sections you ask for.\n\nskills[].endorsementId is present only when sections includes \"skills\".\n\nWith via \"sales_navigator\" or \"recruiter\", person must be that product's id (a public link is not accepted there), and providerId is then that product's id, not a member id.\n\nLinkedIn counts this as a profile view, and throttles heavy use: a section it held back is named in throttledSections and comes back empty.\n\nnetworkDistance is FIRST_DEGREE / SECOND_DEGREE / THIRD_DEGREE / OUT_OF_NETWORK.\n\nDocs: https://heyreagent.com/docs/actions/get_profile_details","tags":["Profile"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"person":{"type":"string","description":"The person: a LinkedIn profile URL or member id."},"sections":{"type":"array","items":{"type":"string","enum":["*","about","experience","education","languages","skills","certifications","volunteering_experience","projects","recommendations_received","recommendations_given","recruiting_activity"]},"maxItems":11,"description":"Which sections to include in full. Omit for the basic profile."},"via":{"type":"string","enum":["sales_navigator","recruiter"],"description":"Read through this product instead of ordinary LinkedIn."},"notify":{"type":"boolean","description":"Whether the person is told you viewed their profile (default false)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["person"]},"example":{"person":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: providerId, publicIdentifier, firstName, lastName, pronoun, headline, summary, contactInfo.emails, contactInfo.phones, contactInfo.adresses, birthdate.month, birthdate.day, primaryLocale.country, primaryLocale.language, location, websites, creatorWebsite.url, creatorWebsite.description, profilePictureUrl, profilePictureUrlLarge, backgroundPictureUrl, hashtags, canSendInmail, connectedAt, isOpenProfile, isPremium, isInfluencer, isCreator, isHiring, isOpenToWork, isSavedLead, isCrmImported, isRelationship, isSelf, invitation.type, invitation.status, workExperience[].id, workExperience[].position, workExperience[].companyId, workExperience[].companyUrl, workExperience[].companyPictureUrl, workExperience[].industry, workExperience[].company, workExperience[].location, workExperience[].description, workExperience[].skills, workExperience[].current, workExperience[].status, workExperience[].start, workExperience[].end, workExperienceTotalCount, volunteeringExperience[].company, volunteeringExperience[].description, volunteeringExperience[].role, volunteeringExperience[].cause, volunteeringExperience[].start, volunteeringExperience[].end, volunteeringExperienceTotalCount, education[].id, education[].degree, education[].grade, education[].description, education[].activities, education[].school, education[].schoolId, education[].schoolUrl, education[].schoolPictureUrl, education[].skills, education[].fieldOfStudy, education[].start, education[].end, educationTotalCount, skills[].name, skills[].endorsementCount, skills[].endorsementId, skills[].insights, skills[].endorsed, skillsTotalCount, languages[].name, languages[].proficiency, languagesTotalCount, certifications[].name, certifications[].organization, certifications[].url, certificationsTotalCount, projects[].name, projects[].description, projects[].skills, projects[].start, projects[].end, projectsTotalCount, recommendations.receivedTotalCount, recommendations.givenTotalCount, tags[].id, tags[].name, notes[].projectId, notes[].content, notes[].createdAt, candidateId, recruitingActivity[].createdAt, recruitingActivity[].updatedAt, recruitingActivity[].event, recruitingActivity[].content, recruitingActivity[].status, recruitingActivity[].projectId, recruitingActivity[].projectName, recruitingActivity[].state, throttledSections, followerCount, connectionsCount, sharedConnectionsCount, networkDistance, publicProfileUrl, locked, unlockCredit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/endorse_skill":{"post":{"operationId":"endorse_skill","summary":"Endorse a skill","description":"Endorse one skill on someone's profile.\n\nBoth ids come from one get_profile_details call with sections [\"skills\"]: providerId and skills[].endorsementId.\n\nDocs: https://heyreagent.com/docs/actions/endorse_skill","tags":["Profile"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"profileId":{"type":"string","description":"The person's LinkedIn member id (from get_profile_details)."},"skillEndorsementId":{"type":"number","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The skill's endorsement id (from the skills section of get_profile_details)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["profileId","skillEndorsementId"]},"example":{"profileId":"PASTE_MEMBER_ID_HERE","skillEndorsementId":123}}}},"responses":{"200":{"description":"It worked. Inside result: endorsed, profileId, skillEndorsementId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_connections":{"post":{"operationId":"list_connections","summary":"List my connections","description":"List your 1st-degree connections.\n\nconnections[].connectionId is YOUR account the person is connected to, not the person.\n\nNo member id comes back. Pass profileUrl on; a action that needs the id resolves it, or get_profile_details returns it.\n\nServed from a stored copy up to 24 hours old; refresh true reads LinkedIn again.\n\nDocs: https://heyreagent.com/docs/actions/list_connections","tags":["Network"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender (its linkedinConnections _id from list_linkedin_accounts). Omit to merge across all your live senders in this setup."},"since":{"type":"string","description":"ISO date (e.g. \"2026-01-01\"). Only return connections made on/after this date."},"search":{"type":"string","description":"Case-insensitive substring matched against each person's name and headline."},"limit":{"type":"number","minimum":1,"maximum":500,"description":"Max people to return (1–500, default 200). The total match count is always reported even when truncated."},"refresh":{"type":"boolean","description":"true = pull the latest connections live from LinkedIn and refresh the cache (slower). false (default) = serve from cache, refreshing live only when the cache is empty or stale."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: summary, connections, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/send_invitation":{"post":{"operationId":"send_invitation","summary":"Send an invitation","description":"Send one connection invitation, now.\n\nA link or an id that is not an ordinary member id (ACo…) is first looked up, which LinkedIn counts as a profile view.\n\nLinkedIn's own weekly invitation limit can refuse it: the error is linkedin_limit_reached.\n\nWhen the person already has an unanswered invitation from you, LinkedIn answers as if it sent one and hands back that older invitation's id.\n\nDocs: https://heyreagent.com/docs/actions/send_invitation","tags":["Network"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"profileUrl":{"type":"string","description":"The person's LinkedIn profile URL (linkedin.com/in/…)."},"note":{"type":"string","maxLength":300,"description":"Optional note sent with the invitation (max 300 characters)."},"email":{"type":"string","format":"email","description":"The person's email address — only for someone whose LinkedIn settings ask for it before they can be invited."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["profileUrl"]},"example":{"profileUrl":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, profileUrl, invitationId, withNote, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_sent_invitations":{"post":{"operationId":"list_sent_invitations","summary":"List sent invitations","description":"List the invitations you sent that are still unanswered.\n\npendingInvitations[].invitationId is a SENT invitation: withdraw_invitation takes it. respond_to_invitation takes only received ones.\n\nwithdraw_invitations takes no invitationId: it takes back many at once, by campaign or by account (pass pendingInvitations[].connectionId as linkedinConnectionId).\n\nDocs: https://heyreagent.com/docs/actions/list_sent_invitations","tags":["Network"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender. Omit to span all live senders."},"limit":{"type":"number","minimum":1,"maximum":300,"description":"Max invitations to return (1–300, default 100)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: summary, pendingInvitations, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/preview_withdraw_invitations":{"post":{"operationId":"preview_withdraw_invitations","summary":"Preview withdrawing invitations","description":"Count the sent invitations a withdrawal would take back, per campaign.\n\nPass campaignId or linkedinConnectionId, exactly one.\n\nOnly invitations a campaign sent are counted, and only those pending at least daysThreshold days and at most 42.\n\nWhen nothing qualifies the answer is a plain sentence, not an object.\n\nDocs: https://heyreagent.com/docs/actions/preview_withdraw_invitations","tags":["Network"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"ID of a specific campaign to withdraw invites for. Provide either campaignId OR linkedinConnectionId, not both."},"linkedinConnectionId":{"type":"string","description":"LinkedIn sender account ID. When provided (without campaignId), withdraws eligible invites across ALL campaigns using this account."},"daysThreshold":{"type":"number","minimum":1,"maximum":90,"description":"Only withdraw invites that have been pending for at least this many days (default: 7)."},"withdrawLimit":{"type":"number","minimum":1,"maximum":500,"description":"Max number of profiles to withdraw per campaign run. Omit for no limit."}}},"example":{"linkedinConnectionId":"PASTE_CONNECTION_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: summary, breakdown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/withdraw_invitations":{"post":{"operationId":"withdraw_invitations","summary":"Withdraw sent invitations","description":"Take back sent invitations that are still unanswered, in the background.\n\nSame inputs and rules as preview_withdraw_invitations; run that first. To take back ONE invitation now, whoever sent it, use withdraw_invitation.\n\nIt queues the work and answers at once. tasks[].taskId is not a task id that get_send_status takes.\n\nCalling it twice queues the same withdrawal twice.\n\nDocs: https://heyreagent.com/docs/actions/withdraw_invitations","tags":["Network"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"ID of a specific campaign to withdraw invites for. Provide either campaignId OR linkedinConnectionId, not both."},"linkedinConnectionId":{"type":"string","description":"LinkedIn sender account ID. When provided (without campaignId), withdraws eligible invites across ALL campaigns using this account."},"daysThreshold":{"type":"number","minimum":1,"maximum":90,"description":"Only withdraw invites that have been pending for at least this many days (default: 7)."},"withdrawLimit":{"type":"number","minimum":1,"maximum":500,"description":"Max number of profiles to withdraw per campaign run. Omit for no limit."}}},"example":{"linkedinConnectionId":"PASTE_CONNECTION_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: success, summary, tasks.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/withdraw_invitation":{"post":{"operationId":"withdraw_invitation","summary":"Withdraw one sent invitation, now","description":"Take back one invitation you sent that is still unanswered, now.\n\nIt cannot be undone.\n\nAn invitation LinkedIn no longer has (accepted, declined or already withdrawn) answers invitation_not_found.\n\nDocs: https://heyreagent.com/docs/actions/withdraw_invitation","tags":["Network"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string","description":"The sent invitation to take back (from list_sent_invitations, or returned by send_invitation)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["invitationId"]},"example":{"invitationId":"PASTE_SENT_INVITATION_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: withdrawn, invitationId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_received_invitations":{"post":{"operationId":"list_received_invitations","summary":"List received invitations","description":"List the invitations you received and have not answered.\n\nprofileUrl is null when LinkedIn gives no public name for the sender.\n\nDocs: https://heyreagent.com/docs/actions/list_received_invitations","tags":["Network"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":50,"description":"Max invitations to return (1–50, default 20)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, invitations, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/respond_to_invitation":{"post":{"operationId":"respond_to_invitation","summary":"Accept or decline an invitation","description":"Accept or decline one invitation you received.\n\nLinkedIn also needs a per-invitation token to answer one; this action finds it itself by reading your received invitations again.\n\nDocs: https://heyreagent.com/docs/actions/respond_to_invitation","tags":["Network"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string","description":"The invitation to answer (from list_received_invitations)."},"action":{"type":"string","enum":["accept","decline"],"description":"accept or decline."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["invitationId","action"]},"example":{"invitationId":"PASTE_INVITATION_ID_HERE","action":"accept"}}}},"responses":{"200":{"description":"It worked. Inside result: invitationId, status, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_followers":{"post":{"operationId":"list_followers","summary":"List followers","description":"List who follows you, or who follows another person or a company page.\n\nThis operation's own published definition documents it for LinkedIn (100 a page for your own followers, 50 for someone else's), although the provider's feature summary lists followers under Instagram only.\n\nof takes an id only, never a link.\n\nDocs: https://heyreagent.com/docs/actions/list_followers","tags":["Network"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"of":{"type":"string","description":"A member id or a company's numeric id. Omit for your own followers."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100 for your own followers, 1–50 for someone else's; default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, followers[].id, followers[].urn, followers[].name, followers[].headline, followers[].profileUrl, followers[].profilePictureUrl, followers[].profilePictureUrlLarge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_conversations":{"post":{"operationId":"list_conversations","summary":"List conversations","description":"List the conversations in the stored copy of your inbox, across your accounts.\n\nIt reads what sync_inbox last stored, not LinkedIn itself; lastFetchedAt says how old that is. list_chats reads LinkedIn live.\n\nTo read or re-sync a row, pass its conversationUrl. To reply, pass its participantProfileUrl to send_message; that reaches a 1st-degree connection. For an InMail conversation, take the chatId from list_inmail and use send_chat_message.\n\nreadKey changes whenever the conversation's latest message changes: take it from a fresh call.\n\ninbox[].headline comes back empty for the rows an inbox sync writes; the headline is in inbox[].raw.participantHeadline.\n\nPages are by page number, not by cursor.\n\nDocs: https://heyreagent.com/docs/actions/list_conversations","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"search":{"type":"string","description":"Search by participant, headline, message, or connection label."},"unreadOnly":{"type":"boolean","description":"Only return unread conversations."},"includeThreads":{"type":"boolean","description":"Attach the full message history (oldest→newest) to each conversation row under `thread`, resolved server-side — not just the latest message. Use this to read a specific conversation by searching the lead name."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max conversations to return (default 50, max 200)."},"page":{"type":"number","description":"Page number (default 1)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: total, page, limit, totalPages, hasMore, lastFetchedAt, syncInProgress, inbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_conversation":{"post":{"operationId":"get_conversation","summary":"Get a conversation","description":"Read your whole conversation with one person.\n\nchatId and participant come back only when source is \"live\". An answer from the stored copy (source \"cache\") has neither; refresh true forces a live read.\n\nA linkedin.com/messaging/thread/… link works only for a stored conversation. For a live read pass the person's profile link.\n\nFor an InMail, Sales Navigator or Recruiter conversation the answer adds replyWith with the chatId: reply there with send_chat_message. send_message by profile link would start an ordinary conversation instead.\n\nexists false with uncertain true means it could not be checked, not that there is no conversation.\n\nDocs: https://heyreagent.com/docs/actions/get_conversation","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationUrl":{"type":"string","description":"The other person's LinkedIn profile URL (https://linkedin.com/in/…) — preferred — or a /messaging/thread/ URL."},"connectionId":{"type":"string","description":"Which of your senders owns this conversation (its linkedinConnections _id). Omit to search your live senders; for a live fetch the first live sender is used."},"refresh":{"type":"boolean","description":"true = fetch live from LinkedIn even if cached. false (default) = return the cached thread when available, else fetch live."}},"required":["conversationUrl"]},"example":{"conversationUrl":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: source, connectionId, exists, participant, chatId, inbox, messageCount, messages, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/send_message":{"post":{"operationId":"send_message","summary":"Send a message","description":"Send one message to a 1st-degree connection, or into an existing conversation, now.\n\nPass profileUrl or conversationId, one of them.\n\nLinkedIn delivers an ordinary message only to a 1st-degree connection. For anyone else: send_invitation first, or start_conversation with inmail.\n\nDocs: https://heyreagent.com/docs/actions/send_message","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":8000,"description":"The message text."},"profileUrl":{"type":"string","description":"LinkedIn profile URL of the 1st-degree connection to message."},"conversationId":{"type":"string","description":"Id of an existing conversation to send into, instead of a profile URL."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["text"]},"example":{"profileUrl":"PASTE_PROFILE_LINK_HERE","text":"Hello!"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, conversationId, messageId, text, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/mark_read":{"post":{"operationId":"mark_read","summary":"Mark a conversation read in this inbox","description":"Mark one conversation read in the stored inbox.\n\nIt changes this app's copy only; LinkedIn is not told. set_chat_status marks a conversation read on LinkedIn itself.\n\nAny text is accepted as readKey and answered with success, so a stale key fails silently.\n\nDocs: https://heyreagent.com/docs/actions/mark_read","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"readKey":{"type":"string","description":"readKey returned by list_conversations"}},"required":["readKey"]},"example":{"readKey":"PASTE_READ_KEY_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/sync_inbox":{"post":{"operationId":"sync_inbox","summary":"Refresh the inbox","description":"Refresh the stored inbox from LinkedIn, or one conversation of it, in the background.\n\nOne conversation: threadOnly true AND conversationUrl; the answer has taskId. Whole inbox: neither; the answer has taskIds, one per account, and no taskId.\n\nthreadOnly true without conversationUrl runs a whole-inbox sync.\n\nA whole-inbox sync ignores linkedinConnectionId and refreshes every account.\n\nWhen a sync is already running the answer says alreadyInProgress and may carry no task id.\n\nDocs: https://heyreagent.com/docs/actions/sync_inbox","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationUrl":{"type":"string","description":"LinkedIn conversation/thread URL, or the person's profile URL. Required when threadOnly=true to fetch just that one conversation."},"linkedinConnectionId":{"type":"string","description":"LinkedIn account to sync from. Omit to use all active accounts for the setup."},"threadOnly":{"type":"boolean","description":"When true (with conversationUrl set), fetch only that one conversation thread instead of syncing the whole inbox."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: success, taskId, taskIds, alreadyInProgress, expiredConnections.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_send_status":{"post":{"operationId":"get_send_status","summary":"Check how an inbox refresh ended","description":"Check how a background inbox refresh ended.\n\nstatus is pending, processing, retrying, completed, failed or cancelled.\n\nDocs: https://heyreagent.com/docs/actions/get_send_status","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","description":"Task ID returned by sync_inbox, or by a queued reply."}},"required":["taskId"]},"example":{"taskId":"PASTE_TASK_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: taskId, taskType, status, error, result, createdAt, updatedAt, completedAt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_chats":{"post":{"operationId":"list_chats","summary":"List chats","description":"List your conversations, newest first.\n\nA one-to-one conversation has no name: read who it is with from list_chat_participants.\n\nattendeeProviderId is optional: a conversation can come without it.\n\nOne person has a different id in each LinkedIn product, and no published text says which one a Sales Navigator or Recruiter conversation carries. Treat these ids as member ids only for a conversation in the ordinary inbox (folder says which inbox it is in).\n\nDocs: https://heyreagent.com/docs/actions/list_chats","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"unread":{"type":"boolean","description":"true: only unread conversations. false: only read ones. Omit for both."},"before":{"type":"string","format":"date-time","description":"Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"after":{"type":"string","format":"date-time","description":"Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, chats[].id, chats[].accountType, chats[].providerId, chats[].attendeeProviderId, chats[].name, chats[].type, chats[].timestamp, chats[].unreadCount, chats[].archived, chats[].mutedUntil, chats[].readOnly, chats[].disabledFeatures, chats[].subject, chats[].organizationId, chats[].mailboxId, chats[].contentType, chats[].folder, chats[].pinned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_chat":{"post":{"operationId":"get_chat","summary":"Get a chat","description":"Read one conversation.\n\nDocs: https://heyreagent.com/docs/actions/get_chat","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, accountType, providerId, attendeeProviderId, name, type, timestamp, unreadCount, archived, mutedUntil, readOnly, disabledFeatures, subject, organizationId, mailboxId, contentType, folder, pinned, lastMessage.messageId, lastMessage.providerId, lastMessage.senderId, lastMessage.text, lastMessage.id, lastMessage.chatId, lastMessage.chatProviderId, lastMessage.timestamp, lastMessage.isSender, lastMessage.isForwarded, lastMessage.isViewOnce, lastMessage.seen, lastMessage.hidden, lastMessage.deleted, lastMessage.edited, lastMessage.isEvent, lastMessage.delivered, lastMessage.behavior, lastMessage.eventType, lastMessage.original, lastMessage.replies, lastMessage.replyBy, lastMessage.parent, lastMessage.senderAttendeeId, lastMessage.subject, lastMessage.messageType, lastMessage.attendeeType, lastMessage.attendeeDistance, lastMessage.senderUrn.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_chat_messages":{"post":{"operationId":"list_chat_messages","summary":"List a chat's messages","description":"List the messages of one conversation, newest first.\n\nisSender is 1 for your own messages and 0 for the other person's.\n\nDocs: https://heyreagent.com/docs/actions/list_chat_messages","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"senderId":{"type":"string","description":"Only messages from this participant id. The published definition calls this \"the id of the sender\" without saying which id; \"participant id\" is this tool's own wording."},"before":{"type":"string","format":"date-time","description":"Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"after":{"type":"string","format":"date-time","description":"Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, messages[].messageId, messages[].providerId, messages[].senderId, messages[].text, messages[].attachments[].id, messages[].id, messages[].chatId, messages[].chatProviderId, messages[].timestamp, messages[].isSender, messages[].isForwarded, messages[].isViewOnce, messages[].seen, messages[].hidden, messages[].deleted, messages[].edited, messages[].isEvent, messages[].delivered, messages[].behavior, messages[].eventType, messages[].original, messages[].replies, messages[].replyBy, messages[].parent, messages[].senderAttendeeId, messages[].subject, messages[].messageType, messages[].attendeeType, messages[].attendeeDistance, messages[].senderUrn.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_chat_participants":{"post":{"operationId":"list_chat_participants","summary":"List who is in a chat","description":"List who is in one conversation.\n\nisSelf is 1 on your own row.\n\nDocs: https://heyreagent.com/docs/actions/list_chat_participants","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, participants[].id, participants[].providerId, participants[].name, participants[].isSelf, participants[].hidden, participants[].pictureUrl, participants[].profileUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/send_chat_message":{"post":{"operationId":"send_chat_message","summary":"Send a message with files or a voice note","description":"Send a message into one conversation, with files, a voice note or a video note, or as an answer to one message.\n\nPass text, a file, a voice note or a video note: at least one.\n\nIt sends into any conversation of yours, an InMail one too (chatId from list_inmail). It does not check whether the conversation takes replies, nor that the account is on the Sales Navigator contract the conversation was started on.\n\nDocs: https://heyreagent.com/docs/actions/send_chat_message","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"text":{"type":"string","maxLength":8000,"description":"The message text. Optional when a file or note is sent."},"attachmentUrls":{"type":"array","items":{"type":"string","format":"uri"},"maxItems":9,"description":"Files or images to attach. Public https links; each file up to 10 MB, 20 MB in total."},"voiceMessageUrl":{"type":"string","format":"uri","description":"An audio file to send as a voice note (.m4a preferred). A public https link, up to 10 MB."},"videoMessageUrl":{"type":"string","format":"uri","description":"A video file to send as a video note. A public https link, up to 10 MB."},"replyToMessageId":{"type":"string","description":"Quote and answer this message of the conversation."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE","text":"Hello!"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, chatId, messageId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/start_conversation":{"post":{"operationId":"start_conversation","summary":"Start a conversation (InMail, group, company)","description":"Start a new conversation: an InMail, a message through Sales Navigator or Recruiter, a group, a company page, a job applicant.\n\nThe id must match the product in via: a member id or a profile link for \"classic\", a Sales Navigator id for \"sales_navigator\", a Recruiter id for \"recruiter\".\n\nA company page is written to at its company messaging id (get_company → messaging.id), with companyTopic set; its company id does not work here.\n\nAn InMail spends one credit unless the person has an open profile: check get_inmail_credits, and isOpenProfile on get_profile_details.\n\ninmail true is added to the answer when the send was an InMail.\n\nDocs: https://heyreagent.com/docs/actions/start_conversation","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Who to write to: LinkedIn profile URLs or member ids. One person, or several for a group conversation. For a company page pass its messaging id."},"text":{"type":"string","maxLength":8000,"description":"The first message."},"subject":{"type":"string","maxLength":200,"description":"Subject line (InMail)."},"via":{"type":"string","enum":["classic","sales_navigator","recruiter"],"description":"Which LinkedIn product sends it. sales_navigator and recruiter need that seat on your account."},"inmail":{"type":"boolean","description":"classic only: send as an InMail (to someone you are not connected to)."},"companyTopic":{"type":"string","enum":["service_request","request_demo","support","careers","other"],"description":"Required when writing to a company page."},"applicantId":{"type":"string","description":"Required when writing to an applicant of your job posting (from list_job_applicants)."},"invitationId":{"type":"string","description":"Required when writing to someone whose invitation you have neither accepted nor declined (from list_received_invitations)."},"groupId":{"type":"string","description":"Required when writing to someone through a LinkedIn group you share. A LinkedIn group you share with the person. No action here lists your groups."},"recruiter":{"type":"object","properties":{"signature":{"type":"string"},"hiringProjectId":{"type":"string"},"jobPostingId":{"type":"string"},"sourcingChannel":{"type":"string","enum":["JOB_POSTING_RECOMMENDED_MATCHES","JOB_POSTING","REFERRAL","INTERNAL_CANDIDATES","AUTOMATED_SOURCING","RECRUITER_SEARCH","CAREER_SITE"]},"emailAddress":{"type":"string","format":"email"},"visibility":{"type":"string","enum":["PUBLIC","PRIVATE","PROJECT"]},"inmailIntent":{"type":"string","enum":["HIRE_FOR_CLIENT","HIRE_FOR_OWN_COMPANY"]},"followUp":{"type":"object","properties":{}}},"description":"via recruiter only: signature, hiringProjectId (the project to start the conversation in), jobPostingId, sourcingChannel, emailAddress (send by email instead of InMail), visibility (default PRIVATE), inmailIntent, and followUp { subject, text, days 3–28 or weeks 1–4, timezone } to schedule a follow-up (Recruiter PRO)."},"attachmentUrls":{"type":"array","items":{"type":"string","format":"uri"},"maxItems":9,"description":"Files or images to attach. Public https links; each file up to 10 MB, 20 MB in total."},"voiceMessageUrl":{"type":"string","format":"uri","description":"An audio file to send as a voice note (.m4a preferred). A public https link, up to 10 MB."},"videoMessageUrl":{"type":"string","format":"uri","description":"A video file to send as a video note. A public https link, up to 10 MB."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["to","text"]},"example":{"to":["PASTE_PROFILE_LINK_HERE"],"text":"Hello!"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, chatId, messageId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/set_chat_status":{"post":{"operationId":"set_chat_status","summary":"Mark a chat read or muted on LinkedIn","description":"Mark one conversation read or unread, and mute or unmute it.\n\nThe answer repeats what was changed: read and / or muted.\n\nDocs: https://heyreagent.com/docs/actions/set_chat_status","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"read":{"type":"boolean","description":"true marks it read, false marks it unread."},"muted":{"type":"boolean","description":"true mutes its notifications, false unmutes."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE","read":true}}}},"responses":{"200":{"description":"It worked. Inside result: chatId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/resync_chat":{"post":{"operationId":"resync_chat","summary":"Re-read a chat's history","description":"Read one conversation's history from LinkedIn again, from its beginning.\n\nstatus is SYNC_STARTED, SYNC_RUNNING, SYNC_DONE, SYNC_ERROR or CHAT_DELETED. Call again to follow it.\n\nDocs: https://heyreagent.com/docs/actions/resync_chat","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: chatId, status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/delete_chat":{"post":{"operationId":"delete_chat","summary":"Delete a chat","description":"Delete one conversation.\n\nDocs: https://heyreagent.com/docs/actions/delete_chat","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The conversation id (from list_chats)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: deleted, chatId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_messages":{"post":{"operationId":"list_messages","summary":"List messages across chats","description":"List messages across all your conversations, newest first.\n\nDocs: https://heyreagent.com/docs/actions/list_messages","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"senderId":{"type":"string","description":"Only messages from this participant id. The published definition calls this \"the id of the sender\" without saying which id; \"participant id\" is this tool's own wording."},"before":{"type":"string","format":"date-time","description":"Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"after":{"type":"string","format":"date-time","description":"Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, messages[].messageId, messages[].providerId, messages[].senderId, messages[].text, messages[].attachments[].id, messages[].id, messages[].chatId, messages[].chatProviderId, messages[].timestamp, messages[].isSender, messages[].isForwarded, messages[].isViewOnce, messages[].seen, messages[].hidden, messages[].deleted, messages[].edited, messages[].isEvent, messages[].delivered, messages[].behavior, messages[].eventType, messages[].original, messages[].replies, messages[].replyBy, messages[].parent, messages[].senderAttendeeId, messages[].subject, messages[].messageType, messages[].attendeeType, messages[].attendeeDistance, messages[].senderUrn.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_message":{"post":{"operationId":"get_message","summary":"Get a message","description":"Read one message.\n\nDocs: https://heyreagent.com/docs/actions/get_message","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","description":"The message id (from list_chat_messages)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["messageId"]},"example":{"messageId":"PASTE_MESSAGE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: messageId, providerId, senderId, text, attachments[].id, attachments[].fileSize, attachments[].unavailable, attachments[].mimetype, attachments[].url, attachments[].urlExpiresAt, attachments[].type, attachments[].sticker, attachments[].gif, attachments[].duration, attachments[].voiceNote, attachments[].fileName, attachments[].startsAt, attachments[].expiresAt, attachments[].timeRange, attachments[].displayName, attachments[].organization, id, chatId, chatProviderId, timestamp, isSender, quoted.messageId, quoted.providerId, quoted.senderId, quoted.text, isForwarded, isViewOnce, reactions[].value, reactions[].senderId, reactions[].isSender, seen, hidden, deleted, edited, isEvent, delivered, behavior, eventType, original, replies, replyBy, parent, senderAttendeeId, subject, messageType, attendeeType, attendeeDistance, senderUrn, replyTo.id, replyTo.providerId, replyTo.timestamp, replyTo.senderAttendeeId, replyTo.senderId, replyTo.text.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_message_attachment":{"post":{"operationId":"get_message_attachment","summary":"Download a message attachment","description":"Download one file attached to a message.\n\nFiles over 5 MB are not returned.\n\nDocs: https://heyreagent.com/docs/actions/get_message_attachment","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","description":"The message id (from list_chat_messages)."},"attachmentId":{"type":"string","description":"The attachment id (from the message's attachments)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["messageId","attachmentId"]},"example":{"messageId":"PASTE_MESSAGE_ID_HERE","attachmentId":"PASTE_ATTACHMENT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/edit_message":{"post":{"operationId":"edit_message","summary":"Edit a sent message","description":"Change the text of a message you sent.\n\nLinkedIn allows it only within 60 minutes of sending, and only on ordinary LinkedIn messages.\n\nDocs: https://heyreagent.com/docs/actions/edit_message","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","description":"The message id (from list_chat_messages)."},"text":{"type":"string","maxLength":8000,"description":"The new text."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["messageId","text"]},"example":{"messageId":"PASTE_MESSAGE_ID_HERE","text":"Hello!"}}}},"responses":{"200":{"description":"It worked. Inside result: edited, messageId, text, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/delete_message":{"post":{"operationId":"delete_message","summary":"Delete a sent message","description":"Delete a message you sent.\n\nLinkedIn allows it only within 60 minutes of sending.\n\nDocs: https://heyreagent.com/docs/actions/delete_message","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","description":"The message id (from list_chat_messages)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["messageId"]},"example":{"messageId":"PASTE_MESSAGE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: deleted, messageId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/react_to_message":{"post":{"operationId":"react_to_message","summary":"React to a message","description":"React to one message with an emoji.\n\nDocs: https://heyreagent.com/docs/actions/react_to_message","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","description":"The message id (from list_chat_messages)."},"reaction":{"type":"string","maxLength":16,"description":"The emoji to react with, e.g. 👍."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["messageId","reaction"]},"example":{"messageId":"PASTE_MESSAGE_ID_HERE","reaction":"👍"}}}},"responses":{"200":{"description":"It worked. Inside result: reacted, messageId, reaction, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_chat_attendees":{"post":{"operationId":"list_chat_attendees","summary":"List everyone I have chats with","description":"List everyone you have conversations with.\n\nOnly people you already have a conversation with or are connected to are listed.\n\nOne person has a different id in each LinkedIn product: a participant met in Sales Navigator or Recruiter may carry that product's id in providerId rather than a member id.\n\nDocs: https://heyreagent.com/docs/actions/list_chat_attendees","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, attendees[].id, attendees[].providerId, attendees[].name, attendees[].isSelf, attendees[].hidden, attendees[].pictureUrl, attendees[].profileUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_chat_attendee":{"post":{"operationId":"get_chat_attendee","summary":"Get a chat participant","description":"Read one participant of your conversations.\n\nIt carries no public name for a profile link; get_profile_details with providerId gives one.\n\nDocs: https://heyreagent.com/docs/actions/get_chat_attendee","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The participant id (from list_chat_attendees or list_chat_participants)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["attendeeId"]},"example":{"attendeeId":"PASTE_ATTENDEE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, providerId, name, isSelf, hidden, pictureUrl, profileUrl, specifics.memberUrn, specifics.occupation, specifics.networkDistance, specifics.pendingInvitation, specifics.location, specifics.headline.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_chat_attendee_picture":{"post":{"operationId":"get_chat_attendee_picture","summary":"Download a participant's picture","description":"Download one participant's picture.\n\nDocs: https://heyreagent.com/docs/actions/get_chat_attendee_picture","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The participant id (from list_chat_attendees or list_chat_participants)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["attendeeId"]},"example":{"attendeeId":"PASTE_ATTENDEE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_attendee_chats":{"post":{"operationId":"list_attendee_chats","summary":"List my chats with one person","description":"List your one-to-one conversations with one person.\n\nWhen you have no conversation with the person LinkedIn's API answers \"not found\" instead of an empty list.\n\nDocs: https://heyreagent.com/docs/actions/list_attendee_chats","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The participant id (from list_chat_attendees or list_chat_participants)."},"before":{"type":"string","format":"date-time","description":"Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"after":{"type":"string","format":"date-time","description":"Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["attendeeId"]},"example":{"attendeeId":"PASTE_ATTENDEE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, chats[].id, chats[].accountType, chats[].providerId, chats[].attendeeProviderId, chats[].name, chats[].type, chats[].timestamp, chats[].unreadCount, chats[].archived, chats[].mutedUntil, chats[].readOnly, chats[].disabledFeatures, chats[].subject, chats[].organizationId, chats[].mailboxId, chats[].contentType, chats[].folder, chats[].pinned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_attendee_messages":{"post":{"operationId":"list_attendee_messages","summary":"List my messages with one person","description":"List the messages between you and one person.\n\nDocs: https://heyreagent.com/docs/actions/list_attendee_messages","tags":["Messages"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The participant id (from list_chat_attendees or list_chat_participants)."},"before":{"type":"string","format":"date-time","description":"Only items created before this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"after":{"type":"string","format":"date-time","description":"Only items created after this moment (ISO 8601 UTC, e.g. 2026-10-01T00:00:00.000Z)."},"limit":{"type":"number","minimum":1,"maximum":250,"description":"How many to return (1–250, default 50)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["attendeeId"]},"example":{"attendeeId":"PASTE_ATTENDEE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, messages[].messageId, messages[].providerId, messages[].senderId, messages[].text, messages[].attachments[].id, messages[].id, messages[].chatId, messages[].chatProviderId, messages[].timestamp, messages[].isSender, messages[].isForwarded, messages[].isViewOnce, messages[].seen, messages[].hidden, messages[].deleted, messages[].edited, messages[].isEvent, messages[].delivered, messages[].behavior, messages[].eventType, messages[].original, messages[].replies, messages[].replyBy, messages[].parent, messages[].senderAttendeeId, messages[].subject, messages[].messageType, messages[].attendeeType, messages[].attendeeDistance, messages[].senderUrn.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/resync_attendee_chats":{"post":{"operationId":"resync_attendee_chats","summary":"Re-read my chats with one person","description":"Read your conversations with one person from LinkedIn again.\n\nstatus is SYNC_STARTED, SYNC_RUNNING, CHUNK_DONE, SYNC_DONE, SYNC_ERROR or CHAT_DELETED. Call again to follow it.\n\nDocs: https://heyreagent.com/docs/actions/resync_attendee_chats","tags":["Messages"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attendeeId":{"type":"string","description":"The participant id (from list_chat_attendees or list_chat_participants)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["attendeeId"]},"example":{"attendeeId":"PASTE_ATTENDEE_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: attendeeId, status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_inmail":{"post":{"operationId":"list_inmail","summary":"List InMail conversations","description":"List your InMail conversations, or every conversation with one person.\n\nWith profileUrl it returns every conversation with that person, InMail or not, each tagged by inbox.\n\nSales Navigator shows only the active contract's inbox. After switch_sales_navigator_contract, or when conversations seem missing, pass syncInbox true.\n\ncanReply false means LinkedIn will not accept a reply in that conversation.\n\nReply with send_chat_message and the row's chatId. It does not check the Sales Navigator contract: when sentFromContract is not the account's active contract (list_sales_navigator_contracts), switch to it first with switch_sales_navigator_contract, or the reply may not reach the conversation.\n\nDocs: https://heyreagent.com/docs/actions/list_inmail","tags":["InMail"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Only this sender account (its linkedinConnections _id). Omit to read every live sender on the active setup."},"profileUrl":{"type":"string","description":"The person's LinkedIn profile URL (linkedin.com/in/…) or Sales Navigator lead URL. Returns every conversation with that one person — InMail and classic, each tagged by inbox — instead of scanning the inbox."},"unreadOnly":{"type":"boolean","description":"Only threads with unread messages."},"awaitingReplyOnly":{"type":"boolean","description":"Only threads where the other person wrote last (they are waiting on you)."},"search":{"type":"string","description":"Filter by participant name, headline or latest message text. Ranked: name/headline matches first, then latest-message matches, each newest first; every row says matchedBy. To find one known person, prefer profileUrl."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Max threads to return (default 25, max 100)."},"syncInbox":{"type":"boolean","description":"true = first pull the ACTIVE Sales Navigator contract's InMail inbox from LinkedIn (after a contract switch, or when threads seem missing), then read. Slower (~25s)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: total, inmail, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_inmail_conversation":{"post":{"operationId":"get_inmail_conversation","summary":"Get an InMail conversation","description":"Read one InMail conversation.\n\nsentFromContract is present only on a Sales Navigator conversation this app started.\n\nReply with send_chat_message and this chatId; canReply false means LinkedIn will not take it.\n\nDocs: https://heyreagent.com/docs/actions/get_inmail_conversation","tags":["InMail"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chatId":{"type":"string","description":"The chatId from list_inmail."},"connectionId":{"type":"string","description":"The sender account that owns this thread (optional)."},"refresh":{"type":"boolean","description":"true = first re-sync this conversation from LinkedIn, then read (slower, up to ~25s). Use when messages you know were sent — e.g. from the LinkedIn or Sales Navigator UI — are missing. The result's refresh field reports how the re-sync went."}},"required":["chatId"]},"example":{"chatId":"PASTE_CHAT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: chatId, connectionId, connectionLabel, inbox, isInMail, subject, participant, canReply, awaitingYourReply, sentFromContract, messageCount, messages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_inmail_credits":{"post":{"operationId":"get_inmail_credits","summary":"Get InMail credits","description":"Read how many InMail credits each of your accounts has left.\n\ncredits is null, with a reason, for an account that could not be read.\n\nDocs: https://heyreagent.com/docs/actions/get_inmail_credits","tags":["InMail"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"One LinkedIn account id (list_linkedin_accounts). Omit for all accounts on the active setup."},"includeAllSetups":{"type":"boolean","description":"With no connectionId: read accounts across every setup, not just the active one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: accounts, salesNavigatorCreditsTotal, hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_sales_navigator_contracts":{"post":{"operationId":"list_sales_navigator_contracts","summary":"List Sales Navigator contracts","description":"List the Sales Navigator contracts each of your accounts can use, and which is active.\n\nDocs: https://heyreagent.com/docs/actions/list_sales_navigator_contracts","tags":["InMail"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"One LinkedIn account id (list_linkedin_accounts). Omit for all accounts on the active setup."},"includeAllSetups":{"type":"boolean","description":"With no connectionId: accounts across every setup, not just the active one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: accounts, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/switch_sales_navigator_contract":{"post":{"operationId":"switch_sales_navigator_contract","summary":"Switch Sales Navigator contract","description":"Make another Sales Navigator contract the active one on an account.\n\nconnectionId is required here.\n\nconfirm false (the default) only previews. confirm true switches now.\n\nFor 10 to 20 seconds after a switch every call on that account can fail; wait before the next one.\n\nThe answer's outcome is switched, already_active, not_found, refused, timeout, busy or transient.\n\nDocs: https://heyreagent.com/docs/actions/switch_sales_navigator_contract","tags":["InMail"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"The LinkedIn account id (list_linkedin_accounts / list_sales_navigator_contracts)."},"contractId":{"type":"string","description":"The Sales Navigator contract id to make active (from list_sales_navigator_contracts), e.g. \"SALES_2062952500\"."},"confirm":{"type":"boolean","description":"false (default) = preview only, nothing changes. true = switch now (only after the user said yes)."}},"required":["connectionId","contractId"]},"example":{"connectionId":"PASTE_CONNECTION_ID_HERE","contractId":"PASTE_CONTRACT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: action, outcome, message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_people":{"post":{"operationId":"search_people","summary":"Search people","description":"Search people on ordinary LinkedIn by plain words, a place name and connection degree.\n\nlocation is a place NAME here; the action looks its id up itself. Every other LinkedIn filter is on search_linkedin_people.\n\nAt most 10 rows per call: LinkedIn's page size for this search.\n\nDocs: https://heyreagent.com/docs/actions/search_people","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","maxLength":300,"description":"Words to search for, e.g. \"head of sales fintech\"."},"location":{"type":"string","maxLength":100,"description":"A place name, e.g. \"Berlin\" or \"United Kingdom\"."},"network":{"type":"array","items":{"type":"string","enum":["first","second","third"]},"maxItems":3,"description":"Limit to these connection degrees from you: first, second, third."},"limit":{"type":"number","minimum":1,"maximum":10,"description":"Max people to return (1–10, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"head of sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, total, hasMore, nextCursor, applied, people, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_posts":{"post":{"operationId":"search_posts","summary":"Search posts","description":"Search posts by words, date and who wrote or is mentioned in them, by name.\n\nCompany and industry filters are NAMES here; the action looks the ids up itself and takes the top match. search_linkedin_posts takes the ids.\n\nWhen author.isCompany is true, author.profileUrl is a company link, which actions asking for a profile link do not take.\n\nnextCursor names the account that ran the search: it is refused by any other action, and by this one once that account is gone.\n\nDocs: https://heyreagent.com/docs/actions/search_posts","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","maxLength":300,"description":"Words to search for in posts, e.g. \"cold email deliverability\". LinkedIn search operators work (\"exact phrase\", AND, OR, NOT)."},"sortBy":{"type":"string","enum":["relevance","date"],"description":"\"relevance\" (LinkedIn's default) or \"date\" (newest first)."},"datePosted":{"type":"string","enum":["past_day","past_week","past_month"],"description":"Only posts from the past day, week or month."},"contentType":{"type":"string","enum":["videos","images","live_videos","collaborative_articles","documents","jobs"],"description":"Only posts with this kind of content."},"authorKeywords":{"type":"string","maxLength":100,"description":"Words in the AUTHOR's headline / title, e.g. \"founder\" or \"head of sales\"."},"authorIndustries":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Industry names the author works in, e.g. [\"Software Development\"]."},"authorCompanies":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Company names — posts written by PEOPLE who work at these companies."},"fromCompanies":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Company names — posts published by these COMPANY PAGES themselves."},"mentioningCompanies":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Company names — posts that @mention these companies (e.g. a competitor)."},"postedBy":{"type":"string","enum":["me","first_connections","people_you_follow"],"description":"Only posts by you (\"me\"), by your 1st-degree connections, or by people you follow. Runs on your own LinkedIn sender, so one must be connected."},"limit":{"type":"number","minimum":1,"maximum":50,"description":"Max posts to return (1–50, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep every other argument the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn senders to search through (its id from list_linkedin_accounts). Omit to use your first live sender, or the shared account when you have none."}}},"example":{"keywords":"outbound sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, hasMore, nextCursor, applied, posts, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin":{"post":{"operationId":"search_linkedin","summary":"Search LinkedIn with any filter","description":"Run a search from a results link copied out of LinkedIn, Sales Navigator or Recruiter.\n\nUse it for url. For filters use the typed actions (search_linkedin_people, …_companies, …_posts, …_jobs, …_sales_navigator_people, …_sales_navigator_companies, …_recruiter_people): this one takes them as a free-form object in LinkedIn's own snake_case names, unchecked.\n\nRows are of the kind searched; their fields are those of the typed action for that kind.\n\nA limit above LinkedIn's page size for the kind searched is brought down to it: 10 for ordinary people and companies, 49 for posts, 50 for jobs, 100 on Sales Navigator and Recruiter. A pasted ordinary link does not say its kind and is held to 50.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["classic/people","classic/companies","classic/posts","classic/jobs","sales_navigator/people","sales_navigator/companies","recruiter/people"],"description":"What to search. Required unless url is given."},"filters":{"type":"object","properties":{},"description":"The search filters for that kind, e.g. { keywords: \"head of sales\", network_distance: [2], location: [\"106967730\"] }."},"url":{"type":"string","format":"uri","description":"A LinkedIn / Sales Navigator / Recruiter search URL to run instead of kind + filters."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"url":"https://www.linkedin.com/search/results/people/?keywords=head%20of%20sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].publicIdentifier, results[].publicProfileUrl, results[].profileUrl, results[].profilePictureUrl, results[].profilePictureUrlLarge, results[].memberUrn, results[].name, results[].firstName, results[].lastName, results[].networkDistance, results[].location, results[].industry, results[].keywordsMatch, results[].headline, results[].connectionsCount, results[].followersCount, results[].pendingInvitation, results[].canSendInmail, results[].hiddenCandidate, results[].interestLikelihood, results[].recruiterCandidateId, results[].recruiterPipelineCategory, results[].premium, results[].verified, results[].sharedConnectionsCount, results[].recentPostsCount, results[].recentlyHired, results[].mentionedInTheNews, results[].interests, results[].summary, results[].jobOffersCount, results[].headcount, results[].socialId, results[].shareUrl, results[].title, results[].text, results[].date, results[].parsedDatetime, results[].reactionCounter, results[].commentCounter, results[].repostCounter, results[].impressionsCounter, results[].userReacted, results[].isRepost, results[].repostId, results[].repostParsedDatetime, results[].referenceId, results[].postedAt, results[].reposted, results[].url, results[].promoted, results[].benefits, results[].easyApply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/lookup_search_ids":{"post":{"operationId":"lookup_search_ids","summary":"Look up the id for a search filter","description":"Find LinkedIn's id for a place, company, school, industry, job title and the like, by name.\n\nAn id is good only for filters that ask for the same type: a LOCATION id is not a REGION id.\n\nservice selects which product's list is searched. Some types exist only for Sales Navigator (SALES_INDUSTRY, POSTAL_CODE, PERSONA, ACCOUNT_LISTS, LEAD_LISTS, TECHNOLOGIES, SAVED_ACCOUNTS, RECENT_SEARCHES), only for Recruiter (HIRING_PROJECTS, SAVED_FILTERS, DEGREE), or for those two and not ordinary LinkedIn (GROUPS, DEPARTMENT, SAVED_SEARCHES).\n\nIt has no cursor: narrow the keywords instead.\n\nDocs: https://heyreagent.com/docs/actions/lookup_search_ids","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["LOCATION","REGION","PEOPLE","CONNECTIONS","COMPANY","SCHOOL","INDUSTRY","SERVICE","JOB_FUNCTION","JOB_TITLE","EMPLOYMENT_TYPE","SKILL","LANGUAGE","POST_JOB_FUNCTION","SENIORITY","GROUPS","SALES_INDUSTRY","DEPARTMENT","PERSONA","ACCOUNT_LISTS","LEAD_LISTS","TECHNOLOGIES","SAVED_ACCOUNTS","SAVED_SEARCHES","RECENT_SEARCHES","POSTAL_CODE","HIRING_PROJECTS","SAVED_FILTERS","DEGREE"],"description":"What kind of thing to look up."},"keywords":{"type":"string","maxLength":200,"description":"The name to look for, e.g. \"Berlin\" or \"Software\". Not used for EMPLOYMENT_TYPE."},"service":{"type":"string","enum":["CLASSIC","SALES_NAVIGATOR","RECRUITER"],"description":"Whose list to search (default CLASSIC)."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["type"]},"example":{"type":"LOCATION","keywords":"Berlin"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, matches[].id, matches[].title, matches[].pictureUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_people":{"post":{"operationId":"search_linkedin_people","summary":"Search people, every filter typed","description":"Search people on ordinary LinkedIn, with each LinkedIn filter as its own typed input.\n\nAt most 10 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 1,000 rows for one search; narrow the filters to reach the rest.\n\nnetworkDistance in a row is defined as DISTANCE_1 / DISTANCE_2 / DISTANCE_3 (a published sample row also shows OUT_OF_NETWORK), while a profile reports FIRST_DEGREE / SECOND_DEGREE / THIRD_DEGREE for the same thing: do not compare the two as text.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_people","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Name, title, company or any words."},"industry":{"type":"array","items":{"type":"string"},"description":"Industries: ids from lookup_search_ids type INDUSTRY."},"location":{"type":"array","items":{"type":"string"},"description":"Places: ids from lookup_search_ids type LOCATION."},"profileLanguage":{"type":"array","items":{"type":"string","maxLength":2},"description":"Profile languages, as two-letter codes such as \"en\"."},"networkDistance":{"type":"array","items":{"description":"one of: 1, 2, 3"},"description":"Connection degrees from you: 1, 2, 3."},"company":{"type":"array","items":{"type":"string"},"description":"Current companies: ids from lookup_search_ids type COMPANY."},"pastCompany":{"type":"array","items":{"type":"string"},"description":"Past companies: ids from lookup_search_ids type COMPANY."},"school":{"type":"array","items":{"type":"string"},"description":"Schools: ids from lookup_search_ids type SCHOOL."},"service":{"type":"array","items":{"type":"string"},"description":"Service categories they offer: ids from lookup_search_ids type SERVICE."},"connectionsOf":{"type":"array","items":{"type":"string"},"description":"People whose connections to search: ids from lookup_search_ids type CONNECTIONS."},"followersOf":{"type":"array","items":{"type":"string"},"description":"People whose followers to search: ids from lookup_search_ids type PEOPLE."},"openTo":{"type":"array","items":{"type":"string","enum":["proBono","boardMember"]},"description":"Open to pro bono work or to a board seat."},"advancedKeywords":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"title":{"type":"string"},"company":{"type":"string"},"school":{"type":"string"}},"description":"Words that must appear in one part of the profile: first name, last name, title, company or school."},"limit":{"type":"number","minimum":1,"maximum":10,"description":"How many to return (1–10, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"head of sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].publicIdentifier, results[].publicProfileUrl, results[].profileUrl, results[].profilePictureUrl, results[].profilePictureUrlLarge, results[].memberUrn, results[].name, results[].firstName, results[].lastName, results[].networkDistance, results[].location, results[].industry, results[].keywordsMatch, results[].headline, results[].connectionsCount, results[].followersCount, results[].pendingInvitation, results[].canSendInmail, results[].hiddenCandidate, results[].interestLikelihood, results[].recruiterCandidateId, results[].recruiterPipelineCategory, results[].premium, results[].verified, results[].sharedConnectionsCount, results[].recentPostsCount, results[].recentlyHired, results[].mentionedInTheNews, results[].interests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_companies":{"post":{"operationId":"search_linkedin_companies","summary":"Search companies, every filter typed","description":"Search company pages on ordinary LinkedIn, with each LinkedIn filter as its own typed input.\n\nAt most 10 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 1,000 rows for one search; narrow the filters to reach the rest.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_companies","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for."},"industry":{"type":"array","items":{"type":"string"},"description":"Industries: ids from lookup_search_ids type INDUSTRY."},"location":{"type":"array","items":{"type":"string"},"description":"Places: ids from lookup_search_ids type LOCATION."},"hasJobOffers":{"type":"boolean","description":"Only companies with job listings on LinkedIn."},"headcount":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 1, 11, 51, 201, 501, 1001, 5001, 10001"},"max":{"description":"one of: 1, 10, 50, 200, 500, 1000, 5000, 10000"}}},"description":"Company sizes, as LinkedIn's own bands, e.g. { min: 51, max: 200 }."},"networkDistance":{"type":"array","items":{"description":"one of: 1, 2, 3"},"description":"Connection degrees from you: 1, 2, 3."},"limit":{"type":"number","minimum":1,"maximum":10,"description":"How many to return (1–10, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"software"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].name, results[].location, results[].profileUrl, results[].industry, results[].summary, results[].followersCount, results[].jobOffersCount, results[].headcount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_posts":{"post":{"operationId":"search_linkedin_posts","summary":"Search posts, every filter typed","description":"Search posts on LinkedIn, with each LinkedIn filter as its own typed input.\n\nAt most 49 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 1,000 rows for one search; narrow the filters to reach the rest.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_posts","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for."},"sortBy":{"type":"string","enum":["relevance","date"],"description":"Order (default relevance)."},"datePosted":{"type":"string","enum":["past_day","past_week","past_month"],"description":"How recent."},"contentType":{"type":"string","enum":["videos","images","live_videos","collaborative_articles","documents","jobs"],"description":"Only posts with this kind of content."},"postedBy":{"type":"object","properties":{"member":{"type":"array","items":{"type":"string"},"description":"People: ids from lookup_search_ids type PEOPLE."},"company":{"type":"array","items":{"type":"string"},"description":"Company pages: ids from lookup_search_ids type COMPANY."},"me":{"type":"boolean"},"firstConnections":{"type":"boolean"},"peopleYouFollow":{"type":"boolean"}},"description":"Who posted it: given people, given company pages, you, your 1st-degree connections, or people you follow."},"mentioning":{"type":"object","properties":{"member":{"type":"array","items":{"type":"string"},"description":"People: ids from lookup_search_ids type PEOPLE."},"company":{"type":"array","items":{"type":"string"},"description":"Company pages: ids from lookup_search_ids type COMPANY."}},"description":"Posts that mention these people or company pages."},"author":{"type":"object","properties":{"industry":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type INDUSTRY."},"company":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type COMPANY."},"keywords":{"type":"string","description":"Words in the author's headline."}},"description":"Who the author is: their industry, their company, or words in their headline."},"limit":{"type":"number","minimum":1,"maximum":49,"description":"How many to return (1–49, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"outbound sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].socialId, results[].shareUrl, results[].title, results[].text, results[].date, results[].parsedDatetime, results[].reactionCounter, results[].commentCounter, results[].repostCounter, results[].impressionsCounter, results[].userReacted, results[].isRepost, results[].repostId, results[].repostParsedDatetime.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_jobs":{"post":{"operationId":"search_linkedin_jobs","summary":"Search jobs, every filter typed","description":"Search job listings on LinkedIn, with each LinkedIn filter as its own typed input.\n\nAt most 50 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 1,000 rows for one search; narrow the filters to reach the rest.\n\nA row's id is a public job listing. The job-posting actions here act on your OWN postings and are not documented to take it.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_jobs","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for."},"sortBy":{"type":"string","enum":["relevance","date"],"description":"Order (default relevance)."},"datePosted":{"type":"number","description":"Posted within this many days."},"region":{"type":"string","description":"A country or region: an id from lookup_search_ids type LOCATION."},"location":{"type":"array","items":{"type":"string"},"description":"Places: ids from lookup_search_ids type LOCATION."},"locationWithinArea":{"type":"number","description":"Miles around the location."},"industry":{"type":"array","items":{"type":"string"},"description":"Industries: ids from lookup_search_ids type INDUSTRY."},"seniority":{"type":"array","items":{"type":"string","enum":["executive","director","mid_senior","associate","entry","intern"]},"description":"Experience levels."},"function":{"type":"array","items":{"type":"string"},"description":"Job functions: ids from lookup_search_ids type JOB_FUNCTION."},"role":{"type":"array","items":{"type":"string"},"description":"Job titles: ids from lookup_search_ids type JOB_TITLE."},"jobType":{"type":"array","items":{"type":"string","enum":["full_time","part_time","contract","temporary","volunteer","internship","other"]},"description":"Job types."},"company":{"type":"array","items":{"type":"string"},"description":"Companies: ids from lookup_search_ids type COMPANY."},"presence":{"type":"array","items":{"type":"string","enum":["on_site","hybrid","remote"]},"description":"On site, hybrid or remote."},"easyApply":{"type":"boolean","description":"Only Easy Apply jobs."},"hasVerifications":{"type":"boolean","description":"Only jobs with verifications."},"under10Applicants":{"type":"boolean","description":"Only jobs with fewer than 10 applicants."},"inYourNetwork":{"type":"boolean","description":"Only jobs at companies where you know someone."},"fairChanceEmployer":{"type":"boolean","description":"Only fair-chance employers."},"benefits":{"type":"array","items":{"type":"string","enum":["medical_insurance","vision_insurance","dental_insurance","disability_insurance","401(k)","pension_plan","paid_maternity_leave","paid_paternity_leave","commuter_benefits","student_loan_assistance","tuition_assistance"]},"description":"Benefits offered."},"commitments":{"type":"array","items":{"type":"string","enum":["career_growth_and_learning","diversity_equity_and_inclusion","environmental_sustainability","social_impact","work_life_balance"]},"description":"Company commitments."},"minimumSalary":{"type":"object","properties":{"currency":{"type":"string","enum":["USD","AUD","CAD"]},"value":{"description":"one of: 40, 60, 80, 100, 120, 140, 160, 180, 200"}},"required":["currency","value"],"description":"Lowest yearly salary, in thousands: one of LinkedIn's own steps for that currency."},"limit":{"type":"number","minimum":1,"maximum":50,"description":"How many to return (1–50, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"software engineer"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].referenceId, results[].title, results[].location, results[].postedAt, results[].reposted, results[].url, results[].promoted, results[].benefits, results[].easyApply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_sales_navigator_people":{"post":{"operationId":"search_linkedin_sales_navigator_people","summary":"Search people in my Sales Navigator, every filter typed","description":"Search people in Sales Navigator on your own seat, with each Sales Navigator filter as its own typed input.\n\nAt most 100 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 2,500 rows for one search; narrow the filters to reach the rest.\n\nNeeds a Sales Navigator seat on your own LinkedIn account.\n\nLook filter ids up with lookup_search_ids service SALES_NAVIGATOR: that input selects which product's list is searched.\n\nnetworkDistance in a row is defined as DISTANCE_1 / DISTANCE_2 / DISTANCE_3 (a published sample row also shows OUT_OF_NETWORK), while a profile reports FIRST_DEGREE / SECOND_DEGREE / THIRD_DEGREE for the same thing: do not compare the two as text.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_sales_navigator_people","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for."},"lastViewedAt":{"type":"number","description":"With savedSearchId: only results newer than this moment (Unix time)."},"savedSearchId":{"type":"string","description":"Run one of your saved searches; it replaces every other filter: an id from lookup_search_ids type SAVED_SEARCHES, service SALES_NAVIGATOR."},"recentSearchId":{"type":"string","description":"Run one of your recent searches again; it replaces every other filter: an id from lookup_search_ids type RECENT_SEARCHES, service SALES_NAVIGATOR."},"location":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type REGION, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type REGION, service SALES_NAVIGATOR."}},"description":"Places to include and to leave out."},"locationByPostalCode":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type POSTAL_CODE, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type POSTAL_CODE, service SALES_NAVIGATOR."},"withinArea":{"type":"number","description":"Miles around the postal code."}},"description":"Postal codes to include and to leave out."},"industry":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SALES_INDUSTRY, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SALES_INDUSTRY, service SALES_NAVIGATOR."}},"description":"Industries to include and to leave out."},"firstName":{"type":"string","description":"First name."},"lastName":{"type":"string","description":"Last name."},"tenure":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 0, 1, 3, 6, 10"},"max":{"description":"one of: 1, 2, 5, 10"}}},"description":"Years of experience, as LinkedIn's own bands, e.g. { min: 3, max: 5 }."},"groups":{"type":"array","items":{"type":"string"},"description":"LinkedIn groups: ids from lookup_search_ids type GROUPS, service SALES_NAVIGATOR."},"school":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SCHOOL, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SCHOOL, service SALES_NAVIGATOR."}},"description":"Schools to include and to leave out."},"profileLanguage":{"type":"array","items":{"type":"string","maxLength":2},"description":"Profile languages, as two-letter codes such as \"en\"."},"company":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type COMPANY, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type COMPANY, service SALES_NAVIGATOR."}},"description":"Current companies to include and to leave out."},"companyHeadcount":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 1, 11, 51, 201, 501, 1001, 5001, 10001"},"max":{"description":"one of: 1, 10, 50, 200, 500, 1000, 5000, 10000"}}},"description":"Company sizes, as LinkedIn's own bands, e.g. { min: 51, max: 200 }."},"companyType":{"type":"array","items":{"type":"string","enum":["public_company","privately_held","non_profit","educational_institution","partnership","self_employed","self_owned","government_agency"]},"description":"Company types."},"companyLocation":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type REGION, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type REGION, service SALES_NAVIGATOR."}},"description":"Company headquarters places to include and to leave out."},"tenureAtCompany":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 0, 1, 3, 6, 10"},"max":{"description":"one of: 1, 2, 5, 10"}}},"description":"Years in the current company, as LinkedIn's own bands."},"pastCompany":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type COMPANY, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type COMPANY, service SALES_NAVIGATOR."}},"description":"Past companies to include and to leave out."},"function":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEPARTMENT, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEPARTMENT, service SALES_NAVIGATOR."}},"description":"Job functions to include and to leave out."},"role":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type JOB_TITLE, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type JOB_TITLE, service SALES_NAVIGATOR."}},"description":"Current job titles to include and to leave out."},"tenureAtRole":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 0, 1, 3, 6, 10"},"max":{"description":"one of: 1, 2, 5, 10"}}},"description":"Years in the current position, as LinkedIn's own bands."},"seniority":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string","enum":["owner/partner","cxo","vice_president","director","experienced_manager","entry_level_manager","strategic","senior","entry_level","in_training"]}},"exclude":{"type":"array","items":{"type":"string","enum":["owner/partner","cxo","vice_president","director","experienced_manager","entry_level_manager","strategic","senior","entry_level","in_training"]}}},"description":"Seniority levels to include and to leave out."},"pastRole":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type JOB_TITLE, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type JOB_TITLE, service SALES_NAVIGATOR."}},"description":"Past job titles to include and to leave out."},"followingYourCompany":{"type":"boolean","description":"Only people who follow your company."},"viewedYourProfileRecently":{"type":"boolean","description":"Only people who viewed your profile recently."},"networkDistance":{"type":"array","items":{"description":"one of: 1, 2, 3, or exactly: GROUP"},"description":"Connection degrees from you (1, 2, 3) or \"GROUP\" for people in your groups."},"connectionsOf":{"type":"array","items":{"type":"string"},"description":"People whose connections to search: ids from lookup_search_ids type PEOPLE, service SALES_NAVIGATOR."},"pastColleague":{"type":"boolean","description":"Only past colleagues."},"sharedExperiences":{"type":"boolean","description":"Only people you share experiences with."},"changedJobs":{"type":"boolean","description":"Only people who changed jobs recently."},"postedOnLinkedin":{"type":"boolean","description":"Only people who posted on LinkedIn recently."},"mentionnedInNews":{"type":"boolean","description":"Only people mentioned in the news recently."},"persona":{"type":"array","items":{"type":"string"},"description":"Your Sales Navigator personas: ids from lookup_search_ids type PERSONA, service SALES_NAVIGATOR."},"accountLists":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type ACCOUNT_LISTS, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type ACCOUNT_LISTS, service SALES_NAVIGATOR."}},"description":"Your account lists (an id, or \"ALL\") to include and to leave out."},"leadLists":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type LEAD_LISTS, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type LEAD_LISTS, service SALES_NAVIGATOR."}},"description":"Your lead lists (an id, or \"ALL\") to include and to leave out."},"viewedProfileRecently":{"type":"boolean","description":"Only people whose profile you viewed recently."},"messagedRecently":{"type":"boolean","description":"Only people you messaged recently."},"includeSavedLeads":{"type":"boolean","description":"Include your saved leads."},"includeSavedAccounts":{"type":"boolean","description":"Include people at your saved accounts."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"head of sales"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].publicIdentifier, results[].publicProfileUrl, results[].profileUrl, results[].profilePictureUrl, results[].profilePictureUrlLarge, results[].memberUrn, results[].name, results[].firstName, results[].lastName, results[].networkDistance, results[].location, results[].industry, results[].keywordsMatch, results[].headline, results[].connectionsCount, results[].followersCount, results[].pendingInvitation, results[].canSendInmail, results[].hiddenCandidate, results[].interestLikelihood, results[].recruiterCandidateId, results[].recruiterPipelineCategory, results[].premium, results[].verified, results[].sharedConnectionsCount, results[].recentPostsCount, results[].recentlyHired, results[].mentionedInTheNews, results[].interests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_sales_navigator_companies":{"post":{"operationId":"search_linkedin_sales_navigator_companies","summary":"Search companies in my Sales Navigator, every filter typed","description":"Search companies in Sales Navigator on your own seat, with each Sales Navigator filter as its own typed input.\n\nAt most 100 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 1,000 rows for one search; narrow the filters to reach the rest.\n\nNeeds a Sales Navigator seat on your own LinkedIn account.\n\nLook filter ids up with lookup_search_ids service SALES_NAVIGATOR: that input selects which product's list is searched.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_sales_navigator_companies","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for."},"lastViewedAt":{"type":"number","description":"With savedSearchId: only results newer than this moment (Unix time)."},"savedSearchId":{"type":"string","description":"Run one of your saved searches; it replaces every other filter: an id from lookup_search_ids type SAVED_SEARCHES, service SALES_NAVIGATOR."},"recentSearchId":{"type":"string","description":"Run one of your recent searches again; it replaces every other filter: an id from lookup_search_ids type RECENT_SEARCHES, service SALES_NAVIGATOR."},"industry":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SALES_INDUSTRY, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type SALES_INDUSTRY, service SALES_NAVIGATOR."}},"description":"Industries to include and to leave out."},"location":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type LOCATION, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type LOCATION, service SALES_NAVIGATOR."}},"description":"Headquarters places to include and to leave out."},"locationByPostalCode":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type POSTAL_CODE, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type POSTAL_CODE, service SALES_NAVIGATOR."},"withinArea":{"type":"number","description":"Miles around the postal code."}},"description":"Postal codes to include and to leave out."},"hasJobOffers":{"type":"boolean","description":"Only companies hiring on LinkedIn."},"headcount":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 1, 11, 51, 201, 501, 1001, 5001, 10001"},"max":{"description":"one of: 1, 10, 50, 200, 500, 1000, 5000, 10000"}}},"description":"Company sizes, as LinkedIn's own bands, e.g. { min: 51, max: 200 }."},"headcountGrowth":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"Headcount growth, in percent."},"departmentHeadcount":{"type":"object","properties":{"department":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEPARTMENT, service SALES_NAVIGATOR."},"min":{"type":"number"},"max":{"type":"number"}},"required":["department"],"description":"How many people work in given departments."},"departmentHeadcountGrowth":{"type":"object","properties":{"department":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEPARTMENT, service SALES_NAVIGATOR."},"min":{"type":"number"},"max":{"type":"number"}},"required":["department"],"description":"How fast given departments are growing, in percent."},"networkDistance":{"type":"array","items":{"description":"one of: 1, 2, 3"},"description":"Connection degrees from you: 1, 2, 3."},"annualRevenue":{"type":"object","properties":{"currency":{"type":"string","maxLength":3,"description":"Three-letter currency code, e.g. \"USD\"."},"min":{"description":"one of: 0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000, 1001"},"max":{"description":"one of: 0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000, 1001"}},"required":["currency","min","max"],"description":"Yearly revenue in millions, as LinkedIn's own steps. For \"1000+\" set max to 1001."},"followersCount":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 1, 51, 101, 1001, 5001"},"max":{"description":"one of: 50, 100, 1000, 5000"}}},"description":"Number of followers, as LinkedIn's own bands."},"fortune":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 0, 51, 101, 251"},"max":{"description":"one of: 50, 100, 250, 500"}}},"description":"Fortune ranking, as LinkedIn's own bands."},"technologies":{"type":"array","items":{"type":"string"},"description":"Technologies the company uses: ids from lookup_search_ids type TECHNOLOGIES, service SALES_NAVIGATOR."},"recentActivities":{"type":"array","items":{"type":"string","enum":["senior_leadership_changes","funding_events"]},"description":"Only companies with these recent events."},"savedAccounts":{"type":"array","items":{"type":"string"},"description":"Your saved accounts: ids from lookup_search_ids type SAVED_ACCOUNTS, service SALES_NAVIGATOR."},"accountLists":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type ACCOUNT_LISTS, service SALES_NAVIGATOR."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type ACCOUNT_LISTS, service SALES_NAVIGATOR."}},"description":"Your account lists (an id, or \"ALL\") to include and to leave out."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"software"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].name, results[].location, results[].profileUrl, results[].industry, results[].summary, results[].followersCount, results[].jobOffersCount, results[].headcount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_linkedin_recruiter_people":{"post":{"operationId":"search_linkedin_recruiter_people","summary":"Search candidates in my Recruiter, every filter typed","description":"Search candidates in Recruiter on your own seat, with each Recruiter filter as its own typed input.\n\nAt most 100 rows per call: LinkedIn's page size for this search.\n\nLinkedIn returns at most 2,500 rows for one search; narrow the filters to reach the rest.\n\nNeeds a Recruiter seat on your own LinkedIn account.\n\nLook filter ids up with lookup_search_ids service RECRUITER: that input selects which product's list is searched.\n\nnetworkDistance in a row is defined as DISTANCE_1 / DISTANCE_2 / DISTANCE_3 (a published sample row also shows OUT_OF_NETWORK), while a profile reports FIRST_DEGREE / SECOND_DEGREE / THIRD_DEGREE for the same thing: do not compare the two as text.\n\nA Recruiter row often has no publicIdentifier and no profile link: its id is the only handle, and only Recruiter actions take it.\n\nDocs: https://heyreagent.com/docs/actions/search_linkedin_recruiter_people","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Words to search for. AND, OR and NOT may be used, e.g. developers AND product owners NOT managers."},"locale":{"type":"string","enum":["arabic","bangla","czech","danish","german","greek","english","spanish","persian","finnish","french","hindi","hungarian","indonesian","italian","hebrew","japanese","korean","marathi","malay","dutch","norwegian","punjabi","polish","portuguese","romanian","russian","swedish","telugu","thai","tagalog","turkish","ukrainian","vietnamese","chinese_simplified","chinese_traditional"],"description":"The language your Recruiter is set to, when results look inconsistent."},"savedSearch":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type SAVED_SEARCHES, service RECRUITER."},"projectId":{"type":"string","description":"The project that saved search belongs to, from lookup_search_ids type SAVED_SEARCHES, service RECRUITER."},"newestResultsOnly":{"type":"boolean"}},"required":["id","projectId"],"description":"Run one of your saved searches; it replaces every other filter."},"savedFilter":{"type":"string","description":"One of your saved filters: an id from lookup_search_ids type SAVED_FILTERS, service RECRUITER."},"location":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type LOCATION, service RECRUITER."},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"scope":{"type":"string","enum":["CURRENT","OPEN_TO_RELOCATE_ONLY","CURRENT_OR_OPEN_TO_RELOCATE"]},"title":{"type":"string","description":"The title that came with the id in lookup_search_ids."}},"required":["id"]},"description":"Places. DOESNT_HAVE cannot be combined with locationWithinArea."},"locationWithinArea":{"type":"number","description":"Miles around the location."},"industry":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type INDUSTRY, service RECRUITER."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type INDUSTRY, service RECRUITER."}},"description":"Industries to include and to leave out."},"role":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type JOB_TITLE, service RECRUITER."},"isSelection":{"type":"boolean","description":"true: only people with exactly this title. false: also similar titles."},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"scope":{"type":"string","enum":["CURRENT_OR_PAST","CURRENT","PAST","PAST_NOT_CURRENT","OPEN_TO_WORK"]},"keywords":{"type":"string"}},"required":["id","isSelection","keywords"]},"description":"Job titles: each one by id or by keywords."},"skills":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type SKILL, service RECRUITER."},"title":{"type":"string"},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"keywords":{"type":"string"}},"required":["id","keywords"]},"description":"Skills: each one by id or by keywords."},"company":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type COMPANY, service RECRUITER."},"name":{"type":"string"},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"scope":{"type":"string","enum":["CURRENT_OR_PAST","CURRENT","PAST","PAST_NOT_CURRENT"]},"keywords":{"type":"string"}},"required":["id","keywords"]},"description":"Companies: each one by id or by keywords."},"companyHeadcount":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 1, 11, 51, 201, 501, 1001, 5001, 10001"},"max":{"description":"one of: 1, 10, 50, 200, 500, 1000, 5000, 10000"}}},"description":"Company sizes, as LinkedIn's own bands, e.g. { min: 51, max: 200 }."},"currentCompany":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type COMPANY, service RECRUITER."},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]}},"required":["id"]},"description":"Current companies."},"pastCompany":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type COMPANY, service RECRUITER."},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]}},"required":["id"]},"description":"Past companies."},"school":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"An id from lookup_search_ids type SCHOOL, service RECRUITER."},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]}},"required":["id"]},"description":"Schools."},"degree":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEGREE, service RECRUITER."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type DEGREE, service RECRUITER."}},"description":"Degrees to include and to leave out."},"employmentType":{"type":"array","items":{"type":"string","enum":["FULL_TIME","PART_TIME","CONTRACT","INTERNSHIP"]},"description":"Employment types. Recruiter PRO contracts only."},"groups":{"type":"array","items":{"type":"string"},"description":"LinkedIn groups: ids from lookup_search_ids type GROUPS, service RECRUITER."},"graduationYear":{"type":"object","properties":{"min":{"type":"number","minimum":1000,"maximum":9999},"max":{"type":"number","minimum":1000,"maximum":9999}},"description":"Graduation years, from and to."},"tenure":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"Years of experience, from and to."},"tenureInCompany":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"Years in the current company, from and to."},"tenureInPosition":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"Years in the current position, from and to."},"seniority":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string","enum":["owner","partner","cxo","vp","director","manager","senior","entry","training","unpaid"]}},"exclude":{"type":"array","items":{"type":"string","enum":["owner","partner","cxo","vp","director","manager","senior","entry","training","unpaid"]}}},"description":"Seniority levels to include and to leave out."},"function":{"type":"array","items":{"type":"string"},"description":"Job functions: ids from lookup_search_ids type DEPARTMENT, service RECRUITER."},"networkDistance":{"type":"array","items":{"description":"one of: 1, 2, 3, or exactly: GROUP"},"description":"Connection degrees from you (1, 2, 3) or \"GROUP\" for people in your groups."},"spokenLanguages":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"scope":{"type":"string","enum":["ELEMENTARY","LIMITED_WORKING","PROFESSIONAL_WORKING","FULL_PROFESSIONAL","NATIVE_OR_BILINGUAL"]}},"required":["language"]},"description":"Spoken languages and how well. Recruiter PRO contracts only."},"hidePreviouslyViewed":{"type":"object","properties":{"timespan":{"type":"number","description":"Days back."}},"required":["timespan"],"description":"Leave out people you viewed within this many days."},"profileLanguage":{"type":"array","items":{"type":"string","maxLength":2},"description":"Profile languages, as two-letter codes such as \"en\"."},"recentlyJoined":{"type":"array","items":{"type":"object","properties":{"min":{"description":"one of: 2, 8, 15, 31"},"max":{"description":"one of: 1, 7, 14, 30, 90"}}},"description":"Joined LinkedIn this many days ago, as LinkedIn's own bands."},"spotlights":{"type":"array","items":{"type":"string","enum":["OPEN_TO_WORK","ACTIVE_TALENT","REDISCOVERED_CANDIDATES","INTERNAL_CANDIDATES","INTERESTED_IN_YOUR_COMPANY","HAVE_COMPANY_CONNECTIONS"]},"description":"Spotlights. Advanced Recruiter subscriptions only."},"firstName":{"type":"array","items":{"type":"string"},"description":"First names."},"lastName":{"type":"array","items":{"type":"string"},"description":"Last names."},"hasMilitaryBackground":{"type":"boolean","description":"Only people with a US military background."},"pastApplicants":{"type":"boolean","description":"Only past applicants."},"hiringProjects":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type HIRING_PROJECTS, service RECRUITER."},"exclude":{"type":"array","items":{"type":"string"},"description":"Ids from lookup_search_ids type HIRING_PROJECTS, service RECRUITER."}},"description":"Your hiring projects to include and to leave out."},"recruitingActivity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["messages","tags","notes","projects","resumes","reviews"]},"priority":{"type":"string","enum":["CAN_HAVE","MUST_HAVE","DOESNT_HAVE"]},"timespan":{"type":"number","description":"Days back."}},"required":["id"]},"description":"People with, or without, this kind of activity from your team."},"notes":{"type":"array","items":{"type":"string"},"description":"Words in your team's notes on the person."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"keywords":"software engineer"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, results[].type, results[].id, results[].publicIdentifier, results[].publicProfileUrl, results[].profileUrl, results[].profilePictureUrl, results[].profilePictureUrlLarge, results[].memberUrn, results[].name, results[].firstName, results[].lastName, results[].networkDistance, results[].location, results[].industry, results[].keywordsMatch, results[].headline, results[].connectionsCount, results[].followersCount, results[].pendingInvitation, results[].canSendInmail, results[].hiddenCandidate, results[].interestLikelihood, results[].recruiterCandidateId, results[].recruiterPipelineCategory, results[].premium, results[].verified, results[].sharedConnectionsCount, results[].recentPostsCount, results[].recentlyHired, results[].mentionedInTheNews, results[].interests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_company":{"post":{"operationId":"get_company","summary":"Get a company page","description":"Read one company page.\n\ncompany also takes the page's name as it appears in its link (linkedin.com/company/<this>).\n\nDocs: https://heyreagent.com/docs/actions/get_company","tags":["Search"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"string","description":"The company: its LinkedIn page URL, its name as it appears in that URL, or its numeric id."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["company"]},"example":{"company":"PASTE_COMPANY_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, name, description, entityUrn, publicIdentifier, profileUrl, tagline, followersCount, isFollowing, isEmployee, hashtags[].title, messaging.isEnabled, messaging.id, messaging.entityUrn, claimed, viewerPermissions.canMembersInviteToFollow, viewerPermissions.canReadContentSuggestions, viewerPermissions.canReadMessages, viewerPermissions.canUpdateOrganizationProfile, viewerPermissions.canCreateOrganicShare, viewerPermissions.canReadAdminDashboard, viewerPermissions.canReadOrganizationActivity, viewerPermissions.canEditCurators, viewerPermissions.canManageOrganizationalPageFollow, viewerPermissions.canReadOrganizationFollowerAnalytics, viewerPermissions.canInviteMemberToFollow, viewerPermissions.canReadOrganizationLeadsAnalytics, viewerPermissions.canEditPendingAdministrators, viewerPermissions.canManageMessagingAccess, viewerPermissions.canSeeEmployeeExperienceAsMember, viewerPermissions.canEmployeesInviteToFollow, viewerPermissions.canSeeOrganizationAdministrativePage, viewerPermissions.canManageAdminRoles, viewerPermissions.canEditOrganizationDetails, viewerPermissions.canApproveContent, viewerPermissions.canViewTeamPerformance, viewerPermissions.canManageOrganizationSettings, viewerPermissions.canAccessAdvancedAnalytics, viewerPermissions.canModerateComments, viewerPermissions.canCreateAds, viewerPermissions.canManageAdBudgets, viewerPermissions.canEditPageTheme, viewerPermissions.canPublishNewsletters, viewerPermissions.canEditCustomTabs, viewerPermissions.canManageIntegrations, viewerPermissions.canAssignRoles, viewerPermissions.canApprovePendingMembers, viewerPermissions.canEditCareerPageSettings, viewerPermissions.canViewBillingInformation, organizationType, locations[].isHeadquarter, locations[].country, locations[].city, locations[].postalCode, locations[].street, locations[].description, locations[].area, logo, industry, activities, employeeCount, employeeCountRange.from, employeeCountRange.to, website, foundationDate, phone, acquiredBy.id, acquiredBy.name, acquiredBy.publicIdentifier, acquiredBy.profileUrl, crunchbaseFunding.lastUpdatedAt, crunchbaseFunding.companyUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_people_sales_navigator":{"post":{"operationId":"search_people_sales_navigator","summary":"Search people (Sales Navigator)","description":"Search people in Sales Navigator through a shared seat, by names of titles, places, industries and companies.\n\nconfirm false (the default) only previews: how many match and what it costs, no people. confirm true returns them and charges 0.02 credits a person.\n\naction is \"preview\", \"blocked\" or \"results\". leads, returned, creditsCharged and nextCursor are present only on \"results\"; estimatedCredits only on \"preview\".\n\nleads[].providerId is a Sales Navigator id (ACw…), not a member id. leads[].linkedinUrl is what the actions asking for a profile link take.\n\nA cursor lasts 24 hours and works only with the filters it was made with, or with none.\n\nFilters are names; companyIds is the one that takes ids.\n\nDocs: https://heyreagent.com/docs/actions/search_people_sales_navigator","tags":["Search"],"x-plan":"agent","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Free-text keywords searched across all profile fields (title, headline, about, company)."},"titles":{"type":"array","items":{"type":"string"},"description":"Job titles, e.g. [\"Chief Technology Officer\",\"VP of Engineering\"]. Matched as OR'd keywords — pass variants to go broad."},"locations":{"type":"array","items":{"type":"string"},"description":"Person locations in plain English, e.g. [\"United States\",\"London\"]. Resolved to LinkedIn regions automatically."},"industries":{"type":"array","items":{"type":"string"},"description":"Company industries in plain English, e.g. [\"Software\",\"Financial Services\"]."},"companies":{"type":"array","items":{"type":"string"},"description":"Current companies by name, e.g. [\"Google\",\"Stripe\"]. Each name is looked up and the top match used — when you already have LinkedIn company ids (search_companies / list_funding_signals return companyId), pass companyIds instead."},"companyIds":{"type":"array","items":{"description":"text, or a number"},"maxItems":100,"description":"Current companies by LinkedIn company id — the companyId values search_companies / list_funding_signals return (up to 100). Exact: no name lookup, so no same-name mix-ups. Combine with seniorities and changedJobs / postedOnLinkedIn to get the decision-makers at signal companies who just moved / are posting."},"functions":{"type":"array","items":{"type":"string"},"description":"Job functions/departments, e.g. [\"Engineering\",\"Sales\",\"Marketing\"]."},"seniorities":{"type":"array","items":{"type":"string"},"description":"Seniority levels, e.g. [\"CXO\",\"VP\",\"Director\",\"Manager\"] (owner/partner, cxo, vice_president, director, experienced_manager, entry_level_manager, strategic, senior, entry_level, in_training)."},"companyHeadcounts":{"type":"array","items":{"type":"string"},"description":"Company size bands. Valid: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+."},"changedJobs":{"type":"boolean","description":"Only people who recently changed jobs (buying signal)."},"postedOnLinkedIn":{"type":"boolean","description":"Only people who recently posted on LinkedIn (active/reachable signal)."},"companyMinRevenueMillions":{"type":"number","description":"Only people at companies with at least this annual revenue, in millions (e.g. 10 = $10M+) — use it to target companies that can afford the user's price. LinkedIn uses fixed brackets (0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000); other values widen to the nearest one. The companies are matched on the same industries / companyHeadcounts / locations (as HQ location). Revenue is LinkedIn's estimate — companies without one are left out."},"companyMaxRevenueMillions":{"type":"number","description":"Only people at companies with at most this annual revenue, in millions (e.g. 100 = up to $100M). Same brackets as companyMinRevenueMillions."},"revenueCurrency":{"type":"string","description":"ISO currency of the revenue band, e.g. \"USD\" (default), \"EUR\", \"GBP\"."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Max people to return THIS call (1–100, default 25). To exceed 100 total, page with cursor."},"cursor":{"type":"string","description":"Pagination cursor from a previous search_people_sales_navigator call's nextCursor — pass it back exactly as returned (it lasts 24 hours). Pass it with confirm:true to pull the NEXT batch — this is how you build a list larger than the 100/call cap. The cursor carries its search's filters, so pass the SAME filters or none. Omit for the first page."},"format":{"type":"string","enum":["table","csv"],"description":"table (default) = structured rows to render as a table. csv = also return an export-ready CSV string (columns: Name, Title, Company, Location, Industry, Shared Connections, Tenure in Role, LinkedIn URL) — use for large lists the user wants to save/hand off."},"confirm":{"type":"boolean","description":"false (default) = return the credit-cost estimate only (nothing charged). true = pull the people and charge credits after the user agreed. Continuation pages (with cursor) should pass confirm:true."}}},"example":{"titles":["Head of Sales"]}}}},"responses":{"200":{"description":"It worked. Inside result: action, matchCount, estimatedCredits, creditsCharged, yourBalance, returned, hasMore, nextCursor, leads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/count_people_sales_navigator":{"post":{"operationId":"count_people_sales_navigator","summary":"Count people (Sales Navigator)","description":"Count how many people match a Sales Navigator search, without returning them.\n\nFree, and the same filters as search_people_sales_navigator: use it to size a search before paying for one.\n\nDocs: https://heyreagent.com/docs/actions/count_people_sales_navigator","tags":["Search"],"x-plan":"agent","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keywords":{"type":"string","description":"Free-text keywords searched across all profile fields (title, headline, about, company)."},"titles":{"type":"array","items":{"type":"string"},"description":"Job titles, e.g. [\"Chief Technology Officer\",\"VP of Engineering\"]. Matched as OR'd keywords — pass variants to go broad."},"locations":{"type":"array","items":{"type":"string"},"description":"Person locations in plain English, e.g. [\"United States\",\"London\"]. Resolved to LinkedIn regions automatically."},"industries":{"type":"array","items":{"type":"string"},"description":"Company industries in plain English, e.g. [\"Software\",\"Financial Services\"]."},"companies":{"type":"array","items":{"type":"string"},"description":"Current companies by name, e.g. [\"Google\",\"Stripe\"]. Each name is looked up and the top match used — when you already have LinkedIn company ids (search_companies / list_funding_signals return companyId), pass companyIds instead."},"companyIds":{"type":"array","items":{"description":"text, or a number"},"maxItems":100,"description":"Current companies by LinkedIn company id — the companyId values search_companies / list_funding_signals return (up to 100). Exact: no name lookup, so no same-name mix-ups. Combine with seniorities and changedJobs / postedOnLinkedIn to get the decision-makers at signal companies who just moved / are posting."},"functions":{"type":"array","items":{"type":"string"},"description":"Job functions/departments, e.g. [\"Engineering\",\"Sales\",\"Marketing\"]."},"seniorities":{"type":"array","items":{"type":"string"},"description":"Seniority levels, e.g. [\"CXO\",\"VP\",\"Director\",\"Manager\"] (owner/partner, cxo, vice_president, director, experienced_manager, entry_level_manager, strategic, senior, entry_level, in_training)."},"companyHeadcounts":{"type":"array","items":{"type":"string"},"description":"Company size bands. Valid: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+."},"changedJobs":{"type":"boolean","description":"Only people who recently changed jobs (buying signal)."},"postedOnLinkedIn":{"type":"boolean","description":"Only people who recently posted on LinkedIn (active/reachable signal)."},"companyMinRevenueMillions":{"type":"number","description":"Only people at companies with at least this annual revenue, in millions (e.g. 10 = $10M+) — use it to target companies that can afford the user's price. LinkedIn uses fixed brackets (0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000); other values widen to the nearest one. The companies are matched on the same industries / companyHeadcounts / locations (as HQ location). Revenue is LinkedIn's estimate — companies without one are left out."},"companyMaxRevenueMillions":{"type":"number","description":"Only people at companies with at most this annual revenue, in millions (e.g. 100 = up to $100M). Same brackets as companyMinRevenueMillions."},"revenueCurrency":{"type":"string","description":"ISO currency of the revenue band, e.g. \"USD\" (default), \"EUR\", \"GBP\"."}}},"example":{"titles":["Head of Sales"]}}}},"responses":{"200":{"description":"It worked. Inside result: total, source, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/search_companies":{"post":{"operationId":"search_companies","summary":"Search companies","description":"Find companies in Sales Navigator through a shared seat, by industry, place, size and recent signals.\n\nThe total is totalCompanies; with recentFunding and recentLeadershipChange both true it is totalBySignal and withBothSignals instead.\n\nThere is no next page: narrow the filters.\n\nDocs: https://heyreagent.com/docs/actions/search_companies","tags":["Search"],"x-plan":"agent","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"industries":{"type":"array","items":{"type":"string"},"description":"Company industries, e.g. [\"Software\",\"Financial Services\"]."},"locations":{"type":"array","items":{"type":"string"},"description":"Company HQ locations, e.g. [\"United States\"]."},"headcounts":{"type":"array","items":{"type":"string"},"description":"Company size bands. Valid: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+."},"hiring":{"type":"boolean","description":"Only companies with open job posts right now (hiring signal)."},"growingTeamMinPct":{"type":"number","description":"Minimum headcount-growth percent, e.g. 20 = teams that grew ≥20%."},"minRevenueMillions":{"type":"number","description":"Minimum annual revenue in millions (e.g. 10 = $10M+). LinkedIn uses fixed brackets (0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000); other values widen to the nearest one. Revenue is LinkedIn's estimate — companies without one are left out."},"maxRevenueMillions":{"type":"number","description":"Maximum annual revenue in millions (same brackets)."},"revenueCurrency":{"type":"string","description":"Currency for the revenue band (default USD)."},"recentLeadershipChange":{"type":"boolean","description":"Only companies with a recent senior-leadership change (new-boss signal)."},"recentFunding":{"type":"boolean","description":"Only companies with a recent funding event (same as list_funding_signals)."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Max companies to return (1–100, default 20). Use 100 to feed the most companies to search_people_sales_navigator via companyIds."}}},"example":{"industries":["Software Development"]}}}},"responses":{"200":{"description":"It worked. Inside result: returned, source, filtersApplied, warnings, companies, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/find_decision_makers":{"post":{"operationId":"find_decision_makers","summary":"Find decision-makers at a company","description":"Find the people at one company by title, seniority and function, through a shared Sales Navigator seat.\n\nconfirm false (the default) only previews: how many match and what it costs, no people. confirm true returns them and charges 0.02 credits a person.\n\ncompany is a NAME. A company id passed there is searched as words; to search by id use search_people_sales_navigator with companyIds.\n\naction is \"preview\", \"blocked\" or \"results\". leads, returned and creditsCharged are present only on \"results\". There is no next page.\n\nDocs: https://heyreagent.com/docs/actions/find_decision_makers","tags":["Search"],"x-plan":"agent","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"string","description":"Company name, e.g. \"Stripe\". Resolved to the LinkedIn company automatically."},"titles":{"type":"array","items":{"type":"string"},"description":"Specific senior roles to target, e.g. [\"VP of Sales\",\"Head of Growth\"]. Omit for the full decision-maker set (C-level/VP/Director/Founder)."},"seniorities":{"type":"array","items":{"type":"string"},"description":"Narrow by seniority level, e.g. [\"CXO\",\"VP\",\"Director\"] (owner/partner, cxo, vice_president, director, experienced_manager, entry_level_manager, strategic, senior, entry_level, in_training)."},"functions":{"type":"array","items":{"type":"string"},"description":"Narrow by job function/department, e.g. [\"Sales\",\"Marketing\",\"Engineering\"]."},"locations":{"type":"array","items":{"type":"string"},"description":"Optional person locations to narrow to, e.g. [\"United States\"]."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Max people to return (1–100, default 15)."},"format":{"type":"string","enum":["table","csv"],"description":"table (default) = rows for a table. csv = also return an export-ready CSV string."},"confirm":{"type":"boolean","description":"false (default) = cost estimate only. true = pull and charge after the user agreed."}},"required":["company"]},"example":{"company":"Stripe"}}}},"responses":{"200":{"description":"It worked. Inside result: action, matchCount, estimatedCredits, creditsCharged, yourBalance, returned, leads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_funding_signals":{"post":{"operationId":"list_funding_signals","summary":"List recently funded companies","description":"List companies that recently raised funding, through a shared Sales Navigator seat.\n\nThere is no next page: narrow the filters.\n\nDocs: https://heyreagent.com/docs/actions/list_funding_signals","tags":["Search"],"x-plan":"agent","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"industries":{"type":"array","items":{"type":"string"},"description":"Company industries in plain English, e.g. [\"Software\",\"Financial Services\"]."},"locations":{"type":"array","items":{"type":"string"},"description":"Company HQ locations, e.g. [\"United States\",\"Europe\"]."},"headcounts":{"type":"array","items":{"type":"string"},"description":"Company size bands. Valid: self-employed, 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+."},"minRevenueMillions":{"type":"number","description":"Minimum annual revenue in millions (e.g. 10 = $10M+). LinkedIn uses fixed brackets (0, 0.2, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000); other values widen to the nearest one. Revenue is LinkedIn's estimate — companies without one are left out."},"maxRevenueMillions":{"type":"number","description":"Maximum annual revenue in millions (same brackets)."},"revenueCurrency":{"type":"string","description":"Currency for the revenue band (default USD)."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Max companies to return (1–100, default 20)."}}},"example":{"industries":["Software Development"]}}}},"responses":{"200":{"description":"It worked. Inside result: totalFundedCompanies, returned, source, filtersApplied, warnings, companies, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_recent_posts":{"post":{"operationId":"get_recent_posts","summary":"Get someone's recent posts","description":"Read one person's latest posts, through a shared account.\n\nPass profileUrl or providerId, one of them. providerId is faster: a link is first resolved to an id.\n\nPeople only. For a company page use list_posts_by_author with isCompany true.\n\nA post here has no socialId: pass its url to get_post, or straight to comment_on_post and react_to_post.\n\nDocs: https://heyreagent.com/docs/actions/get_recent_posts","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"profileUrl":{"type":"string","description":"LinkedIn profile URL of the person, e.g. a linkedinUrl from search_people_sales_navigator (\"https://linkedin.com/in/…\")."},"providerId":{"type":"string","description":"The person's providerId from search_people_sales_navigator (an ACwAA… id). Faster than profileUrl — skips the profile-resolution lookup."},"limit":{"type":"number","minimum":1,"maximum":20,"description":"Max recent posts to return (1–20, default 2: the newest plus a backup is usually all a personalized opener needs)."}}},"example":{"profileUrl":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, source, posts, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_post_engagers":{"post":{"operationId":"get_post_engagers","summary":"Get who engaged with a post","description":"List who reacted to and who commented on one post, together.\n\nAt most 100 of each, with no next page. list_post_reactions and list_post_comments page through all of them.\n\npostUrl takes the post's link or its socialId. A bare post id is refused.\n\nThe code that reads commenters says its field names were inferred and not checked against a real answer.\n\nDocs: https://heyreagent.com/docs/actions/get_post_engagers","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"postUrl":{"type":"string","description":"The LinkedIn post URL (activity/share/ugcPost URL)."},"connectionId":{"type":"string","description":"Which sender to read through. Omit to use the first live sender."},"maxReactions":{"type":"number","minimum":1,"maximum":100,"description":"Max reactors (likers) to return (1–100, default 100)."},"maxComments":{"type":"number","minimum":1,"maximum":100,"description":"Max commenters to return (1–100, default 100)."}},"required":["postUrl"]},"example":{"postUrl":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: summary, reactors, commenters, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/create_post":{"post":{"operationId":"create_post","summary":"Publish a post","description":"Publish one post, or repost one.\n\nNo published text says which form of id postId is. Pass it to get_post and use the socialId that comes back.\n\nA mention is written {{0}}, {{1}}, … in the text, by its position in mentions.\n\nrepost true and attachments (a count) are added to the answer when they apply.\n\nDocs: https://heyreagent.com/docs/actions/create_post","tags":["Posts"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":3000,"description":"The post text, exactly as it should appear. May be empty only for a plain repost."},"attachmentUrls":{"type":"array","items":{"type":"string","format":"uri"},"maxItems":9,"description":"Images, one video or one document to attach. Public https links; each file up to 10 MB, 20 MB in total."},"videoThumbnailUrl":{"type":"string","format":"uri","description":"Cover image for an attached video (a public https link)."},"repostOf":{"type":"string","description":"URL of an existing LinkedIn post to repost. With empty text it is a plain repost; with text, a repost with your thoughts."},"mentions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name as it should appear in the text."},"profileId":{"type":"string","description":"The LinkedIn member id of the person (starts with ACo or ADo), or the numeric id of a company."},"isCompany":{"type":"boolean","description":"True when the mention is a company."}},"required":["name","profileId"]},"maxItems":20,"description":"People or companies to mention. Put {{0}}, {{1}}, … in the text where each one goes (its position in this list)."},"link":{"type":"string","format":"uri","description":"A link to show as a preview card. It should also appear in the text; otherwise LinkedIn adds it at the end."},"jobPostingId":{"type":"string","description":"Id of one of your job postings to show as a card (from list_job_postings)."},"asOrganization":{"type":"string","description":"Act as a company page you administer instead of yourself: that page's numeric id. No action here lists the pages you administer."},"audience":{"type":"object","properties":{"language":{"type":"array","items":{"type":"string"}},"jobFunction":{"type":"array","items":{"type":"string"}},"school":{"type":"array","items":{"type":"string"}},"seniority":{"type":"array","items":{"type":"string"}},"industry":{"type":"array","items":{"type":"string"}},"region":{"type":"array","items":{"type":"string"}},"location":{"type":"array","items":{"type":"string"}},"headcount":{"type":"array","items":{"type":"object","properties":{}}}},"description":"Limit who sees the post (company-page posts). Each list holds LinkedIn ids from lookup_search_ids (types LANGUAGE, POST_JOB_FUNCTION, SCHOOL, SENIORITY, INDUSTRY, REGION, LOCATION); headcount is company-size ranges such as { min: 51, max: 200 }."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{"text":"Hello LinkedIn!"}}}},"responses":{"200":{"description":"It worked. Inside result: published, postId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/comment_on_post":{"post":{"operationId":"comment_on_post","summary":"Comment on a post","description":"Comment on one post, or answer one comment on it.\n\npostUrl takes the post's link or its socialId; the action resolves a link to the socialId itself. A bare post id is refused.\n\nDocs: https://heyreagent.com/docs/actions/comment_on_post","tags":["Posts"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"postUrl":{"type":"string","description":"The LinkedIn post URL."},"text":{"type":"string","maxLength":1250,"description":"The comment text."},"replyToCommentId":{"type":"string","description":"Id of a comment on that post to reply to (from list_post_comments)."},"mentions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name as it should appear in the text."},"profileId":{"type":"string","description":"The LinkedIn member id of the person (starts with ACo or ADo), or the numeric id of a company."},"isCompany":{"type":"boolean","description":"True when the mention is a company."}},"required":["name","profileId"]},"maxItems":20,"description":"People or companies to mention. Put {{0}}, {{1}}, … in the text where each one goes (its position in this list)."},"link":{"type":"string","format":"uri","description":"A link to show as a preview card. It should also appear in the text; otherwise LinkedIn adds it at the end."},"imageUrl":{"type":"string","format":"uri","description":"One image to attach (a public https link, up to 10 MB)."},"asOrganization":{"type":"string","description":"Act as a company page you administer instead of yourself: that page's numeric id. No action here lists the pages you administer."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["postUrl","text"]},"example":{"postUrl":"PASTE_POST_LINK_HERE","text":"Hello!"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, postUrl, asReply, commentId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/react_to_post":{"post":{"operationId":"react_to_post","summary":"React to a post","description":"React to one post, or to one comment on it.\n\npostUrl takes the post's link or its socialId. A bare post id is refused.\n\nYou send like / celebrate / support / love / insightful / funny; reading reactions back, LinkedIn names them LIKE / PRAISE / APPRECIATION / EMPATHY / INTEREST / ENTERTAINMENT.\n\nDocs: https://heyreagent.com/docs/actions/react_to_post","tags":["Posts"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"postUrl":{"type":"string","description":"The LinkedIn post URL."},"reaction":{"type":"string","enum":["like","celebrate","support","love","insightful","funny"],"description":"Which reaction to add (default like)."},"commentId":{"type":"string","description":"React to this comment on the post instead of the post itself (its id from list_post_comments)."},"asOrganization":{"type":"string","description":"Act as a company page you administer instead of yourself: that page's numeric id. No action here lists the pages you administer."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["postUrl"]},"example":{"postUrl":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: sent, postUrl, reaction, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_post":{"post":{"operationId":"get_post","summary":"Get a post","description":"Read one post.\n\nThis is how a post link becomes a socialId.\n\nauthor.id is null for some authors (the published sample shows it for a company page).\n\npermissions.canPostComments and permissions.canReact say whether a comment or a reaction will be accepted.\n\nDocs: https://heyreagent.com/docs/actions/get_post","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post":{"type":"string","description":"The LinkedIn post: its URL, or its id (socialId) from an earlier result."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["post"]},"example":{"post":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, socialId, shareUrl, title, text, date, parsedDatetime, reactionCounter, commentCounter, repostCounter, impressionsCounter, userReacted, author.publicIdentifier, author.id, author.name, author.isCompany, author.headline, author.profilePictureUrl, writtenBy.id, writtenBy.publicIdentifier, writtenBy.name, permissions.canReact, permissions.canShare, permissions.canPostComments, isRepost, repostId, repostParsedDatetime, repostedBy.publicIdentifier, repostedBy.id, repostedBy.name, repostedBy.isCompany, repostedBy.headline, repostedBy.profilePictureUrl, repostContent.id, repostContent.date, repostContent.parsedDatetime, repostContent.text, mentions[].url, mentions[].start, mentions[].length, attachments[].id, attachments[].fileSize, attachments[].unavailable, attachments[].mimetype, attachments[].url, attachments[].urlExpiresAt, attachments[].type, attachments[].sticker, attachments[].gif, attachments[].duration, attachments[].voiceNote, attachments[].fileName, attachments[].startsAt, attachments[].expiresAt, attachments[].timeRange, attachments[].displayName, attachments[].organization, poll.id, poll.totalVotesCount, poll.question, poll.isOpen, group.id, group.name, group.private, jobPosting.id, jobPosting.title, jobPosting.location, article.id, article.title, article.url, article.author, article.publishedAt, article.excerpt, article.pictureUrl, analytics.impressions, analytics.engagements, analytics.engagementRate, analytics.clicks, analytics.clickthroughRate, analytics.pageViewersFromThisPost, analytics.followersGainedFromThisPost, analytics.membersReached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_post_comments":{"post":{"operationId":"list_post_comments","summary":"List a post's comments","description":"List the comments on one post, or the replies to one comment.\n\nauthorDetails.id is not documented as any kind of id; use authorDetails.profileUrl to reach the person.\n\nDocs: https://heyreagent.com/docs/actions/list_post_comments","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post":{"type":"string","description":"The LinkedIn post: its URL, or its id (socialId) from an earlier result."},"commentId":{"type":"string","description":"List the replies to this comment instead of the post's top-level comments."},"sortBy":{"type":"string","enum":["MOST_RECENT","MOST_RELEVANT"],"description":"Order (default MOST_RECENT)."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 25)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["post"]},"example":{"post":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, comments[].id, comments[].postId, comments[].postUrn, comments[].threadId, comments[].author, comments[].authorDetails.profileUrl, comments[].date, comments[].text, comments[].pictureUrl, comments[].reactionCounter, comments[].replyCounter, comments[].impressionsCounter, comments[].userReacted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_post_reactions":{"post":{"operationId":"list_post_reactions","summary":"List a post's reactions","description":"List who reacted to one post, or to one comment on it.\n\nvalue is LIKE / PRAISE / APPRECIATION / EMPATHY / INTEREST / ENTERTAINMENT.\n\nauthor.type is INDIVIDUAL or COMPANY. For a COMPANY, author.id and author.profileUrl are the page's, not a person's.\n\nDocs: https://heyreagent.com/docs/actions/list_post_reactions","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post":{"type":"string","description":"The LinkedIn post: its URL, or its id (socialId) from an earlier result."},"commentId":{"type":"string","description":"List the reactions to this comment instead of the post."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 25)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["post"]},"example":{"post":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, reactions[].value, reactions[].postId, reactions[].commentId, reactions[].author.id, reactions[].author.profileUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_posts_by_author":{"post":{"operationId":"list_posts_by_author","summary":"List a person's or company's posts","description":"List the posts one person or one company page published, newest first.\n\nFor a company page pass its company id with isCompany true; a company link is not accepted.\n\nA profile link is first resolved to a member id, which LinkedIn counts as a profile view.\n\nDocs: https://heyreagent.com/docs/actions/list_posts_by_author","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"author":{"type":"string","description":"A LinkedIn profile URL or member id — or a company's numeric id."},"isCompany":{"type":"boolean","description":"True when author is a company id."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["author"]},"example":{"author":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, posts[].id, posts[].socialId, posts[].shareUrl, posts[].title, posts[].text, posts[].date, posts[].parsedDatetime, posts[].reactionCounter, posts[].commentCounter, posts[].repostCounter, posts[].impressionsCounter, posts[].userReacted, posts[].isRepost, posts[].repostId, posts[].repostParsedDatetime.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_comments_by_person":{"post":{"operationId":"list_comments_by_person","summary":"List the comments a person wrote","description":"List the comments one person wrote, newest first.\n\nNo published text says which form of post id a comment's postId is.\n\nDocs: https://heyreagent.com/docs/actions/list_comments_by_person","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"person":{"type":"string","description":"The person: a LinkedIn profile URL or member id."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["person"]},"example":{"person":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, comments[].id, comments[].postId, comments[].postUrn, comments[].threadId, comments[].author, comments[].date, comments[].text, comments[].pictureUrl, comments[].reactionCounter, comments[].replyCounter, comments[].impressionsCounter, comments[].userReacted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_reactions_by_person":{"post":{"operationId":"list_reactions_by_person","summary":"List what a person reacted to","description":"List the posts and comments one person reacted to, newest first.\n\nNo published text says which form of post id a reaction's postId is.\n\nDocs: https://heyreagent.com/docs/actions/list_reactions_by_person","tags":["Posts"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"person":{"type":"string","description":"The person: a LinkedIn profile URL or member id."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 10)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["person"]},"example":{"person":"PASTE_PROFILE_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, reactions[].value, reactions[].postId, reactions[].commentId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/save_lead":{"post":{"operationId":"save_lead","summary":"Save a Sales Navigator lead","description":"Save one person as a lead in your Sales Navigator.\n\nAn ordinary profile link or member id is refused: it does not carry the Sales Navigator id.\n\nLook listId up with lookup_search_ids type LEAD_LISTS, service SALES_NAVIGATOR.\n\nDocs: https://heyreagent.com/docs/actions/save_lead","tags":["Sales Navigator"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lead":{"type":"string","description":"The person's Sales Navigator lead URL, or their Sales Navigator id (ACw…)."},"listId":{"type":"string","description":"Save into this lead list (lookup_search_ids type LEAD_LISTS, service SALES_NAVIGATOR). Omit to save without a list."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["lead"]},"example":{"lead":"PASTE_SALES_NAVIGATOR_LEAD_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: saved, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_hiring_projects":{"post":{"operationId":"list_hiring_projects","summary":"List Recruiter hiring projects","description":"List your Recruiter hiring projects.\n\nDocs: https://heyreagent.com/docs/actions/list_hiring_projects","tags":["Recruiter"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"state":{"type":"array","items":{"type":"string","enum":["ACTIVE","ARCHIVED"]},"maxItems":2,"description":"Which projects (default ACTIVE)."},"sortBy":{"type":"string","enum":["NAME","FAVORITE","CREATED_TIME","ACCESSED_TIME","ENGAGED_TIME","ENGAGEMENT_COUNT"],"description":"Order by (default ACCESSED_TIME)."},"sortOrder":{"type":"string","enum":["ASCENDING","DESCENDING"],"description":"Default DESCENDING."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 25)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, projects[].id, projects[].name, projects[].archived, projects[].ownerName, projects[].ownerId, projects[].createdAt, projects[].jobPosting.id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_hiring_project":{"post":{"operationId":"get_hiring_project","summary":"Get a Recruiter hiring project","description":"Read one Recruiter hiring project.\n\nDocs: https://heyreagent.com/docs/actions/get_hiring_project","tags":["Recruiter"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","description":"The hiring project id (from list_hiring_projects)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["projectId"]},"example":{"projectId":"PASTE_HIRING_PROJECT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, name, archived, ownerName, ownerId, createdAt, jobPosting.id, jobPosting.state, jobPosting.title, jobPosting.description, jobPosting.company, jobPosting.companyId, jobPosting.location, jobPosting.applicantsCounter, jobPosting.viewsCounter, jobPosting.cost, jobPosting.createdAt, jobPosting.publishedAt, jobPosting.closedAt, jobPosting.applyUrl, jobPosting.salary, jobPosting.workplace, jobPosting.seniority, jobPosting.skills, jobPosting.functions, jobPosting.industries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/move_recruiter_candidate":{"post":{"operationId":"move_recruiter_candidate","summary":"Add or move a Recruiter candidate","description":"Put one person into a hiring project's pipeline, or move them to another stage.\n\nThe published definition calls the person's id only \"the ID of the user\"; that it is the Recruiter id is this tool's own wording.\n\nDocs: https://heyreagent.com/docs/actions/move_recruiter_candidate","tags":["Recruiter"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"candidateId":{"type":"string","description":"The person's Recruiter id (AE…)."},"action":{"type":"string","enum":["add_candidate","add_applicant","change_stage"],"description":"add_candidate: add someone you sourced. add_applicant: add someone who applied. change_stage: move someone already in the pipeline."},"hiringProjectId":{"type":"string","description":"The hiring project (from list_hiring_projects)."},"stage":{"type":"string","enum":["UNCONTACTED","CONTACTED","REPLIED"],"description":"The pipeline stage (default UNCONTACTED)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["candidateId","action","hiringProjectId"]},"example":{"candidateId":"PASTE_RECRUITER_ID_HERE","action":"add_candidate","hiringProjectId":"PASTE_HIRING_PROJECT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: done, candidateId, action, hiringProjectId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/reject_recruiter_applicant":{"post":{"operationId":"reject_recruiter_applicant","summary":"Reject a Recruiter applicant","description":"Reject one applicant in a hiring project, with a reason.\n\napplicantId is the person's Recruiter id, not the applicant id that list_job_applicants returns.\n\nDocs: https://heyreagent.com/docs/actions/reject_recruiter_applicant","tags":["Recruiter"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"applicantId":{"type":"string","description":"The applicant's Recruiter id (AE…)."},"hiringProjectId":{"type":"string","description":"The hiring project (from list_hiring_projects)."},"reason":{"type":"string","enum":["NOT_MEET_BASIC_QUALIFICATIONS","NOT_IN_DESIRED_LOCATION","MORE_QUALIFIED_CANDIDATES","WITHDREW_APPLICATION","NOT_CONSIDERED_OR_REASON_NOT_SPECIFIED"]},"notifyMessage":{"type":"string","maxLength":4000,"description":"Text of the rejection notice to send the applicant. Omit to reject without telling them."},"notifyAt":{"type":"string","format":"date-time","description":"When to send the notice (ISO 8601 UTC). Default: now."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["applicantId","hiringProjectId","reason"]},"example":{"applicantId":"PASTE_RECRUITER_ID_HERE","hiringProjectId":"PASTE_HIRING_PROJECT_ID_HERE","reason":"NOT_MEET_BASIC_QUALIFICATIONS"}}}},"responses":{"200":{"description":"It worked. Inside result: rejected, applicantId, hiringProjectId, reason, notified, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_job_postings":{"post":{"operationId":"list_job_postings","summary":"List my job postings","description":"List your job postings: open, drafts or closed.\n\nDrafts are listed only with category \"draft\".\n\nDocs: https://heyreagent.com/docs/actions/list_job_postings","tags":["Jobs"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["active","draft","closed"],"description":"Which postings (default active)."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 25)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, jobPostings[].id, jobPostings[].state, jobPostings[].title, jobPostings[].description, jobPostings[].company, jobPostings[].companyId, jobPostings[].location, jobPostings[].applicantsCounter, jobPostings[].viewsCounter, jobPostings[].cost, jobPostings[].createdAt, jobPostings[].publishedAt, jobPostings[].closedAt, jobPostings[].applyUrl, jobPostings[].salary, jobPostings[].workplace, jobPostings[].seniority, jobPostings[].skills, jobPostings[].functions, jobPostings[].industries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_job_posting":{"post":{"operationId":"get_job_posting","summary":"Get a job posting","description":"Read one of your job postings.\n\nservice must match where the posting lives: CLASSIC or RECRUITER.\n\nDocs: https://heyreagent.com/docs/actions/get_job_posting","tags":["Jobs"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The job posting id (from list_job_postings)."},"service":{"type":"string","enum":["CLASSIC","RECRUITER"],"description":"Which LinkedIn product the job posting belongs to (default CLASSIC)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["jobId"]},"example":{"jobId":"PASTE_JOB_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, state, title, description, company, companyId, location, applicantsCounter, viewsCounter, cost, createdAt, publishedAt, closedAt, applyUrl, screeningQuestions[].question, screeningQuestions[].favorableAnswers, hiringTeam[].name, hiringTeam[].providerId, hiringTeam[].publicIdentifier, hiringTeam[].profileUrl, hiringTeam[].canSendFreeInmail, salary, workplace, seniority, skills, functions, industries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_job_applicants":{"post":{"operationId":"list_job_applicants","summary":"List a job posting's applicants","description":"List who applied to one of your job postings.\n\nThe degree filters work on Recruiter postings only. That their ids come from lookup_search_ids type DEGREE is this tool's own wording; the published definition does not name the source.\n\nAn applicant's profileId is not documented as any kind of id; use publicProfileUrl to reach the person.\n\nDocs: https://heyreagent.com/docs/actions/list_job_applicants","tags":["Jobs"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The job posting id (from list_job_postings)."},"service":{"type":"string","enum":["CLASSIC","RECRUITER"],"description":"Which LinkedIn product the job posting belongs to (default CLASSIC)."},"keywords":{"type":"string","maxLength":200,"description":"Only applicants matching these words."},"ratings":{"type":"array","items":{"type":"string","enum":["UNRATED","GOOD_FIT","MAYBE","NOT_A_FIT"]},"maxItems":4,"description":"CLASSIC only: only these ratings."},"sortBy":{"type":"string","enum":["relevance","alphabetical","newest_first","screening_requirements"],"description":"RECRUITER only."},"includeArchived":{"type":"boolean","description":"RECRUITER only: include archived applicants."},"yearsOfExperience":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"RECRUITER only."},"yearsInCompany":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"RECRUITER only: years in current company."},"yearsInPosition":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"description":"RECRUITER only: years in current position."},"includeDegree":{"type":"array","items":{"type":"string"},"description":"RECRUITER only: degree ids to include (lookup_search_ids type DEGREE)."},"excludeDegree":{"type":"array","items":{"type":"string"},"description":"RECRUITER only: degree ids to exclude."},"limit":{"type":"number","minimum":1,"maximum":100,"description":"How many to return (1–100, default 25)."},"cursor":{"type":"string","description":"nextCursor from the previous call, to get the next page. Keep the other arguments the same."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["jobId"]},"example":{"jobId":"PASTE_JOB_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: returned, nextCursor, applicants[].id, applicants[].profileId, applicants[].publicIdentifier, applicants[].publicProfileUrl, applicants[].name, applicants[].location, applicants[].headline, applicants[].profilePictureUrl, applicants[].appliedAt, applicants[].rating, applicants[].hiringState, applicants[].emailAddress, applicants[].phoneNumber.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_job_applicant":{"post":{"operationId":"get_job_applicant","summary":"Get an applicant","description":"Read one applicant, with their answers to the screening questions.\n\nOrdinary (CLASSIC) job postings only.\n\nDocs: https://heyreagent.com/docs/actions/get_job_applicant","tags":["Jobs"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"applicantId":{"type":"string","description":"The applicant id (from list_job_applicants)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["applicantId"]},"example":{"applicantId":"PASTE_APPLICANT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: id, profileId, publicIdentifier, publicProfileUrl, name, location, headline, profilePictureUrl, appliedAt, rating, hiringState, emailAddress, phoneNumber, contactInfo.emailAddresses, contactInfo.phoneNumbers, workExperience[].company, workExperience[].companyId, workExperience[].position, workExperience[].location, workExperience[].description, workExperience[].pictureUrl, education[].school, education[].schoolId, education[].degree, education[].description, education[].fieldOfStudy, education[].pictureUrl, screeningQuestions[].question, screeningQuestions[].answers, screeningQuestions[].success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_job_applicant_resume":{"post":{"operationId":"get_job_applicant_resume","summary":"Download an applicant's resume","description":"Download one applicant's resume.\n\nDocs: https://heyreagent.com/docs/actions/get_job_applicant_resume","tags":["Jobs"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"applicantId":{"type":"string","description":"The applicant id (from list_job_applicants)."},"service":{"type":"string","enum":["CLASSIC","RECRUITER"],"description":"Which LinkedIn product the job posting belongs to (default CLASSIC)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["applicantId"]},"example":{"applicantId":"PASTE_APPLICANT_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/create_job_posting":{"post":{"operationId":"create_job_posting","summary":"Create a job posting draft","description":"Create a job posting as a draft.\n\njobTitle and company each take an id from lookup_search_ids, or free text.\n\nNothing is public yet: publish_job_posting takes the jobId.\n\nprojectId comes back for Recruiter postings only.\n\nDocs: https://heyreagent.com/docs/actions/create_job_posting","tags":["Jobs"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobTitle":{"type":"object","properties":{"id":{"type":"string","description":"LinkedIn's id for the job title (lookup_search_ids type JOB_TITLE)."},"text":{"type":"string","description":"The job title as free text, when LinkedIn has no id for it."}}},"company":{"type":"object","properties":{"id":{"type":"string","description":"LinkedIn's id for the company (lookup_search_ids type COMPANY)."},"text":{"type":"string","description":"The company as free text, when LinkedIn has no id for it."}}},"workplace":{"type":"string","enum":["ON_SITE","HYBRID","REMOTE"]},"location":{"type":"string","description":"LinkedIn's id for the place (lookup_search_ids type LOCATION)."},"description":{"type":"string","maxLength":25000,"description":"The job description. HTML tags may be used to structure it."},"employmentStatus":{"type":"string","enum":["FULL_TIME","PART_TIME","CONTRACT","TEMPORARY","OTHER","VOLUNTEER","INTERNSHIP"]},"autoRejectionTemplate":{"type":"string","description":"Message sent automatically to applicants who do not pass the screening questions."},"screeningQuestions":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answerType":{"type":"string","description":"The kind of answer, e.g. numeric or multiple_choices."},"position":{"type":"number"},"mustMatch":{"type":"boolean"},"minExpectation":{"type":"number"},"maxExpectation":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"expectedChoices":{"type":"array","items":{"type":"string"}}},"required":["question","answerType"]},"description":"Questions applicants must answer."},"applyMethod":{"type":"object","properties":{"type":{"type":"string","const":"linkedin"},"notificationEmail":{"type":"string","format":"email"},"url":{"type":"string","format":"uri"}},"required":["type","notificationEmail","url"],"description":"How people apply: on LinkedIn (applications are emailed to notificationEmail) or on an external site."},"recruiter":{"type":"object","properties":{"project":{"type":"object","properties":{},"description":"create: the hiring project — { id } of an existing one or { name } for a new one."},"projectId":{"type":"string","description":"edit: the hiring project the posting belongs to."},"functions":{"type":"array","items":{"type":"string"},"description":"Job function ids (lookup_search_ids type JOB_FUNCTION)."},"industries":{"type":"array","items":{"type":"string"},"description":"Industry ids (lookup_search_ids type INDUSTRY)."},"skills":{"type":"array","items":{"type":"string"},"description":"Skill ids (lookup_search_ids type SKILL)."},"seniority":{"type":"string","enum":["INTERNSHIP","ENTRY_LEVEL","ASSOCIATE","MID_SENIOR_LEVEL","DIRECTOR","EXECUTIVE","NOT_APPLICABLE"]},"includePosterInfo":{"type":"boolean"},"trackingPixelUrl":{"type":"string","format":"uri"},"companyJobId":{"type":"string"},"applyMethod":{"type":"object","properties":{}},"salary":{"type":"object","properties":{}},"additionalCompensation":{"type":"object","properties":{}},"autoArchiveApplicants":{"type":"object","properties":{}},"sendRejectionNotification":{"type":"boolean"}},"description":"Recruiter job postings only. To create one LinkedIn requires project, functions, industries, seniority and applyMethod."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["jobTitle","company","workplace","location","description"]},"example":{"jobTitle":{"text":"Software Engineer"},"company":{"text":"Your company"},"workplace":"ON_SITE","location":"PASTE_LOCATION_ID_HERE","description":"What the job is about."}}}},"responses":{"200":{"description":"It worked. Inside result: created, draft, from, usedToday, dailyLimit, jobId, projectId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/edit_job_posting":{"post":{"operationId":"edit_job_posting","summary":"Edit a job posting","description":"Change one of your job postings.\n\nDocs: https://heyreagent.com/docs/actions/edit_job_posting","tags":["Jobs"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The job posting id (from list_job_postings)."},"jobTitle":{"type":"object","properties":{"id":{"type":"string","description":"LinkedIn's id for the job title (lookup_search_ids type JOB_TITLE)."},"text":{"type":"string","description":"The job title as free text, when LinkedIn has no id for it."}}},"company":{"type":"object","properties":{"id":{"type":"string","description":"LinkedIn's id for the company (lookup_search_ids type COMPANY)."},"text":{"type":"string","description":"The company as free text, when LinkedIn has no id for it."}}},"workplace":{"type":"string","enum":["ON_SITE","HYBRID","REMOTE"]},"location":{"type":"string","description":"LinkedIn's id for the place (lookup_search_ids type LOCATION)."},"description":{"type":"string","maxLength":25000,"description":"The job description. HTML tags may be used to structure it."},"employmentStatus":{"type":"string","enum":["FULL_TIME","PART_TIME","CONTRACT","TEMPORARY","OTHER","VOLUNTEER","INTERNSHIP"]},"autoRejectionTemplate":{"type":"string","description":"Message sent automatically to applicants who do not pass the screening questions."},"screeningQuestions":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answerType":{"type":"string","description":"The kind of answer, e.g. numeric or multiple_choices."},"position":{"type":"number"},"mustMatch":{"type":"boolean"},"minExpectation":{"type":"number"},"maxExpectation":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"expectedChoices":{"type":"array","items":{"type":"string"}}},"required":["question","answerType"]},"description":"Questions applicants must answer."},"applyMethod":{"type":"object","properties":{"type":{"type":"string","const":"linkedin"},"notificationEmail":{"type":"string","format":"email"},"url":{"type":"string","format":"uri"}},"required":["type","notificationEmail","url"],"description":"How people apply: on LinkedIn (applications are emailed to notificationEmail) or on an external site."},"recruiter":{"type":"object","properties":{"project":{"type":"object","properties":{},"description":"create: the hiring project — { id } of an existing one or { name } for a new one."},"projectId":{"type":"string","description":"edit: the hiring project the posting belongs to."},"functions":{"type":"array","items":{"type":"string"},"description":"Job function ids (lookup_search_ids type JOB_FUNCTION)."},"industries":{"type":"array","items":{"type":"string"},"description":"Industry ids (lookup_search_ids type INDUSTRY)."},"skills":{"type":"array","items":{"type":"string"},"description":"Skill ids (lookup_search_ids type SKILL)."},"seniority":{"type":"string","enum":["INTERNSHIP","ENTRY_LEVEL","ASSOCIATE","MID_SENIOR_LEVEL","DIRECTOR","EXECUTIVE","NOT_APPLICABLE"]},"includePosterInfo":{"type":"boolean"},"trackingPixelUrl":{"type":"string","format":"uri"},"companyJobId":{"type":"string"},"applyMethod":{"type":"object","properties":{}},"salary":{"type":"object","properties":{}},"additionalCompensation":{"type":"object","properties":{}},"autoArchiveApplicants":{"type":"object","properties":{}},"sendRejectionNotification":{"type":"boolean"}},"description":"Recruiter job postings only. To create one LinkedIn requires project, functions, industries, seniority and applyMethod."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["jobId"]},"example":{"jobId":"PASTE_JOB_ID_HERE","description":"What the job is about."}}}},"responses":{"200":{"description":"It worked. Inside result: edited, jobId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/publish_job_posting":{"post":{"operationId":"publish_job_posting","summary":"Publish a job posting","description":"Publish a job posting draft, free or promoted.\n\ndraftId is the job id of a draft: from create_job_posting, or list_job_postings with category \"draft\".\n\nTwo answers are possible. Published: jobState and jobId. Not yet: type EMAIL_VERIFICATION or OTP, and LinkedIn has sent a code — pass it to solve_job_posting_checkpoint.\n\nDocs: https://heyreagent.com/docs/actions/publish_job_posting","tags":["Jobs"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"draftId":{"type":"string","description":"The draft id (from create_job_posting, or list_job_postings category draft)."},"mode":{"type":"string","enum":["FREE","PROMOTED","PROMOTED_PLUS"],"description":"FREE costs nothing. PROMOTED and PROMOTED_PLUS (ordinary postings only) are paid."},"budget":{"type":"object","properties":{"period":{"type":"string","enum":["daily","monthly"]},"currency":{"type":"string","maxLength":3},"amount":{"type":"number"}},"required":["period","currency","amount"],"description":"Paid modes only: the most to spend per day or per month."},"service":{"type":"string","enum":["CLASSIC","RECRUITER"],"description":"Which LinkedIn product the job posting belongs to (default CLASSIC)."},"hiringPhotoFrame":{"type":"boolean","description":"Add the #Hiring frame to your profile picture."},"bypassEmailVerification":{"type":"boolean","description":"Skip LinkedIn's check that you may post for this company."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["draftId","mode"]},"example":{"draftId":"PASTE_JOB_ID_HERE","mode":"FREE"}}}},"responses":{"200":{"description":"It worked. Inside result: draftId, mode, paid, from, usedToday, dailyLimit, jobState, jobId, type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/solve_job_posting_checkpoint":{"post":{"operationId":"solve_job_posting_checkpoint","summary":"Finish a job posting verification","description":"Finish publishing a job posting with the code LinkedIn sent.\n\nOnly after publish_job_posting answered with a type instead of a jobState.\n\nDocs: https://heyreagent.com/docs/actions/solve_job_posting_checkpoint","tags":["Jobs"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"draftId":{"type":"string","description":"The draft id whose publishing is waiting."},"code":{"type":"string","maxLength":64,"description":"The verification code LinkedIn sent."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["draftId","code"]},"example":{"draftId":"PASTE_JOB_ID_HERE","code":"123456"}}}},"responses":{"200":{"description":"It worked. Inside result: draftId, from, usedToday, dailyLimit, jobState, jobId, type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/close_job_posting":{"post":{"operationId":"close_job_posting","summary":"Close a job posting","description":"Close one of your job postings for good.\n\nDocs: https://heyreagent.com/docs/actions/close_job_posting","tags":["Jobs"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"The job posting id (from list_job_postings)."},"service":{"type":"string","enum":["CLASSIC","RECRUITER"],"description":"Which LinkedIn product the job posting belongs to (default CLASSIC)."},"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}},"required":["jobId"]},"example":{"jobId":"PASTE_JOB_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: closed, jobId, from, usedToday, dailyLimit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/who_is_waiting_on_me":{"post":{"operationId":"who_is_waiting_on_me","summary":"Who is waiting on my reply","description":"List the people whose last message you have not answered.\n\nIt reads the stored inbox. needsInboxSync names the accounts whose copy is missing or over 7 days old: run sync_inbox first.\n\nTo answer someone, pass the row's profileUrl to send_message. profileUrl can be null on a row.\n\nDocs: https://heyreagent.com/docs/actions/who_is_waiting_on_me","tags":["Insight"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender. Omit to span all live senders in this setup."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max people to return (1–200, default 100)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: summary, waitingOnYou, nextAction, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/who_went_cold":{"post":{"operationId":"who_went_cold","summary":"Who went cold","description":"List the conversations that went quiet.\n\nIt reads the stored inbox; see needsInboxSync.\n\nhasInboundReply is null when the whole conversation is not stored.\n\nDocs: https://heyreagent.com/docs/actions/who_went_cold","tags":["Insight"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender. Omit to span all live senders."},"days":{"type":"number","minimum":1,"maximum":365,"description":"Consider a conversation cold when there's been no message for at least this many days (default 14)."},"onlyWithReply":{"type":"boolean","description":"true = only threads where the other person replied at least once (skips pure no-response outreach). Requires the full thread to be synced."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max threads to return (1–200, default 100)."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: summary, coldConversations, nextAction, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/connections_never_messaged":{"post":{"operationId":"connections_never_messaged","summary":"Connections I never messaged","description":"List your connections you never exchanged a message with.\n\nIt compares stored connections with the stored inbox, so it is only as fresh as both.\n\nDocs: https://heyreagent.com/docs/actions/connections_never_messaged","tags":["Insight"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Restrict to one LinkedIn sender. Omit to span all live senders in this setup."},"since":{"type":"string","description":"ISO date. Only consider connections made on/after this date (e.g. focus on recent connects you haven't reached out to)."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max leads to return (1–200, default 100). The full never-messaged count is always reported."},"refresh":{"type":"boolean","description":"true = pull the latest connections live before the join. false (default) = use the cached connection list."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: summary, leads, nextAction, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/engagers_not_connected":{"post":{"operationId":"engagers_not_connected","summary":"Engagers I am not connected to","description":"List the people who reacted to or commented on a post and are not your connections.\n\nA commenter's comment text is in leads[].note.\n\npostUrl takes the post's link or its socialId. A bare post id is refused.\n\nDocs: https://heyreagent.com/docs/actions/engagers_not_connected","tags":["Insight"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"postUrl":{"type":"string","description":"The LinkedIn post URL (activity/share/ugcPost URL)."},"connectionId":{"type":"string","description":"Which sender to read through. Omit to use the first live sender."},"maxReactions":{"type":"number","minimum":1,"maximum":100,"description":"Max reactors to scan (1–100, default 100)."},"maxComments":{"type":"number","minimum":1,"maximum":100,"description":"Max commenters to scan (1–100, default 100)."},"limit":{"type":"number","minimum":1,"maximum":200,"description":"Max leads to return (1–200, default 100)."}},"required":["postUrl"]},"example":{"postUrl":"PASTE_POST_LINK_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: summary, leads, nextAction, note.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/connect_linkedin":{"post":{"operationId":"connect_linkedin","summary":"Connect a LinkedIn account","description":"Get a private link where you sign a LinkedIn account in.\n\nNo account exists until the person finishes the form behind url. Then list_linkedin_accounts lists it.\n\nThe link works for 2 hours.\n\nDocs: https://heyreagent.com/docs/actions/connect_linkedin","tags":["Account"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","description":"Optional friendly name to pre-fill for this sender."},"country":{"type":"string","description":"Optional country to pre-select — a name token (e.g. \"UNITED_STATES\", \"UNITED_KINGDOM\") or a 2-letter ISO code (e.g. \"us\", \"gb\"); the user can change it on the form."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: url, expiresInHours, instructions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/update_linkedin_connection":{"post":{"operationId":"update_linkedin_connection","summary":"Fix or update a LinkedIn connection","description":"Get a private link where you sign an existing account in again.\n\nconnectionId is required here.\n\nDocs: https://heyreagent.com/docs/actions/update_linkedin_connection","tags":["Account"],"x-plan":"connect","x-changes-something":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"The id of the existing LinkedIn sender to update (from list_linkedin_accounts)."}},"required":["connectionId"]},"example":{"connectionId":"PASTE_CONNECTION_ID_HERE"}}}},"responses":{"200":{"description":"It worked. Inside result: url, expiresInHours, updates, instructions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/list_linkedin_accounts":{"post":{"operationId":"list_linkedin_accounts","summary":"List connected LinkedIn accounts","description":"List your connected LinkedIn accounts and whether each one works.\n\naccounts[].id is the connectionId every other action takes.\n\nAccounts that do not work are listed too. A action refuses the id of one whose connectionStatus is not \"connected\".\n\nDocs: https://heyreagent.com/docs/actions/list_linkedin_accounts","tags":["Account"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"includeAllSetups":{"type":"boolean","description":"If true, return every LinkedIn account. Default returns accounts scoped to active setup."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: total, alwaysOnReadyCount, needsAttentionCount, maxAllowed, accounts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}},"/v1/actions/get_usage":{"post":{"operationId":"get_usage","summary":"Get today's usage and limits","description":"Read how many of each LinkedIn action your account used today, and each daily limit.\n\nDocs: https://heyreagent.com/docs/actions/get_usage","tags":["Account"],"x-plan":"connect","x-changes-something":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Which of your LinkedIn accounts to act from (its id from list_linkedin_accounts). Omit to use your first live one."}}},"example":{}}}},"responses":{"200":{"description":"It worked. Inside result: account, connectionId, resetAt, actions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Worked"}}}},"default":{"description":"It did not work. The message says why, in plain English.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refused"}}}}}}}},"components":{"securitySchemes":{"key":{"type":"http","scheme":"bearer","description":"Your key, made on the thread page under Menu, then Developers: https://heyreagent.com/t"}},"schemas":{"Worked":{"type":"object","required":["ok","result"],"properties":{"ok":{"type":"boolean","const":true},"result":{"type":"object","description":"What was asked for. A field that does not apply is left out, or is null."}}},"Refused":{"type":"object","required":["ok","error","message"],"properties":{"ok":{"type":"boolean","const":false},"error":{"type":"string","description":"One word for what went wrong, such as: invalid_key, unknown_action, invalid_json, invalid_input, plan_required, upgrade_required, linkedin_disconnected, free_plan_full, free_plan_taken, no_live_account, daily_limit_reached, linkedin_limit_reached, reconnect_needed, account_restricted, not_available_on_this_account, not_found, temporary_failure, temporarily_unavailable, failed."},"message":{"type":"string","description":"Why, in plain English, and what to change."}}}}}}