Wait for a file
Returns the newest file matching a glob once its size stops changing (e.g. a finished download).
GET
/v1/sessions/{id}/files/waitRequest
| Method and path | GET/v1/sessions/{id}/files/wait |
|---|---|
| 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. |
Path parameters
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
idrequired | string | – | – |
Query parameters
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
patternrequired | string | – | – | |
timeoutMs | integer | 30000 | – | At most 600000. |
curl -G "https://api.boxline.dev/v1/sessions/$SESSION_ID/files/wait" \ --data-urlencode "pattern=downloads/*.csv" \ --data-urlencode "timeoutMs=30000" \ -H "x-api-key: $BOXLINE_API_KEY"import { Boxline } from "@boxline/sdk";const bx = new Boxline(); // reads BOXLINE_API_KEY and BOXLINE_API_URLconst file = await bx.sessions.files.waitFor("SESSION_ID", "downloads/*.csv", 30000);console.log(file.path, file.size);from boxline import Boxlinebx = Boxline() # reads BOXLINE_API_KEY and BOXLINE_API_URLfile = bx.sessions.files.wait_for("SESSION_ID", "downloads/*.csv", timeout_ms=30000)print(file["path"], file["size"])Responses
200 OK
The file.
Fields
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
path | string | – | – | |
size | integer | – | – |
{ "path": "/workspace/downloads/report.csv", "size": 0}Errors
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. |
| 408 Request Timeout | timeout | No matching file in time. |
{ "error": { "code": "not_found", "message": "session not found", "requestId": "req_4fJx0aQm2Lk9Pz7N" }}Use with the browser
Wait for a download the browser started, then work on it in the shell. See Browser, shell and files together.
curl -G https://api.boxline.dev/v1/sessions/$SESSION_ID/files/wait \ -H "x-api-key: $BOXLINE_API_KEY" \ --data-urlencode "pattern=downloads/*.csv"curl -X POST https://api.boxline.dev/v1/sessions/$SESSION_ID/shell/exec \ -H "x-api-key: $BOXLINE_API_KEY" \ -H "content-type: application/json" \ -d @- <<'JSON'{"command": "mkdir -p output && python3 -c \"import pandas as pd; print(pd.read_csv('downloads/report.csv')['revenue'].sum())\" > output/total.txt"}JSONcurl -G https://api.boxline.dev/v1/sessions/$SESSION_ID/files \ -H "x-api-key: $BOXLINE_API_KEY" \ --data-urlencode "path=output/total.txt"const csv = await session.files.waitFor("downloads/*.csv"); // the browser's downloadawait session.exec(`mkdir -p output && python3 -c "import pandas as pd; print(pd.read_csv('downloads/report.csv')['revenue'].sum())" > output/total.txt`);const total = (await session.files.readText("output/total.txt")).trim();csv = session.files.wait_for("downloads/*.csv") # the browser's downloadsession.exec("""mkdir -p output && python3 -c "import pandas as pd; print(pd.read_csv('downloads/report.csv')['revenue'].sum())" > output/total.txt""")total = session.files.read_text("output/total.txt").strip()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.