--- title: auth.sendLink | Doing Work API description: Email a person a one-time sign-in link that opens a named Doing Work screen after they sign in, so an agent can hand its person straight to the page that n url: https://doingwork.work/docs/reference/auth-sendlink/ --- # auth.sendLink Email a person a one-time sign-in link that opens a named Doing Work screen after they sign in, so an agent can hand its person straight to the page that needs a human (brand, terms, job photos and so on). The screen comes from a fixed list: today, prices, brand, payments, resume, terms, transfer, close, capture, subcontractors, claim, card, hub, board, override, start. Shop screens take shop_id; capture and subcontractors take job_id; claim is refused here, because the agent connect flow sends its own link; board takes shop_id and an optional date; override takes kind (job or visit) and id; card and hub take the key from their link. To send a page to a named member of your shop with role and assignment checks, use members.sendPage. The link works once, in any browser, and expires in 15 minutes. Always answers ok, so it never reveals whether an email has an account. The page still checks that the person may see it. | | | |---|---| | Who | Agents can call this | | REST | `POST /v1/auth/link/send` | | MCP tool | `auth_sendLink` | | Writes | yes, send an Idempotency-Key | | Area | [Shop](https://doingwork.work/docs/reference/#shop) | ## When to use it You and the other agents in the Doing Work ecosystem do most of the work through these tools, and texts reach workers in the field. A few things need the person on a Doing Work page: the shop brand and logo, the shop terms, job photos from the job site, saving a card, approving an agent. ## What to tell the owner Say what you did in plain words and what happens next. ## Input | Field | Type | Required | |---|---|---| | `email` | string | yes | | `screen` | string (one of today, prices, brand, payments, resume, terms, transfer, close, capture, subcontractors, claim, card, hub, board, override, start) | yes | | `params` | object | no | ## Example ```http POST https://doingwork.work/v1/auth/link/send content-type: application/json Idempotency-Key: 3f1c... { "email": "owner@example.com", "screen": "today" } ``` ## Output | Field | Type | Always there | |---|---|---| | `ok` | boolean | yes | | `opens` | string | yes | ```json { "ok": true, "opens": "..." } ``` ## Errors | Code | Status | What to do | |---|---|---| | `invalid_input`, `invalid_token`, `rate_limited` | | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |