Download a folder
One .tar.gz with the folder and everything in it (an inert download; .boxline/ is left out and links are stored as links, not followed). Also works on a stopped session, from the workspace it saved, without starting a machine (read-only; 409 nothing_saved when it saved none). The folder is path (default the whole workspace). At most 1 GiB and 100,000 entries (413 archive_too_large, before any byte is sent); 400 not_a_directory; 403 or 400 invalid_path for a path outside the workspace or through a link; 429 archive_busy (two at once per session, or per project for stopped sessions). The folder is under its own name in the archive (<name>/…; the whole workspace: workspace/…).
/v1/sessions/{id}/files/archiveRequest
| Method and path | GET/v1/sessions/{id}/files/archive |
|---|---|
| Base URL | https://api.boxline.dev |
| Authentication | Your API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY. |
| Rate limit | Yes. See Rate limits for the numbers and headers. |
Path parameters
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
idrequired | string | – | – |
Query parameters
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
path | string | . | – | A folder inside the workspace. |
curl -G "https://api.boxline.dev/v1/sessions/$SESSION_ID/files/archive" \ -H "x-api-key: $BOXLINE_API_KEY" \ --data-urlencode "path=downloads" \ -o downloads.tar.gztar -xzf downloads.tar.gzimport { writeFile } from "node:fs/promises";import { Boxline } from "@boxline/sdk";const bx = new Boxline(); // reads BOXLINE_API_KEY and BOXLINE_API_URLconst archive = await bx.sessions.files.archive("SESSION_ID", "downloads");await writeFile("downloads.tar.gz", archive);from boxline import Boxlinebx = Boxline() # reads BOXLINE_API_KEY and BOXLINE_API_URLarchive = bx.sessions.files.archive("SESSION_ID", "downloads")with open("downloads.tar.gz", "wb") as f: f.write(archive)boxline files get $SESSION_ID downloads # a folder is saved as a .tar.gzResponses
200 OK
The archive's bytes.
application/octet-stream: The file's bytes.
The file's bytesErrors
Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.
| Status | Codes | When |
|---|---|---|
| 400 Bad Request | invalid_request, invalid_json, invalid_cursor, invalid_idempotency_key, invalid_extension, variables_with_extensions, terms_not_accepted, invalid_reset_token, invalid_confirmation_code, wrong_password, no_password, invalid_next, invalid_oauth_token | The request is not valid. |
| 401 Unauthorized | unauthorized | Missing or invalid API key. |
| 404 Not Found | not_found, invite_not_found, provider_unavailable | No such thing in this project (or organization), or no such route. |
| 409 Conflict | session_not_running, shell_disabled, browser_disabled, nothing_saved, not_resumable, invalid_state, conflict, email_taken, identity_in_use, provider_already_linked, last_sign_in_method, not_impersonating, machine_too_old, too_many_credential_values, limit_reached, terms_version_mismatch, no_project, last_owner, organization_not_empty, project_has_sessions, already_member, invite_pending, idempotency_in_progress | The current state does not allow it, or a request with this Idempotency-Key is still being answered. |
| 413 | payload_too_large | The request body is larger than the route allows. |
| 429 Too Many Requests | rate_limited, concurrency_limit | Too many requests, or the organization's concurrent sessions (its plan's) or the project's concurrencyCap are in use. |
{ "error": { "code": "not_found", "message": "session not found", "requestId": "req_4fJx0aQm2Lk9Pz7N" }}Learn more
These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.