30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

Export Customers

store/export-customers releases customer records including names, email addresses and addresses.

It is asked for explicitly rather than by default, and it records that it was asked.

At a glance

Abilitystore/export-customers
ToolsetWooCommerce — toolset/woocommerce
GroupWooCommerce › Customers
RequiresWooCommerce, active on the site
Capabilitymanage_options
SafetyRead-only, but it releases personal data — and refuses to run without confirm: true, a recorded reason, and a capability beyond administrator.
RepeatableIdempotent — running it twice leaves the same result
Ships inAcrossAI Abilities Manager 0.0.34 and later

How it works

Each gate catches a different mistake. The flag catches an assistant reaching for customer data when aggregate numbers would have answered the question. The confirmation catches a request that was not meant to go this far. The recorded reason means the release is attributable afterwards. And the extra capability means being an administrator is not, by itself, sufficient.

That last one is the unusual gate and the most important. Administering a WordPress site is a technical role; releasing a list of named people is a decision with legal weight, and the two should not be the same permission.

The reason is recorded with who asked and how many records were released. That record is the thing you need when somebody asks, months later, why a customer list left the site.

Always paginated and hard-capped, so a single call cannot release the entire base. The response reports how many records it disclosed and what it withheld.

Password hashes, session tokens and payment provider customer references are never included, regardless of any flag. Those are credentials rather than personal data.

Input

NameTypeRequiredWhat it is
include_personal_databooleanYesRequired. Without it this refuses.
reasonstringYesWhy the export is needed. Recorded with who asked and how many records were released.
formatstringNoStructured rows or a CSV payload.
limitintegerNoHow many records to release.
offsetintegerNoWhere to start, for paging.
confirmbooleanYes — must be trueThe irreversibility gate. Without it the call is refused before anything is touched.

What comes back

NameTypeWhat it is
customersarrayThe released records, when the structured format is used.
csvstringThe CSV payload, when that format is used.
disclosed_countintegerHow many records were released.
total_matchingintegerHow many exist in total.
has_morebooleanWhether there are further pages.
withheldarrayWhat was not included, and never will be.
reasonstringThe reason as recorded.
successbooleanWhether the call completed.
messagestringA one-line summary of what happened, suitable for showing a human.
error_codestringPresent 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:

Export our customer list for the accountant, with a note of why.

It resolves to one call:

{
  "ability": "store/export-customers",
  "parameters": {
    "include_personal_data": true,
    "reason": "Year-end reconciliation requested by the accountant",
    "format": "csv",
    "limit": 500,
    "confirm": true
  }
}

Worth knowing

  • Needs a capability beyond administrator. This is deliberate.
  • The reason is recorded. So is who asked and how many records went out.
  • Hard-capped and paginated — one call cannot release everybody.
  • Credentials and payment provider references are never included.
  • Use store/list-customers if numbers would do.

Related abilities


Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager

Browse the rest: Every ability, by category


Keep reading