curl --request POST \
--url https://api.openworklabs.com/v1/direct-uploads/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>",
"connectionId": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/direct-uploads/google-workspace/drive-upload-sessions"
payload = {
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"connectionId": "<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>',
connectionId: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/direct-uploads/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/direct-uploads/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>',
'connectionId' => '<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/direct-uploads/google-workspace/drive-upload-sessions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"connectionId\": \"<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/direct-uploads/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 \"connectionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/direct-uploads/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 \"connectionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"uploadUrl": "<string>",
"method": "PUT",
"size": 0,
"chunkSize": 8388608,
"instructions": "<string>"
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "feature_disabled",
"feature": "driveResumableUploads"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Prepare a Google Drive session for host 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. 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. Uses the selected connection.
curl --request POST \
--url https://api.openworklabs.com/v1/direct-uploads/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>",
"connectionId": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/direct-uploads/google-workspace/drive-upload-sessions"
payload = {
"name": "<string>",
"size": 2748779069440,
"mimeType": "application/octet-stream",
"folderId": "<string>",
"connectionId": "<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>',
connectionId: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/direct-uploads/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/direct-uploads/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>',
'connectionId' => '<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/direct-uploads/google-workspace/drive-upload-sessions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"size\": 2748779069440,\n \"mimeType\": \"application/octet-stream\",\n \"folderId\": \"<string>\",\n \"connectionId\": \"<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/direct-uploads/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 \"connectionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/direct-uploads/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 \"connectionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"uploadUrl": "<string>",
"method": "PUT",
"size": 0,
"chunkSize": 8388608,
"instructions": "<string>"
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "feature_disabled",
"feature": "driveResumableUploads"
}{
"error": "<string>",
"message": "<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.
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_-]+$^(google-workspace|emc_[A-Za-z0-9]+)$Response
Secret upload session for host transport.
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 <= 9007199254740991Was this page helpful?