curl --request POST \
--url https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"fileId": "<string>",
"baseRevision": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions"
payload = {
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"fileId": "<string>",
"baseRevision": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
size: 2748779069440,
mimeType: 'application/octet-stream',
folderId: '<string>',
fileId: '<string>',
baseRevision: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'size' => 2748779069440,
'mimeType' => 'application/octet-stream',
'folderId' => '<string>',
'fileId' => '<string>',
'baseRevision' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"uploadUrl": "<string>",
"method": "PUT",
"size": 0,
"chunkSize": 8388608,
"instructions": "<string>",
"replaces": {
"fileId": "<string>",
"previousRevision": "<string>"
}
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"currentRevision": "<string>",
"modifiedTime": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Prepare a resumable Google Drive upload, or a replacement of an existing file's content, for a client with local file transport
Prepare a Google Drive resumable upload session for an explicitly requested file upload. This does not upload bytes or prove completion. Clients with file transport can PUT local bytes directly to the returned secret uploadUrl, outside model context. With fileId the upload replaces that file’s content as a new Drive version; with convertTo a new Office file becomes a native Google file. Google sessions can remain valid for up to one week; they are not short-lived signed URLs. Do not automatically create another session after an uncertain result. Final PUT returns file metadata, including headRevisionId and md5Checksum for later replaces. Uses the selected connection.
curl --request POST \
--url https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"fileId": "<string>",
"baseRevision": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions"
payload = {
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"fileId": "<string>",
"baseRevision": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
size: 2748779069440,
mimeType: 'application/octet-stream',
folderId: '<string>',
fileId: '<string>',
baseRevision: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'size' => 2748779069440,
'mimeType' => 'application/octet-stream',
'folderId' => '<string>',
'fileId' => '<string>',
'baseRevision' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/capabilities/google-workspace/drive-upload-sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"fileId\": \"<string>\",\n \"baseRevision\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"uploadUrl": "<string>",
"method": "PUT",
"size": 0,
"chunkSize": 8388608,
"instructions": "<string>",
"replaces": {
"fileId": "<string>",
"previousRevision": "<string>"
}
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"currentRevision": "<string>",
"modifiedTime": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
File basename; no file bytes or local paths. Ignored when replacing a file.
1 - 255^[^\x00-\x1f\x7f]+$Exact file size in bytes, up to Google's 5 TiB limit.
1 <= x <= 54975581388801 - 255^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+$1 - 512^[A-Za-z0-9_-]+$Replace this existing file's content instead of creating a file. It keeps its ID, link, sharing and comments; the previous version stays in Drive's version history for 30 days.
1 - 512^[A-Za-z0-9_-]+$Required with fileId: the revision your copy was downloaded from. Refused with drive_conflict when Drive changed since; download the newer version and reapply the edits, or save a new file.
1 - 512New files only: save the uploaded Office file as this native Google Docs, Sheets or Slides type.
application/vnd.google-apps.spreadsheet, application/vnd.google-apps.document, application/vnd.google-apps.presentation Response
Secret upload session; file not yet uploaded.
Secret bearer upload-session URL. Never print, share, persist, or log it. Only upload the authorized file; no Google access token is needed.
"PUT"-9007199254740991 <= x <= 9007199254740991Present when the upload replaces an existing file's content.
Show child attributes
Show child attributes
Was this page helpful?