# Short links and app links

Give a link a path on the owner's subdomain, count taps on it, and send iPhone and Android to different stores.

## Short links

A link block with `"path": "shop"` is reachable at `name.tapmy.link/shop`. It is a shortener where the brand in the address is the person's, not ours; and because the tap now passes through a redirect we serve, it is counted (without a cookie) and shows in statistics as `clicksByBlock`.

- 1–40 characters, `a-z`, `0-9`, hyphens; stored lowercase.
- Unique within the page. A duplicate answers `400 bad_path` with `detail: "shop: taken"`.
- Reserved words (`api`, `go`, `gate`, `media`, `page.md`, …) answer `bad_path` with `reserved`.
- The link's tap counter only counts taps on the short path or on the page's own button; direct visits to the destination are invisible to us, as they should be.

## App links

```json
{ "type": "link", "label": "Get the app", "url": "https://example.app",
  "apps": { "ios": "https://apps.apple.com/app/id…", "android": "https://play.google.com/store/apps/details?id=…" } }
```

One button, three destinations, chosen by the visitor's platform at tap time. `url` is the fallback for desktop and anything unrecognised.

## UTM

With `"utm": true` on the page, every outgoing link gets `utm_source=tapmy&utm_medium=bio&utm_campaign=<username>`. Off by default because it rewrites somebody else's URL; turn it on when the person asked for attribution in their own analytics.

---
Part of the [Tapmy.link agent documentation](https://tapmy.link/documentation/agents.md). Canonical: https://tapmy.link/documentation/agents/short-links.md
