Open a browser fallback for a media upload
/v1/asset-upload-sessions/{upload_id}/browserconst handoff = await bird.assets.uploads.handoff(
"aus_01krdgeqcxet5s7t44vh8rt9mg",
);
if (handoff.browser_url) console.log(handoff.browser_url);handoff = client.assets.uploads.handoff("aus_01krdgeqcxet5s7t44vh8rt9mg")
if handoff.browser_url:
print(handoff.browser_url)handoff, err := client.Assets.Uploads.Handoff(context.Background(), "aus_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
if handoff.BrowserUrl != nil {
fmt.Println(*handoff.BrowserUrl)
}$handoff = $bird->assets->uploads->handoff('aus_01krdgeqcxet5s7t44vh8rt9mg');
if ($handoff->getBrowserUrl() !== null) {
echo $handoff->getBrowserUrl();
}bird assets uploads handoff <upload-id>curl -X POST "https://us1.platform.bird.com/v1/asset-upload-sessions/{upload_id}/browser" \
-H "Authorization: Bearer $TOKEN"{
"session": {
"id": "aus_01krdgeqcxet5s7t44vh8rt9mg",
"state": "pending",
"expires_at": "2026-11-04T23:00:00Z",
"name": "Invoice",
"alt_text": null,
"folder_id": null,
"file": {
"filename": "invoice.pdf",
"content_type": "application/pdf",
"size_bytes": 1024,
"sha256": "4e2090a479f7ce6b17ad31f991988f12571bcafbd4a441cc4063644fc1400ae0"
},
"result": null,
"last_error": null,
"next": [],
"asset": null
},
"browser_url": "https://bird.com/dashboard/w/ws_01krdgeqcxet5s7t44vh8rt9mg/media-library/uploads/aus_01krdgeqcxet5s7t44vh8rt9mg",
"next": [
{
"kind": "external",
"description": "Open browser_url and have a person with asset write access select the original file and publish it. Their browser must reach the storage hostname. Opening the page does not complete the upload."
},
{
"kind": "operation",
"operation": "getAssetUploadSession",
"params": {
"upload_id": "aus_01krdgeqcxet5s7t44vh8rt9mg"
},
"description": "After the person finishes, read the saved result using the original workspace and connection."
}
]
}
Offers an existing upload session to a signed-in person with asset write access in its workspace. Only the same OAuth connection or API key that created the session can request this fallback. The file, metadata, capacity reservation and one-hour deadline stay unchanged. Repeating the request returns the same page for a pending session. A non-pending session returns its current state without a browser URL. Enabling the handoff allows any currently authorized person in that workspace to complete or cancel it, independently of the original connection's continued access. The person must select matching file bytes; opening the page never publishes them.
Parameters
upload_idstringID of the media-library upload session.
Response Payload
sessionThe original upload session and any saved publication receipt. In this response, session.next is empty; follow the top-level next steps.
Show child attributes
session.idsession.stateUpload progress. Pending accepts a transfer; finalizing is checking and publishing it. Completed has a saved result. Rejected, cancelled and expired allow no new upload instruction or publication. An already issued upload URL can remain usable until its expiry.
Possible values: pending, finalizing, completed, rejected, cancelled, expired
session.expires_atAbsolute session expiry. Completion must finish before this deadline; starting it or refreshing an upload instruction does not extend it.
session.nameFrozen display name for a newly published asset.
session.alt_textFrozen alternative text, or null when omitted.
session.folder_idFrozen destination folder, or null for the library root.
session.fileExact properties of the original file. Calculate size and SHA-256 from its bytes before creating a session. Images allow up to 5,242,880 bytes; other supported media allow up to 25,000,000 bytes.
Show child attributes
session.file.filenameOriginal filename, including its extension.
session.file.content_typeMedia type of the original file. Supported values are image/png, image/jpeg, image/gif, video/mp4, video/webm, video/quicktime, audio/mpeg, audio/mp4, audio/ogg, audio/wav, and application/pdf.
Supply the exact value without parameters. Unsupported values return E20001. Completion checks this against the file's contents.
session.file.size_bytesExact size of the original file in bytes.
session.file.sha256SHA-256 of the original bytes, encoded as lowercase hexadecimal.
session.resultSaved publication receipt, or null until completed.
session.last_errorLast completion error, or null when no failure is recorded.
session.assetCanonical asset when available, or null before completion or when unavailable.
browser_urlBird page for a pending session, or null when it no longer accepts an upload. The link grants no access; the person must sign in and have asset write permission in the workspace.
nextOrdered steps to finish the fallback or read its outcome.
Related resources
Continue with the documentation, guides and examples for this topic.