---
name: arcads-to-r2
description: Discover and invoke the ARCADS_TO_R2 directory capability using its live contract. Use when a request maps to this exact capability.
---

# ARCADS_TO_R2

This Skill is the behavioral expression of [the ARCADS_TO_R2 directory article](/a/directory/ARCADS_TO_R2). The directory row remains the executable contract.

## Operate

1. Read GET /api/directory/ARCADS_TO_R2 immediately before use.
2. Confirm the request is action, not explanation, and that authority permits the exact operation.
3. Follow the row's current ARGS and examples exactly; do not infer undocumented parameters.
4. Invoke POST /api/dispatch with {"key":"ARCADS_TO_R2","body":"<row-shaped args>"}.
5. Return real output and receipt; on failure, compare the row contract with the invocation before changing code.

## Human explanation

# WHAT: Poll a finished ArcAds render by arcads_id and re-store its bytes to R2, returning a stable https://miscsubjects.com/img/ link (permanent, not a presigned/expiring S3 url). Waits up to 120s for the render. # WHEN_TO_USE: after ARCADS_GENERATE / ARCADS_VIDEO_GENERATE returns an arcads_id, to get the durable asset link for the sheet / a text / an ad. # ARGS: $1 = arcads_id, $2 = model label (optional, for the filename). # EX: [ARCADS_TO_R2]9a14205f-3683-4231-abc4-bf6228017c0a|gpt-image[/ARCADS_TO_R2] ["$1","$2"]

## Call it

Every spelling below is the same call, with this row's own example arguments. `$TERMINAL_KEY` and `$MCP_TOKEN` are the owner's vault variables. Every spelling, with Run: https://miscsubjects.com/console#/api/ARCADS_TO_R2

### HTTP · curl — the canonical call

Any terminal or script. {key, body}: the arguments are one string, pipe-separated in the order below. The answer is {ok, ran, result, trace_id, receipt}.

```bash
curl -sS -X POST 'https://ops.miscsubjects.com/api/dispatch' \
  -H "x-terminal-key: $TERMINAL_KEY" \
  -H 'content-type: application/json' \
  --data '{"key":"ARCADS_TO_R2","body":"133f2591-a527-4608-9b0b-9307fd49a225|gpt-image"}'
```

### HTTP · curl — named arguments

The same door with arguments by name: dispatch puts them in the row's order. Add "idempotency_key":"…" to make a retry safe (72 hours), "shape":true to see the request without sending it.

```bash
curl -sS -X POST 'https://ops.miscsubjects.com/api/dispatch' \
  -H "x-terminal-key: $TERMINAL_KEY" \
  -H 'content-type: application/json' \
  --data '{"key":"ARCADS_TO_R2","args":{"arcads_id":"133f2591-a527-4608-9b0b-9307fd49a225","model_label":"gpt-image"}}'
```

### HTTP · One URL — Safari, a Shortcut, any fetch tool

A GET that runs the call from one address. The address holds a link scoped to this row that expires (ttl in seconds, uses= to cap the count) — never the master key. https://miscsubjects.com/web/run/ARCADS_TO_R2?body=…&share=… is the same call for a browser model. Run mints a one-use link for itself.

```
# 1. a link that runs only ARCADS_TO_R2, for an hour (share_token in the answer):
curl -sS 'https://ops.miscsubjects.com/api/dispatch?mint_share=1&scope=row:ARCADS_TO_R2&ttl=3600' \
  -H "x-terminal-key: $TERMINAL_KEY"

# 2. the address — paste it in Safari, a Shortcut or a model's fetch tool:
https://ops.miscsubjects.com/api/dispatch?invoke=ARCADS_TO_R2&body=133f2591-a527-4608-9b0b-9307fd49a225%7Cgpt-image&share=<share_token>
```

### MCP · MCP over HTTP — misc_run

The build's MCP server. misc_run reaches every row by key and leaves a receipt; misc_find finds the key from a phrase. The answer is result.content[0].text.

```bash
curl -sS -X POST 'https://ops.miscsubjects.com/api/mcp' \
  -H 'accept: application/json, text/event-stream' \
  -H "authorization: Bearer $MCP_TOKEN" \
  -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"misc_run","arguments":{"key":"ARCADS_TO_R2","args":{"arcads_id":"133f2591-a527-4608-9b0b-9307fd49a225","model_label":"gpt-image"}}}}'
```

### MCP · Claude Code

Claude Code (terminal, desktop, web). The same server works in any Claude Code session once added.

