Quickstart
Create a key in the dashboard, then send it as a Bearer token. Never place your key in a URL or client-side app.
curl -X POST https://api.linklet.workers.dev/v1/generate \
-H "Authorization: Bearer $LINKLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "sslip",
"ip": "34.73.99.76",
"amount": 5
}'A successful request returns 202 Accepted with a job ID and status URL.
Authentication
Every API request requires your key in the HTTP Authorization header.
Authorization: Bearer lkt_live_your_keyKeys are displayed once. Linklet stores only a cryptographic hash, so a lost key must be rotated.
Generate links
File-based request
| Field | Type | Description |
|---|---|---|
| provider | string | The provider name. |
| fileName | string | Plain .svg, .html, or supported .zip filename. |
| contentType | string | MIME type for the uploaded content. |
| contentBase64 | string | File contents encoded as base64. |
| amount | integer | Number of links to generate. |
{
"provider": "cdn",
"fileName": "lesson.svg",
"contentType": "image/svg+xml",
"contentBase64": "PHN2ZyB4bWxucz0uLi4+",
"amount": 3
}IP-domain request
sslip and envpm use an IPv4 address instead of a file.
{ "provider": "sslip", "ip": "34.73.99.76", "amount": 5 }Check job status
Poll the returned statusUrl until status is complete or failed. Completed links appear in results.
{
"id": "d8c79e7c-...",
"provider": "sslip",
"status": "complete",
"requested": 5,
"completed": 5,
"results": [ ... ],
"failures": []
}Providers
| Provider | Maximum | Input |
|---|---|---|
| cdn | Queue limit | SVG / HTML |
| uploadcare | 1,000 | File |
| imagekit | 1,000 | File |
| surge | 30 | SVG / HTML / ZIP |
| cloudflare | 2,000 | SVG / HTML |
| freedns | 500 | SVG / HTML |
| padlet | 1 | SVG |
| gglscript | 1,000 | SVG / HTML |
| envpm | 1 | IPv4 + optional name |
| sslip | 5 | IPv4 |
Account and global queue limits may be lower during heavy traffic.
Link Drops
Omit period for the latest, or use ?period=YYYY-MM-DD for daily and ?period=YYYY-MM-DD-HH for hourly drops. Hourly periods use Pacific time.
Errors and limits
| 400 | Invalid request body or options. |
| 401 | Missing, invalid, or revoked key. |
| 413 | Request body too large. |
| 429 | Rate or queue limit reached. |
| 502 / 503 | Generation service unavailable. |
Rate-limit responses include Retry-After. Do not retry in a tight loop.