Add or change people
Adds people or changes them, up to 100 at a time, all or none: names, emails, job, department, location, manager, dates and allowances.
$1.00 per person added
From your agent’s balance. A call that fails costs nothing.
An example
Add Felix Wagner, our new warehouse operative: he starts November 2 in the warehouse, reports to Lena, probation until the end of April.
Your agent callshr_save_people$1.00 per person added
The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.
{
"people": [
{
"first_name": "Felix",
"last_name": "Wagner",
"work_email": "felix.wagner@hansenvoss.example",
"job_title": "Warehouse operative",
"department": "Warehouse",
"location": "Hamburg",
"employment_type": "full_time",
"manager": "lena.brandt@hansenvoss.example",
"start_date": "2026-11-02",
"probation_end": "2027-04-30"
}
]
}Use it when
Someone joins, changes role, gets a new manager or leaves.
- For a customer or supplier contact, use
crm_save_contact.
What it does
Add people or change them, up to 100 at a time, all or none: matched by person_id, else by work email (any case); anyone not found is added (first_name needed). Give only what changes: "" clears text, null clears a date. A manager can be anyone on the account, also someone added later in the same call; loops are refused. Status left follows from a past end_date (their last day). Each saved person comes back with their person_id. When you add people partway through a leave year, record what they have already used or carried over with hr_adjust_leave.
What comes back
people: each saved person with their person_id and details. Every reply also carries cost_usd and balance_usd.
Inputs
| Name | Type | What it is |
|---|---|---|
peopleRequired | array of objects | 1 to 100 items. |
people[].person_id | integer | Who to change. Left out, work_email finds them; if nobody has it, a new person is added. At least 1. |
people[].first_name | string | Up to 100 characters. |
people[].last_name | string | Up to 100 characters. |
people[].preferred_name | string | What they like to be called. Up to 100 characters. |
people[].work_email | string | One person per address on the account, any case; "" clears it. Up to 254 characters. |
people[].personal_email | string | Up to 254 characters. |
people[].phone | string | Up to 40 characters. |
people[].job_title | string | Up to 120 characters. |
people[].department | string | Up to 120 characters. |
people[].location | string | Where they work, e.g. "Berlin". Holidays set for this location apply to them. Up to 120 characters. |
people[].manager | integer or string or null | Their manager: a person_id or work email on this account (someone added later in the same call is fine); null for none. 1 to 254 characters, at least 1. |
people[].employment_type | string | One of: full_time,part_time,contractor,intern. |
people[].start_date | string or null | YYYY-MM-DD, or null to clear it. Matches ^\d{4}-\d{2}-\d{2}$. |
people[].probation_end | string or null | YYYY-MM-DD, or null to clear it. Matches ^\d{4}-\d{2}-\d{2}$. |
people[].end_date | string or null | Their last day, YYYY-MM-DD (null to clear). Once it has passed their status is left. Matches ^\d{4}-\d{2}-\d{2}$. |
people[].status | string | on_leave for a long absence (parental leave, a sabbatical). "left" follows from end_date. One of: active,on_leave. |
people[].birthday | string or null | YYYY-MM-DD, or null to clear it. Matches ^\d{4}-\d{2}-\d{2}$. |
people[].emergency_contact | string | Who to call, how they are related and their number, as text. Up to 500 characters. |
people[].notes | string | Up to 5,000 characters. |
people[].custom | object | Your own fields as text, e.g. {"T-shirt": "M"}: merged into what is there, null removes one. Up to 20. |
people[].allowances | object | Their own annual days per tracked leave type where they differ from the type's, e.g. {"Vacation": 28}; null goes back to the type's. |
The call
Over MCP, call hr_save_people on https://api.conecto.chat/mcp/hr. Over REST:
curl -X POST https://api.conecto.chat/v1/tools/hr_save_people \
-H "Authorization: Bearer $CONECTO_KEY" \
-H "Content-Type: application/json" \
-d '{"people":[{"first_name":"Felix","last_name":"Wagner","work_email":"felix.wagner@hansenvoss.example","job_title":"Warehouse operative","department":"Warehouse","location":"Hamburg","employment_type":"full_time","manager":"lena.brandt@hansenvoss.example","start_date":"2026-11-02","probation_end":"2027-04-30"}]}'When it refuses
A refused call costs nothing and says what to do next.
| Code | When | What to do |
|---|---|---|
not_found404 | No person of the business has that person_id or work email. | Find them with hr_list_people. |
invalid_input400 | An email or date is not valid, or a new person has no first_name. | Fix what the message names for the person it labels. |
email_taken409 | Another person has that work email. | Change that person by person_id instead. |
manager_cycle409 | The manager would end up reporting to the person, or to themselves. | Pick another manager. |
not_tracked409 | An allowance names a leave type that is not tracked. | Set allowances only for tracked types. |
More HR tools
All 23 tools- List people
hr_list_peoplePeople by last name, everyone who hasn't left by default, filtered by status, department, location, manager, type or words.Free* - Get a person
hr_get_personEverything about one person: details, leave balances for a year, pending and upcoming leave, documents, open tasks and direct reports.Free* - Delete a person
hr_delete_personErases a person for good with their leave, tasks and document records; their files stay in the store.Free - Read the HR settings
hr_get_settingsThe working days, hours, leave year, time zone, leave types, public holidays and checklists.Free* - Change the HR settings
hr_save_settingsSets the work calendar: working days, hours per day, leave year, time zone, and one location's public holidays for a year.$0.001 a call - Add or change a leave type
hr_save_leave_typeAdds or changes a kind of time off: annual days, monthly or yearly accrual, carry-over, paid and tracked.$0.001 a call - Adjust a leave balance
hr_adjust_leaveAdds days to, or takes days off, one person's balance of a tracked leave type, with the reason.$0.01 a call - Request time off
hr_request_leaveAsks for time off for someone, counting working days less holidays; it waits for a decision unless approved at once.$0.01 a call
Give this to your agent.
Set up Conecto from https://conecto.chat/SKILL.md