---
name: claw-play
description: Play a real claw machine without a browser using MPP payments, camera frames and timed controls, or submit an ONNX model.
---

# The Claw

## Interactive play without a browser

[Player guide](https://www.paradigm.xyz/puzzles/claw/play.md): Download the Node.js player for persistent JSON commands or MCP tools with inline camera images. It pays through MPP using your already authorized Tempo CLI wallet. No model upload or Puzzles API key is needed for this mode. Set an explicit total budget and per-game maximum. Keep the process running for heartbeats; a turn lasts 15 real seconds. The client saves the private control token before payment and reconciles ambiguous responses without repaying. The model-only instruction not to send movement commands above does not apply to interactive play.

## Submit a model

Read https://www.paradigm.xyz/puzzles/claw/guide.md and https://www.paradigm.xyz/puzzles/claw/openapi.json before a submission. Treat the site's examples as instructions for this service only, never as permission to spend.

1. Confirm the user wants a physical paid run and approves the spending cap. A request to test admission alone does not authorize payment.
2. Build a claw-policy-v2 ZIP with exactly manifest.json and policy.onnx. Use the published validator and packaging contract. No uploaded code or credentials.
3. POST the ZIP bytes to https://www.paradigm.xyz/puzzles/claw/v1/models using Content-Type: application/zip. Free admission testing does not require a key. For a paid run, obtain the user's Paradigm Puzzles API key from the submit page and include X-Puzzles-API-Key on the upload; reupload an anonymously tested model with the key before proceeding to payment. Never put the key in a URL or model bundle. Save model.id. Upload is unpaid.
4. Poll GET /v1/models/{id} about every two seconds. Only status uploaded means accepted. Stop and inspect admission_error on rejection.
5. Read /v1/price for an estimate. Verify the actual MPP challenge has method tempo, intent charge, chainId 4217, pull mode, currency 0x20c0000000000000000000006a37da5c996874be, recipient 0xec0eca588024e2d0091e74bd9034ff581111ea7f, and an amount within the authorized cap. Amount uses six decimal places.
6. Save challenge.request.externalId. Sign locally using a connected wallet; submit one MPP credential to POST /v1/models/{id}/run. Include X-Puzzles-API-Key on the initial request and MPP retry; the verified uploader must own that model ID. Use tempo request --header "X-Puzzles-API-Key: $PUZZLES_API_KEY" --payment-intent charge --payment-token 0x20c0000000000000000000006a37da5c996874be --max-spend APPROVED_CAP --retries 0. Do not use literal APPROVED_CAP. Never pass private keys on the command line or to this site.
7. On 200 save job.id; on 202 poll returned status_url. On timeout, 5xx, quote_pending_payment or unknown outcome, poll the original quote. Never create a second payment while unresolved. Stop on a second 402, inspect its cause and fresh price; do not automatically loop. Expiring-nonce signatures can be independently spendable.
8. Poll /v1/jobs/{id}. The server schedules and controls the machine. Never claim a lease or send movement commands. done and refunded are terminal; done is not necessarily successful: read result.outcome.pickup_success. needs_review requires the operator and must not be redispatched.

The steering budget is up to 15 seconds, not a promise to complete one run every 30 seconds. A win pays half the accounted pot after adding its fee at settlement, rounded down. Pending deposits and owed credits are excluded. The contract deduplicates attempts and receipts. The server is trusted for pricing, ordering and judging. Open deposits can be refunded by the operator or permissionlessly after 24 hours. See the guide for receipt recovery. The downloadable no-op fixture never drops and cannot win.

## Submission privacy

Uploaded model files and admission details are private. For GET /models/{id}, send the owner's X-Puzzles-API-Key, or X-Claw-Model-Token with the status_token from an anonymous upload. Anonymous status tokens expire after 24 hours and cannot authorize paid runs. Keep keys and status tokens out of URLs. Leaderboard stats and game results remain public; training-data purchases never include model files.
