# Is my app link broken?

> Is my app link broken? (public tool).

Source: https://straitlink.in/docs/api/check-link/

`POST /v1/tools/link-check`

Auth: none. Public and rate-limited.

Opens one pasted link the way an Android phone, an iPhone and a desktop browser would (following redirects, reading app and store hand-offs) and says what each device gets: the app, the store, the web, or a dead end. Works on any provider (page.link, Branch, AppsFlyer, Strait, your own domain). No key needed. POST so the link never lands in an access log; nothing is stored. Rate-limited (10 per minute per IP, shared with /v1/tools/app-links, and 60 checks a minute across all visitors); CORS only for https://straitlink.in, https://app.straitlink.in and http://localhost:<port>. Only public https links on a domain name: IP addresses, private networks and odd ports are refused (400). At most 8 hops per device, 5 s each.

| Field | Type | Notes |
|---|---|---|
| `url` (required) | `string` | The full link, e.g. https://yourapp.page.link/abc |

```bash
curl -X POST https://strait.link/v1/tools/link-check \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hilltop.page.link/summer"
  }'
```

Response 200:

```json
{
  "url": "https://hilltop.page.link/summer",
  "provider": "Firebase Dynamic Links",
  "firebase": true,
  "verdict": "broken",
  "headline": "This link is broken on every device.",
  "checkedAt": "2026-10-01T10:00:00.000Z",
  "platforms": [
    {
      "platform": "android",
      "outcome": "dead",
      "summary": "Android: the link answers 404 (not found).",
      "hops": [
        {
          "url": "https://hilltop.page.link/summer",
          "status": 404
        }
      ]
    },
    {
      "platform": "ios",
      "outcome": "dead",
      "summary": "iPhone: the link answers 404 (not found).",
      "hops": [
        {
          "url": "https://hilltop.page.link/summer",
          "status": 404
        }
      ]
    },
    {
      "platform": "desktop",
      "outcome": "dead",
      "summary": "Desktop: the link answers 404 (not found).",
      "hops": [
        {
          "url": "https://hilltop.page.link/summer",
          "status": 404
        }
      ]
    }
  ]
}
```

- `200`: The report. `verdict`: ok | at_risk | broken | unchecked. Each platform result has an `outcome` (app | store | web | dead | loop | error), a one-line `summary`, the `hops` it took, and the `app` / `store` it reached.
- `400`: Not a full link, or refused (IP address, private network, odd port, not https)
- `429`: Rate limited (per IP), or the checker is busy (all visitors); Retry-After
