## §OIP SYSTEM ARTICLE — ArcAds (6 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
- **ARCADS_GENERATE** — Generate an ad image via ArcAds, poll to completion, store to R2, return a stable link
  when: you need to arcads generate
  args: model|prompt|aspectRatio|referenceImages|productId|enhance
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS_GENERATE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS_GENERATE&body=%3Cmodel%3E%7C%3Cprompt%3E%7C%3CaspectRatio%3E%7C%3CreferenceImages%3E%7C%3CproductId%3E%7C%3Cenhance%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS_GENERATE
- **ARCADS_VIDEO_GENERATE** — Generate a video via ArcAds, poll, store to R2, return a stable link
  when: you need to arcads video generate
  args: model|prompt|aspectRatio|referenceImages|duration|productId
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS_VIDEO_GENERATE&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS_VIDEO_GENERATE&body=%3Cmodel%3E%7C%3Cprompt%3E%7C%3CaspectRatio%3E%7C%3CreferenceImages%3E%7C%3Cduration%3E%7C%3CproductId%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS_VIDEO_GENERATE
- **ARCADS_UPLOAD** — Upload a file to ArcAds (presign + S3 PUT). Returns {filePath,fileId}; pass filePath in referenceImages. fileT
  when: you need to arcads upload
  args: source_url|file_type
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS_UPLOAD&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS_UPLOAD&body=%3Csource_url%3E%7C%3Cfile_type%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS_UPLOAD
- **ARCADS_CREDITS** — ArcAds credit usage this month. Returns {month,used,cap,remaining}. Cap from settings.arcads_monthly_credits (
  when: you need to arcads credits
  args: none
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS_CREDITS&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS_CREDITS&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS_CREDITS
- **ARCADS** — 
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS&body=%3Cyour%20request%20in%20plain%20words%3E&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS
- **ARCADS_ROUTES** — ArcAds HTTP unified entrypoint
  when: direct ArcAds REST ops (presigned uploads, products, assets, situations, fields)
  args: $1=op, $2..$N=positional args
  doc: https://miscsubjects.com/api/dispatch?key=ARCADS_ROUTES&format=markdown
  run: https://miscsubjects.com/api/dispatch?invoke=ARCADS_ROUTES&body=products&share=<TOKEN>
  history: https://miscsubjects.com/api/invocations?object_id=ARCADS_ROUTES

### 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