API reference

Notes pages

Pages, databases, search, trash and favorites.
GET/v1/orgs/:orgId/pages/live

A one-time ticket for this tab's socket (2 minutes): the org's change events, and co-editing of the page it joins. socket is null where the stage has none.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

Query parameters

  • tabstringrequired

    Matches ^[\w-]{8,64}$.

  • devicestring

    Up to 60 characters.

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/live?tab=example' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  socket: null
}
| {
  socket: {
    url: string
    ticket: string
  }
}
GET/v1/orgs/:orgId/pages

The page tree, or the trash with archived=1.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

Query parameters

  • archived"0" | "1"

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  pages: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
  }[]
  truncated: boolean
}
POST/v1/orgs/:orgId/pages

Creates a page or database, at the top level or under a parent.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

Request body

  • parentIdstring | "root"

    Matches ^[A-Za-z0-9_-]{1,64}$.

  • titlestring

    Up to 200 characters.

  • iconstring

    Up to 16 characters. Trimmed.

  • kind"doc" | "database"
  • propertiesobject

    Keys match ^[A-Za-z0-9_-]{1,32}$. Values: string (up to 4,000 characters), number, boolean, string[] (up to 50 items, each up to 32 characters) or null.

Errors

  • 400Parent page not found.
  • 400The parent page is in the trash.
  • 400Unknown property.
  • 404Page not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "parentId": "<parentId>",
    "title": "Example",
    "icon": "example"
  }'
Send it from this page with your session or a key.

Response 201

{
  page: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
    schema?: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
    views?: {
      name: string
      layout: "calendar" | "table" | "board"
      filters: {
        property: string
        op: "after" | "before" | "contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "is_empty" | "is_not_empty"
        value?: boolean | string | number | string[]
      }[]
      id: string
      sort?: null | {
        by: string
        desc: boolean
      }
      groupBy?: string
      dateProperty?: string
      hidden?: string[]
      widths?: {
        [key: string]: number
      }
    }[]
    properties?: {
      [key: string]: boolean | string | number | string[]
    }
  }
}
GET/v1/orgs/:orgId/pages/:pageId

A page with its content. Databases include their rows; rows include their database's schema.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  page: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
    schema?: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
    views?: {
      name: string
      layout: "calendar" | "table" | "board"
      filters: {
        property: string
        op: "after" | "before" | "contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "is_empty" | "is_not_empty"
        value?: boolean | string | number | string[]
      }[]
      id: string
      sort?: null | {
        by: string
        desc: boolean
      }
      groupBy?: string
      dateProperty?: string
      hidden?: string[]
      widths?: {
        [key: string]: number
      }
    }[]
    properties?: {
      [key: string]: boolean | string | number | string[]
    }
  }
  content: null | {
    version: number
    blocks: null | unknown[]
    markdown: string
  }
  rows?: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
    schema?: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
    views?: {
      name: string
      layout: "calendar" | "table" | "board"
      filters: {
        property: string
        op: "after" | "before" | "contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "is_empty" | "is_not_empty"
        value?: boolean | string | number | object
      }[]
      id: string
      sort?: null | {
        by: string
        desc: boolean
      }
      groupBy?: string
      dateProperty?: string
      hidden?: string[]
      widths?: {
        [key: string]: number
      }
    }[]
    properties?: {
      [key: string]: boolean | string | number | string[]
    }
  }[]
  database?: {
    pageId: string
    title: string
    icon?: string
    schema: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
  }
}
PATCH/v1/orgs/:orgId/pages/:pageId

Renames, moves, trashes or restores a page, or edits a database's properties or a row's values.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body

  • titlestring

    Up to 200 characters.

  • iconstringor null

    Up to 16 characters. Trimmed.

  • fullWidthboolean
  • parentIdstring | "root"

    Matches ^[A-Za-z0-9_-]{1,64}$.

  • positioninteger

    ≥ 0.

  • archivedboolean
  • schemaobject[]

    Up to 50 items.

  • schema[].idstring

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • schema[].namestringrequired

    1–100 characters. Trimmed.

  • schema[].type"text" | "number" | "select" | "multi_select" | "date" | "checkbox" | "url" | "relation"required
  • schema[].optionsobject[]

    Up to 100 items.

  • schema[].options[].idstring

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • schema[].options[].namestringrequired

    1–100 characters. Trimmed.

  • schema[].options[].color"gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
  • schema[].databaseIdstring

    Matches ^[A-Za-z0-9_-]{1,64}$.

  • viewsobject[]

    Up to 20 items.

  • views[].idstring

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].namestringrequired

    1–100 characters. Trimmed.

  • views[].layout"table" | "board" | "calendar"required
  • views[].filtersobject[]

    Default []. Up to 20 items.

  • views[].filters[].propertystringrequired

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].filters[].op"contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "before" | "after" | "is_empty" | "is_not_empty"required
  • views[].filters[].valuestring | number | boolean | string[]

    Up to 2,000 characters. Up to 50 items. Each up to 64 characters.

  • views[].sortobjector null
  • views[].sort.bystringrequired

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].sort.descbooleanrequired
  • views[].groupBystring

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].datePropertystring

    Matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].hiddenstring[]

    Up to 50 items. Each matches ^[A-Za-z0-9_-]{1,32}$.

  • views[].widthsobject

    Keys match ^[A-Za-z0-9_-]{1,32}$. Values: integer (80–1000).

  • propertiesobject

    Keys match ^[A-Za-z0-9_-]{1,32}$. Values: string (up to 4,000 characters), number, boolean, string[] (up to 50 items, each up to 32 characters) or null.

