Appearance
Unzip archive (sync)
POST
/v1/utilities/unzip-files
Extracts every entry of a .zip (public URL or s3://) and returns one link per file.
Sync: waits for the result and answers 200 with the finished job. A failed run answers with the job and the error's status (422 input rejected by the utility, 502/504 utility failure). If it is still running after 90 s you get 202 + Location and it keeps going — fetch it with getJob. Send Prefer: respond-async to get the async behaviour on this route. Hard limit: 15 min.
Authorizations
apiKey
An API key from the console (API keys). Only its SHA-256 is stored; it is shown once.
Type
HTTP (bearer)
Parameters
Header Parameters
Idempotency-Key
Makes retries safe: re-sending the same key (per API key) returns the original job with Idempotent-Replayed: true instead of running again. Reusing it for a different utility → 409.
Type
string
Max Length
200Prefer
respond-async (RFC 7240) turns this sync route into the async flow (202 + job id).
Type
string
Valid values
"respond-async"Request Body
application/json
JSON "input": { "url": "https://example.com/bundle.zip" }, "metadata": { "orderId": "ORD-1042" }
{
}
Responses
Finished — the job, with result.files.
application/json
JSON "id": "job_01K7Z3Q4N5P6R7S8T9V0W1X2Y3", "object": "job", "utility": "unzip-files", "mode": "sync", "status": "succeeded", "createdAt": "2026-09-10T17:30:08.412Z", "startedAt": "2026-09-10T17:30:08.412Z", "finishedAt": "2026-09-10T17:30:10.771Z", "timings": { "queueMs": 0, "upstreamMs": 2140, "storageMs": 196, "totalMs": 2359 }, "metadata": { "orderId": "ORD-1042" }, "result": { "files": [ { "url": "https://files.servicelabs.dev/unzip-files/2026-09-10/job_01K7Z3Q4N5P6R7S8T9V0W1X2Y3/invoices/jan.pdf", "key": "unzip-files/2026-09-10/job_01K7Z3Q4N5P6R7S8T9V0W1X2Y3/invoices/jan.pdf", "name": "jan.pdf", "size": 120334, "contentType": "application/pdf", "path": "invoices/jan.pdf" } ], "fileCount": 3 }, "error": null, "callback": null, "links": { "self": "/v1/jobs/job_01K7Z3Q4N5P6R7S8T9V0W1X2Y3" }
{
}