store/update-customer changes a customer’s name, email address, or billing and shipping details.
Passwords cannot be set here, and trying is refused with an explanation rather than a schema error.
At a glance
| Ability | store/update-customer |
| Toolset | WooCommerce — toolset/woocommerce |
| Group | WooCommerce › Customers |
| Requires | WooCommerce, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
How it works
The password rule is the same as on creation and for the same reason: a password somebody else chose is not the customer’s. Send them the site’s own password reset instead — it is one link and it leaves the credential with the person it belongs to.
Changing an email to one that already has an account is refused. WordPress’s own behaviour there is unhelpful — the update fails in a way that is easy to read as success — so the collision is checked first and named.
Billing and shipping are partial: send the fields you are changing and the rest of the address is left alone. That matters because addresses are frequently half-filled, and a merge preserves what is there while a replacement would quietly blank it.
Changing a customer’s details does not change any order. Orders store their own copy of the address at the time of purchase, which is correct — an invoice should not change because somebody moved house.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
id | integer | Yes | Customer user ID. |
email | string | No | New email address. |
first_name | string | No | First name. |
last_name | string | No | Last name. |
billing | object | No | Billing address fields to change. |
shipping | object | No | Shipping address fields to change. |
password | string | Not accepted | Refused with an explanation. |
What comes back
| Name | Type | What it is |
|---|---|---|
customer | object | The customer after the write. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Update customer 318’s shipping postcode.
It resolves to one call:
{
"ability": "store/update-customer",
"parameters": {
"id": 318,
"shipping": { "postcode": "BS2 0PT" }
}
}Worth knowing
- Passwords are refused by name. Use the site’s password reset.
- A duplicate email is refused rather than failing quietly.
- Address fields merge — send only what changed.
- Existing orders keep the address they were placed with.
Related abilities
- Get Customer — read the current details
- Create Customer — when there is no account yet
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category