API documentation
Base URL: https://apis.bneck.com · All responses are JSON with a status field.
Authentication
Create an account, then issue an API key from the dashboard. Send it as:
Authorization: Bearer bn_xxxxxxxx
Keys are valid 90 days. Per-account rate limit applies across all your keys.
Issuing links/sends costs prepaid credits (new accounts get free starter credits).
POST /api/v1/sends - upload a file, get a single-use signed link
The flagship: the thing S3/R2 presigned URLs can't do. Multipart upload.
Fields: file (required), max_uses (int|unlimited, default unlimited),
expires_in (seconds), password (optional).
Costs 1 credit. Allowed types: pdf, txt, md, png, jpg, jpeg, gif, webp.
Metadata (EXIF/PDF) is stripped server-side before delivery.
curl https://apis.bneck.com/api/v1/sends \
-H "Authorization: Bearer bn_xxx" \
-F [email protected] -F max_uses=1 -F expires_in=3600 -F password=hunter2
→ { "status":200, "url":"https://apis.bneck.com/sends/ab12cd34",
"id":"snd_42", "max_uses":1, "expires_at":1780000000000,
"metadata_stripped":true, "credits_charged":1 }
The link serves a branded page; the file downloads once (range/resume within a
10-minute window counts as one use), then returns 410 Gone.
Link shortening lives on bneck.com
Short links (bneck.com/l/<slug>) with a safety interstitial are a separate
product on the main domain - not part of this API.
GET /api/v1/solve - admin-editable content blob
→ { "status":200, "header":"…", "type":"bnapis", "content":"…" }
GET /api/v1/posts → { count }
GET /api/v1/posts-last → latest published post (404 if none)
GET /api/v1/posts-last?q=N → { posts:[…], unresolved }
GET /api/v1/posts/:id → a published post
(All require a Bearer API key.)
Public delivery (no key)
GET /sends/<slug> branded download page
GET /sends/<slug>/download the file (?pw=… if password set, ?direct to force download)
GET /cdn/<name> public CDN file (?direct to download)
POST /abuse/report { type:"send"|"file", slug, reason } - report abuse
Free tools (no key, nothing stored)
POST /tools/strip multipart file → metadata-stripped file back
Also: /remove-exif · /remove-metadata-from-pdf · /remove-gps-from-photo
Credits & billing
GET /billing your balance, costs, packs, recent ledger
POST /billing/checkout { pack: "5"|"25"|"50" } → Stripe Checkout URL (if enabled)
1 credit = 1 issued link or send. New accounts get free starter credits.
home · get an API key · terms · abuse policy