API reference
Portal: resources, groups, tags and dashboards
/ v1/ orgs/ :orgId/ portal/ resourcesEvery resource of the org you may read, of every kind (Serverless App Services, databases, buckets, domains, repositories, agents), with its resource group and tags. q keeps those with every word in their name, details, id or tags; kind, group (a resource group id, or none) and tag (key or key=value) filter; limit caps the list (default 500). total and counts (by kind) are of every resource you may read, before filters.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).
Query parameters
qstringUp to 200 characters.
kind"project" | "database" | "bucket" | "domain" | "repository" | "agent"groupstringUp to 64 characters.
tagstringUp to 330 characters.
limitintegerDefault
500. 1–500. Coerced from a string.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/resources' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
resources: {
kind: "project" | "repository" | "agent" | "database" | "bucket" | "domain"
id: string
name: string
detail?: string
location?: string
region?: string
projectId?: string
groupId?: string
tags: {
key: string
value: string
}[]
status?: string
createdAt?: number
updatedAt?: number
}[]
total: number
counts: {
project?: number
repository?: number
agent?: number
database?: number
bucket?: number
domain?: number
}
}/ v1/ orgs/ :orgId/ portal/ resources/ :kind/ :refOne resource with its resource group and tags.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- projects:read (for a Serverless App Service (
project)), resources:read (for a database or bucket), domains:read (for a domain), git:read (for a repository), agents:read (for an agent)
Path parameters
orgIdOrganization id (
org_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.refThe resource: its id (
prj_…,res_…,dev_…), or a domain's hostname.
Errors
404Unknown kind of resource.404Resource not found.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/resources/{kind}/{ref}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
resource: {
kind: "project" | "repository" | "agent" | "database" | "bucket" | "domain"
id: string
name: string
detail?: string
location?: string
region?: string
projectId?: string
groupId?: string
tags: {
key: string
value: string
}[]
status?: string
createdAt?: number
updatedAt?: number
}
}/ v1/ orgs/ :orgId/ portal/ resources/ :kind/ :refSets a resource's resource group (groupId, or null for none) and its tags (tags: up to 20 { key, value }, keys unique; replaces them all). Needs the right to change that resource.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- projects:read (for a Serverless App Service (
project)), resources:read (for a database or bucket), domains:read (for a domain), git:read (for a repository), agents:read (for an agent), projects:write (for a Serverless App Service (project)), resources:write (for a database or bucket), domains:write (for a domain), git:write (for a repository)
Path parameters
orgIdOrganization id (
org_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.refThe resource: its id (
prj_…,res_…,dev_…), or a domain's hostname.
Request body
groupIdstringor nullUp to 64 characters.
tagsobject[]Up to 20 items.
tags[].keystringrequiredUp to 64 characters.
tags[].valuestringrequiredUp to 256 characters.
Errors
400Agents have no tags or groups.400Resource group not found.400Tag keys use letters, numbers, spaces and _ . : / = + - @, up to 64 characters, each once.404Unknown kind of resource.404Resource not found.
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/resources/{kind}/{ref}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"groupId": "<groupId>",
"tags": [
{
"key": "example",
"value": "example"
}
]
}'Response 200
{
groupId: null | string
tags: {
key: string
value: string
}[]
}/ v1/ orgs/ :orgId/ portal/ resources/ :kind/ :ref/ activityWhat happened to a resource, newest first: its entries in the org's audit log, filtered like the log (action, actor) and paged (cursor, limit). Readable by those who may read the resource.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- projects:read (for a Serverless App Service (
project)), resources:read (for a database or bucket), domains:read (for a domain), git:read (for a repository), agents:read (for an agent)
Path parameters
orgIdOrganization id (
org_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.refThe resource: its id (
prj_…,res_…,dev_…), or a domain's hostname.
Query parameters
cursorstringUp to 4,096 characters.
actionstringMatches
^[a-z_]{1,32}(\.[a-z_]{1,32})?$.actorstring1–512 characters.
limitintegerDefault
50. 1–100. Coerced from a string.
Errors
400Invalid cursor404Unknown kind of resource.404Resource not found.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/resources/{kind}/{ref}/activity' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
events: {
eventId: string
orgId: string
action: string
actor: {
type: "user" | "key" | "device" | "system"
id: string
label?: string
}
target: {
type: string
id: string
label?: string
}
metadata?: {
[key: string]: unknown
}
ip?: string
userAgent?: string
createdAt: number
}[]
cursor: null | string
retentionDays?: number
}/ v1/ orgs/ :orgId/ portal/ resources/ :kind/ :ref/ accessWho can reach a resource: each member, their role and what that role lets them do with it (manage, change or read), and the groups whose grants widen access to a Serverless App Service or a repository. Roles are changed in Tenant.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- members:read, projects:read (for a Serverless App Service (
project)), resources:read (for a database or bucket), domains:read (for a domain), git:read (for a repository), agents:read (for an agent)
Path parameters
orgIdOrganization id (
org_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.refThe resource: its id (
prj_…,res_…,dev_…), or a domain's hostname.
Errors
404Unknown kind of resource.404Resource not found.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/resources/{kind}/{ref}/access' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
members: {
userId: string
name?: string
email?: string
role: "owner" | "admin" | "developer" | "viewer"
access: string
}[]
groups: {
teamId: string
name: string
access: string
}[]
}/ v1/ orgs/ :orgId/ portal/ groupsThe org's resource groups.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/groups' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
groups: {
groupId: string
name: string
description?: string
createdAt?: number
}[]
}/ v1/ orgs/ :orgId/ portal/ groupsCreates a resource group (name, optional description). Needs resources:write.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- resources:write
Path parameters
orgIdOrganization id (
org_…).
Request body
namestringrequired1–64 characters. Trimmed.
descriptionstringUp to 256 characters. Trimmed.
Errors
400An organization has at most 200 resource groups.409A resource group with this name exists.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/groups' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example"
}'Response 201
{
group: {
groupId: string
name: string
description?: string
createdAt?: number
}
}/ v1/ orgs/ :orgId/ portal/ groups/ :resourceGroupIdRenames a resource group or changes its description. Needs resources:write.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- resources:write
Path parameters
orgIdOrganization id (
org_…).resourceGroupIdResource group id (
rgp_…).
Request body
namestring1–64 characters. Trimmed.
descriptionstringUp to 256 characters. Trimmed.
Errors
404Resource group not found.409A resource group with this name exists.
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/groups/{resourceGroupId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"description": "example"
}'Response 200
{
group: {
groupId: string
name: string
description?: string
}
}/ v1/ orgs/ :orgId/ portal/ groups/ :resourceGroupIdDeletes a resource group; its resources stay, outside any group. Needs resources:write.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- resources:write
Path parameters
orgIdOrganization id (
org_…).resourceGroupIdResource group id (
rgp_…).
Errors
404Resource group not found.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/groups/{resourceGroupId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
ok: true
}/ v1/ orgs/ :orgId/ portal/ meYour portal in this org: favourite services in order (null: the defaults), recent resources and the dashboard Dashboard opens. People only.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
Errors
403The portal's preferences and dashboards belong to people.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
favourites: null | string[]
recent: {
kind: "project" | "repository" | "agent" | "database" | "bucket" | "domain"
id: string
name: string
at: number
}[]
dashboardId: null | string
}/ v1/ orgs/ :orgId/ portal/ meSaves your favourite services (favourites: service keys in order, null for the defaults) or the dashboard Dashboard opens (dashboardId).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
Request body
favouritesstring[]or nullUp to 40 items. Each up to 40 characters.
dashboardIdstringor nullUp to 64 characters.
Errors
403The portal's preferences and dashboards belong to people.
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"favourites": [
"example"
],
"dashboardId": "<dashboardId>"
}'Response 200
{
favourites: null | string[]
recent: {
kind: "project" | "repository" | "agent" | "database" | "bucket" | "domain"
id: string
name: string
at: number
}[]
dashboardId: null | string
}/ v1/ orgs/ :orgId/ portal/ me/ recentRecords that you opened a resource (kind, ref), for Recent.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- projects:read (for a Serverless App Service (
project)), resources:read (for a database or bucket), domains:read (for a domain), git:read (for a repository), agents:read (for an agent)
Path parameters
orgIdOrganization id (
org_…).
Request body
kind"project" | "database" | "bucket" | "domain" | "repository" | "agent"requiredrefstringrequired1–260 characters.
Errors
403The portal's preferences and dashboards belong to people.404Resource not found.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/me/recent' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"kind": "project",
"ref": "example"
}'Response 200
{
recent: {
kind: "project" | "repository" | "agent" | "database" | "bucket" | "domain"
id: string
name: string
at: number
}[]
}/ v1/ orgs/ :orgId/ portal/ dashboardsDashboards you can open: yours and those shared with the organization (without their tiles).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
Errors
403The portal's preferences and dashboards belong to people.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/dashboards' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
dashboards: {
tiles?: {
id: string
type: "resource" | "link" | "deployments" | "recent" | "note" | "traffic" | "services"
x: number
y: number
w: number
h: number
config: {
[key: string]: string
}
}[]
dashboardId: string
name: string
ownerId: string
shared: boolean
updatedAt?: number
}[]
}/ v1/ orgs/ :orgId/ portal/ dashboardsCreates a dashboard (name, optional shared and tiles); yours alone unless shared.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- org:read
Path parameters
orgIdOrganization id (
org_…).
Request body
namestringrequired1–80 characters. Trimmed.
sharedbooleantilesany JSON[]Up to 60 items.
Errors
400You have 50 dashboards here already.403The portal's preferences and dashboards belong to people.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/dashboards' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example"
}'Response 201
{
dashboard: {
tiles?: {
id: string
type: "resource" | "link" | "deployments" | "recent" | "note" | "traffic" | "services"
x: number
y: number
w: number
h: number
config: {
[key: string]: string
}
}[]
dashboardId: string
name: string
ownerId: string
shared: boolean
updatedAt?: number
}
}/ v1/ orgs/ :orgId/ portal/ dashboards/ :dashboardIdA dashboard with its tiles.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).dashboardIdDashboard id: an issue dashboard (
dsh_…) or a Cloud portal dashboard (pdb_…).
Errors
403The portal's preferences and dashboards belong to people.404Dashboard not found.
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/dashboards/{dashboardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
dashboard: {
canChange?: boolean
tiles?: {
id: string
type: "resource" | "link" | "deployments" | "recent" | "note" | "traffic" | "services"
x: number
y: number
w: number
h: number
config: {
[key: string]: string
}
}[]
dashboardId: string
name: string
ownerId: string
shared: boolean
updatedAt?: number
}
}/ v1/ orgs/ :orgId/ portal/ dashboards/ :dashboardIdChanges a dashboard: name, shared (owners only) and tiles (replaced; positions are compacted).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).dashboardIdDashboard id: an issue dashboard (
dsh_…) or a Cloud portal dashboard (pdb_…).
Request body
namestring1–80 characters. Trimmed.
sharedbooleantilesany JSON[]Up to 60 items.
Errors
403The portal's preferences and dashboards belong to people.403Only its owner changes this dashboard.403Only its owner shares or unshares a dashboard.404Dashboard not found.
curl -X PUT 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/dashboards/{dashboardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"shared": true,
"tiles": [
{}
]
}'Response 200
{
dashboard: {
canChange: true
tiles?: {
id: string
type: "resource" | "link" | "deployments" | "recent" | "note" | "traffic" | "services"
x: number
y: number
w: number
h: number
config: {
[key: string]: string
}
}[]
dashboardId: string
name: string
ownerId: string
shared: boolean
updatedAt?: number
}
}/ v1/ orgs/ :orgId/ portal/ dashboards/ :dashboardIdDeletes a dashboard (its owner, or for a shared one those who manage the organization).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
orgIdOrganization id (
org_…).dashboardIdDashboard id: an issue dashboard (
dsh_…) or a Cloud portal dashboard (pdb_…).
Errors
403The portal's preferences and dashboards belong to people.403Only its owner deletes this dashboard.404Dashboard not found.
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/portal/dashboards/{dashboardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
ok: true
}