Create upload URL
create_upload_urlStep 1 of 2 for uploading a file you already HOLD — one generated locally, returned as base64 by an image API, or sitting on disk. Returns a one-time address to send the bytes to, plus the exact HTTP requests to make; the caller sends the bytes and finish_upload then turns them into an asset. Requires a token with the write scope and a caller that can make HTTP requests. Prefer upload_from_url whenever the file is already at a URL Playbook can fetch — that route is one call and needs nothing from you. Come here when it is not: no URL at all, a URL behind a login, an expired signed URL, a host that blocks datacenter addresses, or an ingest that failed with "Source URL too large to fetch; upload manually" (Playbook's fetcher runs to a five-minute streaming budget, which this path does not have — though it has a size ceiling of its own, below). When neither a reachable URL nor HTTP requests are available, share_board with enable_uploads returns a link a person can drop the file on. Files above 104857600 bytes are refused: these tools transfer in a single request, and splitting a larger file into chunks is what the Playbook web and desktop apps are for.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | Exact size of the file in BYTES. It is checked against the workspace's storage allowance before the upload address is issued, and a wrong value here produces a signature that does not match the bytes you actually send. Measure it, do not estimate it. | |
| filename | Yes | Filename including its extension, e.g. "moon.png". Playbook derives the stored file extension from it, so a name with no extension produces an object with no usable type. It does NOT become the asset's title — the two calls share no state, so pass the title again to finish_upload. | |
| media_type | Yes | MIME type of the file, e.g. "image/png". Required, and required again at completion: it is covered by the upload signature, so the value you give here is the exact Content-Type the recipe will tell you to send. Get it from whatever produced the file rather than guessing from the extension. | |
| organization | No | Workspace slug, as returned by list_organizations. Omit it when the account has a single workspace — it is then resolved from your token. Pass it only when the account has several, or when you mean a workspace other than the obvious one. |