엔드포인트는 셋뿐입니다. 인증은 Authorization: Bearer <키>.
# 보낸 그 요청에서 결과가 바로 돌아옵니다 curl -X POST https://burst.teamplut.com/v1/batch \ -H "Authorization: Bearer bk_..." \ -H "Content-Type: application/json" \ -d '{ "sync": true, "ops": { "width": 800, "format": "webp", "quality": 82 }, "images": [ { "id": "a1", "url": "https://example.com/1.jpg" }, { "id": "a2", "b64": "data:image/png;base64,iVBOR..." } ] }'
# ① 접수 — 즉시 job_id 를 돌려줍니다 curl -X POST https://burst.teamplut.com/v1/batch -H "Authorization: Bearer bk_..." \ -H "Content-Type: application/json" \ -d '{"ops":{"width":1200,"format":"avif"},"images":[ ... 1000개 ... ]}' # → 202 {"job_id":"job_ab12...","stream_url":"..."} # ② 끝나는 장부터 한 줄씩 (NDJSON) curl -N https://burst.teamplut.com/v1/batch/job_ab12.../stream -H "Authorization: Bearer bk_..." # ③ 또는 다 끝난 뒤 한 번에 curl https://burst.teamplut.com/v1/batch/job_ab12... -H "Authorization: Bearer bk_..."
ops| 이름 | 값 | 설명 |
|---|---|---|
width / height | 1–8000 | 둘 중 하나만 줘도 됩니다. 원본보다 크게 늘리지 않습니다. |
fit | inside · cover · contain · fill · outside | 기본 inside |
format | webp · avif · jpeg · png | 기본 webp |
quality | 1–100 | 기본 82 |
strip | true / false | 기본 true — EXIF 를 텁니다. 촬영 위치가 들어 있기 때문입니다. |
autorotate | true / false | 기본 true — 촬영 방향대로 세웁니다. |
{
"ok": true,
"id": "a1",
"url": "https://burst.teamplut.com/f/9f2c...-3a1b.webp",
"bytes": 48213, "width": 800, "height": 533,
"cached": false, // 이미 만들어 둔 것이면 true
"ms": 84.2, // 이 한 장에 걸린 전체
"fetch_ms": 61.8 // 그중 내려받기
}
fetch_ms 가 ms 의 대부분이라면 병목은 저희가 아니라 원본 서버입니다.
그럴 땐 b64 로 직접 보내시는 편이 빠릅니다.
| 원본 보관 | 하지 않습니다. 변환이 끝나면 메모리에서 버립니다. |
| 내부 주소 | 사설·링크로컬 IP 를 가리키는 URL 은 거절합니다. 이름이 아니라 풀어낸 실제 IP로 판정합니다. |
| 형식 판별 | 확장자를 믿지 않고 앞머리 바이트로 봅니다. |
| 크기 제한 | 원본 25MB · 6천만 화소. 압축폭탄을 막기 위한 값입니다. |
| 결과 주소 | 이름에 내용 해시가 들어 있어 내용이 바뀌면 주소도 바뀝니다. 캐시를 오래 걸어도 안전합니다. |
401 | 키가 없거나 올바르지 않음 |
402 | 이번 달 한도 초과 |
413 | 한 번에 보낼 수 있는 장수 초과 |
429 | 초당 요청 초과 — Retry-After 를 보고 잠시 뒤 재시도 |
한 장이 실패해도 나머지는 그대로 처리됩니다.
실패한 장은 {"ok":false,"error":"..."} 로 같은 자리에 돌아옵니다.