update_person
Update an existing person's details in Follow Up Boss CRM by ID, including tags, contact info, stage, and assigned agents, with support for custom fields.
Instructions
Update a person by id. (PUT /people/{id}) FUB's docs also list a wildcard "custom*" field here for reading/writing custom fields directly (e.g. a "Closing Date" field as custom.ClosingDate) — that's not a literal field name, so it's not in this tool's fixed schema. Pass custom. entries via extraBody instead. Call list_custom_fields first to get exact names. Tag removal has no dedicated endpoint: to remove a tag, first GET this person, filter the tag out of their current tags array yourself, then PUT the full filtered array back (with mergeTags left at its default of false so it replaces rather than merges). To add tags, just pass the new tags with mergeTags=true (this tool's default) so they're unioned with the person's existing tags. ⚠️ DATA LOSS RISK, confirmed against the live API: emails, phones, and addresses are REPLACED wholesale if you include them — there is no merge flag for these like there is for tags. Sending a single new phone number wipes out every other phone number the person had. To add one without losing the rest, GET the person first, append to their existing emails/phones/addresses array yourself, and PUT the complete merged array back. Never send a partial list unless the user explicitly wants everything else removed. collaborators is also settable here even though FUB's own docs don't list it on this endpoint (confirmed working in practice) — it has the same replace-not-merge behavior as tags/phones: omitting an existing collaborator's user id removes them, so GET the person first and merge if you only want to add one. Pass it via extraBody. Setting stage to "Trash" hides the person from default list views (FUB excludes trashed people from GET /people unless includeTrash is set) — it's reversible, but feels like the contact vanished to someone who isn't expecting it, so this requires confirm=true just like a delete, even though it isn't one.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| tags | No | A list of tags applied to the person. **This list will overwrite any existing tags for the person.** (To merge the tags passed with any existing tags,set the `mergeTags` query parameter in your request to true.) | |
| price | No | The price of the property of the person's first inquiry, or the estimated sell/buy price for this person. | |
| stage | No | The stage the person is in. (e.g., "Lead" or "Trash". See [stage API endpoint](ref:stages-get) for more options.) | Lead |
| emails | No | A list of email addresses associated with the person. | |
| phones | No | A list of phone numbers associated with the person. | |
| confirm | No | Only needed if `stage` is being set to "Trash" — must be true in that case, confirmed with the user first (it hides the contact from default views). Not needed for any other update. | |
| lastName | No | The last/family name of the person. | |
| addresses | No | A list of addresses associated with the person. (This is the address where this person can be contacted, it is not the address of a property this person may be interested in selling or buying). | |
| contacted | No | Whether the person has been contacted. (**Note**: Changing the `contacted` field to `true` will pause action plans.) | |
| extraBody | No | Extra raw JSON body fields not explicitly listed above — e.g. custom.* fields when creating/updating people or deals. Keys and values are sent as-is. | |
| firstName | No | The first/given name of the person. | |
| mergeTags | No | If set to true, this will merge the tags sent in the `tags` argument with the current list of tags. By default, it overwrites the existing tags. | |
| assignedTo | No | Full name of the agent assigned to this person. | |
| background | No | Background information on the person. (Can be a multi-line string.) | |
| extraQuery | No | Extra raw query parameters not explicitly listed above — e.g. FUB custom field filters like custom.ClosingDate on /people or /deals. Keys and values are sent as-is. | |
| timeframeId | No | ID of the timeframe to move (Refer to the /timeframes endpoint for valid values of timeframeId.) | |
| assignedPondId | No | ID of the pond assigned to this person. | |
| assignedUserId | No | ID of the agent assigned to this person. | |
| assignedLenderId | No | ID of the lender assigned to this person. | |
| assignedLenderName | No | Full name of the lender assigned to this person. |