[Docs](https://linkinseconds.com/docs)Developers

# API reference

Every endpoint, parameter and response of the Link in Seconds API, with the OpenAPI document.

Base URL: `https://linkinseconds.com/api/v1`. All endpoints except `/status` need [an API key](https://linkinseconds.com/docs/api/authentication). Request and response bodies are JSON. The full machine-readable description is the [OpenAPI 3.1 document](https://linkinseconds.com/openapi.json), which you can import into Postman, Insomnia or a code generator.

## Endpoints

| Method | Path | Purpose | Guide |

| POST | `/uploads` | Start an upload, get a signed PUT URL | [Upload a file](https://linkinseconds.com/docs/api/uploads) |

| PUT | `{signedUrl}` | Send the file bytes to storage | [Step 2](https://linkinseconds.com/docs/api/uploads#2-send-the-file) |

| POST | `/uploads/complete` | Verify, scan and publish | [Step 3](https://linkinseconds.com/docs/api/uploads#3-publish-it) |

| GET | `/links` | List your links | [List links](https://linkinseconds.com/docs/api/links) |

| GET | `/links/{slug}/analytics` | One link's analytics report | [Analytics](https://linkinseconds.com/docs/api/analytics) |

| GET | `/analytics` | Account-wide analytics with top links | [Analytics](https://linkinseconds.com/docs/api/analytics#analytics-for-the-whole-account) |

| GET | `/status` | Health check, no auth | Below |

## Health check

GET`/api/v1/status`No auth

200 OK

```
{ "status": "ok", "api": "Link in Seconds API", "version": "1.0.0" }
```

## Conventions

| Topic | Rule |

| Authentication | `Authorization: Bearer lis_…` on every call except /status. |

| Errors | JSON `{ error, code? }`. See [Errors and limits](https://linkinseconds.com/docs/api/errors). |

| Idempotency | Send the same `idempotencyKey` (a UUID) on /uploads and /uploads/complete. |

| CORS | Allowed from any origin. Credentials (cookies) are never used. |

| Versioning | The version is in the path (`/v1`). Breaking changes would ship as /v2. |

| Dates and ranges | All timestamps are UTC ISO 8601. Analytics ranges (`range=7d|14d|30d|90d|all`) are whole UTC days. |

| Caching | Analytics responses carry `Cache-Control: no-store` (nothing is kept in your browser or a proxy), but the server caches each report for 60 seconds, so polling faster returns the same numbers. |

## Discovery

Tools that look for APIs automatically can start at the [API catalog](https://linkinseconds.com/.well-known/api-catalog) (RFC 9727), which points to the OpenAPI document, these docs and the status endpoint. See [Agent discovery files](https://linkinseconds.com/docs/agents).

[PreviousErrors and limits](https://linkinseconds.com/docs/api/errors)[Next MCP server](https://linkinseconds.com/docs/mcp)

Last updated 4 October 2026. Something unclear or missing? [Tell us](https://linkinseconds.com/contact).

Source: https://linkinseconds.com/docs/api/reference
