Someshot vytváří screenshoty příspěvků ze sociálních sítí (Instagram, X, Facebook, TikTok). Pošlete URL příspěvku a dostanete hotový obrázek — bez nutnosti tokenů jednotlivých platforem.
API je asynchronní: požadavek POST /api/v1/screenshots
zařadí job do fronty a vrátí 202
s job_id a status_url. Stav pak zjišťujete pollingem
GET /api/v1/jobs/{job_id}, dokud není
done nebo failed.
Výsledky se cachují. Pokud pro stejný požadavek existuje
čerstvý screenshot a refresh=false (výchozí), vrátí
POST /api/v1/screenshots rovnou
200 s hotovým výsledkem
(cached: true) — žádný polling není potřeba.
https://someshot.burda.tools/api/v1https://someshot.localhost/api/v1Content-Type: application/json/api/v1
Všechny endpointy pod /api/v1/* vyžadují hlavičku
Authorization: Bearer ssk_…. Výjimkou je
GET /api/v1/health, který autentizaci nevyžaduje.
Authorization: Bearer ssk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Chybějící nebo neplatný klíč vrací
401 s kódem UNAUTHORIZED:
{ "error": { "code": "UNAUTHORIZED", "message": "Missing or invalid API key." } }
/admin/keys) — plný
klíč se zobrazí jen jednou při vytvoření. Každý klíč má vlastní rate limit
a denní kvótu.
/api/v1/screenshots
Vytvoří job pro screenshot zadané URL. Tělo požadavku je JSON objekt s těmito poli:
| Parametr | Typ | Povinný | Rozsah / hodnoty | Výchozí | Popis |
|---|---|---|---|---|---|
url |
string | ano | neprázdná, podporovaná platforma | — | URL příspěvku (lze i krátký odkaz, např. vm.tiktok.com) |
format |
string | ne | png · jpeg · webp |
png |
výstupní formát obrázku |
width |
integer | ne | 200–1200 | 500 |
šířka v px (CSS) |
scale |
integer | ne | 1–3 | 1 |
device pixel ratio (retina) |
theme |
string | ne | light · dark |
light |
motiv (uplatní se u X a TikTok) |
full_text |
boolean | ne | true / false |
true |
zobrazit popisek (FB show_text / IG captioned) |
refresh |
boolean | ne | true / false |
false |
true = obejít cache a překreslit |
callback_url |
string | ne | musí být https URL |
null |
webhook zavolaný po dokončení (i selhání) jobu |
202 Accepted
job zařazen do fronty — pollujte status_url:
{
"job_id": "9f2c4d6e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"status": "queued",
"status_url": "https://someshot.burda.tools/api/v1/jobs/9f2c4d6e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
200 OK
cache hit (refresh=false) — výsledek je rovnou hotový,
job_id je null a přibývá cached: true
(jinak stejná struktura jako odpověď GET /jobs/{job_id}):
{
"job_id": null,
"status": "done",
"platform": "instagram",
"created_at": "2026-06-25T10:00:00+02:00",
"started_at": null,
"finished_at": null,
"request": { "url": "…", "format": "png", "width": 500, "scale": 1, "theme": "light" },
"result": {
"url": "https://someshot.burda.tools/media/2026/06/ab12cd….png",
"format": "png", "width": 500, "height": 712, "bytes": 84213,
"expires_at": "2026-07-25T10:00:04+02:00"
},
"error": null,
"cached": true
}
/api/v1/jobs/{job_id}
Vrátí stav a (po dokončení) výsledek jobu. job_id je UUID
vrácené z POST /api/v1/screenshots.
Možné hodnoty status:
queued processing done failed
200 OK
— result je vyplněn jen u done,
error jen u failed (jinak null):
{
"job_id": "9f2c4d6e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"status": "done",
"platform": "instagram",
"created_at": "2026-06-25T10:00:00+02:00",
"started_at": "2026-06-25T10:00:01+02:00",
"finished_at": "2026-06-25T10:00:04+02:00",
"request": { "url": "…", "format": "png", "width": 500, "scale": 1, "theme": "light" },
"result": {
"url": "https://someshot.burda.tools/media/2026/06/ab12cd….png",
"format": "png", "width": 500, "height": 712, "bytes": 84213,
"expires_at": "2026-07-25T10:00:04+02:00"
},
"error": null
}
Při status: "failed" nese error kód a zprávu
(HTTP zůstává 200 — viz Chybové kódy):
{ "status": "failed", "result": null, "error": { "code": "RENDER_TIMEOUT", "message": "…" } }
404 Not Found
neznámé, neplatné nebo cizí job_id (izolace mezi klíči):
{ "error": { "code": "NOT_FOUND", "message": "Job not found." } }
/api/v1/health
Liveness probe. Stav je ok (HTTP
200) jen když je dostupná databáze
i render. Pokud je některá komponenta mimo provoz, vrací HTTP
503 a status: "degraded".
{ "status": "ok", "queue_depth": 3, "render": "up", "db": "up" }
/media/{yyyy}/{mm}/{hash}.{ext}
Vytvořený obrázek, servírovaný přímo Apachem. URL získáte z pole
result.url v odpovědi jobu. Název souboru je neuhodnutelný
hash; přístup je read-only přes tuto URL (např.
/media/2026/06/ab12cd….png). Platnost obrázku určuje
result.expires_at.
| Platforma | platform |
Domény |
|---|---|---|
instagram |
instagram.com |
|
| X (Twitter) | x |
x.com, twitter.com |
facebook |
facebook.com, fb.watch, fb.com |
|
| TikTok | tiktok |
tiktok.com, vm.tiktok.com, vt.tiktok.com |
| Kód | HTTP | Význam |
|---|---|---|
VALIDATION_ERROR |
400 | špatné parametry (chybí url, width/scale mimo rozsah, …) |
UNSUPPORTED_URL |
400 | URL není z podporované platformy |
UNAUTHORIZED |
401 | chybějící nebo neplatný API klíč |
NOT_FOUND |
404 | job neexistuje nebo patří jinému klíči |
RATE_LIMITED |
429 | překročen rate limit klíče (hlavička Retry-After) |
QUOTA_EXCEEDED |
429 | překročena denní kvóta klíče |
POST_UNAVAILABLE |
job | příspěvek privátní/smazaný/geoblokovaný |
UPSTREAM_BLOCKED |
job | platforma vrátila login wall / blok |
RENDER_TIMEOUT |
job | render nestihl timeout |
RENDER_FAILED |
job | jiná chyba renderu |
curl1) Vytvořit screenshot:
curl -X POST https://someshot.burda.tools/api/v1/screenshots \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.instagram.com/p/EXAMPLE/", "format": "png", "width": 500, "theme": "light"}'
2) Zjistit stav jobu (polling):
curl https://someshot.burda.tools/api/v1/jobs/9f2c4d6e-1a2b-4c3d-9e8f-0a1b2c3d4e5f \
-H "Authorization: Bearer YOUR_API_KEY"
3) Health (bez autentizace):
curl https://someshot.burda.tools/api/v1/health