01Run it
Straight from the command's own help.
p202 ltv product upsert --sku PRO-1 --name "Pro plan" --price 4902What 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 formats03Build your command
Pick values and the command line writes itself, quoted and ready to paste.
p202 ltv product upsertSet flags below; the command updates as you type.
04Flags
4 flags, plus the global flags every command takes.
| Flag | What it does |
|---|---|
| --external-product-idstringrequired, or --sku | Your product id (the key) |
| --namestring | Product name |
| --pricestring | List price in the account currency |
| --skustringrequired, or --external-product-id | SKU (the key when there is no --external-product-id) |
05How it works
Keyed by --external-product-id, or by --sku when there is none. A field not given keeps its stored value.
p202 ltv product upsert --sku PRO-1 --name "Pro plan" --price 49
06For agents
Running this from an agent
- Read the same facts as JSON:
p202 commands ltv product upsert --json. - With
AI_AGENT,CLAUDECODEor another agent variable set, output is compact JSON and errors arrive on stderr as a JSON envelope with ahint. - Exit codes: 0 ok, 1 bad input, 2 auth, 3 network, 4 server error, 5 partial failure.
- This command writes and cannot be staged:
--stagedis refused before anything is sent. Have a person run it, or give the agent a key without write scope.
{
"path": "p202 ltv product upsert",
"use": "upsert (--external-product-id <id> | --sku <sku>)",
"short": "Create or update a product keyed by your product id (or sku); revenue line items name it the same way",
"long": "Keyed by --external-product-id, or by --sku when there is none. A field not given keeps its\nstored value.\n\n p202 ltv product upsert --sku PRO-1 --name \"Pro plan\" --price 49",
"runnable": true,
"flags": [
{
"name": "external-product-id",
"type": "string",
"default": "",
"usage": "Your product id (the key)",
"required": false
},
{
"name": "name",
"type": "string",
"default": "",
"usage": "Product name",
"required": false
},
{
"name": "price",
"type": "string",
"default": "",
"usage": "List price in the account currency",
"required": false
},
{
"name": "sku",
"type": "string",
"default": "",
"usage": "SKU (the key when there is no --external-product-id)",
"required": false
}
]
}