Errors

  • 400A page can't be moved into itself.
  • 400Target page not found.
  • 400The target page is in the trash.
  • 400A page can't be moved into one of its subpages.
  • 400Pages are nested too deeply.
  • 400Only databases have properties.
  • 400Only databases have views.
  • 400Only database rows have property values.
  • 400Unknown property.
  • 404Page not found
  • 409The page changed. Try again.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Example",
    "icon": "example",
    "fullWidth": true
  }'
Send it from this page with your session or a key.

Response 200

{
  page: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
    schema?: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
    views?: {
      name: string
      layout: "calendar" | "table" | "board"
      filters: {
        property: string
        op: "after" | "before" | "contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "is_empty" | "is_not_empty"
        value?: boolean | string | number | string[]
      }[]
      id: string
      sort?: null | {
        by: string
        desc: boolean
      }
      groupBy?: string
      dateProperty?: string
      hidden?: string[]
      widths?: {
        [key: string]: number
      }
    }[]
    properties?: {
      [key: string]: boolean | string | number | string[]
    }
  }
}
PUT/v1/orgs/:orgId/pages/:pageId/content

Saves page content. baseVersion is the version you started from; if the page has changed since, the save fails with 409.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body (up to 1,041 KB)

  • blocksany JSON[]requiredor null
  • markdownstringrequired
  • baseVersionintegerrequired

    ≥ 0.

  • collabboolean
  • epochstring

    1–64 characters.

Errors

  • 404Page not found
  • 409This page is in the trash. Restore it to edit.
  • 409This page was changed elsewhere and reloaded.
  • 409This page changed since you opened it.
  • 413Pages can be up to 1 MB.
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/content' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "blocks": [
      {}
    ],
    "markdown": "example",
    "baseVersion": 1
  }'
Send it from this page with your session or a key.

Response 200

{
  version: number
  updatedAt: number
}
GET/v1/orgs/:orgId/pages/:pageId/collab

Co-editing: the page's shared document (base64 Yjs state, epoch: null before anyone opened it this way), and a one-time ticket for the socket (socket is null where co-editing isn't set up).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Query parameters

  • ticket"0" | "1"

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/collab' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  contentVersion: number
  canWrite: boolean
  socket: null | {
    url: string
    ticket: string
  } | {
    url: string
    ticket: null
  }
  epoch: null | string
  seq: number
  state: null | string
  baseVersion: number
}
POST/v1/orgs/:orgId/pages/:pageId/collab/seed

The first editor's document, made from the stored content. 409 if someone else's came first.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body (up to 2,867 KB)

  • updatestringrequired

    At least 1 character.

  • baseVersionintegerrequired

    ≥ 0.

Errors

  • 404Page not found
  • 409This page is in the trash. Restore it to edit.
  • 413Too large.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/collab/seed' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "update": "2026-01-01",
    "baseVersion": 1
  }'
Send it from this page with your session or a key.

Response 201

{
  epoch: string
  seq: number
}
POST/v1/orgs/:orgId/pages/:pageId/collab/updates

An update too large for the socket (a big paste); relayed like socket updates.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body (up to 2,867 KB)

  • epochstringrequired

    1–64 characters.

  • updatestringrequired

    At least 1 character.

Errors

  • 404Page not found
  • 409This page is in the trash. Restore it to edit.
  • 413Too large.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/collab/updates' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "epoch": "example",
    "update": "2026-01-01"
  }'
Send it from this page with your session or a key.

Response 200

{
  seq: number
}
GET/v1/orgs/:orgId/pages/:pageId/threads

