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. Request and response bodies are JSON. The full machine-readable description is the OpenAPI 3.1 document, 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 |
| PUT | {signedUrl} | Send the file bytes to storage | Step 2 |
| POST | /uploads/complete | Verify, scan and publish | Step 3 |
| GET | /links | List your links | List links |
| GET | /links/{slug}/analytics | One link's analytics report (Pro) | Analytics |
| GET | /analytics | Account-wide analytics with top links (Pro) | Analytics |
| GET | /status | Health check, no auth | Below |
Health check#
GET
/api/v1/statusNo auth200 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. |
| 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 are Cache-Control: no-store; call them when you need fresh numbers. |
Discovery#
Tools that look for APIs automatically can start at the API catalog (RFC 9727), which points to the OpenAPI document, these docs and the status endpoint. See Agent discovery files.
Last updated 4 October 2026. Something unclear or missing? Tell us.