Download OpenAPI specification:Download
Identity and access for all Entrosity products: sign-in, sessions,
two-factor authentication, organizations, members, product access and
platform administration. This file is the source of truth for the
platform server interfaces (oapi-codegen), request validation, and the
platform web app's types (openapi-typescript). Run make gen after
editing.
Authentication: Authorization: Bearer <access token> (15 min JWT,
audience platform). The refresh token lives in the httpOnly cookie
platform_rt scoped to /api/platform/v1/auth and is rotated on every
/auth/refresh. Cookie-authenticated routes (/auth/refresh,
/auth/logout, /auth/product-token) only accept same-origin
requests with a JSON body.
Products (e.g. Entrosity Axis at /axis) do not accept platform access tokens:
the browser exchanges the session cookie for a short-lived product
token (POST /auth/product-token), signed with Ed25519 and verifiable
with the keys at /.well-known/jwks.json. Product tokens carry no
roles; products read roles from their own copy of the access data,
which they pull from the platform's internal API (not served here).
Every route's access rule (public, authenticated, organization admin,
platform admin) is declared in
platform/backend/internal/http/access.go and enforced before the
handler runs. Requests for another organization's resources return
404.
| email required | string [ 3 .. 254 ] characters |
| password required | string [ 1 .. 256 ] characters |
| totp_code | string <= 16 characters 6-digit code or a recovery code. |
{- "email": "string",
- "password": "string",
- "totp_code": "string"
}{- "access_token": "string",
- "expires_in": 0,
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "totp_required": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
}| platform_rt | string <= 128 characters |
{- "access_token": "string",
- "expires_in": 0,
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "totp_required": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
}| platform_rt | string <= 128 characters |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}Returns a 5-minute Ed25519-signed JWT with audience = the product
id. It never rotates or revokes the session cookie, so it can run
while another tab refreshes. 401 without a valid session; 403
no_product_access when the user has no role in the product;
403 totp_setup_required when an organization of the user
requires two-factor authentication and it is not enabled.
| platform_rt | string <= 128 characters |
| product required | string (ProductID) ^[a-z][a-z0-9-]{1,30}$ |
{- "product": "rmm"
}{- "token": "string",
- "expires_in": 0
}For actions a product protects with the password (e.g. deleting an
RMM enrollment token). Authenticated by the session cookie, like
product tokens, so product web apps can ask for it. The token is
bound to the session and can be used once. A wrong password is a
422 on password; 401 without a valid session. Rate-limited like
sign-in.
| platform_rt | string <= 128 characters |
| product required | string (ProductID) ^[a-z][a-z0-9-]{1,30}$ |
| password required | string [ 1 .. 256 ] characters |
{- "product": "rmm",
- "password": "string"
}{- "token": "string",
- "expires_in": 0
}| email required | string [ 3 .. 254 ] characters |
{- "email": "string"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| token required | string [ 20 .. 128 ] characters |
| new_password required | string [ 1 .. 256 ] characters |
{- "token": "stringstringstringst",
- "new_password": "string"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}Requires the current password. The calling session stays signed in;
all other sessions of the user are signed out. A wrong current
password or a weak new one is a 422 naming the field
(current_password, new_password). Rate-limited like sign-in.
| current_password required | string [ 1 .. 256 ] characters |
| new_password required | string [ 1 .. 256 ] characters |
{- "current_password": "string",
- "new_password": "string"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}The token comes from the link e-mailed to the new address by
POST /me/email. The old address is told about the change. An
unknown, used or expired token is a 400 invalid_token; an address
taken by another account since the request is a 422 on new_email.
| token required | string [ 20 .. 128 ] characters |
{- "token": "stringstringstringst"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| code required | string = 6 characters ^[0-9]{6}$ |
{- "code": "string"
}{- "recovery_codes": [
- "string"
]
}| password required | string [ 1 .. 256 ] characters |
{- "password": "string"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}For a new e-mail address, display_name and password are
required and the response signs the new user in. For an address
that already has an account, the caller must be signed in as that
account (bearer token); the invitation's access is added and the
current session is returned. Signed in as another account: 409
invitation_other_account.
| token required | string [ 20 .. 128 ] characters |
| display_name | string [ 1 .. 200 ] characters |
| password | string [ 1 .. 256 ] characters |
{- "display_name": "string",
- "password": "string"
}{- "access_token": "string",
- "expires_in": 0,
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "totp_required": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "totp_required": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| display_name required | string [ 1 .. 200 ] characters |
{- "display_name": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "totp_required": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Requires the current password. Nothing changes until the link is
opened; only the newest link works. A wrong password or an invalid,
unchanged or taken address is a 422 naming the field
(current_password, new_email). Rate-limited like sign-in.
| current_password required | string [ 1 .. 256 ] characters |
| new_email required | string [ 3 .. 254 ] characters |
{- "current_password": "string",
- "new_email": "string"
}{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user_agent": "string",
- "ip": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used_at": "2019-08-24T14:15:22Z",
- "current": true
}
]
}| sessionID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}{- "items": [
- {
- "product": "rmm",
- "product_name": "string",
- "beta": true,
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "role": "string",
- "url": "string"
}
]
}{- "items": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}Products in beta are listed to platform admins only.
{- "items": [
- {
- "id": "rmm",
- "name": "Entrosity Axis",
- "base_path": "/axis",
- "roles": [
- "string"
], - "enabled": true,
- "beta": true
}
]
}| orgID required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| orgID required | string <uuid> |
| page | integer [ 1 .. 100000 ] Default: 1 |
| page_size | integer [ 1 .. 200 ] Default: 50 |
| actor_user_id | string <uuid> |
| action | string <= 100 characters |
| from | string <date-time> |
| to | string <date-time> |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ts": "2019-08-24T14:15:22Z",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "actor_user_id": "d6ed4497-4325-4995-9f49-e288b7192e46",
- "actor_email": "string",
- "action": "string",
- "resource_type": "string",
- "resource_id": "string",
- "before": { },
- "after": { },
- "ip": "string",
- "request_id": "string"
}
], - "page": 0,
- "page_size": 0,
- "total": 0
}| orgID required | string <uuid> |
{- "members": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "joined_at": "2019-08-24T14:15:22Z"
}
], - "invitations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "platform_admin": true,
- "invited_by": "0fdabe0c-eb7c-440a-96d2-2c65906c3777",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}product_roles replaces all product roles of the member in this
organization; only products enabled for the organization are
accepted. Demoting the last organization admin is a 409
last_org_admin.
| orgID required | string <uuid> |
| userID required | string <uuid> |
| org_role | string (OrgRole) Enum: "admin" "member"
|
Array of objects (ProductRole) <= 20 items |
{- "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}{- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "joined_at": "2019-08-24T14:15:22Z"
}| orgID required | string <uuid> |
| userID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| orgID required | string <uuid> |
| email required | string [ 3 .. 254 ] characters |
| org_role required | string (OrgRole) Enum: "admin" "member"
|
required | Array of objects (ProductRole) <= 20 items |
{- "email": "string",
- "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "platform_admin": true,
- "invited_by": "0fdabe0c-eb7c-440a-96d2-2c65906c3777",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| orgID required | string <uuid> |
| invitationID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| productID required | string (ProductID) ^[a-z][a-z0-9-]{1,30}$ Example: rmm |
| beta required | boolean true puts the product in beta (platform admins only). |
{- "beta": true
}{- "id": "rmm",
- "name": "Entrosity Axis",
- "base_path": "/axis",
- "roles": [
- "string"
], - "enabled": true,
- "beta": true
}{- "users_total": 0,
- "users_active": 0,
- "platform_admins": 0,
- "organizations_total": 0,
- "organizations_active": 0,
- "invitations_open": 0,
- "products": [
- {
- "product": "rmm",
- "organizations": 0,
- "users": 0
}
]
}| page | integer [ 1 .. 100000 ] Default: 1 |
| page_size | integer [ 1 .. 200 ] Default: 50 |
| q | string <= 200 characters |
| status | string (OrgStatus) Enum: "active" "suspended" |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "page_size": 0,
- "total": 0
}| name required | string [ 1 .. 200 ] characters |
| slug required | string^[a-z0-9-]{3,40}$ |
| products | Array of strings (ProductID) <= 20 items [ items^[a-z][a-z0-9-]{1,30}$ ] Products to enable. |
object (OrganizationSettings) | |
| admin_email | string [ 3 .. 254 ] characters Invite this address as the first organization admin, with the most privileged role in every enabled product. |
{- "name": "string",
- "slug": "string",
- "products": [
- "rmm"
], - "settings": {
- "require_totp": true
}, - "admin_email": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| orgID required | string <uuid> |
| name | string [ 1 .. 200 ] characters |
| status | string (OrgStatus) Enum: "active" "suspended" |
object (OrganizationSettings) |
{- "name": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| orgID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| orgID required | string <uuid> |
| productID required | string (ProductID) ^[a-z][a-z0-9-]{1,30}$ Example: rmm |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}The product keeps its data for the organization (RMM suspends the tenant); enabling the product again restores access once roles are given again.
| orgID required | string <uuid> |
| productID required | string (ProductID) ^[a-z][a-z0-9-]{1,30}$ Example: rmm |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active",
- "settings": {
- "require_totp": true
}, - "products": [
- "rmm"
], - "member_count": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| page | integer [ 1 .. 100000 ] Default: 1 |
| page_size | integer [ 1 .. 200 ] Default: 50 |
| q | string <= 200 characters |
| status | string (UserStatus) Enum: "active" "disabled" "deleted" |
| organization_id | string <uuid> |
| platform_admin | boolean |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "memberships": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}
], - "page": 0,
- "page_size": 0,
- "total": 0
}| userID required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "memberships": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}Disabling signs the user out everywhere. Guard rails (409):
self_change (you cannot disable yourself or drop your own
platform admin flag), last_platform_admin.
| userID required | string <uuid> |
| display_name | string [ 1 .. 200 ] characters |
| status | string Enum: "active" "disabled" |
| is_platform_admin | boolean |
{- "display_name": "string",
- "status": "active",
- "is_platform_admin": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "memberships": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}| userID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}The whole list is replaced: organizations missing from it are
removed. Product roles must be roles of products enabled for that
organization. Removing the last admin of an organization is a 409
last_org_admin.
| userID required | string <uuid> |
required | Array of objects (AccessEntry) <= 500 items | ||||||
Array (<= 500 items)
| |||||||
{- "memberships": [
- {
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "memberships": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}| userID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}two_factor turns two-factor authentication off (the authenticator
and recovery codes stop working; the user can set it up again).
password replaces the password with one nobody knows and e-mails
the user a link, valid for 24 hours, to choose a new one. Either way
the user is signed out everywhere. Errors: 422 when neither is
chosen; 409 self_reset (use your own account page),
user_not_active (a password reset needs an active user),
nothing_to_reset (two-factor authentication is not set up).
| userID required | string <uuid> |
| two_factor | boolean Default: false Turn two-factor authentication off. |
| password | boolean Default: false Replace the password and e-mail a link to choose a new one. |
{- "two_factor": false,
- "password": false
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "display_name": "string",
- "status": "active",
- "is_platform_admin": true,
- "totp_enabled": true,
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "memberships": [
- {
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}
]
}{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "platform_admin": true,
- "invited_by": "0fdabe0c-eb7c-440a-96d2-2c65906c3777",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
]
}| email required | string [ 3 .. 254 ] characters |
| platform_admin | boolean Default: false |
| organization_id | string <uuid> |
| org_role | string (OrgRole) Enum: "admin" "member"
|
Array of objects (ProductRole) <= 20 items |
{- "email": "string",
- "platform_admin": false,
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "organization": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": "string",
- "status": "active"
}, - "org_role": "admin",
- "product_roles": [
- {
- "product": "rmm",
- "role": "technician"
}
], - "platform_admin": true,
- "invited_by": "0fdabe0c-eb7c-440a-96d2-2c65906c3777",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}| invitationID required | string <uuid> |
{- "type": "about:blank",
- "title": "string",
- "status": 0,
- "detail": "string",
- "code": "string",
- "instance": "string",
- "request_id": "string",
- "fields": {
- "property1": "string",
- "property2": "string"
}
}| page | integer [ 1 .. 100000 ] Default: 1 |
| page_size | integer [ 1 .. 200 ] Default: 50 |
| organization_id | string <uuid> |
| actor_user_id | string <uuid> |
| action | string <= 100 characters |
| from | string <date-time> |
| to | string <date-time> |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ts": "2019-08-24T14:15:22Z",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "actor_user_id": "d6ed4497-4325-4995-9f49-e288b7192e46",
- "actor_email": "string",
- "action": "string",
- "resource_type": "string",
- "resource_id": "string",
- "before": { },
- "after": { },
- "ip": "string",
- "request_id": "string"
}
], - "page": 0,
- "page_size": 0,
- "total": 0
}