Structured handoff card

Never make anyone retype what you send them.

Paste anything — logins, DNS records, an invoice, a screenshot — or generate a card straight from a URL. Get one link where every value has its own copy button and nothing gets lost in the thread.

Three ways to make a card

Build it however the moment needs.

Paste

From clipboard

Drop in text, a .env file, JSON, a table or a screenshot. Edit the detected fields and share.

Open the editor
URL

From a link

Put your values in a URL parameter. Perfect for support macros, runbooks and onboarding docs.

Create via URL
Example

From a template

Pick one of 20 real handoffs — DNS, invoices, Wi-Fi, cluster access — and tweak it.

Browse examples

Live example

Recipient card · integration setup

ID: hc-8f3c
Progress0 of 4 required copied
Account
01
WORKSPACE IDrequired

ws_7f21c9ab

Paste into the integration settings screen.

02
API KEYrequired

pk_live_8f3c9a2d4b71

Public key — safe to store in the client config.

Integration
03
WEBHOOK URLrequired

https://hooks.example.net/v2/ingest

04
SETUP COMMANDrequired

npx handoff init --workspace ws_7f21c9ab

Run once in the project root.

05
TIMEOUT (MS)optional

3000

Honest states: copied ≠ pasted ≠ completed. Go on — the buttons really copy.

How it works

Three steps, no account

Pastestep 01

Drop in whatever you already have

Text, a .env file, JSON, a table — even a screenshot. We read it and turn it into labelled fields grouped into sections. Fix anything that came out wrong.

Sharestep 02

Send one link

You get a private page for yourself and a share link for the other side. The link expires when you want it to and can be revoked at any moment.

Trackstep 03

See what they actually took

Each value is copied with one click and marked as done. Both of you see the same progress, so nobody has to ask “did you get it?”.

Programmatic handoffs

Create cards from your tools.

Support tickets, onboarding docs, runbooks, wikis — anywhere you already store raw values. Build a URL once — it opens instantly as a copyable card, with nothing stored anywhere.

Example URL

/new?v=Ticket%3A%20REQ-2026-0417%0ACustomer%3A%20ACME-4471%0APlan%3A%20Pro%0ARenewal%20date%3A%202026-10-14%0AAdmin%20panel%3A%20https%3A%2F%2Fadmin.acme.io%2F4471&title=Support%20handoff%20%E2%80%94%20ACME-4471&purpose=Generated%20from%20the%20ticket%20system.

Query parameters

  • v — values in “Label: value” format, one per line.
  • title — card title (optional).
  • purpose — one-line note (optional).
  • expires — days until the card expires, 1–90 (only if you save it).

Stateless by default: the card is rendered from the link itself. Save it only when you want sharing and tracking.

Try this URL →

Agent-first

Machine-readable by design

Every card is a plain structure of typed fields, so an agent can read the values and report state without human clicking.

{
  "card": "hc-8f3c",
  "items": [
    { "label": "API KEY", "value": "pk_live_8f3c9a2d4b71", "state": "copied" },
    { "label": "WEBHOOK URL", "value": "https://hooks.example.net", "state": "pending" }
  ],
  "progress": "2/4"
}

Stop retyping values out of chat threads.

Send your first card today. No account, no "can you send that again?".

Create a card