{
    "generator": "tools/generate-cli-llm-reference.php",
    "$schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "IAS suite WP-CLI command spec",
        "type": "object",
        "required": [
            "generator",
            "commands"
        ],
        "properties": {
            "generator": {
                "type": "string"
            },
            "commands": {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "command",
                        "plugin",
                        "slug",
                        "group",
                        "subcommand",
                        "tier",
                        "destructive",
                        "synopsis",
                        "options",
                        "returns",
                        "examples",
                        "related"
                    ],
                    "properties": {
                        "command": {
                            "type": "string"
                        },
                        "plugin": {
                            "type": "string"
                        },
                        "slug": {
                            "type": "string"
                        },
                        "group": {
                            "type": "string"
                        },
                        "subcommand": {
                            "type": "string"
                        },
                        "tier": {
                            "type": "string",
                            "enum": [
                                "free",
                                "commercial"
                            ]
                        },
                        "destructive": {
                            "type": "boolean"
                        },
                        "synopsis": {
                            "type": "string"
                        },
                        "returns": {
                            "type": "string"
                        },
                        "options": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "arg",
                                    "kind",
                                    "optional",
                                    "takes_value",
                                    "description"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "arg": {
                                        "type": "string"
                                    },
                                    "kind": {
                                        "type": "string",
                                        "enum": [
                                            "positional",
                                            "flag"
                                        ]
                                    },
                                    "optional": {
                                        "type": "boolean"
                                    },
                                    "takes_value": {
                                        "type": "boolean"
                                    },
                                    "description": {
                                        "type": "string"
                                    }
                                }
                            }
                        },
                        "examples": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "related": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    },
    "commands": [
        {
            "command": "wp ias",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "ias",
            "subcommand": "",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List the available IAS suite WP-CLI command groups (top-level discovery).",
            "options": [],
            "returns": "",
            "examples": [
                "wp ias"
            ],
            "related": []
        },
        {
            "command": "wp ias bundle-deals create",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "create",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Create a new bundle.",
            "options": [
                {
                    "name": "<name>",
                    "arg": "name",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle display name."
                },
                {
                    "name": "--products=<csv>",
                    "arg": "products",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Comma-separated WC product IDs. Each must exist, be published and purchasable, and must not itself be a bundle."
                },
                {
                    "name": "--discount=<spec>",
                    "arg": "discount",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Discount specification — one of `percent:<n>` (n = 0-100), `fixed:<amount>` (flat amount off the regular total), or `bundle:<price>` (a flat total price for the whole bundle)."
                },
                {
                    "name": "[--enabled]",
                    "arg": "enabled",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Create the bundle in the active state (default: disabled)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Validate and report what would be created without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals create \"Starter Pack\" --products=12,34,56 --discount=percent:15 --enabled",
                "wp ias bundle-deals create \"Flat Bundle\" --products=12,34 --discount=bundle:14.99 --dry-run"
            ],
            "related": [
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals delete",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "delete",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Delete a bundle and its synced (hidden) WooCommerce product.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle ID."
                },
                {
                    "name": "[--force]",
                    "arg": "force",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Override the purchase guard — delete even if the bundle has recorded purchases. This is NOT the confirmation flag; pass --yes to skip the prompt."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be deleted (including whether it would be refused) without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The deleted bundle_id and the linked_product_id that was removed.",
            "examples": [
                "wp ias bundle-deals delete 12",
                "wp ias bundle-deals delete 12 --force --yes",
                "wp ias bundle-deals delete 12 --dry-run"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals inspect",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "inspect",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals inspect"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals list",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List bundles.",
            "options": [
                {
                    "name": "[--enabled-only]",
                    "arg": "enabled-only",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Only list bundles whose master switch (is_active) is on."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals list",
                "wp ias bundle-deals list --enabled-only --format=json"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals show",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "show",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show a bundle's composition, pricing and schedule.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals show 12 --format=json"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals sync",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "sync",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Re-sync a bundle to its linked (hidden) WooCommerce product.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle ID."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt (suite-standard for write commands)."
                },
                {
                    "name": "[--force]",
                    "arg": "force",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Alias for --yes — re-sync without the confirmation prompt."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be synced without writing anything."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals sync 12",
                "wp ias bundle-deals sync 12 --yes",
                "wp ias bundle-deals sync 12 --dry-run"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals update",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals update",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "update",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Update fields on an existing bundle.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle ID."
                },
                {
                    "name": "[--name=<name>]",
                    "arg": "name",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "New bundle name."
                },
                {
                    "name": "[--products=<csv>]",
                    "arg": "products",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "New comma-separated WC product IDs (validated as for `create`)."
                },
                {
                    "name": "[--discount=<spec>]",
                    "arg": "discount",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "New discount specification (`percent:<n>`, `fixed:<amount>`, or `bundle:<price>`)."
                },
                {
                    "name": "[--enabled[=<bool>]]",
                    "arg": "enabled",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Set the active state. `--enabled` enables; `--enabled=0` disables."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Validate and report what would change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals update 12 --discount=percent:20",
                "wp ias bundle-deals update 12 --products=12,34,99 --enabled=0 --dry-run"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals validate"
            ]
        },
        {
            "command": "wp ias bundle-deals validate",
            "plugin": "ias-bundle-deals",
            "slug": "ias-bundle-deals",
            "group": "bundle-deals",
            "subcommand": "validate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Validate a bundle's integrity (products exist, prices/discount sound, synced).",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bundle ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias bundle-deals validate 12 --format=json"
            ],
            "related": [
                "wp ias bundle-deals create",
                "wp ias bundle-deals delete",
                "wp ias bundle-deals inspect",
                "wp ias bundle-deals list",
                "wp ias bundle-deals show",
                "wp ias bundle-deals sync",
                "wp ias bundle-deals update"
            ]
        },
        {
            "command": "wp ias license-activator audit-log list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List entries from the suite-wide CLI audit log.",
            "options": [
                {
                    "name": "[--since=<date>]",
                    "arg": "since",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Only entries on/after this date (anything strtotime understands)."
                },
                {
                    "name": "[--user=<id>]",
                    "arg": "user",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by the WP user ID that ran the command."
                },
                {
                    "name": "[--plugin=<slug>]",
                    "arg": "plugin",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by the plugin slug that emitted the entry."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator audit-log list --plugin=serial-keys --format=json"
            ],
            "related": []
        },
        {
            "command": "wp ias license-activator check-update",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "check-update",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Simulate the REST check-update payload for a product slug (debug aid).",
            "options": [
                {
                    "name": "<slug>",
                    "arg": "slug",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product update slug."
                },
                {
                    "name": "[--current-version=<version>]",
                    "arg": "current-version",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "If given, report whether an update is available relative to this version."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator check-update ias-serial-keys",
                "wp ias license-activator check-update ias-serial-keys --current-version=1.0.0"
            ],
            "related": [
                "wp ias license-activator inspect"
            ]
        },
        {
            "command": "wp ias license-activator inspect",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "inspect",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator inspect"
            ],
            "related": [
                "wp ias license-activator check-update"
            ]
        },
        {
            "command": "wp ias license-activator licenses activate",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "activate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Force-activate a licence key on a site (admin/support tool).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The licence key."
                },
                {
                    "name": "<site_url>",
                    "arg": "site_url",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The site URL to activate the licence on."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without recording the activation."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses activate IAS-XXXX-YYYY-ZZZZ https://customer.example"
            ],
            "related": [
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses deactivate",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "deactivate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Force-deactivate a site binding from a licence key (admin/support tool).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The licence key."
                },
                {
                    "name": "<site_url>",
                    "arg": "site_url",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The site URL to deactivate."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without recording the deactivation."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses deactivate IAS-XXXX-YYYY-ZZZZ https://customer.example"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses delete",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "delete",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete a licence key and its dependent rows (NON-RECOVERABLE).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The licence key to delete."
                },
                {
                    "name": "[--keep-audit]",
                    "arg": "keep-audit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Retain the licence's log rows (delete only the licence + activations)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { key_fingerprint — non-reversible key id; license_deleted — bool; activations_deleted — int; logs_deleted — int }.",
            "examples": [
                "wp ias license-activator licenses delete IAS-XXXX-YYYY-ZZZZ --yes",
                "wp ias license-activator licenses delete IAS-XXXX-YYYY-ZZZZ --keep-audit"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses delete-bulk",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "delete-bulk",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Bulk-delete every licence matching a JSON filter (NON-RECOVERABLE).",
            "options": [
                {
                    "name": "--filter=<json>",
                    "arg": "filter",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "A JSON object selecting which licences to delete. Honoured keys: status, product_id, customer_id, search. At least one is required."
                },
                {
                    "name": "[--keep-audit]",
                    "arg": "keep-audit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Retain each licence's log rows (delete only the licence + activations)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the matched count without deleting anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { total_matching — true (uncapped) match count; matched — number selected this run (≤1000); capped — true when total_matching exceeds the per-run cap; deleted — number deleted; activations_deleted — int; logs_deleted — int; fingerprints — non-reversible key ids }.",
            "examples": [
                "wp ias license-activator licenses delete-bulk --filter='{\"status\":\"expired\"}' --dry-run",
                "wp ias license-activator licenses delete-bulk --filter='{\"product_id\":42}' --yes"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses generate",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "generate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Issue one or more new license keys for a product.",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Assign the new licence(s) to this customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--quantity=<n>]",
                    "arg": "quantity",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Number of licences to issue."
                },
                {
                    "name": "[--limit=<n>]",
                    "arg": "limit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Activation limit per licence (0 = unlimited). Defaults to the product's configured limit, or 1."
                },
                {
                    "name": "[--expires=<date>]",
                    "arg": "expires",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Expiry date (anything strtotime understands). Omit for a lifetime licence."
                },
                {
                    "name": "[--note=<text>]",
                    "arg": "note",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Free-text note stored on each licence."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Validate and report what would be issued without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses generate 42 --customer=customer@example.com --quantity=3",
                "wp ias license-activator licenses generate SKU-PRO --expires=\"+1 year\" --dry-run"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses generate-bulk",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "generate-bulk",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Bulk-issue licences for a product, optionally one per customer from a file.",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "--count=<n>",
                    "arg": "count",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Number of licences to issue (the cap when --customer-list is also given)."
                },
                {
                    "name": "[--customer-list=<file>]",
                    "arg": "customer-list",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Path to a file with one customer reference (ID or email) per line; issues one assigned licence per resolvable line."
                },
                {
                    "name": "[--prefix=<text>]",
                    "arg": "prefix",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Free-text prefixed to the note stored on each issued licence."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned count without issuing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { product_id — resolved product; planned — licences intended; created — issued count; failed — failed count; keys — issued licence keys }.",
            "examples": [
                "wp ias license-activator licenses generate-bulk 42 --count=100",
                "wp ias license-activator licenses generate-bulk SKU-PRO --customer-list=/tmp/customers.txt"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List license keys with filters and pagination.",
            "options": [
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--product=<product>]",
                    "arg": "product",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by product (numeric ID or SKU)."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by license status (e.g. active, expired, revoked)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses list --status=active",
                "wp ias license-activator licenses list --customer=customer@example.com --format=json"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses regenerate",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses regenerate",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "regenerate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Regenerate the key for an existing licence (key rotation).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The existing licence key to rotate."
                },
                {
                    "name": "[--notify-customer]",
                    "arg": "notify-customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Best-effort email the new key to the licence's customer address."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without issuing or revoking anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses regenerate IAS-XXXX-YYYY-ZZZZ --notify-customer"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses revoke"
            ]
        },
        {
            "command": "wp ias license-activator licenses revoke",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "revoke",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Revoke a licence key (admin/support tool).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The licence key to revoke."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Free-text reason stored on the revocation log entry."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { status_before — licence status prior to revocation; status_after — \"revoked\"; reason — recorded reason; key_fingerprint — non-reversible key id }.",
            "examples": [
                "wp ias license-activator licenses revoke IAS-XXXX-YYYY-ZZZZ --reason=\"Chargeback\""
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate"
            ]
        },
        {
            "command": "wp ias license-activator licenses show",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "show",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the full state of one license key.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The license key."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses show IAS-XXXX-YYYY-ZZZZ --format=json"
            ],
            "related": [
                "wp ias license-activator licenses activate",
                "wp ias license-activator licenses deactivate",
                "wp ias license-activator licenses delete",
                "wp ias license-activator licenses delete-bulk",
                "wp ias license-activator licenses generate",
                "wp ias license-activator licenses generate-bulk",
                "wp ias license-activator licenses list",
                "wp ias license-activator licenses regenerate"
            ]
        },
        {
            "command": "wp ias license-activator licenses sites deactivate",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "deactivate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Force-deactivate one site binding from a licence key (admin/support tool).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The licence key."
                },
                {
                    "name": "<site_url>",
                    "arg": "site_url",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The site URL to deactivate."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { key_fingerprint — non-reversible key id; site_url — the deactivated site; plus the manager's result data }.",
            "examples": [
                "wp ias license-activator licenses sites deactivate IAS-XXXX-YYYY-ZZZZ https://customer.example"
            ],
            "related": [
                "wp ias license-activator licenses sites list"
            ]
        },
        {
            "command": "wp ias license-activator licenses sites list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List the site/domain activations bound to a license key.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The license key."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter activations by status."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator licenses sites list IAS-XXXX-YYYY-ZZZZ"
            ],
            "related": [
                "wp ias license-activator licenses sites deactivate"
            ]
        },
        {
            "command": "wp ias license-activator package delete-version",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "delete-version",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Unpublish a product's current package version (stop advertising updates).",
            "options": [
                {
                    "name": "<slug>",
                    "arg": "slug",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product update slug."
                },
                {
                    "name": "<version>",
                    "arg": "version",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The version to unpublish (must equal the product's current version)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { slug — the product slug; product_id — resolved product; version — the requested version; was_current — whether it matched; cleared — bool }.",
            "examples": [
                "wp ias license-activator package delete-version ias-serial-keys 1.4.2 --yes"
            ],
            "related": [
                "wp ias license-activator package list-versions"
            ]
        },
        {
            "command": "wp ias license-activator package list-versions",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list-versions",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List the available package version(s) for a product update slug.",
            "options": [
                {
                    "name": "<slug>",
                    "arg": "slug",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product update slug."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator package list-versions ias-serial-keys"
            ],
            "related": [
                "wp ias license-activator package delete-version"
            ]
        },
        {
            "command": "wp ias license-activator products list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List products that have licensing enabled.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator products list --format=json"
            ],
            "related": []
        },
        {
            "command": "wp ias license-activator webhooks delete",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "delete",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Delete one recorded webhook delivery row by its id.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The delivery record id to delete."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned change without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { id — the deleted record id; deleted — bool; remaining — count of records left }.",
            "examples": [
                "wp ias license-activator webhooks delete d1 --yes"
            ],
            "related": [
                "wp ias license-activator webhooks list",
                "wp ias license-activator webhooks rotate-secret"
            ]
        },
        {
            "command": "wp ias license-activator webhooks deliveries list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List recent webhook delivery attempts.",
            "options": [
                {
                    "name": "[--webhook=<id>]",
                    "arg": "webhook",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter to one webhook endpoint ID."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by delivery status (e.g. success, failed)."
                },
                {
                    "name": "[--since=<date>]",
                    "arg": "since",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Only deliveries on/after this date (anything strtotime understands)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator webhooks deliveries list --status=failed"
            ],
            "related": [
                "wp ias license-activator webhooks deliveries retry"
            ]
        },
        {
            "command": "wp ias license-activator webhooks deliveries retry",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "retry",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Re-dispatch a recorded webhook delivery by its id.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The delivery record id to retry."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve and report the planned retry without sending anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { id — the retried record id; retried — bool; host — target host; event — the webhook event }.",
            "examples": [
                "wp ias license-activator webhooks deliveries retry d1 --yes"
            ],
            "related": [
                "wp ias license-activator webhooks deliveries list"
            ]
        },
        {
            "command": "wp ias license-activator webhooks list",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List the configured webhook endpoint (secret is never shown).",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator webhooks list --format=json"
            ],
            "related": [
                "wp ias license-activator webhooks delete",
                "wp ias license-activator webhooks rotate-secret"
            ]
        },
        {
            "command": "wp ias license-activator webhooks rotate-secret",
            "plugin": "ias-license-activator",
            "slug": "ias-license-activator",
            "group": "license-activator",
            "subcommand": "rotate-secret",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Rotate the HMAC signing secret used for outbound webhook deliveries.",
            "options": [
                {
                    "name": "[--webhook=<id>]",
                    "arg": "webhook",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Logical webhook identifier to tag in the audit log (a single endpoint is configured suite-wide; this is recorded for traceability only)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report that a rotation would occur without changing the stored secret."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias license-activator webhooks rotate-secret --yes"
            ],
            "related": [
                "wp ias license-activator webhooks delete",
                "wp ias license-activator webhooks list"
            ]
        },
        {
            "command": "wp ias s3-storage audit-log",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "audit-log",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Read the plugin's admin audit log (settings, licence and upload events).",
            "options": [
                {
                    "name": "[--action=<action>]",
                    "arg": "action",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Only entries for this action (e.g. settings_changed, license_activated, license_deactivated, file_uploaded, connection_tested, cache_cleared)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage audit-log --format=json",
                "wp ias s3-storage audit-log --action=file_uploaded --per-page=100"
            ],
            "related": [
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage download-logs",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "download-logs",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Read recent S3 download-delivery log lines (WooCommerce file logs).",
            "options": [
                {
                    "name": "[--since=<date>]",
                    "arg": "since",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Only lines on/after this date (anything strtotime understands)."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Substring-match log lines for this customer reference (email fragment)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage download-logs --since=\"-7 days\" --format=json"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage inspect",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "inspect",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage inspect"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage inspect-bucket",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "inspect-bucket",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Inspect a bucket: region plus a sample of its objects.",
            "options": [
                {
                    "name": "<bucket>",
                    "arg": "bucket",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Bucket name."
                },
                {
                    "name": "[--prefix=<prefix>]",
                    "arg": "prefix",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict the object sample to this key prefix."
                },
                {
                    "name": "[--max=<max>]",
                    "arg": "max",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Maximum sample objects to list (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage inspect-bucket my-bucket --prefix=downloads/"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage list-products",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "list-products",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List products that have S3-backed downloadable files.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage list-products --format=json"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage migrate-from-s3",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "migrate-from-s3",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Pull a product's S3-backed download back to local storage (reverse offload).",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--bucket=<b>]",
                    "arg": "bucket",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Override the source bucket (defaults to the shortcode/option bucket)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report the object key, source bucket and planned local path without contacting S3."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The product ID, object key and the local path the download now points at.",
            "examples": [
                "wp ias s3-storage migrate-from-s3 42 --dry-run",
                "wp ias s3-storage migrate-from-s3 42 --yes"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage offload",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "offload",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Offload a single product's local download file to S3 (manual trigger).",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--source=<local_path>]",
                    "arg": "source",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Explicit local file to upload (defaults to the first local download file on the product)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Resolve the source and target and report what would be uploaded."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage offload 42",
                "wp ias s3-storage offload 42 --source=/var/www/uploads/big.zip --dry-run"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage purge-orphans",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage purge-orphans",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "purge-orphans",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete S3 objects that no product maps to and that are old enough.",
            "options": [
                {
                    "name": "[--filter=<json>]",
                    "arg": "filter",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Reserved JSON filter blob, recorded in the audit context for traceability."
                },
                {
                    "name": "[--max-age-days=<n>]",
                    "arg": "max-age-days",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Only objects older than this many days are eligible. REQUIRED on the real path; defaults to 30 for the dry-run preview only."
                },
                {
                    "name": "[--bucket=<b>]",
                    "arg": "bucket",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Bucket to scan (defaults to the configured ias_s3_default_bucket)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "List the orphans that would be deleted without contacting S3 for deletes."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The bucket, age threshold, number of objects scanned (and whether the scan hit the per-run cap), orphan count and — on the real path — every deleted key, the deleted count and the total bytes reclaimed.",
            "examples": [
                "wp ias s3-storage purge-orphans --max-age-days=90 --dry-run",
                "wp ias s3-storage purge-orphans --max-age-days=90 --yes"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage regenerate-link"
            ]
        },
        {
            "command": "wp ias s3-storage regenerate-link",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "regenerate-link",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Regenerate a fresh presigned download URL for an order item (support tool).",
            "options": [
                {
                    "name": "<order_item_id>",
                    "arg": "order_item_id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The WooCommerce order line-item ID."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report which files would be presigned without contacting S3."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage regenerate-link 1234"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans"
            ]
        },
        {
            "command": "wp ias s3-storage show",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "show",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the S3 file mapping and presign config for a product.",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage show 42 --format=json"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans"
            ]
        },
        {
            "command": "wp ias s3-storage verify-credentials",
            "plugin": "ias-s3-storage",
            "slug": "ias-s3-storage",
            "group": "s3-storage",
            "subcommand": "verify-credentials",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Test connectivity with the current S3 credentials.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias s3-storage verify-credentials"
            ],
            "related": [
                "wp ias s3-storage audit-log",
                "wp ias s3-storage download-logs",
                "wp ias s3-storage inspect",
                "wp ias s3-storage inspect-bucket",
                "wp ias s3-storage list-products",
                "wp ias s3-storage migrate-from-s3",
                "wp ias s3-storage offload",
                "wp ias s3-storage purge-orphans"
            ]
        },
        {
            "command": "wp ias serial-keys assign",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "assign",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Assign a free-pool key to a specific customer (support tool).",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The serial key string (must currently be in the available pool)."
                },
                {
                    "name": "<customer>",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID or email."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without creating an order or assigning the key."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys assign IAS-ABCD-1234-EFGH customer@example.com"
            ],
            "related": [
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys delete",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "delete",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete a single serial key.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The serial key string to delete."
                },
                {
                    "name": "[--keep-audit]",
                    "arg": "keep-audit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "No-op for serial keys (there is no per-key log to retain); recorded for cross-plugin CLI parity only."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be deleted without removing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, key, product_id, status, keep_audit, deleted }.",
            "examples": [
                "wp ias serial-keys delete IAS-ABCD-1234-EFGH --dry-run",
                "wp ias serial-keys delete IAS-ABCD-1234-EFGH --yes"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys delete-bulk",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "delete-bulk",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete every serial key matching a JSON filter (bulk, destructive).",
            "options": [
                {
                    "name": "--filter=<json>",
                    "arg": "filter",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Required JSON selector. Recognised keys: product_id (int), status (available|sold|revoked), search (substring of the key). Must select at least one constraint."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report how many keys match without deleting anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, filter, total_matching, matched, capped, deleted }.",
            "examples": [
                "wp ias serial-keys delete-bulk --filter='{\"status\":\"revoked\"}' --dry-run",
                "wp ias serial-keys delete-bulk --filter='{\"product_id\":42,\"status\":\"available\"}' --yes"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys export",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "export",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Export serial keys to a CSV or JSON file.",
            "options": [
                {
                    "name": "--file=<path>",
                    "arg": "file",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Destination file path."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Export FILE format (csv or json) — see the note above; this overloads the conventional output-format flag."
                },
                {
                    "name": "[--product=<product>]",
                    "arg": "product",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to one product (numeric ID or SKU)."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to keys with this status (available or sold)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report how many keys would be exported without writing the file."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys export --file=keys.csv --product=42",
                "wp ias serial-keys export --file=keys.json --format=json --status=available"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys generate",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "generate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Bulk-generate serial keys for a product.",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "<quantity>",
                    "arg": "quantity",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Number of keys to generate."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Assign the generated keys to this customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--prefix=<text>]",
                    "arg": "prefix",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Override the key prefix for this batch."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Validate and report what would be generated without writing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys generate 42 100",
                "wp ias serial-keys generate SKU-PRO 5 --customer=customer@example.com --dry-run"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys import",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "import",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Import serial keys for a product from a CSV/TXT file (one key per line).",
            "options": [
                {
                    "name": "--product=<product>",
                    "arg": "product",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product the keys belong to (numeric ID or SKU)."
                },
                {
                    "name": "--file=<path>",
                    "arg": "file",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Path to the import file (one key per line; first CSV column is used)."
                },
                {
                    "name": "[--update-existing]",
                    "arg": "update-existing",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Reserved. The importer is insert-only, so existing keys are still skipped; this flag is recorded for traceability only."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Parse and classify each row (new vs already-present) without importing."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys import --product=42 --file=keys.csv --dry-run",
                "wp ias serial-keys import --product=42 --file=keys.csv"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys inspect",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "inspect",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys inspect"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys list",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys list",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List serial keys with optional filters and pagination.",
            "options": [
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to keys assigned to this customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by status."
                },
                {
                    "name": "[--product=<product>]",
                    "arg": "product",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by product (numeric ID or SKU)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys list --status=available --product=42",
                "wp ias serial-keys list --customer=customer@example.com --format=json"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys redeem"
            ]
        },
        {
            "command": "wp ias serial-keys redeem",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "redeem",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Redeem a redemption code on a customer's behalf (support tool).",
            "options": [
                {
                    "name": "<code>",
                    "arg": "code",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The redemption code."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Redeem on behalf of this account (numeric WP user ID or email). Omit to redeem as a guest, in which case --email is required."
                },
                {
                    "name": "[--email=<email>]",
                    "arg": "email",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Guest email for the redemption when no --customer account is given."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Validate the code without redeeming it."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys redeem WELCOME-2026 --customer=42",
                "wp ias serial-keys redeem WELCOME-2026 --email=guest@example.com --dry-run"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list"
            ]
        },
        {
            "command": "wp ias serial-keys revoke",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "revoke",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Retire a serial key by setting a terminal `revoked` status.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The serial key string to revoke."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Optional free-text reason, recorded in the audit context."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be revoked without changing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, key, product_id, status_before, status_after, reason, revoked, already_applied }. `already_applied` is true when the key was already revoked (a no-op re-run); `revoked` is then false.",
            "examples": [
                "wp ias serial-keys revoke IAS-ABCD-1234-EFGH --dry-run",
                "wp ias serial-keys revoke IAS-ABCD-1234-EFGH --reason=\"chargeback\" --yes"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list"
            ]
        },
        {
            "command": "wp ias serial-keys show",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "show",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the full state of one serial key.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The serial key string."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys show IAS-ABCD-1234-EFGH --format=json"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list"
            ]
        },
        {
            "command": "wp ias serial-keys stock",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "stock",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report unassigned / assigned key counts per product.",
            "options": [
                {
                    "name": "[--product=<product>]",
                    "arg": "product",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict the report to one product (numeric ID or SKU)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys stock",
                "wp ias serial-keys stock --product=42 --format=json"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list"
            ]
        },
        {
            "command": "wp ias serial-keys whose",
            "plugin": "ias-serial-keys",
            "slug": "ias-serial-keys",
            "group": "serial-keys",
            "subcommand": "whose",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Resolve a serial key to its owning order and customer.",
            "options": [
                {
                    "name": "<key>",
                    "arg": "key",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The serial key string."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias serial-keys whose IAS-ABCD-1234-EFGH"
            ],
            "related": [
                "wp ias serial-keys assign",
                "wp ias serial-keys delete",
                "wp ias serial-keys delete-bulk",
                "wp ias serial-keys export",
                "wp ias serial-keys generate",
                "wp ias serial-keys import",
                "wp ias serial-keys inspect",
                "wp ias serial-keys list"
            ]
        },
        {
            "command": "wp ias single-purchase flush-cache",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "flush-cache",
            "tier": "free",
            "destructive": false,
            "synopsis": "Invalidate the ownership cache for a customer or the whole site.",
            "options": [
                {
                    "name": "[<customer>]",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": true,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID, login, or email. Omit and pass --all to flush the entire site."
                },
                {
                    "name": "[--all]",
                    "arg": "all",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Flush the ownership cache for every customer (and the whole cache group)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be flushed without clearing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt (only used for --all)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias single-purchase flush-cache 42",
                "wp ias single-purchase flush-cache --all --yes",
                "wp ias single-purchase flush-cache customer@example.com --dry-run"
            ],
            "related": [
                "wp ias single-purchase inspect",
                "wp ias single-purchase owned",
                "wp ias single-purchase owners",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase restore-ownership",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase inspect",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "inspect",
            "tier": "free",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias single-purchase inspect"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase owned",
                "wp ias single-purchase owners",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase restore-ownership",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase owned",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "owned",
            "tier": "free",
            "destructive": false,
            "synopsis": "List the products a customer already owns.",
            "options": [
                {
                    "name": "<customer>",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID, login, or email. A bare email with no matching account is treated as a guest (only resolves when the guest_mode setting is 'email')."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias single-purchase owned 42",
                "wp ias single-purchase owned customer@example.com --format=json"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase inspect",
                "wp ias single-purchase owners",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase restore-ownership",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase owners",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "owners",
            "tier": "free",
            "destructive": false,
            "synopsis": "List the customers who own a product (inverse ownership query).",
            "options": [
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--max-orders=<n>]",
                    "arg": "max-orders",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Safety cap on the number of orders scanned."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of owners (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Owners per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias single-purchase owners 42",
                "wp ias single-purchase owners SKU-123 --format=json"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase inspect",
                "wp ias single-purchase owned",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase restore-ownership",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase purge-customer",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "purge-customer",
            "tier": "free",
            "destructive": true,
            "synopsis": "GDPR hard-purge: drop ALL ownership-related records and cache for a customer.",
            "options": [
                {
                    "name": "<customer>",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID or email. Accepted even when the underlying account has already been deleted."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Optional free-text reason, recorded in the audit context."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be purged without changing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, customer, customer_id, customer_email, reason, cleared, rate_limit_transients }.",
            "examples": [
                "wp ias single-purchase purge-customer 42 --dry-run",
                "wp ias single-purchase purge-customer gone@example.com --reason=\"GDPR erasure\" --yes"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase inspect",
                "wp ias single-purchase owned",
                "wp ias single-purchase owners",
                "wp ias single-purchase restore-ownership",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase restore-ownership",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "restore-ownership",
            "tier": "free",
            "destructive": false,
            "synopsis": "Restore a customer's ownership of a single product (inverse of revoke-ownership).",
            "options": [
                {
                    "name": "<customer>",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID, login, or email."
                },
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Optional free-text reason, recorded in the audit context."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be restored without changing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, customer, customer_id, customer_email, product_id, reason, restored }.",
            "examples": [
                "wp ias single-purchase restore-ownership 42 100 --dry-run",
                "wp ias single-purchase restore-ownership customer@example.com SKU-123 --reason=\"reinstated\" --yes"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase inspect",
                "wp ias single-purchase owned",
                "wp ias single-purchase owners",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase revoke-ownership"
            ]
        },
        {
            "command": "wp ias single-purchase revoke-ownership",
            "plugin": "ias-single-purchase",
            "slug": "ias-single-purchase",
            "group": "single-purchase",
            "subcommand": "revoke-ownership",
            "tier": "free",
            "destructive": false,
            "synopsis": "Revoke a customer's ownership of a single product.",
            "options": [
                {
                    "name": "<customer>",
                    "arg": "customer",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Customer reference — numeric WP user ID, login, or email."
                },
                {
                    "name": "<product>",
                    "arg": "product",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Product reference — numeric ID or SKU."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Optional free-text reason, recorded in the audit context."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be revoked without changing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "A JSON object: { dry_run, action, customer, customer_id, customer_email, product_id, reason, revoked }.",
            "examples": [
                "wp ias single-purchase revoke-ownership 42 100 --dry-run",
                "wp ias single-purchase revoke-ownership customer@example.com SKU-123 --reason=\"chargeback\" --yes"
            ],
            "related": [
                "wp ias single-purchase flush-cache",
                "wp ias single-purchase inspect",
                "wp ias single-purchase owned",
                "wp ias single-purchase owners",
                "wp ias single-purchase purge-customer",
                "wp ias single-purchase restore-ownership"
            ]
        },
        {
            "command": "wp ias subscriptions cancel",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "cancel",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Cancel a subscription, immediately or at the end of the current period.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--immediate]",
                    "arg": "immediate",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Cancel now instead of at the end of the current paid period."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Note recorded against the cancellation."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without changing the status."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions cancel 17",
                "wp ias subscriptions cancel 17 --immediate --reason=\"Fraud\""
            ],
            "related": [
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions delete",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "delete",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete a subscription and all its rows (NON-RECOVERABLE).",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--keep-audit]",
                    "arg": "keep-audit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Preserve the subscription's event-log rows (ias_subscription_log)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would be deleted without removing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The deleted subscription ID and the list of tables cleared.",
            "examples": [
                "wp ias subscriptions delete 17 --dry-run",
                "wp ias subscriptions delete 17 --keep-audit --yes"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions delete-bulk",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "delete-bulk",
            "tier": "commercial",
            "destructive": true,
            "synopsis": "Permanently delete every subscription matching a JSON filter (NON-RECOVERABLE).",
            "options": [
                {
                    "name": "--filter=<json>",
                    "arg": "filter",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Required JSON object selecting which subscriptions to delete. Supported keys: status (string), customer_id (int), product_id (int), import_batch (string — the `wcsimp-…` batch minted by `import-wcs`, which makes a bad import reversible with the existing destructive machinery rather than a second destructive command). Keys combine as AND."
                },
                {
                    "name": "[--keep-audit]",
                    "arg": "keep-audit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Preserve each subscription's event-log rows (ias_subscription_log)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report the matched set and counts without removing anything."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The matched count and the deleted count.",
            "examples": [
                "wp ias subscriptions delete-bulk --filter='{\"status\":\"cancelled\"}' --dry-run",
                "wp ias subscriptions delete-bulk --filter='{\"status\":\"expired\",\"product_id\":42}' --yes"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions dunning-ladder",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "dunning-ladder",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the dunning (retry) schedule and current retry state of a subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions dunning-ladder 17 --format=json"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions export",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "export",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Export subscriptions to a JSON or CSV file.",
            "options": [
                {
                    "name": "--file=<path>",
                    "arg": "file",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Destination file path."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Export FILE format. JSON is the default because a subscription has nested line items, related orders and meta; CSV flattens those to JSON-encoded cells and is for spreadsheets rather than for migration."
                },
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to these statuses (comma-separated, e.g. active,on-hold)."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to one customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--gateway=<gateway>]",
                    "arg": "gateway",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to one payment gateway (e.g. stripe, ppcp-gateway)."
                },
                {
                    "name": "[--product=<product>]",
                    "arg": "product",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to one product ID."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report how many subscriptions would be exported without writing the file."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions export --file=subscriptions.json",
                "wp ias subscriptions export --file=active.json --status=active",
                "wp ias subscriptions export --file=subs.csv --format=csv --gateway=stripe",
                "wp ias subscriptions export --file=/tmp/all.json --dry-run"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions fees list",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List the sign-up fee(s) attached to a subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions fees list 17 --format=json"
            ],
            "related": [
                "wp ias subscriptions fees waive"
            ]
        },
        {
            "command": "wp ias subscriptions fees waive",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "waive",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Record a fee-waiver marker on a subscription (bookkeeping only).",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "<fee_id>",
                    "arg": "fee_id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Fee identifier to waive (e.g. sign_up)."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Note recorded against the waiver."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without recording the waiver."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The subscription ID, the waived fee id and the resulting waived-fee marker list (a reporting record; it does not change any charge).",
            "examples": [
                "wp ias subscriptions fees waive 17 sign_up --dry-run",
                "wp ias subscriptions fees waive 17 sign_up --reason=\"Goodwill\" --yes"
            ],
            "related": [
                "wp ias subscriptions fees list"
            ]
        },
        {
            "command": "wp ias subscriptions import-wcs",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "import-wcs",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Import WooCommerce Subscriptions data into IAS Subscriptions (same store).",
            "options": [
                {
                    "name": "[--execute]",
                    "arg": "execute",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Actually write the subscriptions. Without this the command only reports."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Explicit alias for the default behaviour (report only)."
                },
                {
                    "name": "[--reconcile]",
                    "arg": "reconcile",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Re-read the source behind every already-imported subscription and report drift instead of importing. Read-only; runnable any time after an import."
                },
                {
                    "name": "[--batch=<id>]",
                    "arg": "batch",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "With --reconcile, restrict to one import batch."
                },
                {
                    "name": "[--status=<list>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to these statuses (comma-separated, e.g. active,on-hold)."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Restrict to one customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--limit=<n>]",
                    "arg": "limit",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Maximum number of source subscriptions to consider."
                },
                {
                    "name": "[--offset=<n>]",
                    "arg": "offset",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Skip this many source subscriptions."
                },
                {
                    "name": "[--source-backend=<backend>]",
                    "arg": "source-backend",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Which storage backend to read the source from."
                },
                {
                    "name": "[--overdue=<policy>]",
                    "arg": "overdue",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "What to do with active subscriptions whose next payment is already in the past. `bill` imports them as-is and the renewal sweep charges them once (the WCS-faithful behaviour); `hold` imports them as on-hold so nothing bills until reviewed."
                },
                {
                    "name": "[--allow-wcs-active]",
                    "arg": "allow-wcs-active",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Proceed even though the real WooCommerce Subscriptions plugin is active."
                },
                {
                    "name": "[--report=<path>]",
                    "arg": "report",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Write the full per-record detail to a JSON file."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt on --execute."
                }
            ],
            "returns": "A JSON summary: what would be created, what was skipped and why, every warning class with the source IDs it applies to, the unmappable records with reasons, and an `expected_next_charges` preview so the money can be reviewed before anything is written.",
            "examples": [
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions import-wcs --status=active --report=/tmp/import.json",
                "wp ias subscriptions import-wcs --execute --overdue=hold --yes",
                "wp ias subscriptions import-wcs --reconcile --batch=wcsimp-20260806-a1b2"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions inspect",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "inspect",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Report the plugin slug, version and CLI environment.",
            "options": [
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions inspect"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect-gateway",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions inspect-gateway",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "inspect-gateway",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Inspect a payment gateway's configuration and dunning policy.",
            "options": [
                {
                    "name": "<gateway>",
                    "arg": "gateway",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Gateway to inspect."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions inspect-gateway stripe"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions links"
            ]
        },
        {
            "command": "wp ias subscriptions links",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "links",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the License Activator link state for a subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions links 17 --format=json"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions list",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "list",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "List subscriptions with filters and pagination.",
            "options": [
                {
                    "name": "[--status=<status>]",
                    "arg": "status",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by status (comma-separated for multiple, e.g. active,on-hold)."
                },
                {
                    "name": "[--customer=<customer>]",
                    "arg": "customer",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by customer (numeric WP user ID or email)."
                },
                {
                    "name": "[--gateway=<gateway>]",
                    "arg": "gateway",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Filter by payment gateway/method ID (e.g. stripe, ppcp-gateway)."
                },
                {
                    "name": "[--page=<page>]",
                    "arg": "page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Page of results (1-based)."
                },
                {
                    "name": "[--per-page=<per-page>]",
                    "arg": "per-page",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Results per page (capped at 1000)."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions list --status=active,on-hold",
                "wp ias subscriptions list --customer=42 --gateway=stripe --format=json"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions pause",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "pause",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Pause (put on-hold) an active subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--reason=<text>]",
                    "arg": "reason",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Note recorded against the status change."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without changing the status."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions pause 17 --reason=\"Customer request\""
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions reactivate",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "reactivate",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Reactivate a cancelled or expired subscription (admin revival path).",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--force]",
                    "arg": "force",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Revive even if the subscription has been terminal longer than the window."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without changing the status."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions reactivate 17",
                "wp ias subscriptions reactivate 17 --force --yes"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions renew",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "renew",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Process a renewal cycle for a subscription now.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without creating an order or charging."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions renew 17 --dry-run",
                "wp ias subscriptions renew 17 --yes"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions resume",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "resume",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Resume (reactivate) a paused subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without changing the status."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions resume 17"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions show",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "show",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Show the lifecycle and entitlement state of one subscription.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "",
            "examples": [
                "wp ias subscriptions show 17 --format=json"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions switch",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "switch",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Switch a subscription to a different plan variation.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "<new_variation_id>",
                    "arg": "new_variation_id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "The variation ID of the plan to switch to (must belong to the same parent product)."
                },
                {
                    "name": "[--prorate=<bool>]",
                    "arg": "prorate",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Whether to compute and report the would-be proration charge for reference."
                },
                {
                    "name": "[--immediate]",
                    "arg": "immediate",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Apply the switch to the subscription now instead of at the next renewal."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without storing the pending switch or applying it."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The resulting status, variation and recurring total (after, when --immediate).",
            "examples": [
                "wp ias subscriptions switch 17 88 --dry-run",
                "wp ias subscriptions switch 17 88 --immediate --yes"
            ],
            "related": [
                "wp ias subscriptions cancel",
                "wp ias subscriptions delete",
                "wp ias subscriptions delete-bulk",
                "wp ias subscriptions dunning-ladder",
                "wp ias subscriptions export",
                "wp ias subscriptions import-wcs",
                "wp ias subscriptions inspect",
                "wp ias subscriptions inspect-gateway"
            ]
        },
        {
            "command": "wp ias subscriptions trial end",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "end",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "End a subscription's trial immediately so billing can proceed.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without clearing the trial date."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The subscription ID and the trial_end date that was cleared.",
            "examples": [
                "wp ias subscriptions trial end 17 --dry-run",
                "wp ias subscriptions trial end 17 --yes"
            ],
            "related": [
                "wp ias subscriptions trial extend"
            ]
        },
        {
            "command": "wp ias subscriptions trial extend",
            "plugin": "ias-subscriptions",
            "slug": "ias-subscriptions",
            "group": "subscriptions",
            "subcommand": "extend",
            "tier": "commercial",
            "destructive": false,
            "synopsis": "Extend a subscription's trial window by a number of days.",
            "options": [
                {
                    "name": "<id>",
                    "arg": "id",
                    "kind": "positional",
                    "optional": false,
                    "takes_value": true,
                    "description": "Subscription ID."
                },
                {
                    "name": "--days=<n>",
                    "arg": "days",
                    "kind": "flag",
                    "optional": false,
                    "takes_value": true,
                    "description": "Number of days to extend the trial by (positive integer)."
                },
                {
                    "name": "[--dry-run]",
                    "arg": "dry-run",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Report what would happen without changing the trial date."
                },
                {
                    "name": "[--yes]",
                    "arg": "yes",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": false,
                    "description": "Skip the confirmation prompt."
                },
                {
                    "name": "[--format=<format>]",
                    "arg": "format",
                    "kind": "flag",
                    "optional": true,
                    "takes_value": true,
                    "description": "Output format."
                }
            ],
            "returns": "The subscription ID with the old and new trial_end dates.",
            "examples": [
                "wp ias subscriptions trial extend 17 --days=7 --dry-run",
                "wp ias subscriptions trial extend 17 --days=14 --yes"
            ],
            "related": [
                "wp ias subscriptions trial end"
            ]
        }
    ]
}
