# Update Contact

<!-- meta: type=update-contact; location=Contacts; category=Step (action); platforms=Joomla and WordPress (where applicable) -->

## Overview

Updates an existing Joomla contact record (com_contact) when the flow runs. Use to sync CRM changes, fix details after form submissions, or batch-update contact categories.

When the flow reaches this step, JOrchestrator executes **Update Contact** against your linked site or an external integration, using the field values you set on **General** and **Design**. Downstream steps can read the output payload fields defined for this node.

## Why use this node

Update Contact is a **action step** in the **Contacts** group. Action steps run in the middle or end of a flow. They perform work on your CMS, call external services, or transform data for the next step.

Typical reasons teams add **Update Contact** to a flow:

- Update Contact on your linked Joomla site when the flow reaches this step
- Update contact based on webhook, schedule, or CMS event data
- Integrate Contacts operations with messaging, AI, or database steps in one canvas

## Example workflows

Common patterns on the canvas:

1. **Trigger or Webhook** → upstream steps → **Update Contact** → **Send Email** or CMS update
2. **Scheduled trigger** → **Update Contact** → **Debug** (while testing) → production action

## How to set it up

Pick the contact from the Joomla list. To change category: id / {{…}} and/or Contact Categories; leave manual and picker empty to keep current category.

## Good to know

Name and slug fields follow com_contact validation rules.

## Properties panel

The designer shows these tabs for this node:

| Tab | Purpose |
|-----|---------|
| **Info** | Plain-language description and output payload fields for downstream steps |
| **General** | Canvas label and read-only node ID |
| **AI** | Optional assistant to help draft settings from plain language |
| **Design** | Node-specific configuration fields |

### System (automatic — not edited by the user)

These fields are managed by the designer or runtime — you do not type into them directly:

| Property key | Label | Type | Required | Visible when | Notes |
|--------------|-------|------|----------|--------------|-------|
| `_nodeId` | Node ID | `node-id` | No | — | — |
| `_payloadFields` | Available Fields | `payload-panel` | No | — | — |

### User-configured — General tab

| Property key | Label | Type | Required | Visible when | Notes |
|--------------|-------|------|----------|--------------|-------|
| `label` | Label | `text` | No | — | Node label |

### User-configured — Design tab

| Property key | Label | Type | Required | Visible when | Notes |
|--------------|-------|------|----------|--------------|-------|
| `name` | Name | `payload-text` | No | — | Leave empty to keep current |
| `catid_manual` | Contact category (id or {{placeholder}}) — optional | `payload-text` | No | — | Leave empty to keep category; or type id / {{…}} — or choose below (shows category name) |
| `alias` | Alias | `payload-text` | No | — | — |
| `published` | Published | `select` (`` \| `0` \| `1`; default: ``) | No | — | — |
| `email_to` | Contact email | `payload-text` | No | — | — |
| `address` | Address | `payload-text` | No | — | — |
| `suburb` | City / Suburb | `payload-text` | No | — | — |
| `state` | State / County | `payload-text` | No | — | — |
| `postcode` | Postal code | `payload-text` | No | — | — |
| `country` | Country | `payload-text` | No | — | — |
| `telephone` | Telephone | `payload-text` | No | — | — |
| `mobile` | Mobile | `payload-text` | No | — | — |
| `webpage` | Website | `payload-text` | No | — | — |

### CMS-backed (options from the linked site)

| Property key | Label | Type | Required | Visible when | Notes |
|--------------|-------|------|----------|--------------|-------|
| `id` | Contact to update | `contact-select` | **Yes** | — | Select contact from Joomla |
| `catid` | Contact Categories (optional) | `contact-category-select` | No | — | Select category (fills the field above) |
| `language` | Language | `content-language-select` | No | — | Select language (* = all) |

### CMS site configuration (not on this node's properties panel)

Credentials, API keys, mailers, SMTP, and integration defaults are configured in the CMS plugin under **Node Configuration**, not per step on this node. Link the flow to a domain before testing CMS-backed fields.

## Output payload fields

After this step runs, later nodes can reference these fields using placeholders such as
`{{update_contact.id}}`.

| Field key | Type | Description |
|-----------|------|-------------|
| `id` | string | Primary record identifier. |
| `name` | string | Display name of the record. |
| `alias` | string | URL-safe alias / slug. |
| `catid` | string | Category ID. |
| `published` | number | Published flag (0 or 1). |
| `email_to` | string | Contact form recipient email. |

## Related nodes

Other steps in the same area of the palette:

- **Create Contact** (`create-contact`) — Contacts
- **Create Contact Category** (`create-contact-category`) — Contacts
- **Delete Contact** (`delete-contact`) — Contacts
- **Delete Contact Category** (`delete-contact-category`) — Contacts
- **Update Contact Category** (`update-contact-category`) — Contacts
