files: download.
A file's pointer from a task or a document, and where in the workspace to put it to progress by bytes moved of bytes in all, then the path inside the workspace
From the local server’s own. The call needs the user rung under a token with the files grant, and it is served by the installed app.
The route takes DownloadInput and returns a card whose body is FileTransfer.
Request body#
The request body is DownloadInput.
| field | type | required | note |
|---|---|---|---|
pointer | id | yes | |
into | text | no |
Response#
The route returns a card whose body is FileTransfer. Every card ends with a foot that states the basis of each number, the scope of the call, and the time when the facts were true. This route runs as a long step and returns a task with status 202. POST /v1/work/status returns the task’s progress, and POST /v1/work/cancel stops the task.
Headers#
| header | required | meaning |
|---|---|---|
Scale-Scope | yes | the scope the call runs in: tenant/ |
Scale-As-True-On | no | the date the facts must have been true on; defaults to now |
Scale-As-Known-On | no | the date the facts must have been known on; defaults to now |
Scale-Key | no | for a change, the key made from the input; a repeat under the same key returns the unit held and writes nothing |
A caller needs the user rung and a token with the files grant. The desktop app serves this route.
Example#
The example sends the smallest body that DownloadInput allows. The build validates it against the schema of DownloadInput.
Example
curl -X POST https://api.scaleintelligence.co/v1/files/download \
-H "Scale-Key: $SCALE_KEY" -H "Scale-Scope: tenant/<id>" \
-H "content-type: application/json" \
-d '{ "pointer": "…" }'
import { client } from "@scale/sdk";
const answer = await client.files.download({
"pointer": "…"
});
// answer.body is a FileTransfer. answer.foot holds the basis, the scope and the time.
import requests
answer = requests.post("https://api.scaleintelligence.co/v1/files/download",
headers={"Scale-Key": KEY, "Scale-Scope": "tenant/<id>"},
json={
"pointer": "…"
}).json()
let answer: Card = client.post("https://api.scaleintelligence.co/v1/files/download")
.header("Scale-Key", key).header("Scale-Scope", "tenant/<id>")
.json(&DownloadInput { /* the fields of the page */ }).send().await?.json().await?;
MCP tool#
The MCP tool si.files.download takes the same input and returns the same card. The tool changes data and needs a grant. An MCP host that renders cards draws this card from ui://scale-intelligence/cards/FileTransfer. The tool’s page describes it.
POST /v1/files/download
Scale-Scope: …
Scale-As-True-On: …
Scale-As-Known-On: …
Scale-Key: …
content-type: application/json
{
"pointer": "…"
}Claims#
| claim | state | route or tool |
|---|---|---|
| The platform serves the route /v1/files/download at contract 0476e35e6e275db5. | target | /v1/files/download |