API Documentation
Create burn-after-reading links and encrypted messages programmatically.
Authentication
All API access requires a paid plan. Authenticate every request with a Bearer token in the Authorization header. You'll receive your API key after subscribing.
curl -H "Authorization: Bearer bla_live_your_api_key_here" \
https://brnlk.com/api/v1/linksBase URL
https://brnlk.com/api/v1Endpoints
/v1/linksCreate a one-time-use redirect link. After a single visit, the link is permanently burned.
Request Body
{
"url": "https://example.com/secret-page",
"expires_in": 3600 // optional, seconds until expiry
}Response 201
{
"id": "aB3xYz",
"url": "https://brnlk.com/aB3xYz",
"created_at": "2026-04-13T12:00:00.000Z",
"expires_at": "2026-04-13T13:00:00.000Z"
}/v1/messagesCreate a one-time-use encrypted message. The content should be pre-encrypted on the client side for end-to-end encryption, or sent as plaintext if encryption is not needed.
Request Body
{
"content": "This message will self-destruct",
"expires_in": 86400 // optional, seconds until expiry
}Response 201
{
"id": "kL9mNp",
"url": "https://brnlk.com/msg/kL9mNp",
"created_at": "2026-04-13T12:00:00.000Z",
"expires_at": "2026-04-14T12:00:00.000Z"
}/v1/status/:slugCheck whether a link or message has been viewed. This is a read-only endpoint — it does not burn the link. Only works for links created by your API key.
Response 200
{
"id": "aB3xYz",
"type": "redirect",
"burned": true,
"created_at": "2026-04-13T12:00:00.000Z",
"viewed_at": "2026-04-13T12:05:30.000Z",
"expires_at": null
}/v1/links/batchCreate up to 100 burn links in a single request.
Request Body
{
"links": [
{ "url": "https://example.com/page-1" },
{ "url": "https://example.com/page-2", "expires_in": 7200 },
{ "url": "https://example.com/page-3" }
]
}Response 201
{
"count": 3,
"links": [
{
"id": "aB3xYz",
"original_url": "https://example.com/page-1",
"url": "https://brnlk.com/aB3xYz",
"created_at": "2026-04-13T12:00:00.000Z",
"expires_at": null
},
...
]
}/v1/messages/batchCreate up to 100 burn messages in a single request.
Request Body
{
"messages": [
{ "content": "Secret message 1" },
{ "content": "Secret message 2", "expires_in": 3600 }
]
}Response 201
{
"count": 2,
"messages": [
{
"id": "kL9mNp",
"url": "https://brnlk.com/msg/kL9mNp",
"created_at": "2026-04-13T12:00:00.000Z",
"expires_at": null
},
...
]
}Rate Limits & Quotas
| Plan | Requests/min | Monthly quota | Batch | Price |
|---|---|---|---|---|
| Starter | 60 | 5,000 | Yes (up to 100) | $9/mo |
| Pro | 300 | 50,000 | Yes (up to 100) | $29/mo |
| Enterprise | 1,000 | 500,000 | Yes (up to 100) | $99/mo |
Error Responses
All errors return a consistent JSON structure:
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Resets at 2026-04-13T12:01:00.000Z"
}
}| Status | Code | Description |
|---|---|---|
| 400 | validation_error | Invalid request body or parameters |
| 401 | unauthorized | Missing or invalid API key |
| 403 | quota_exceeded | Monthly request quota exceeded |
| 404 | not_found | Link not found or not owned by your key |
| 429 | rate_limited | Too many requests per minute |
| 500 | internal_error | Server error |
Quick Start
Create a single burn link
curl -X POST https://brnlk.com/api/v1/links \
-H "Authorization: Bearer bla_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/secret"}'Create links in batch
curl -X POST https://brnlk.com/api/v1/links/batch \
-H "Authorization: Bearer bla_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"links": [
{"url": "https://example.com/page-1"},
{"url": "https://example.com/page-2"},
{"url": "https://example.com/page-3"}
]
}'Check if a link was viewed
curl https://brnlk.com/api/v1/status/aB3xYz \
-H "Authorization: Bearer bla_live_your_api_key"