Update Contact
n8n-nodes-base.httpRequest
Update an existing contact's information in Follow Up Boss by person ID
π‘ Use Cases
- Update contact information
- Change contact status or stage
- Add or modify custom fields
- Update contact address or phone
π API Documentation
Reference documentation for this API endpoint:
π https://docs.followupboss.com/reference/people-id-put βπ Node Configuration
{
"nodes": [
{
"parameters": {
"content": "## π Update Contact\n\n**Usage:**\nUpdate an existing contact's information in Follow Up Boss using their person ID.\n\n**Required Input:**\n- `personId`: The ID of the contact to update\n\n**Optional Fields (update any):**\n- `firstName`, `lastName`: Name fields\n- `email`, `phone`: Contact information\n- `address`, `city`, `state`, `zip`: Location\n- `status`: Contact status\n- Any custom fields\n\n**Setup:**\n1. Configure HTTP Basic Auth credentials with your Follow Up Boss API key as username (leave password blank)\n2. Pass personId and fields to update in incoming data\n3. Node updates the contact and returns updated information\n\n**Output:**\nReturns the updated contact object with all current contact details",
"height": 238,
"width": 389,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
332
],
"typeVersion": 1,
"id": "a2e8c3fa0c4ebf23c3db04996c3f26c0",
"name": "Sticky Note"
},
{
"parameters": {
"method": "PUT",
"url": "=https://api.followupboss.com/v1/people/{{ $json.personId }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"firstName\": \"{{ $json.firstName }}\",\n \"lastName\": \"{{ $json.lastName }}\",\n \"emails\": [{\"value\": \"{{ $json.email }}\"}],\n \"phones\": [{\"value\": \"{{ $json.phone }}\"}],\n \"address\": \"{{ $json.address }}\",\n \"city\": \"{{ $json.city }}\",\n \"state\": \"{{ $json.state }}\",\n \"zip\": \"{{ $json.zip }}\",\n \"status\": \"{{ $json.status }}\"\n}",
"options": {}
},
"id": "d5d4f29753dd39d9b3d65654692ad630",
"name": "Update Contact",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
368,
400
]
}
],
"connections": {},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "c76284bb3c283cf843051ea2c3d9c5f0d25ec1d97ff2b7230219de879cadb83d"
}
}
[
{
"id": "156b9f41-a9cd-4561-a7a5-60fd0a48e741",
"meta": {
"name": "API Call Node",
"id": "api-call",
"icon": {
"svg": " ",
"type": "SVG"
},
"description": "## π Update Contact **Usage:**"
},
"label": "Update Contact",
"dependencies": {
"node-fetch": "3.3.2"
},
"script": "import fetch from \"node-fetch\";\nexport default async function apiCall({\n url,\n method,\n contentType,\n authorization,\n body,\n shouldAwait,\n queryParams,\n customHeaders\n}: NodeInputs, {\n logging\n}: NodeScriptOptions) : NodeOutput {\n const headers = {\n \"Content-Type\": contentType,\n ...customHeaders\n };\n if (authorization) headers[\"Authorization\"] = authorization;\n\n let queryParamsString = '';\n if (queryParams) {\n queryParamsString = '?' + new URLSearchParams(queryParams).toString();\n }\n\n const fetchOptions = {\n method,\n headers\n };\n\n if (method !== 'GET') {\n fetchOptions.body = JSON.stringify(body);\n }\n\n const fetchPromise = fetch(url + queryParamsString, fetchOptions);\n\n if (!shouldAwait) {\n return {\n data: null\n };\n }\n\n const response = await fetchPromise;\n const data = await response.json();\n return {\n status: response.status,\n data\n };\n}",
"inputs": {
"properties": {
"method": {
"type": "string",
"description": "The HTTP method to use for the API call",
"enum": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH"
],
"default": "PUT",
"title": "HTTP Method",
"buildship": {
"options": [
{
"label": "GET",
"value": "GET"
},
{
"value": "POST",
"label": "POST"
},
{
"value": "PUT",
"label": "PUT"
},
{
"label": "DELETE",
"value": "DELETE"
},
{
"label": "PATCH",
"value": "PATCH"
}
],
"index": 0,
"sensitive": false
}
},
"url": {
"description": "The URL of the API endpoint",
"title": "URL",
"type": "string",
"buildship": {
"index": 1
}
},
"authorization": {
"description": "The authorization header for the API call, if required (e.g., Bearer or Basic token)",
"type": "string",
"title": "Authorization",
"buildship": {
"sensitive": true,
"index": 2
}
},
"queryParams": {
"default": {},
"description": "The query parameters for the API call",
"type": "object",
"title": "Query Parameters",
"buildship": {
"index": 3,
"sensitive": false
}
},
"body": {
"type": "object",
"buildship": {
"index": 4
},
"description": "The body to send with the API call",
"title": "Body"
},
"contentType": {
"enum": [
"application/json",
"application/x-www-form-urlencoded",
"multipart/form-data",
"text/plain"
],
"description": "The content type of the API call",
"title": "Content Type",
"buildship": {
"index": 5,
"options": [
{
"label": "application/json",
"value": "application/json"
},
{
"value": "application/x-www-form-urlencoded",
"label": "application/x-www-form-urlencoded"
},
{
"label": "multipart/form-data",
"value": "multipart/form-data"
},
{
"label": "text/plain",
"value": "text/plain"
}
]
},
"type": "string"
},
"shouldAwait": {
"description": "Whether to wait for the request to complete or not",
"title": "Await?",
"type": "boolean",
"buildship": {
"sensitive": false,
"index": 6
}
},
"customHeaders": {
"type": "object",
"description": "Additional custom headers for the API call",
"title": "Custom Headers",
"buildship": {
"index": 7,
"sensitive": false
}
}
},
"type": "object",
"required": [
"url",
"shouldAwait",
"method"
]
},
"integrations": [],
"name": "API Call Node",
"output": {
"buildship": {},
"properties": {
"status": {
"buildship": {
"index": 0
},
"type": "number",
"description": "The HTTP status of the API response",
"title": "Status"
},
"data": {
"buildship": {
"index": 1
},
"title": "Data",
"type": "object",
"description": "The data object from the API response"
}
},
"type": "object"
},
"isCollapsed": false,
"type": "script",
"values": {
"method": "PUT",
"url": {
"_$expression_": "`https://api.followupboss.com/v1/people/${ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].personId}`",
"type": "javascript",
"hasErrors": false
},
"authorization": {
"_$expression_": "`Bearer ${(await getSecret(\"ANONYMIZED_SECRET\"))}`",
"type": "javascript",
"hasErrors": false
},
"queryParams": {},
"body": {
"_$expression_": "{\n \"firstName\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].firstName,\n \"lastName\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].lastName,\n \"emails\": [{\"value\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].email}],\n \"phones\": [{\"value\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].phone}],\n \"address\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].address,\n \"city\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].city,\n \"state\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].state,\n \"zip\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].zip,\n \"status\": ctx?.[\"root\"]?.[\"inputs\"]?.[\"body\"].status\n}",
"type": "javascript",
"hasErrors": false
},
"contentType": "application/json",
"shouldAwait": true,
"customHeaders": {
"Content-Type": "application/json"
}
}
}
]
{
"subflows": [
{
"flow": [
{
"id": 828,
"module": "http:ActionSendDataBasicAuth",
"version": 3,
"parameters": {
"key": "ANONYMIZED_CREDENTIALS",
"handleErrors": false,
"useNewZLibDeCompress": true
},
"mapper": {
"ca": "",
"qs": [],
"url": "https://api.followupboss.com/v1/people/{{1.personId}}",
"data": "{\n \"firstName\": {{1.firstName}},\n \"lastName\": {{1.lastName}},\n \"emails\": [{\"value\": {{1.email}}}],\n \"phones\": [{\"value\": {{1.phone}}}],\n \"address\": {{1.address}},\n \"city\": {{1.city}},\n \"state\": {{1.state}},\n \"zip\": {{1.zip}},\n \"status\": {{1.status}}\n}",
"gzip": true,
"method": "put",
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer {{ANONYMIZED_TOKEN}}"
}
],
"timeout": "",
"useMtls": false,
"bodyType": "raw",
"contentType": "application/json",
"serializeUrl": false,
"shareCookies": false,
"parseResponse": true,
"followRedirect": true,
"useQuerystring": false,
"followAllRedirects": false,
"rejectUnauthorized": true
},
"metadata": {
"designer": {
"x": 300,
"y": 300,
"name": "Update Contact"
},
"restore": {
"expect": {
"qs": {
"mode": "chose",
"items": []
},
"method": {
"mode": "chose",
"label": "PUT"
},
"headers": {
"mode": "chose",
"items": [
null,
null
]
},
"bodyType": {
"label": "Raw"
},
"contentType": {
"label": "JSON (application/json)"
}
},
"parameters": {
"key": {
"label": "ANONYMIZED_CREDENTIALS"
}
}
},
"parameters": [
{
"name": "key",
"type": "keychain:basicauth",
"label": "Credentials",
"required": true
},
{
"name": "handleErrors",
"type": "boolean",
"label": "Evaluate all states as errors (except for 2xx and 3xx )",
"required": true
},
{
"name": "useNewZLibDeCompress",
"type": "hidden"
}
],
"expect": [
{
"name": "url",
"type": "url",
"label": "URL",
"required": true
},
{
"name": "serializeUrl",
"type": "boolean",
"label": "Serialize URL",
"required": true
},
{
"name": "method",
"type": "select",
"label": "Method",
"required": true,
"validate": {
"enum": [
"get",
"head",
"post",
"put",
"patch",
"delete",
"options"
]
}
},
{
"name": "headers",
"spec": [
{
"name": "name",
"type": "text",
"label": "Name",
"required": true
},
{
"name": "value",
"type": "text",
"label": "Value"
}
],
"type": "array",
"label": "Headers"
},
{
"name": "qs",
"spec": [
{
"name": "name",
"type": "text",
"label": "Name",
"required": true
},
{
"name": "value",
"type": "text",
"label": "Value"
}
],
"type": "array",
"label": "Query String"
},
{
"name": "bodyType",
"type": "select",
"label": "Body type",
"validate": {
"enum": [
"raw",
"x_www_form_urlencoded",
"multipart_form_data"
]
}
},
{
"name": "parseResponse",
"type": "boolean",
"label": "Parse response",
"required": true
},
{
"name": "contentType",
"type": "select",
"label": "Content type",
"validate": {
"enum": [
"text/plain",
"application/json",
"application/xml",
"text/xml",
"text/html",
"custom"
]
}
},
{
"name": "data",
"type": "buffer",
"label": "Request content"
}
]
}
}
]
}
],
"metadata": {
"version": 1
}
}