Docs / Profile

update_my_profile

Read, preview a change to, or change your own profile.

This action can change or spend something, and when it does it happens right away. Read “Good to know” first.

What you give it

InputWhat it isWhere to get it
connectionId
optional
A connection id. Whose profile to edit: the LinkedIn account id from list_linkedin_accounts. May be omitted only when the setup has exactly one live sender.Run list_linkedin_accounts and use accounts[].id from its answer.
15 more places to get it
headline
optional
Text, up to 220 characters. New headline — the line under the name (max 220 characters).You write it.
about
optional
Text, up to 2600 characters. New About section (max 2600 characters). Replaces the whole section.You write it.
location
optional
Text, up to 120 characters. New profile location as a place name, e.g. "Austin, Texas". Matched to a LinkedIn place — the preview shows the match.You write it.
locationId
optional
A search filter id. An exact LinkedIn place id, taken from locationOptions in a preview. Overrides location.run lookup_search_ids with type LOCATION, and use matches[].id from its answer.
postalCode
optional
Text. 5-digit postal code to go with the location (optional).You write it.
websiteLink
optional
A group of fields. The link shown near the top of the profile.
What goes inside
  • type (needed): one of: WEBSITE, PORTFOLIO, BLOG, NEWSLETTER, STORE. What the link is.
  • url (needed): a link. The full https:// URL.
  • displayOn (optional): one of: EVERYWHERE, PROFILE_ONLY. Where LinkedIn shows it (default EVERYWHERE).
You write it.
experience
optional
A group of fields. Add or edit ONE experience entry.
What goes inside
  • id (optional): a profile entry id. Id of the experience to EDIT (from the preview's current.experience). Omit to ADD a new one. An earlier answer of this same action has it, in experience[].id.
  • role (optional): text, up to 100 characters. Job title. Required when adding.
  • company (optional): text, up to 100 characters. Company name. Required when adding.
  • companyId (optional): a company id. LinkedIn company id, to link the entry to that company page (e.g. a companyId from search_companies). Run search_linkedin_companies and use results[].id from its answer.
    5 more places to get it
  • location (optional): text, up to 120 characters. Where the job is / was, as free text.
  • presence (optional): one of: ON_SITE, HYBRID, REMOTE.
  • startDate (optional): a group of fields.
  • endDate (optional): a group of fields. Omit for a current position.
  • description (optional): text, up to 2000 characters.
  • notifyNetwork (optional): true or false. true = let LinkedIn announce it to the network. Default false (no announcement).
You write it.
education
optional
A group of fields. Add or edit ONE education entry.
What goes inside
  • id (optional): a profile entry id. Id of the education entry to EDIT (from the preview's current.education). Omit to ADD a new one. An earlier answer of this same action has it, in experience[].id.
  • school (optional): text, up to 150 characters. School name. Required when adding.
  • degree (optional): text, up to 100 characters.
  • fieldOfStudy (optional): text, up to 100 characters.
  • grade (optional): text, up to 80 characters.
  • activities (optional): text, up to 500 characters.
  • description (optional): text, up to 2000 characters.
  • startDate (optional): a group of fields.
  • endDate (optional): a group of fields.
  • notifyNetwork (optional): true or false. true = let LinkedIn announce it to the network. Default false (no announcement).
You write it.
addSkills
optional
A list (text, up to 80 characters), up to 20. 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.You write it.
pictureUrl
optional
A link. New PROFILE picture: a public https:// link straight to a JPEG or PNG file (max 8MB). LinkedIn applies its default crop.You write it.
coverPictureUrl
optional
A link. New COVER (banner) picture: a public https:// link straight to a JPEG or PNG file (max 8MB). LinkedIn's banner is 1584×396.You write it.
openToWork
optional
A group of fields. Set the "open to work" job preferences. It cannot be turned off from here.
What goes inside
  • jobTitles (needed): a list (text, up to 100 characters), up to 5. Job titles the person is open to (1–5), by name — each is matched to LinkedIn's own title list.
  • workplaces (needed): a list (one of: ON_SITE, HYBRID, REMOTE). Which workplace types: ON_SITE, HYBRID, REMOTE.
  • onSiteLocations (optional): a list (text), up to 5. Places for on-site / hybrid work, by name. Required when workplaces has ON_SITE or HYBRID.
  • remoteLocations (optional): a list (text), up to 5. Places (usually countries) for remote work, by name. Required when workplaces has REMOTE.
  • startDate (optional): one of: IMMEDIATELY, FLEXIBLE.
  • employmentTypes (optional): a list (one of: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY).
  • visibility (needed): one of: RECRUITERS_ONLY, ALL. 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.
You write it.
confirm
optional
True or false. false (default) = preview only, nothing changes. true = change the profile now (only after the user said yes).You write it.

Call it

curl -X POST https://api.heyreagent.com/v1/actions/update_my_profile \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{}'
The same call in JavaScript
const response = await fetch("https://api.heyreagent.com/v1/actions/update_my_profile", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_KEY",
    "content-type": "application/json",
  },
  body: JSON.stringify({}),
});
const answer = await response.json();
console.log(answer);
The same call in Python
import requests

response = requests.post(
    "https://api.heyreagent.com/v1/actions/update_my_profile",
    headers={"Authorization": "Bearer YOUR_KEY"},
    json={},
)
print(response.json())
The same call in n8n

Add an HTTP Request node and fill it in like this:

MethodPOST
URLhttps://api.heyreagent.com/v1/actions/update_my_profile
Send HeadersOn. Name Authorization, Value Bearer YOUR_KEY
Send BodyOn. Body Content Type JSON, Specify Body Using JSON, then paste the body below
{}

Put your own key where it says YOUR_KEY. New here? Start with your first call.

What you get back

When it worked, the answer is { "ok": true, "result": { … } }. Inside result:

action
account
message
profileUrl
experience
education
locationOptions
changes

A field that does not apply to an answer is left out, or is null.

When it did not work, the answer is { "ok": false, "error": "…", "message": "…" }. What each error means.

Good to know

In Claude or ChatGPT

Once connected, ask in your own words. The assistant sees this action as a tool with the same name, update_my_profile, and the same inputs.