p202 ltv customer merge

Merge one customer into another: the source's aliases, revenue, subscriptions and fields move to the target (irreversible)

New in 1.9.77Writescannot be staged
All commands

01Run it

Straight from the command's own help.

p202 ltv customer merge 42 --from 57

02What you get

Pick the shape you need. People get a table. Add --json, --csv or --ndjson for scripts, or -q for ids only. An AI agent gets compact JSON without asking. All output formats

03Build your command

Pick values and the command line writes itself, quoted and ready to paste.

p202 ltv customer merge

Set flags below; the command updates as you type.

04Flags

2 flags, plus the global flags every command takes.

FlagWhat it does
--force, -fboolSkip the confirmation prompt
--fromstringrequiredThe customer merged INTO the target and retired (required)

05How it works

Moves everything of --from (aliases, revenue events, conversions, subscriptions, custom field values, engagement) onto the target, recomputes the target's totals, and retires the source (it points at the target from then on). The target's own custom field values win a conflict. It cannot be undone, so it asks first; --force skips the question.

p202 ltv customer merge 42 --from 57

06For agents

Running this from an agent

  • Read the same facts as JSON: p202 commands ltv customer merge --json.
  • With AI_AGENT, CLAUDECODE or another agent variable set, output is compact JSON and errors arrive on stderr as a JSON envelope with a hint.
  • Exit codes: 0 ok, 1 bad input, 2 auth, 3 network, 4 server error, 5 partial failure.
  • This command writes and cannot be staged: --staged is refused before anything is sent. Have a person run it, or give the agent a key without write scope.
p202 commands ltv customer merge --json
{
  "path": "p202 ltv customer merge",
  "use": "merge <target-customer-id> --from <source-customer-id>",
  "short": "Merge one customer into another: the source's aliases, revenue, subscriptions and fields move to the target (irreversible)",
  "long": "Moves everything of --from (aliases, revenue events, conversions, subscriptions, custom field\nvalues, engagement) onto the target, recomputes the target's totals, and retires the source\n(it points at the target from then on). The target's own custom field values win a conflict.\nIt cannot be undone, so it asks first; --force skips the question.\n\n  p202 ltv customer merge 42 --from 57",
  "runnable": true,
  "flags": [
    {
      "name": "force",
      "shorthand": "f",
      "type": "bool",
      "default": "false",
      "usage": "Skip the confirmation prompt",
      "required": false
    },
    {
      "name": "from",
      "type": "string",
      "default": "",
      "usage": "The customer merged INTO the target and retired (required)",
      "required": true
    }
  ]
}