store/create-customer creates a customer account from an email address, with an optional name and billing or shipping address. WooCommerce ships nothing for this.
No password is accepted, and none is set to anything knowable.
At a glance
| Ability | store/create-customer |
| Toolset | WooCommerce — toolset/woocommerce |
| Group | WooCommerce › Customers |
| Requires | WooCommerce, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Not idempotent — each call changes the row set, so re-running is not a no-op |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
Why there is no password parameter that works
An account whose password an assistant chose is not the customer’s account. Whoever saw that exchange can sign in as them, and the customer has no way to know.
So a random password is generated, never returned anywhere, and the customer sets their own through the site’s password reset. The account is real and usable; nobody else ever held the key to it.
The password parameter exists in the schema purely so that attempting to set one returns an explanation rather than a bare schema rejection. It is declared in order to be refused.
The email must not already have an account. A duplicate is refused rather than silently attaching to the existing user.
Billing and shipping addresses can be set at creation, which saves a second call when migrating records in.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
email | string | Yes | Email address. Must not already have an account. |
username | string | No | Username. Defaults to the email address. |
first_name | string | No | First name. |
last_name | string | No | Last name. |
billing | object | No | Billing address fields — first_name, address_1, city, postcode, country and so on. |
shipping | object | No | Shipping address fields, same shape as billing. |
password | string | Not accepted | Declared only so that trying to set one returns an explanation. |
What comes back
| Name | Type | What it is |
|---|---|---|
customer | object | The created customer. |
note | string | The statement about how the password was handled. |
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:
Create a customer account for this email address with their billing address.
It resolves to one call:
{
"ability": "store/create-customer",
"parameters": {
"email": "customer@example.com",
"first_name": "Sam",
"billing": {
"address_1": "14 Avon Street",
"city": "Bristol",
"postcode": "BS2 0PT",
"country": "GB"
}
}
}Worth knowing
- No password is accepted. The customer sets their own through password reset.
- A duplicate email is refused, not merged.
- Not idempotent.
- The generated password is never returned to anyone.
Related abilities
- Update Customer — change their details afterwards
- Get Customer — read them back
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category