Comment threads on the page (kept apart from the shared document; they survive a reset).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/threads' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  threads: {
    id: string
    createdAt: number
    updatedAt: number
    comments: {
      id: string
      userId: string
      createdAt: number
      updatedAt: number
      body?: unknown
      deletedAt?: number
      reactions: {
        emoji: string
        createdAt: number
        userIds: object
      }[]
      metadata?: unknown
    }[]
    resolved: boolean
    resolvedUpdatedAt?: number
    resolvedBy?: string
    anchor?: {
      blockId?: string
      quote?: string
    }
    metadata?: unknown
  }[]
}
POST/v1/orgs/:orgId/pages/:pageId/threads

A new thread with its first comment (anchor: the block and text it is about).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body (up to 64 KB)

  • bodyany JSON[]required

    At least 1 item.

  • metadataany JSON
  • anchorobject
  • anchor.blockIdstring

    Up to 64 characters.

  • anchor.quotestring

    Up to 2,000 characters.

Errors

  • 400That isn't an emoji.
  • 403You can read comments here but not add or change them.
  • 403Only its author can change a comment.
  • 404Page not found
  • 404Thread not found.
  • 404Comment not found.
  • 409This page is in the trash. Restore it to comment.
  • 409This page has too many comment threads.
  • 409That thread already exists.
  • 409This thread has too many replies.
  • 409That comment was deleted.
  • 409That comment was already deleted.
  • 409Too many reactions.
  • 413Comments can be up to 16 KB.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/threads' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "body": [
      {}
    ]
  }'
Send it from this page with your session or a key.

Response 201

{
  thread: null | {
    id: string
    createdAt: number
    updatedAt: number
    comments: {
      id: string
      userId: string
      createdAt: number
      updatedAt: number
      body?: unknown
      deletedAt?: number
      reactions: {
        emoji: string
        createdAt: number
        userIds: string[]
      }[]
      metadata?: unknown
    }[]
    resolved: boolean
    resolvedUpdatedAt?: number
    resolvedBy?: string
    anchor?: {
      blockId?: string
      quote?: string
    }
    metadata?: unknown
  }
}
POST/v1/orgs/:orgId/pages/:pageId/threads/:threadId

Replies, edits, deletions, resolving and reactions. thread is null once it's gone.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

  • threadId

    Conversation id (thr_…), or in Mirage a thread id (mth_…).

Request body (up to 64 KB)

  • op"comment" | "edit" | "delete-comment" | "delete-thread" | "resolve" | "unresolve" | "react" | "unreact"required
  • commentIdstring

    1–64 characters.

  • bodyany JSON[]

    At least 1 item.

  • metadataany JSON
  • softboolean
  • emojistring

    1–16 characters.

Errors

  • 400Which comment? Send commentId.
  • 400A comment needs some text.
  • 400Send the emoji.
  • 400That isn't an emoji.
  • 403You can read comments here but not add or change them.
  • 403Only its author can change a comment.
  • 404Page not found
  • 404Thread not found.
  • 404Comment not found.
  • 409This page is in the trash. Restore it to comment.
  • 409This page has too many comment threads.
  • 409That thread already exists.
  • 409This thread has too many replies.
  • 409That comment was deleted.
  • 409That comment was already deleted.
  • 409Too many reactions.
  • 413Comments can be up to 16 KB.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/threads/{threadId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "op": "comment"
  }'
Send it from this page with your session or a key.

Response 200

{
  thread: null | {
    id: string
    createdAt: number
    updatedAt: number
    comments: {
      id: string
      userId: string
      createdAt: number
      updatedAt: number
      body?: unknown
      deletedAt?: number
      reactions: {
        emoji: string
        createdAt: number
        userIds: string[]
      }[]
      metadata?: unknown
    }[]
    resolved: boolean
    resolvedUpdatedAt?: number
    resolvedBy?: string
    anchor?: {
      blockId?: string
      quote?: string
    }
    metadata?: unknown
  }
}
GET/v1/orgs/:orgId/pages/:pageId/collab/updates

Updates after after (a gap, or one announced as pull); reset when the document was replaced.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Query parameters

  • epochstringrequired

    1–64 characters.

  • afterintegerrequired

    ≥ 0. Coerced from a string.

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/collab/updates?epoch=example&after=1' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  reset: true
} | {
  reset: false
  updates: {
    seq: number
    update: string
  }[]
  state?: null | string
  seq?: number
}
DELETE/v1/orgs/:orgId/pages/:pageId

Moves a page to the trash.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Query parameters

  • permanent"1"

