← Back to homepage

Capture setup

The capture endpoint turns any HTTP request into a task. A Shortcut on your phone, a rule in your mail client, a line in a script — anything that can POST.

Get your link

In okdone, open Settings → Capture and press Create capture link. You get an address like https://okdone.app/api/capture/<token>.

That link is the credential. Anyone holding it can file tasks into your account, so treat it like a password. If it leaks, press Rotate link and the old one stops working immediately.

macOS — prompt for a task

The everyday one: a keyboard shortcut that pops a box, takes a line of text, files it, and gets out of the way.

  1. Open ShortcutsFile → New Shortcut. Name it Add to okdone.
  2. Search the action list for Ask for Input and drag it in. Leave the type as Text, set Prompt to New task, and leave Default Answer empty — anything in there prefills the box and you will be deleting it every time. Tick Allow Multiple Lines.
  3. Add Get Contents of URL below it and paste your capture link into the URL field.
  4. Click Show More to expand the options, then set Method to POST.
  5. Under Headers, add a row: key Content-Type, value text/plain.
  6. Set Request Body to File. In the field that appears, choose the magic variable from the first action — depending on your macOS version it is listed as Ask for Input or Provided Input.
  7. Press to test. The first run asks permission to contact the server; allow it.

Recent versions of Shortcuts offer only JSON, Form and File as body types — there is no plain Text option. File with a text variable is how you send a raw body, and the Content-Type header above is what makes the server read it as text.

Give it a trigger

Open the details pane and pick whichever you will actually reach for:

macOS — file selected text

The one that earns its keep. Highlight a sentence anywhere, right-click, and it becomes a task.

  1. Duplicate the shortcut above and name the copy something like Send to okdone.
  2. Delete the Ask for Input action.
  3. In Get Contents of URL, swap the body variable to Shortcut Input.
  4. In the details pane, tick Use as Quick Action and Services Menu, then set the receive-input row at the top of the editor to Text.

It now appears under Services in the right-click menu of any app with selectable text.

iPhone and iPad

Same actions, same order — the Shortcuts app is the one on your phone. Two extra things worth doing:

Formatting the text

Whatever you send gets the same treatment as typing into the app:

Chase the migration rollback #work !p1
Marcel said the ledger needs re-pointing first

From a script or the terminal

Plain text needs the content type spelled out — curl -d sends form-encoded by default, which the server reads as a form and not as your task.

curl -X POST "$CAPTURE_URL" \
  -H 'content-type: text/plain' \
  -d 'Renew the TLS cert #infra !p2'

JSON when you want a due date:

curl -X POST "$CAPTURE_URL" \
  -H 'content-type: application/json' \
  -d '{"title":"Renew the TLS cert","tags":"infra","due":"2026-08-14T09:00:00Z","priority":2}'

Form-encoded subject / text / from also works — that is the shape inbound-email services post, so you can point one at your capture link without writing any code.

Where it all lands

Settings → Capture has two destinations, set independently: one for the capture endpoint and one for your email address. Point them at different lists if you want mail triaged separately from what you file yourself. Delete the target list and anything arriving falls back to Inbox rather than vanishing.

Capture setup — okdone