API reference
Documents, Sheets and Slides
/ v1/ hooks/ office/ links/ :token/ stateA document, spreadsheet or presentation through its public link, for viewing: its name, kind and state (base64 Yjs). No authentication; password-protected links need their grant (x-si-link-grant).
- Auth
- None.
Path parameters
tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.
curl 'https://api.cactive.com.au/v1/hooks/office/links/{token}/state'Response 200
{
item: {
itemId: string
name: string
modifiedAt: number
}
kind: "video" | "document" | "spreadsheet" | "presentation"
state: string
}/ v1/ hooks/ office/ links/ :token/ media/ :mediaIdA picture in a file shared by a public link.
- Auth
- None.
Path parameters
tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
curl 'https://api.cactive.com.au/v1/hooks/office/links/{token}/media/{mediaId}'Response 200
{
url: string
mime: string
}/ v1/ hooks/ office/ render/ :token/ stateThe file a render token names (a two-minute token for printing and PDF downloads), for the print page.
- Auth
- None.
Path parameters
tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.
curl 'https://api.cactive.com.au/v1/hooks/office/render/{token}/state'Response 200
{
fileId: string
kind?: "video" | "document" | "spreadsheet" | "presentation"
format: "pdf" | "png" | "print"
options: {
[key: string]: string
}
state: string
}/ v1/ hooks/ office/ render/ :token/ media/ :mediaIdA picture in the file a render token names.
- Auth
- None.
Path parameters
tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
curl 'https://api.cactive.com.au/v1/hooks/office/render/{token}/media/{mediaId}'Response 200
{
url: string
mime: string
}/ v1/ orgs/ :orgId/ office/ filesA new document, spreadsheet or presentation (blank, a built-in template or one of the org's), in parentId or My Drive.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Request body
kind"document" | "spreadsheet" | "presentation" | "video"requiredparentIdstring3–64 characters.
namestring1–255 characters.
templateIdstring3–64 characters.
localestringUp to 20 characters.
todaystringMatches
^\d{4}-\d{2}-\d{2}$.meetingobjectmeeting.titlestringUp to 200 characters.
meeting.timestringUp to 60 characters.
meeting.guestsstring[]Up to 50 items. Each up to 120 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"kind": "document"
}'Response 201
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileIdA document, spreadsheet or presentation: its Drive item, kind, what you may do (rights: edit, comment, share) and where it is.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ copyMakes a copy ("Copy of …", or name) in parentId or beside it, with its pictures; versionId copies an earlier version.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body
namestring1–255 characters.
parentIdstring3–64 characters.
versionIdstringUp to 64 characters.
withProxiesboolean
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/copy' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"parentId": "<parentId>",
"versionId": "<versionId>"
}'Response 201
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ collabThe shared document with the caller's rights and a socket ticket (ticket=0 without; state=0 for a ticket alone, on reconnects).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Query parameters
ticket"0" | "1"state"0" | "1"tabstringUp to 64 characters.
devicestringUp to 60 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/collab' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
epoch: null | string
seq: number
state: null | string
base: string | number
canWrite: boolean
canComment?: boolean
socket: null | {
url: string
ticket: null | string
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ collab/ seedSets up a file nobody has edited yet: the first update (base64 Yjs) on the version base. 409 when it's already set up.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.413Too large.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/collab/seed' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
undefined
/ v1/ orgs/ :orgId/ office/ files/ :fileId/ collab/ updatesSends an edit (update, base64 Yjs) at epoch; answers its seq. For edits too large for the socket (over 90 KB). 409 when the epoch is stale: reload the state.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body (up to 2,867 KB)
epochstringrequired1–64 characters.
updatestringrequiredAt least 1 character.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.413Too large.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/collab/updates' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"epoch": "example",
"update": "2026-01-01"
}'Response 200
{
seq: number
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ collab/ updatesEdits after after at epoch, or { reset: true } when the file was replaced since (a restore or an upload): reload the state.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Query parameters
epochstringrequired1–64 characters.
afterintegerrequired≥ 0. Coerced from a string.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/collab/updates?epoch=example&after=1' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
reset: true
} | {
reset: false
updates: {
seq: number
update: string
}[]
state?: null | string
seq?: number
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ checkpointSaves a checkpoint now (a Drive version): on leaving, every 10 minutes of editing, or named.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body
reason"interval" | "leave" | "named"requirednamestringUp to 200 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/checkpoint' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"reason": "interval"
}'Response 200
{
saved: boolean
seq: number
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ mediaA picture into the file: a one-part upload link, then …/complete; GET a one-hour link to it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body
namestringrequired1–255 characters.
sizeintegerrequired≥ 1.
mimestringrequiredUp to 100 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/media' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"size": 1,
"mime": "example"
}'Response 201
{
mediaId: string
url: string
method: "PUT"
expiresIn: number
uploadId: string
partSize: number
partCount: number
urls: {
[key: number]: string
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ media/ :mediaId/ completeFinishes a picture's upload (after the PUT to the link POST …/media answered).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/media/{mediaId}/complete' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
mediaId: string
size: number
mime: string
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ media/ :mediaIdA short-lived link to a picture in the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/media/{mediaId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
mime: string
size: number
expiresIn: number
canEdit: boolean
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ versionsVersions (Drive's, newest first) with names and pins, whether you may manage them, and how many changes aren't in a version yet (unsaved).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/versions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
versions: {
versionId: string
name: string
size: number
mime: string
checksum?: string
uploadedBy: string
createdAt: number
current: boolean
restoredFrom?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
label?: string
pinned?: boolean
}[]
canManage: boolean
unsaved: number
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ versions/ :versionId/ contentAn earlier version's state (base64 Yjs) for viewing. Editors only, as in Drive.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/versions/{versionId}/content' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
versionId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
state: null | string
createdAt: number
uploadedBy: string
label?: string
pinned: boolean
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ versions/ :versionIdNames (name, null to clear) or pins (pinned) a version. Pinned versions aren't pruned.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Request body
namestringor nullUp to 200 characters.
pinnedboolean
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/versions/{versionId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"pinned": true
}'Response 200
{
versionId: string
label?: string
pinned: boolean
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ versions/ :versionId/ restoreMakes an earlier version current again (a new version with its content); open editors reload.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/versions/{versionId}/restore' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}
versionId: string
restoredFrom: string
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threadsComment threads on the file, with their anchors (text, cell, slide element or point) and authors' names.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
threads: {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}[]
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threadsStarts a thread at anchor with body (Markdown; @[Name](usr_…) mentions notify). Commenters and up.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body
anchorobject | object | object | object | object | objectrequiredbodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"anchor": {},
"body": "example"
}'Response 201
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threads/ :threadId/ commentsReplies to a thread (and reopens it if it was resolved).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Request body
bodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads/{threadId}/comments' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example"
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threads/ :threadIdResolves or reopens a thread (resolved). Anyone who can comment.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Request body
resolvedbooleanrequired
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"resolved": true
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threads/ :threadIdDeletes a thread. Its author, or an editor of the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threads/ :threadId/ comments/ :commentIdEdits your own comment (body).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).commentIdComment id (
icm_…).
Request body
bodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads/{threadId}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example"
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ threads/ :threadId/ comments/ :commentIdDeletes a comment: your own, or any as an editor of the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).commentIdComment id (
icm_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/threads/{threadId}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ mentionsPeople @mentioned who can't open the file yet (the commenter is asked to share first).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Request body
userIdsstring[]requiredUp to 50 items. Each up to 64 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/mentions' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"userIds": [
"example"
]
}'Response 200
{
withoutAccess: string[]
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ lockEditing locks (Studio: one editor at a time; renew every minute).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
lock: {
lockedBy?: string
lockedName?: string
lockUntil?: number
mine: boolean
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ lockTakes or renews the editing lock for one-at-a-time editing (renew every minute). 423 with who has it when someone else does.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
lock: {
lockedBy?: string
lockedName?: string
lockUntil?: number
mine: boolean
}
}/ v1/ orgs/ :orgId/ office/ files/ :fileId/ lockGives up the editing lock.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ office/ templatesThe template gallery for kind: Blank, the organization's own templates you can read, then the built-ins.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
kind"document" | "spreadsheet" | "presentation" | "video"
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/templates' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
templates: {
templateId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
name: string
category?: string
fileId?: string
builtIn: boolean
}[]
}/ v1/ orgs/ :orgId/ office/ templatesMakes a file (fileId) one of the organization's templates, with an optional name and category. Editors of the file; not in personal spaces.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.namestringUp to 120 characters.
categorystringUp to 60 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/templates' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>"
}'Response 201
{
template: {
templateId: string
fileId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
name: string
category?: string
builtIn: false
}
}/ v1/ orgs/ :orgId/ office/ templates/ :fileIdTakes a file off the organization's templates (the file stays).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/office/templates/{fileId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ office/ importsOpens a Word, Excel, PowerPoint, OpenDocument, CSV or Markdown file as a native one beside it (a job).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Request body
itemIdstringrequired3–64 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/imports' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"itemId": "<itemId>"
}'Response 202
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ orgs/ :orgId/ office/ exportsDownloads a file in another format (a job; ask GET /jobs/:jobId until it's done, then follow result.url).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.formatstringrequiredUp to 10 characters.
versionIdstringUp to 64 characters.
sheetIdstringUp to 40 characters.
slideIdstringUp to 40 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/exports' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>",
"format": "example"
}'Response 202
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ orgs/ :orgId/ office/ jobs/ :jobIdAn import or export job: status (queued, running, done, failed) and, when done, the new file or a download link.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).jobIdJob id: an agent job (
job_…), underpipelinesa pipeline job (pjb_…), or undercrman import or export (cjb_…); undermarketinga list import (mkj_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/jobs/{jobId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ orgs/ :orgId/ office/ recentThe person's files of a kind: recently opened first (view: recent, shared, starred or all).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
kind"document" | "spreadsheet" | "presentation" | "video"requiredview"recent" | "shared" | "starred" | "all"
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/recent?kind=document' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
items: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}[]
}/ v1/ orgs/ :orgId/ office/ searchFiles whose content holds every word of q (and that the person can open), with a snippet.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Query parameters
qstringrequired1–200 characters.
kind"document" | "spreadsheet" | "presentation" | "video"limitinteger1–100. Coerced from a string.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/office/search?q=example' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}
kind: "video" | "document" | "spreadsheet" | "presentation"
snippet: string
}[]
}/ v1/ orgs/ :orgId/ office/ assistWriting, formula and slide help for the file's editor (a model call; counted per day).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
orgIdOrganization id (
org_…).
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.taskstringrequiredUp to 40 characters.
inputstringrequired1–20,000 characters.
contextstringUp to 20,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/office/assist' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>",
"task": "example",
"input": "example"
}'Response 200
{
model: string
data?: {
[key: string]: unknown
}
task: string
text: string
}/ v1/ me/ office/ filesA new document, spreadsheet or presentation (blank, a built-in template or one of the org's), in parentId or My Drive.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Request body
kind"document" | "spreadsheet" | "presentation" | "video"requiredparentIdstring3–64 characters.
namestring1–255 characters.
templateIdstring3–64 characters.
localestringUp to 20 characters.
todaystringMatches
^\d{4}-\d{2}-\d{2}$.meetingobjectmeeting.titlestringUp to 200 characters.
meeting.timestringUp to 60 characters.
meeting.guestsstring[]Up to 50 items. Each up to 120 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"kind": "document"
}'Response 201
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ me/ office/ files/ :fileIdA document, spreadsheet or presentation: its Drive item, kind, what you may do (rights: edit, comment, share) and where it is.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ me/ office/ files/ :fileId/ copyMakes a copy ("Copy of …", or name) in parentId or beside it, with its pictures; versionId copies an earlier version.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body
namestring1–255 characters.
parentIdstring3–64 characters.
versionIdstringUp to 64 characters.
withProxiesboolean
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/copy' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"parentId": "<parentId>",
"versionId": "<versionId>"
}'Response 201
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
path: {
itemId: string
name: string
}[]
drive: {
driveId: string
kind: "user" | "shared"
name: string
}
capabilities: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
shares?: {
principalId: string
type: "user" | "team"
role: "viewer" | "commenter" | "editor"
inherited?: {
itemId: string
name: string
}
}[]
link: {
scope: "org" | "restricted" | "anyone"
role: "viewer" | "commenter" | "editor"
expiresAt?: number
hasPassword: boolean
url?: string
}
personal: boolean
}
kind: "video" | "document" | "spreadsheet" | "presentation"
app: "documents" | "sheets" | "slides" | "video"
path: string
rights: {
view: boolean
comment: boolean
edit: boolean
share: boolean
delete: boolean
}
}/ v1/ me/ office/ files/ :fileId/ collabThe shared document with the caller's rights and a socket ticket (ticket=0 without; state=0 for a ticket alone, on reconnects).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Query parameters
ticket"0" | "1"state"0" | "1"tabstringUp to 64 characters.
devicestringUp to 60 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/collab' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
epoch: null | string
seq: number
state: null | string
base: string | number
canWrite: boolean
canComment?: boolean
socket: null | {
url: string
ticket: null | string
}
}/ v1/ me/ office/ files/ :fileId/ collab/ seedSets up a file nobody has edited yet: the first update (base64 Yjs) on the version base. 409 when it's already set up.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.413Too large.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/collab/seed' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
undefined
/ v1/ me/ office/ files/ :fileId/ collab/ updatesSends an edit (update, base64 Yjs) at epoch; answers its seq. For edits too large for the socket (over 90 KB). 409 when the epoch is stale: reload the state.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body (up to 2,867 KB)
epochstringrequired1–64 characters.
updatestringrequiredAt least 1 character.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.413Too large.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/collab/updates' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"epoch": "example",
"update": "2026-01-01"
}'Response 200
{
seq: number
}/ v1/ me/ office/ files/ :fileId/ collab/ updatesEdits after after at epoch, or { reset: true } when the file was replaced since (a restore or an upload): reload the state.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Query parameters
epochstringrequired1–64 characters.
afterintegerrequired≥ 0. Coerced from a string.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/collab/updates?epoch=example&after=1' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
reset: true
} | {
reset: false
updates: {
seq: number
update: string
}[]
state?: null | string
seq?: number
}/ v1/ me/ office/ files/ :fileId/ checkpointSaves a checkpoint now (a Drive version): on leaving, every 10 minutes of editing, or named.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body
reason"interval" | "leave" | "named"requirednamestringUp to 200 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/checkpoint' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"reason": "interval"
}'Response 200
{
saved: boolean
seq: number
}/ v1/ me/ office/ files/ :fileId/ mediaA picture into the file: a one-part upload link, then …/complete; GET a one-hour link to it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body
namestringrequired1–255 characters.
sizeintegerrequired≥ 1.
mimestringrequiredUp to 100 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/media' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"size": 1,
"mime": "example"
}'Response 201
{
mediaId: string
url: string
method: "PUT"
expiresIn: number
uploadId: string
partSize: number
partCount: number
urls: {
[key: number]: string
}
}/ v1/ me/ office/ files/ :fileId/ media/ :mediaId/ completeFinishes a picture's upload (after the PUT to the link POST …/media answered).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/media/{mediaId}/complete' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
mediaId: string
size: number
mime: string
}/ v1/ me/ office/ files/ :fileId/ media/ :mediaIdA short-lived link to a picture in the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
mediaIdA picture's or other media's id in a document, spreadsheet, presentation or video project (
med_…): pictures, Video's proxies, its poster and transcription mixdowns.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/media/{mediaId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
mime: string
size: number
expiresIn: number
canEdit: boolean
}/ v1/ me/ office/ files/ :fileId/ versionsVersions (Drive's, newest first) with names and pins, whether you may manage them, and how many changes aren't in a version yet (unsaved).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/versions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
versions: {
versionId: string
name: string
size: number
mime: string
checksum?: string
uploadedBy: string
createdAt: number
current: boolean
restoredFrom?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
label?: string
pinned?: boolean
}[]
canManage: boolean
unsaved: number
}/ v1/ me/ office/ files/ :fileId/ versions/ :versionId/ contentAn earlier version's state (base64 Yjs) for viewing. Editors only, as in Drive.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/versions/{versionId}/content' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
versionId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
state: null | string
createdAt: number
uploadedBy: string
label?: string
pinned: boolean
}/ v1/ me/ office/ files/ :fileId/ versions/ :versionIdNames (name, null to clear) or pins (pinned) a version. Pinned versions aren't pruned.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Request body
namestringor nullUp to 200 characters.
pinnedboolean
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/me/office/files/{fileId}/versions/{versionId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"pinned": true
}'Response 200
{
versionId: string
label?: string
pinned: boolean
}/ v1/ me/ office/ files/ :fileId/ versions/ :versionId/ restoreMakes an earlier version current again (a new version with its content); open editors reload.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
versionIdVersion id: a saved page version, as listed by the page history, an issue space's version (release,
ver_…), or a Drive file's version (fvr_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/versions/{versionId}/restore' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}
versionId: string
restoredFrom: string
}/ v1/ me/ office/ files/ :fileId/ threadsComment threads on the file, with their anchors (text, cell, slide element or point) and authors' names.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
threads: {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}[]
}/ v1/ me/ office/ files/ :fileId/ threadsStarts a thread at anchor with body (Markdown; @[Name](usr_…) mentions notify). Commenters and up.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body
anchorobject | object | object | object | object | objectrequiredbodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"anchor": {},
"body": "example"
}'Response 201
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ me/ office/ files/ :fileId/ threads/ :threadId/ commentsReplies to a thread (and reopens it if it was resolved).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Request body
bodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads/{threadId}/comments' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example"
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ me/ office/ files/ :fileId/ threads/ :threadIdResolves or reopens a thread (resolved). Anyone who can comment.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Request body
resolvedbooleanrequired
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"resolved": true
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ me/ office/ files/ :fileId/ threads/ :threadIdDeletes a thread. Its author, or an editor of the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ me/ office/ files/ :fileId/ threads/ :threadId/ comments/ :commentIdEdits your own comment (body).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).commentIdComment id (
icm_…).
Request body
bodystringrequired1–8,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X PATCH 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads/{threadId}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"body": "example"
}'Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ me/ office/ files/ :fileId/ threads/ :threadId/ comments/ :commentIdDeletes a comment: your own, or any as an editor of the file.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).commentIdComment id (
icm_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/me/office/files/{fileId}/threads/{threadId}/comments/{commentId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: null | {
id: string
createdAt: number
updatedAt: number
comments: {
id: string
authorId: string
authorName?: string
body: string
createdAt: number
editedAt?: number
}[]
resolved: boolean
resolvedBy?: string
resolvedAt?: number
anchor: {
type: "text"
from: string
to: string
quote?: string
} | {
type: "cell"
sheetId: string
rowId: string
colId: string
label?: string
} | {
type: "element"
slideId: string
elementId: string
} | {
type: "point"
x: number
y: number
} | {
type: "time"
sequenceId: string
t: number
duration?: number
x?: number
y?: number
} | {
type: "file"
}
mentions?: string[]
metadata?: {
[key: string]: unknown
}
}
}/ v1/ me/ office/ files/ :fileId/ mentionsPeople @mentioned who can't open the file yet (the commenter is asked to share first).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Request body
userIdsstring[]requiredUp to 50 items. Each up to 64 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/mentions' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"userIds": [
"example"
]
}'Response 200
{
withoutAccess: string[]
}/ v1/ me/ office/ files/ :fileId/ lockEditing locks (Studio: one editor at a time; renew every minute).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
lock: {
lockedBy?: string
lockedName?: string
lockUntil?: number
mine: boolean
}
}/ v1/ me/ office/ files/ :fileId/ lockTakes or renews the editing lock for one-at-a-time editing (renew every minute). 423 with who has it when someone else does.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
lock: {
lockedBy?: string
lockedName?: string
lockUntil?: number
mine: boolean
}
}/ v1/ me/ office/ files/ :fileId/ lockGives up the editing lock.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/me/office/files/{fileId}/lock' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ me/ office/ templatesThe template gallery for kind: Blank, the organization's own templates you can read, then the built-ins.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Query parameters
kind"document" | "spreadsheet" | "presentation" | "video"
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/templates' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
templates: {
templateId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
name: string
category?: string
fileId?: string
builtIn: boolean
}[]
}/ v1/ me/ office/ templatesMakes a file (fileId) one of the organization's templates, with an optional name and category. Editors of the file; not in personal spaces.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.namestringUp to 120 characters.
categorystringUp to 60 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/templates' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>"
}'Response 201
{
template: {
templateId: string
fileId: string
kind: "video" | "document" | "spreadsheet" | "presentation"
name: string
category?: string
builtIn: false
}
}/ v1/ me/ office/ templates/ :fileIdTakes a file off the organization's templates (the file stays).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
fileIdFile id, as returned when the upload was created.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X DELETE 'https://api.cactive.com.au/v1/me/office/templates/{fileId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ me/ office/ importsOpens a Word, Excel, PowerPoint, OpenDocument, CSV or Markdown file as a native one beside it (a job).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Request body
itemIdstringrequired3–64 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/imports' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"itemId": "<itemId>"
}'Response 202
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ me/ office/ exportsDownloads a file in another format (a job; ask GET /jobs/:jobId until it's done, then follow result.url).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.formatstringrequiredUp to 10 characters.
versionIdstringUp to 64 characters.
sheetIdstringUp to 40 characters.
slideIdstringUp to 40 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/exports' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>",
"format": "example"
}'Response 202
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ me/ office/ jobs/ :jobIdAn import or export job: status (queued, running, done, failed) and, when done, the new file or a download link.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Path parameters
jobIdJob id: an agent job (
job_…), underpipelinesa pipeline job (pjb_…), or undercrman import or export (cjb_…); undermarketinga list import (mkj_…).
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/jobs/{jobId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
job: {
jobId: string
type: "import" | "export" | "render"
status: "queued" | "done" | "failed" | "running"
result?: {
[key: string]: unknown
}
error?: string
}
}/ v1/ me/ office/ recentThe person's files of a kind: recently opened first (view: recent, shared, starred or all).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Query parameters
kind"document" | "spreadsheet" | "presentation" | "video"requiredview"recent" | "shared" | "starred" | "all"
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/recent?kind=document' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
items: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}[]
}/ v1/ me/ office/ searchFiles whose content holds every word of q (and that the person can open), with a snippet.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Query parameters
qstringrequired1–200 characters.
kind"document" | "spreadsheet" | "presentation" | "video"limitinteger1–100. Coerced from a string.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl 'https://api.cactive.com.au/v1/me/office/search?q=example' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
item: {
itemId: string
driveId: string
parentId?: string
kind: "file" | "folder"
name: string
type: "text" | "code" | "other" | "folder" | "video" | "archive" | "audio" | "document" | "spreadsheet" | "presentation" | "pdf" | "image"
mime?: string
size: number
versions: number
versionId?: string
checksum?: string
children?: number
description?: string
createdBy: string
createdAt: number
modifiedBy: string
modifiedAt: number
ownerId?: string
role: null | "owner" | "viewer" | "commenter" | "editor" | "manager"
starred: boolean
shared: boolean
trashedAt?: number
trashedBy?: string
thumbnailUrl?: string
media?: {
width?: number
height?: number
takenAt?: number
make?: string
model?: string
lat?: number
lon?: number
altitude?: number
orientation?: number
}
stripMetadata: boolean
spaceId: string
contentMatch?: string
}
kind: "video" | "document" | "spreadsheet" | "presentation"
snippet: string
}[]
}/ v1/ me/ office/ assistWriting, formula and slide help for the file's editor (a model call; counted per day).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- drive:read
Request body
fileIdstringrequiredMatches
^fil_[0-9a-z]{6,40}$.taskstringrequiredUp to 40 characters.
inputstringrequired1–20,000 characters.
contextstringUp to 20,000 characters.
Errors
403Personal files are only for the person, signed in.403This key has no person behind it, so it can't open Drive files.403The person who made this key isn't in the organization any more.
curl -X POST 'https://api.cactive.com.au/v1/me/office/assist' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"fileId": "<fileId>",
"task": "example",
"input": "example"
}'Response 200
{
model: string
data?: {
[key: string]: unknown
}
task: string
text: string
}/ v1/ office/ configLimits for Documents, Sheets, Slides and Studio, and the download formats each kind offers now.
- Auth
- A person's token or an API key, as Authorization: Bearer.
curl 'https://api.cactive.com.au/v1/office/config' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
limits: {
"office.fileMb": number
"office.sheetCells": number
"office.sheets": number
"office.chartsPerWorkbook": number
"office.pivotsPerWorkbook": number
"office.slides": number
"office.mediaMb": number
"office.importMb": number
"office.exportsPerHour": number
"office.assistPerDay": number
"office.threadsPerFile": number
"studio.maxPixels": number
"studio.maxLayers": number
"studio.psdMb": number
"studio.historyMb": number
}
fonts: {
family: string
category: "serif" | "mono" | "display" | "sans"
}[]
fontsUrl: null | string
catalog: {
id: "office.fileMb" | "office.sheetCells" | "office.sheets" | "office.chartsPerWorkbook" | "office.pivotsPerWorkbook" | "office.slides" | "office.mediaMb" | "office.importMb" | "office.exportsPerHour" | "office.assistPerDay" | "office.threadsPerFile" | "studio.maxPixels" | "studio.maxLayers" | "studio.psdMb" | "studio.historyMb"
label: "Largest file (MB of editing state)" | "Cells per workbook" | "Sheets per workbook" | "Charts per workbook" | "Pivot tables per workbook" | "Slides per presentation" | "Largest picture (MB)" | "Largest file to import (MB)" | "Downloads as other formats per person per hour" | "Writing and formula help per person per day" | "Comment threads per file" | "Largest canvas (pixels)" | "Layers per image" | "Largest Photoshop file (MB)" | "Undo history (MB)"
}[]
exports: {
[key: string]: {
format: "pdf" | "csv" | "png" | "txt" | "docx" | "odt" | "md" | "xlsx" | "ods" | "tsv" | "pptx" | "odp"
label: string
available: boolean
}[]
}
imports: {
[key: string]: string[]
}
}