Errors

  • 400Move the page to the trash first.
  • 400A page can't be moved into itself.
  • 400Target page not found.
  • 400The target page is in the trash.
  • 400A page can't be moved into one of its subpages.
  • 400Pages are nested too deeply.
  • 400Only databases have properties.
  • 400Only databases have views.
  • 400Only database rows have property values.
  • 400Unknown property.
  • 404Page not found
  • 409The page changed. Try again.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  deleted: number
}
| {
  page: {
    pageId: string
    parentId: string
    kind: "database" | "doc"
    title: string
    icon?: string
    fullWidth?: boolean
    position: number
    archived: boolean
    archivedAt?: number
    contentVersion: number
    createdAt: number
    updatedAt: number
    createdBy: string
    updatedBy?: string
    schema?: {
      id: string
      name: string
      type: "number" | "text" | "url" | "date" | "select" | "checkbox" | "multi_select" | "relation"
      options?: {
        id: string
        name: string
        color?: "gray" | "brown" | "orange" | "yellow" | "green" | "blue" | "purple" | "pink" | "red"
      }[]
      databaseId?: string
    }[]
    views?: {
      name: string
      layout: "calendar" | "table" | "board"
      filters: {
        property: string
        op: "after" | "before" | "contains" | "not_contains" | "is" | "is_not" | "gt" | "lt" | "is_empty" | "is_not_empty"
        value?: boolean | string | number | string[]
      }[]
      id: string
      sort?: null | {
        by: string
        desc: boolean
      }
      groupBy?: string
      dateProperty?: string
      hidden?: string[]
      widths?: {
        [key: string]: number
      }
    }[]
    properties?: {
      [key: string]: boolean | string | number | string[]
    }
  }
}
GET/v1/orgs/:orgId/pages/:pageId/history

Saved versions of a page's content, newest first (kept 30 days after they're replaced).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/history' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  versions: {
    versionId: string
    savedAt: number
    size: number
    current: boolean
  }[]
}
GET/v1/orgs/:orgId/pages/:pageId/history/:versionId

One saved version's content, to preview or restore (restoring saves it as a new version).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

  • versionId

    Version 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

  • 404Page not found
  • 404Version not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/history/{versionId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  content: {
    version: number
    blocks: null | unknown[]
    markdown: string
  }
}
POST/v1/orgs/:orgId/pages/:pageId/files

A link to upload an image or file into a page (PUT the bytes with the declared type within 15 minutes).

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Request body

  • filenamestringrequired

    1–255 characters. Trimmed.

  • contentTypestring

    Default "application/octet-stream". Up to 255 characters. Matches ^[\w.+-]+\/[\w.+-]+$. Trimmed.

  • sizeintegerrequired

    ≥ 1.

Errors

  • 400This page is in the trash.
  • 404Page not found
  • 413Files can be up to 20 MB.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/files' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "filename": "Example",
    "size": 1
  }'
Send it from this page with your session or a key.

Response 201

{
  fileId: string
  uploadUrl: string
}
GET/v1/orgs/:orgId/pages/:pageId/files/:fileId

A one-hour link to a file in a page.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

  • fileId

    File id, as returned when the upload was created.

Errors

  • 404Page not found
  • 404File not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/pages/{pageId}/files/{fileId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  url: string
}
GET/v1/orgs/:orgId/favorites

The caller's favorite pages, oldest first.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

Errors

  • 404Page not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/favorites' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  favorites: {
    pageId: string
    createdAt: number
  }[]
}
PUT/v1/orgs/:orgId/favorites

Reorders the caller's favorites: page ids in the new order.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

Request body

  • pageIdsstring[]required

    Up to 500 items. Each matches ^[A-Za-z0-9_-]{1,64}$.

Errors

  • 404Page not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/favorites' \
  -H "Authorization: Bearer $CACTIVE_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "pageIds": [
      "example"
    ]
  }'
Send it from this page with your session or a key.

Response 200

{
  favorites: {
    pageId: string
    createdAt: number
  }[]
}
PUT/v1/orgs/:orgId/favorites/:pageId

Adds a page to the caller's favorites. Adding it again keeps its place.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Errors

  • 400This page is in the trash.
  • 400You can have up to 200 favorites.
  • 404Page not found
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/favorites/{pageId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  favorite: {
    pageId: string
    createdAt: number
  }
}
DELETE/v1/orgs/:orgId/favorites/:pageId

Removes a page from the caller's favorites.

Auth
A person's token or an API key, as Authorization: Bearer.
Get an API key

Path parameters

  • orgId

    Organization id (org_…).

  • pageId

    Page id: a Notes page (doc_…), or a Feed page (pgx_…) under /v1/messaging/social; under marketing a landing page (mkp_…).

Errors

  • 404Page not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/favorites/{pageId}' \
  -H "Authorization: Bearer $CACTIVE_TOKEN"
Send it from this page with your session or a key.

Response 200

{
  ok: true
}