```
# once, on any machine:
claude mcp add --transport http miscsubjects https://ops.miscsubjects.com/api/mcp --header "Authorization: Bearer $MCP_TOKEN"
# then in a session, the model calls:
mcp__miscsubjects__misc_run {"key":"ARCADS_TO_R2","args":{"arcads_id":"133f2591-a527-4608-9b0b-9307fd49a225","model_label":"gpt-image"}}
```

### CLI · misc (on your Mac)

The misc CLI in ~/.local/bin: its words go to /api/resolve (plan, then run), with TERMINAL_KEY from the vault. Arguments are positional, in the order above. `misc find "words"` finds a row.

```bash
misc run ARCADS_TO_R2 133f2591-a527-4608-9b0b-9307fd49a225 gpt-image
misc arcads to r2 133f2591-a527-4608-9b0b-9307fd49a225 gpt-image
```

### CLI · console-app

The Console's own CLI. It reads the key from ~/.build-vault.env or `console-app login`.

```bash
npm install -g https://miscsubjects.com/download/llmasos-console-1.1.0.tgz   # once
console-app call ARCADS_TO_R2 '133f2591-a527-4608-9b0b-9307fd49a225|gpt-image'
console-app how ARCADS_TO_R2   # this page, in the terminal
```

### CLI · One line of text — the build grammar

/api/resolve parses the same line everywhere: "run KEY a b" (arguments in order, quoted when they hold spaces), the key's words ("arcads to r2 …"), or a phrase it matches to a row. POST runs; {"run":false} returns the plan without running it.

```
# typed, texted to the build, or emitted by a model with no tools:
run ARCADS_TO_R2 133f2591-a527-4608-9b0b-9307fd49a225 gpt-image

curl -sS -X POST 'https://ops.miscsubjects.com/api/resolve' \
  -H "x-terminal-key: $TERMINAL_KEY" \
  -H 'content-type: application/json' \
  --data '{"line":"run ARCADS_TO_R2 133f2591-a527-4608-9b0b-9307fd49a225 gpt-image","run":true}'
```

### Agents · Tag form — inside an answer

What a model in this build writes mid-answer to call a row; both tags always, even with nothing between them. {"emit": text} runs every tag in a piece of text and returns each result.

```
[ARCADS_TO_R2]133f2591-a527-4608-9b0b-9307fd49a225|gpt-image[/ARCADS_TO_R2]

# run text that carries tags, exactly as a model wrote it:
curl -sS -X POST 'https://ops.miscsubjects.com/api/dispatch' \
  -H "x-terminal-key: $TERMINAL_KEY" \
  -H 'content-type: application/json' \
  --data '{"emit":"[ARCADS_TO_R2]133f2591-a527-4608-9b0b-9307fd49a225|gpt-image[/ARCADS_TO_R2]"}'
```

### Phone · iPhone Shortcut — Get Contents of URL

A Shortcut on the phone, a Siri phrase, an Action Button, or an automation. Swap body for Ask for Input to fill arguments at run time.

```
Action:   Get Contents of URL
URL:      https://ops.miscsubjects.com/api/dispatch
Method:   POST
Headers:  x-terminal-key  →  (Text) your terminal key
          content-type    →  application/json
Request Body: JSON
          key   (Text)  →  ARCADS_TO_R2
          body  (Text)  →  133f2591-a527-4608-9b0b-9307fd49a225|gpt-image
Then:     Get Dictionary Value  result  from  Contents of URL
```

### Webhook · A webhook any service can call

Stripe, GitHub, Slack, Zapier, a form, a cron elsewhere. The hook id is the credential for an unsigned sender and it may run nothing but ARCADS_TO_R2. mode "sync" answers with the result; "async" answers 202 at once.

```
# 1. once: make a hook that may run only ARCADS_TO_R2 (the answer holds its id and url)
curl -sS -X POST 'https://ops.miscsubjects.com/api/hooks' \
  -H "x-terminal-key: $TERMINAL_KEY" \
  -H 'content-type: application/json' \
  --data '{"label":"ARCADS_TO_R2 webhook","source":"url","allow_keys":["ARCADS_TO_R2"],"effects_max":"write","mode":"sync"}'

# 2. then any service POSTs the arguments, by name, to that url:
curl -sS -X POST 'https://ops.miscsubjects.com/hook/<hook id>/ARCADS_TO_R2' \
  -H 'content-type: application/json' \
  --data '{"arcads_id":"133f2591-a527-4608-9b0b-9307fd49a225","model_label":"gpt-image"}'
```

### Upstream · What runs it

Runs inside the build's own Worker as arcadsToR2. It has no outside door of its own; every spelling above reaches it.

```
Runs inside the build's own Worker as arcadsToR2. It has no outside door of its own; every spelling above reaches it.
```
