From local output to a temporary address.

Use the CLI from a terminal or coding agent, or publish from the dashboard. Every path follows the same upload lifecycle: direct to storage, then a revocable public URL.

Try with npx

No global install required. Create a token under Devices, then publish:

# one-time setup (stores the token locally)
npx wirecopy configure

# static site / prototype / docs build
npx wirecopy site ./dist

# file or report
npx wirecopy publish ./report.pdf

Prefer a global command for daily use?

npm install --global wirecopy
wirecopy configure
wirecopy site ./dist

For CI, pass the token through the environment instead of configure:

WIRECOPY_TOKEN='wc_live_…' npx wirecopy site ./dist --json

WIRECOPY_SERVER overrides the default API host.WIRECOPY_EXPIRES_IN (seconds) overrides the 24-hour default.

For agents

Any coding agent that can run a shell command can publish. No plugin required. Issue a token under Devices and export it:

export WIRECOPY_SERVER=https://wirecopy.app
export WIRECOPY_TOKEN=wc_live_…      # from Devices
npx wirecopy site ./artifact --json  # prints the live URL and expiry

Add one line to your agent instructions in AGENTS.md, CLAUDE.md, or your harness’s equivalent:

After producing an HTML artifact (report, prototype, site), offer to publish it
with `npx wirecopy site <path>` and share the returned URL. Links expire on their own.

--json emits machine-readable output for tool use.--storage byos (Pro) keeps agent output in your connected bucket. Revoke any address early from the dashboard.

Sites vs files

wirecopy site publishes a folder, index.html, or ZIP as a static site on wirecopy.site.wirecopy publish creates a file link for PDFs, images, and other artifacts.

npx wirecopy site ./dist
npx wirecopy site ./dist --storage byos   # Pro: your connected bucket
npx wirecopy publish ./review-report.pdf
npx wirecopy links
npx wirecopy links revoke <id>

When site receives an app project, it looks for an existing build output (dist/, build/, out/, or .output/public) with index.html. It never runs package scripts. Build first, then publish.

Your own bucket

Pro accounts can point site publishes at an S3-compatible bucket — R2, S3, MinIO, Backblaze B2, and friends. Your keys, your retention, your bucket holds the bytes. Set it up under Storage:

  1. Create a private bucket with your provider. Wirecopy serves site files through its own host, so the bucket never needs public read.
  2. Create an access key scoped to that bucket and keep both halves to hand.
  3. Copy the bucket’s S3 API endpoint. It has to be an https address.
  4. Paste the endpoint, bucket, and key into the form. Wirecopy verifies access before it saves anything.

The only operations Wirecopy runs against your bucket:

s3:PutObject s3:GetObject s3:DeleteObject s3:ListBucket

Access keys are encrypted at rest. Before a bucket is marked usable, Wirecopy writes, reads back, and deletes a probe object; site files are checked against the publish manifest before they are served.

Dashboard

Open the dashboard, choose a file or drop one in, and publish. Manage active links and sites, revoke early, and create device tokens for CLI and agents under Devices.

Free includes five publishes a day. Compare plans when you need higher limits or your own bucket.

HTTP API

POST /api/v1/upload_intents
Authorization: Bearer wc_live_…
Content-Type: application/json

{"upload":{"filename":"report.pdf","content_type":"application/pdf","byte_size":482091}}

PUT the exact bytes to the returned upload.url, including its returned headers. Then call POST /api/v1/upload_intents/:id/complete.

Lifecycle

createduploadingquarantinedavailable

Terminal alternatives are rejected, expired, revoked, and deleted. Links expire on their own. Revoke anytime from the dashboard or CLI.