Upload from URL
upload_from_urlUpload a single asset to a Playbook board by giving Playbook a public URL to fetch. Returns immediately with a skeleton asset; the byte fetch runs asynchronously in the background. Requires a token with the write scope. Playbook fetches the URL itself, anonymously — a link behind a login or a signed URL that has expired will not work here, and neither will a file that exists only on someone's machine. For those, use share_board with enable_uploads. It returns a link a person can drop files on without signing in, and whatever they add lands on that board for you to collect with list_assets. It needs a live human and it shows the board's existing contents to anyone holding the link, so reach for it only once no fetchable URL is available. The fetch runs to a time budget (five minutes of streaming), so a source that is very large or very slow fails with "Source URL too large to fetch; upload manually" — when that happens, send the bytes yourself with create_upload_url rather than retrying. Tip: validate collection_token with get_board first — an unknown token silently falls back to an anonymous default board.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Public URL of the file to ingest | |
| tags | No | Manual tags to apply | |
| title | No | Override the title. Defaults to the filename in the URL. Not derived when as_link is true — Playbook titles those from the linked page's own metadata. | |
| status | No | Status label to set | |
| as_link | No | If true, store as a bare link instead of fetching bytes (default false) | |
| description | No | Optional description | |
| ai_generated | No | Mark the asset as produced by an AI tool. Set it at creation rather than by a later update. Through these tools it is a marker and nothing else; on Playbook's REST presigned-upload endpoints the same flag additionally suppresses automatic duplicate merging and grouping. | |
| 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. | |
| ai_agent_payload | No | Free-form JSON metadata stored with the asset — for example generation settings such as model and seed, or a source job id. Playbook never interprets it. Max 4096 BYTES of serialised JSON; anything larger is REJECTED, never truncated. A write REPLACES the whole object. Readable per asset (get_asset, or list/search with get_ai_payload=true) but NOT searchable or filterable. | |
| collection_token | No | Destination board token. If omitted or unknown, Playbook silently routes to a default anonymous board — call get_board first to validate. |