## §OIP SYSTEM ARTICLE — DUOPLUS (4 operations)
A generated article for one OIP shelf. It lists every operation in this API/CLI/MCP/device/model/core subsystem, links each leaf article, and gives the ledger path for proof.

### Read Order
- scan operations
- open a leaf doc
- run via run_now or POST /api/dispatch
- open receipt
- repair/replay if needed

### Operations
- **DUOPLUS_POWER_ON** — Batch power on DuoPlus cloud phones. ARGS: $1=comma-separated phone ids. EX: [DUOPLUS_POWER_ON]id1,id2[/DUOPLU
  doc: https://miscsubjects.com/api/dispatch?key=DUOPLUS_POWER_ON&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=DUOPLUS_POWER_ON&body=%3Carg1%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=DUOPLUS_POWER_ON
- **DUOPLUS_POWER_OFF** — Batch power off DuoPlus cloud phones. ARGS: $1=comma-separated phone ids. EX: [DUOPLUS_POWER_OFF]id1[/DUOPLUS_
  doc: https://miscsubjects.com/api/dispatch?key=DUOPLUS_POWER_OFF&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=DUOPLUS_POWER_OFF&body=%3Carg1%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=DUOPLUS_POWER_OFF
- **DUOPLUS_PHONES** — List DuoPlus cloud phones (status, adb address, region, expiry). ARGS: none. EX: [DUOPLUS_PHONES][/DUOPLUS_PHO
  doc: https://miscsubjects.com/api/dispatch?key=DUOPLUS_PHONES&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=DUOPLUS_PHONES&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=DUOPLUS_PHONES
- **DUOPLUS_STATUS** — DuoPlus cloud-phone API state (self-serve key: console → Automation → API → ~/.miscsubjects/duoplus_key). ARGS
  doc: https://miscsubjects.com/api/dispatch?key=DUOPLUS_STATUS&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=DUOPLUS_STATUS&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=DUOPLUS_STATUS

### Troubleshooting
- If a row's example has placeholders, replace only the placeholder values and preserve separators.
- If a call fails, open its receipt and repair it with POST /api/dispatch {key, body, repairs:'inv_ID'}.
- If token scope denies this system, ask the owner for a row:/rows:/pfx: token scoped to the exact operation set.

Back to the tree: https://miscsubjects.com/api/dispatch?map=1&format=markdown