Skip to content

Endpoint reference ​

This reference is rendered from the project's OpenAPI 3.1 specification. It covers the currently implemented routes, including configuration-only query and field APIs. It is a development contract, not a promise that all roadmap features exist.

Use authentication and CSRF before sending requests from an API client. These pages intentionally have no live execution console.

Check session and initialize CSRF

GET /v1/auth/me

Returns user (null when anonymous), csrfToken, and current account capabilities/workspace. An initial request establishes the anonymous session.

Access: Anonymous or authenticated session

Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Sign in

POST /v1/auth/login

Normalizes email, checks the password, and rotates the session/CSRF token. Login is rate limited.

Access: Anonymous session with CSRF

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "password": {
          "type": "string",
          "maxLength": 1024
        }
      },
      "required": [
        "email",
        "password"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Register an account

POST /v1/auth/register

Creates a Member account with an unverified email and signs it in. Password must be at least 12 characters; no organization capability is automatically granted.

Access: Anonymous session with CSRF

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "password": {
          "type": "string",
          "minLength": 12,
          "maxLength": 1024
        },
        "passwordConfirmation": {
          "type": "string"
        }
      },
      "required": [
        "email",
        "password",
        "passwordConfirmation"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Sign out

POST /v1/auth/logout

Destroys the server session and expires its cookie.

Access: Session with CSRF

CSRF: Send the session's X-CSRF-Token header.

Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Update account

POST /v1/account

Saves profile/theme. Email changes require currentPassword, clear verification, and rotate session/CSRF.

Access: Authenticated account

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "displayName": {
          "type": "string",
          "maxLength": 100
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "theme": {
          "type": "string",
          "enum": [
            "obsidian-lime",
            "cobalt-coral",
            "digital-teal",
            "electric-indigo",
            "main",
            "main-dark",
            "midnight-graphite"
          ]
        },
        "currentPassword": {
          "type": "string"
        }
      },
      "required": [
        "displayName",
        "email"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Select account workspace

POST /v1/account/workspace

Changes navigation context; does not grant or impersonate privileges. Returns landingPage.

Access: Authenticated account with requested capability

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "workspace": {
          "type": "string",
          "enum": [
            "member",
            "organization",
            "platform"
          ]
        }
      },
      "required": [
        "workspace"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Request Organization Admin upgrade

POST /v1/account/organization-access

Submits an account-type upgrade request. Approval grants creation access and the account-level organization workspace.

Access: Authenticated Member account

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "action": {
          "const": "request"
        }
      },
      "required": [
        "action"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List available organizations

GET /v1/organizations

Lists active unexpired organization memberships. Owned/joined filters remain account-scoped.

Access: Authenticated account

ParameterLocationDescription
pagequeryPage number starting at 1; up to 50 items per page.
scopequeryall: all memberships; owned: owned organizations; joined: other joined organizations.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Create organization

POST /v1/organizations

Creates an organization owned by the signed-in account, active owner membership, and protected Admin UserType.

Access: Approved Organization Admin account type

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Read organization workspace

GET /v1/organizations/{organizationId}

Returns organization branding availability, assigned/active roles, adminPanel, effective management permissions, and accessPending. Pending members can read this shell only.

Access: Active, unexpired organization member

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Rename organization

POST /v1/organizations/{organizationId}

Changes the organization name; does not change ownership.

Access: Owner mode or Admin with settings.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

GET /v1/organizations/{organizationId}/logo

Returns image bytes or 404 if no logo is configured.

Access: Active, unexpired member with an assigned role

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Organization logo bytes.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

POST /v1/organizations/{organizationId}/logo

Accepts PNG/JPEG/WebP, at most 2 MB and 4096 × 4096 pixels.

Access: Owner mode or Admin with settings.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Multipart image upload. Do not send application/json.

{
  "multipart/form-data": {
    "schema": {
      "type": "object",
      "properties": {
        "logo": {
          "type": "string",
          "format": "binary"
        }
      },
      "required": [
        "logo"
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

GET /v1/organizations/{organizationId}/mobile-logo

Returns image bytes or 404 if no logo is configured.

Access: Active, unexpired member with an assigned role

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Organization logo bytes.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

POST /v1/organizations/{organizationId}/mobile-logo

Accepts PNG/JPEG/WebP, at most 2 MB and 4096 × 4096 pixels.

Access: Owner mode or Admin with settings.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Multipart image upload. Do not send application/json.

{
  "multipart/form-data": {
    "schema": {
      "type": "object",
      "properties": {
        "logo": {
          "type": "string",
          "format": "binary"
        }
      },
      "required": [
        "logo"
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Select organization role

POST /v1/organizations/{organizationId}/active-role

Chooses Owner, Admin, or an assigned UserType by its actual ID. Only Owner is a literal system role value.

Access: Active, unexpired member assigned the requested role

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "role": {
          "type": "string"
        }
      },
      "required": [
        "role"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List organization people

GET /v1/organizations/{organizationId}/people

Includes access state, expiry date, expiry revision, and protected-owner metadata.

Access: Owner mode or Admin with people.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Add existing account

POST /v1/organizations/{organizationId}/people

Adds a registered account without verifying its email. Readdition of removed membership clears old role/grant assignments; it does not clear access expiry.

Access: Owner mode or Admin with people.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        }
      },
      "required": [
        "email"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List invitations

GET /v1/organizations/{organizationId}/invitations

Returns invitation status/delivery metadata without tokens. Tokens are retrieved only by the explicit Copy action.

Access: Owner mode or Admin with people.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage invitations

POST /v1/organizations/{organizationId}/invitations

Create uses email. Other actions use id. Links expire after 72 hours; Renew rotates the token; Send uses configured shared Brevo delivery.

Access: Owner mode or Admin with people.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "action": {
          "type": "string",
          "enum": [
            "create",
            "copy",
            "send",
            "renew",
            "revoke"
          ]
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Inspect invitation

POST /v1/invitations/inspect

Reads a token supplied in JSON. Acceptance creates membership without automatically assigning UserTypes; the token is never a query-string parameter.

Access: Anonymous session with CSRF

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "token": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        }
      },
      "required": [
        "token"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Accept invitation

POST /v1/invitations/accept

Reads a token supplied in JSON. Acceptance creates membership without automatically assigning UserTypes; the token is never a query-string parameter.

Access: Authenticated account matching invited email

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "token": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        }
      },
      "required": [
        "token"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List role assignments

GET /v1/organizations/{organizationId}/memberships

Returns active memberships with assigned UserType IDs and privilege-management metadata.

Access: Owner mode or Admin with roles.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Assign UserTypes or remove membership

POST /v1/organizations/{organizationId}/memberships

Assignment replaces userTypeIds for an existing active member. Remove uses action and membershipId. Only owners change privileged memberships or assign Admin/permission-bearing groups.

Access: Owner mode; roles.manage permits ordinary memberships only

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email"
        },
        "userTypeIds": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          },
          "uniqueItems": true
        },
        "action": {
          "const": "remove"
        },
        "membershipId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Set membership access expiry

POST /v1/organizations/{organizationId}/membership-access

expiresAt null means Never; an explicit timezone is required otherwise. Owner is protected. Retains content/roles and blocks expired organization requests.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "membershipId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "membershipId",
        "expiresAt",
        "revision"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Read administration permissions

GET /v1/organizations/{organizationId}/permissions

Returns permission catalog, UserType policies, and paginated member grants/revisions.

Access: Owner mode

ParameterLocationDescription
organizationIdpathOrganization ID.
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Set group or individual grants

POST /v1/organizations/{organizationId}/permissions

Replaces a UserType permission list or member additional grants using revision checks. Owner full access cannot be modified.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "target": {
          "type": "string",
          "enum": [
            "userType",
            "member"
          ]
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "permissions": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "people.manage",
              "roles.manage",
              "user-types.manage",
              "object-types.manage",
              "relationships.manage",
              "queries.manage",
              "settings.manage"
            ]
          }
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "target",
        "id",
        "permissions",
        "revision"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List UserType definitions

GET /v1/organizations/{organizationId}/user-types

Returns active UserTypes, protected Admin metadata, assignment eligibility, and optional profile ObjectType links.

Access: Owner mode or authorized Admin needing definition/role choices

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage UserType definitions

POST /v1/organizations/{organizationId}/user-types

Name/key define ordinary types. Edit uses id; delete uses action remove and id. Admin definition is protected. Creating a linked ObjectType also requires object-types.manage.

Access: Owner mode or Admin with user-types.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "action": {
          "const": "remove"
        },
        "profileObjectTypeId": {
          "type": [
            "string",
            "null"
          ]
        },
        "createProfileObjectType": {
          "type": "boolean"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List ObjectType definitions

GET /v1/organizations/{organizationId}/object-types

Returns active ObjectType names, keys, and versions.

Access: Owner mode or authorized Admin needing ObjectType choices

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage ObjectTypes

POST /v1/organizations/{organizationId}/object-types

Create/rename definitions or retire unused types. Fields, records, UserType links, relationships, and queries protect deletion.

Access: Owner mode or Admin with object-types.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "action": {
          "const": "remove"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Read Fields & Schema

GET /v1/organizations/{organizationId}/object-types/{objectTypeId}/fields

Returns active typed fields, supported kinds, derived field IDs, and minimal query-backed option mapping choices.

Access: Owner mode or Admin with object-types.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
objectTypeIdpathObjectType ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage DynamicFields

POST /v1/organizations/{organizationId}/object-types/{objectTypeId}/fields

Create/update field definitions with version checks; retire uses action remove. Keys/types are fixed; existing records block structural edits. Query option references are configuration only.

Access: Owner mode or Admin with object-types.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
objectTypeIdpathObjectType ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "version": {
          "type": "integer",
          "minimum": 0
        },
        "action": {
          "type": "string",
          "enum": [
            "save",
            "remove"
          ]
        },
        "key": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "helpText": {
          "type": "string"
        },
        "kind": {
          "type": "string",
          "enum": [
            "text",
            "textarea",
            "number",
            "boolean",
            "date",
            "datetime",
            "select",
            "multiselect"
          ]
        },
        "required": {
          "type": "boolean"
        },
        "defaultValue": {},
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string"
              },
              "label": {
                "type": "string"
              }
            },
            "required": [
              "value",
              "label"
            ],
            "additionalProperties": false
          }
        },
        "validation": {
          "type": "object",
          "properties": {
            "min": {
              "type": "number"
            },
            "max": {
              "type": "number"
            },
            "maxLength": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            }
          },
          "additionalProperties": false
        },
        "optionsSource": {
          "type": "string",
          "enum": [
            "static",
            "query"
          ]
        },
        "optionsQuery": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "queryId": {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            "labelFieldId": {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            "valueFieldId": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "additionalProperties": false
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List DynamicQuery configurations

GET /v1/organizations/{organizationId}/queries

Returns query definitions and typed source/projection/filter metadata. executable is false; no result records are returned. Saved queries now support authorized execution; executable is derived capability, not an input grant.

Access: Owner mode or Admin with queries.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage DynamicQuery configurations

POST /v1/organizations/{organizationId}/queries

Saves an allowlisted AST with stable source field IDs and typed values. Filters are bounded to five nested levels and 50 nodes; no raw MongoDB operators/code. References protect mapped outputs/deletion. Execution remains unavailable. Saved queries now support authorized execution; executable is derived capability, not an input grant.

Access: Owner mode or Admin with queries.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "version": {
          "type": "integer",
          "minimum": 0
        },
        "action": {
          "type": "string",
          "enum": [
            "save",
            "remove"
          ]
        },
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "projectionFieldIds": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          },
          "uniqueItems": true
        },
        "filterTree": {
          "type": "object",
          "additionalProperties": true
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List object relationships

GET /v1/organizations/{organizationId}/object-relationships

Returns organization-scoped relationship definitions; record edges/traversal remain planned.

Access: Owner mode or Admin with relationships.manage

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Manage object relationships

POST /v1/organizations/{organizationId}/object-relationships

Create/edit/retire typed relationship definitions. Existing edges protect structural changes/deletion.

Access: Owner mode or Admin with relationships.manage

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "action": {
          "const": "remove"
        },
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "sourceTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "targetTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "sourceCardinality": {
          "enum": [
            "one",
            "many"
          ]
        },
        "targetCardinality": {
          "enum": [
            "one",
            "many"
          ]
        },
        "onDelete": {
          "enum": [
            "restrict",
            "detach"
          ]
        }
      },
      "required": [],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Resource created.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Inspect legacy UserType inheritance

GET /v1/organizations/{organizationId}/inheritance

Compatibility configuration only. Inheritance data is preserved; inherited permissions are not executed.

Access: Owner mode

ParameterLocationDescription
organizationIdpathOrganization ID.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Configure legacy UserType inheritance

POST /v1/organizations/{organizationId}/inheritance

Compatibility endpoint. Validates same-organization references and acyclic hierarchy; no inherited policy execution.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "parentIds": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          },
          "uniqueItems": true
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "action": {
          "type": "string",
          "enum": [
            "remove"
          ]
        }
      },
      "required": [
        "id"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Platform organization directory

GET /v1/platform/organizations

Read-only names/IDs/status. Does not grant tenant membership or data access.

Access: Active explicit Platform Admin

ParameterLocationDescription
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List account upgrade requests

GET /v1/platform/organization-requests

Account metadata and Organization Admin request status; no credentials.

Access: Active explicit Platform Admin

ParameterLocationDescription
pagequeryPage number starting at 1; up to 50 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Review account upgrade

POST /v1/platform/organization-requests

Approve/reject a matching pending request or revoke matching approved access. Stale request identity/status returns 409.

Access: Active explicit Platform Admin

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "action": {
          "enum": [
            "approve",
            "reject",
            "revoke"
          ]
        },
        "userId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "requestId": {
          "type": "string",
          "pattern": "^[a-f0-9]{32}$"
        }
      },
      "required": [
        "action",
        "userId",
        "requestId"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Read email delivery configuration

GET /v1/platform/email-settings

Returns sender/delivery settings, revision, credential-configured boolean, and audit history. Never returns API keys.

Access: Active explicit Platform Admin

Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Update email delivery configuration

POST /v1/platform/email-settings

Saves encrypted shared settings with revision/audit. Blank key preserves; clearApiKey removes. Does not send a test email.

Access: Active explicit Platform Admin with password confirmation

CSRF: Send the session's X-CSRF-Token header.

Request body

Send the supported fields for the selected action. This is an initial contract; route-specific validation still applies.

{
  "application/json": {
    "schema": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "senderName": {
          "type": "string"
        },
        "senderEmail": {
          "type": "string",
          "format": "email"
        },
        "apiKey": {
          "type": "string",
          "writeOnly": true
        },
        "clearApiKey": {
          "type": "boolean"
        },
        "password": {
          "type": "string",
          "writeOnly": true
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "enabled",
        "senderName",
        "senderEmail",
        "password",
        "revision"
      ],
      "additionalProperties": false
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Read selected-role data permission policies

GET /v1/organizations/{organizationId}/data-permissions

Owner-only selected-role ObjectType/field policies. Record APIs enforce these policies; saved query execution remains disabled. Optional recordScope selects all records (default) or one direct relationship to an owner-bound member profile. Related-only policies cannot grant create. Missing identities and unrelated rows fail closed. GET also returns profile ObjectType IDs and relationship choices.

Access: Owner mode

ParameterLocationDescription
organizationIdpathOrganization ID.
pagequeryPage number starting at 1; up to 100 items per page.
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

Save selected-role data permission policies

POST /v1/organizations/{organizationId}/data-permissions

Owner-only selected-role ObjectType/field policies. Record APIs enforce these policies; saved query execution remains disabled. Optional recordScope selects all records (default) or one direct relationship to an owner-bound member profile. Related-only policies cannot grant create. Missing identities and unrelated rows fail closed. GET also returns profile ObjectType IDs and relationship choices.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpathOrganization ID.
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "userTypeId",
        "objectTypeId",
        "revision",
        "operations",
        "readFieldIds",
        "createFieldIds",
        "updateFieldIds"
      ],
      "properties": {
        "userTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        },
        "operations": {
          "type": "array",
          "maxItems": 4,
          "items": {
            "type": "string",
            "enum": [
              "read",
              "create",
              "update",
              "delete"
            ]
          }
        },
        "readFieldIds": {
          "type": "array",
          "maxItems": 500,
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        },
        "createFieldIds": {
          "type": "array",
          "maxItems": 500,
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        },
        "updateFieldIds": {
          "type": "array",
          "maxItems": 500,
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        },
        "recordScope": {
          "oneOf": [
            {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "mode"
              ],
              "properties": {
                "mode": {
                  "const": "all"
                }
              }
            },
            {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "mode",
                "relationshipId",
                "recordSide"
              ],
              "properties": {
                "mode": {
                  "const": "related"
                },
                "relationshipId": {
                  "type": "string",
                  "pattern": "^[a-f0-9]{24}$"
                },
                "recordSide": {
                  "enum": [
                    "source",
                    "target"
                  ]
                }
              }
            },
            {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "mode"
              ],
              "properties": {
                "mode": {
                  "const": "profile"
                }
              },
              "description": "Only the signed-in member profile record; requires matching profile ObjectType and an explicit identity binding. Create is denied."
            }
          ]
        },
        "relationshipWriteIds": {
          "type": "array",
          "maxItems": 100,
          "uniqueItems": true,
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          },
          "description": "Connected relationships that declared group selectors may replace. Requires ObjectType Update. Default empty; does not grant generic edge administration."
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 401: Authentication required or invalid credentials.
  • 403: Origin, CSRF, permissions, pending access, or membership expiry denial.
  • 404: Resource not found or inaccessible.
  • 409: Duplicate, protected dependency, stale revision, or incompatible schema change.
  • 422: Invalid input.
  • 429: Too many attempts.
  • 503: Service temporarily unavailable.

List authorized records

GET /v1/organizations/{organizationId}/objects

Returns objects, hasMore, nextCursor. Stable ascending ObjectId pagination, no total count. Relationship row constraints apply before pagination, maximum execution time 2 seconds. Only readable fields are returned.

Access: Active member; selected-role operation, row, and field access

ParameterLocationDescription
organizationIdpath
objectTypeIdquery
limitquery
afterquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Create a record

POST /v1/organizations/{organizationId}/objects

Applies strict schema validation and defaults, freezes the aggregate ObjectType schema at version 1, and returns object with schemaVersion/revision. Related-only roles cannot create. JSON 256 KiB, values 128 KiB. Saved query-backed non-null option values are unavailable.

Access: Active member; selected-role operation, row, and field access

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "objectTypeId",
        "data"
      ],
      "properties": {
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "data": {
          "type": "object",
          "description": "Immutable field keys with strictly typed schema values. Unknown or unauthorized fields are rejected."
        },
        "action": {
          "const": "create"
        }
      }
    }
  }
}
Responses
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Read an authorized record

GET /v1/organizations/{organizationId}/objects/{objectId}

Returns object with id, objectTypeId, schemaVersion, revision, and readable data. Unrelated records return 404.

Access: Active member; selected-role operation, row, and field access

ParameterLocationDescription
organizationIdpath
objectIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Update or soft-delete a record

POST /v1/organizations/{organizationId}/objects/{objectId}

Partial update merges submitted fields, validates the full frozen schema, and increments revision. Delete retires the record and detachable connections; restrict connections block deletion. Hidden fields never appear in write responses. Histories are atomic per document and bounded to 100 events.

Access: Active member; selected-role operation, row, and field access

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
objectIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "revision",
            "data"
          ],
          "properties": {
            "revision": {
              "type": "integer",
              "minimum": 1
            },
            "action": {
              "const": "update"
            },
            "data": {
              "type": "object",
              "description": "Immutable field keys with strictly typed schema values. Unknown or unauthorized fields are rejected."
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "revision",
            "action"
          ],
          "properties": {
            "revision": {
              "type": "integer",
              "minimum": 1
            },
            "action": {
              "const": "delete"
            }
          }
        }
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

List record connections

GET /v1/organizations/{organizationId}/object-relationships/{relationshipId}/edges

Owner-only. Returns edges (id, endpoints, status, revision), hasMore, nextCursor. includeRetired=1 exposes retired-pair revisions for relinking.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
relationshipIdpath
objectIdquery
includeRetiredquery
limitquery
afterquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Link or unlink records

POST /v1/organizations/{organizationId}/object-relationships/{relationshipId}/edges

Owner-only. Both endpoints must match the relationship types and tenant. Source cardinality means sources per target; target cardinality means targets per source. Revision 0 creates a new pair. Relinking uses its latest revision. Unlink permits retired endpoints for interrupted-detach repair.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
relationshipIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "sourceObjectId",
        "targetObjectId",
        "revision"
      ],
      "properties": {
        "sourceObjectId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "targetObjectId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        },
        "action": {
          "enum": [
            "link",
            "unlink"
          ],
          "default": "link"
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Inspect member profile bindings

GET /v1/organizations/{organizationId}/record-identities

Owner-only. Returns identities for the specified account, including cleared bindings and their revisions. At most 500 bindings.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
userIdquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Bind or clear member profile

POST /v1/organizations/{organizationId}/record-identities

Owner-only. Explicitly associates an active, unexpired member with an active profile record. One binding per account/ObjectType and one active account per profile record. Null objectId clears. Use revision 0 for a new binding.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "userId",
        "objectTypeId",
        "objectId",
        "revision"
      ],
      "properties": {
        "userId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "objectId": {
          "oneOf": [
            {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "revision": {
          "type": "integer",
          "minimum": 0
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Execute an authorized saved query

POST /v1/organizations/{organizationId}/queries/{queryId}/execute

Revalidates typed literal AST, source/schema, filter-field readability, selected-role row/field access. Returns objects, readable fields, query ID/version, hasMore, nextCursor; no count. Maximum 100 rows, 2-second aggregates, no disk spill. Optional scalar output sorting has ID tie-breakers. Cursor binds query/version/sort and resolves sorted anchors under current access; removed anchors require refresh. Unsupported parameters/raw filters/operators are rejected. Query management alone grants no data access.

Access: Active membership and selected-role data/group authorization

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
queryIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 50
        },
        "after": {
          "type": "string",
          "maxLength": 2048
        },
        "sortFieldId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "sortDirection": {
          "enum": [
            "asc",
            "desc"
          ],
          "default": "asc"
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

List authorized groups or owner configuration catalog

GET /v1/organizations/{organizationId}/groups

Default lists role-visible groups with readable source/output/filter fields. manage=1 is Owner-only and returns definitions plus query, field, and UserType choices. Maximum 200 active groups. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Active membership and selected-role data/group authorization

ParameterLocationDescription
organizationIdpath
managequery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Create, update, or retire a group

POST /v1/organizations/{organizationId}/groups

Owner-only. Save requires name/key/queryId/renderer/ordered fieldIds/createFieldIds/editableFieldIds/operations/userTypeIds; update also requires id/version. Remove uses id/version/action=remove. Read is mandatory; writable fields are visible subsets of query output. Keys stay reserved after retirement. Group settings narrow underlying data permissions. Versions and bounded atomic history protect changes; query/field/view dependencies are checked. Contextual groups accept bindingModel instead of mandatory query/field lists. Explicit fields/relationship write targets, per-UserType rules, required/optional contexts and source scopes are validated. Existing query-backed groups remain compatible; conversion is explicit. Optional icon selects a SourceIcon. View placement icon defaults to inheritance when absent/null; empty string hides it and a listed icon overrides it. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups. Contextual Groups support renderer=sheet, sheetFormats, defaultSort and Group-owned navigationButtons/actionButtons/linkButtons. View inheritance can only narrow Group button grants.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name",
            "key",
            "renderer",
            "bindingModel"
          ],
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            "version": {
              "type": "integer",
              "minimum": 1
            },
            "name": {
              "type": "string",
              "maxLength": 100
            },
            "key": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9-]{0,63}$"
            },
            "renderer": {
              "type": "string",
              "enum": [
                "table",
                "form",
                "sheet"
              ],
              "description": "Sheet renderer requires contextual bindings."
            },
            "bindingModel": {
              "$ref": "#/components/schemas/ContextBindingModel"
            },
            "icon": {
              "$ref": "#/components/schemas/SourceIcon"
            },
            "sheetFormats": {
              "type": "object",
              "additionalProperties": {
                "type": "string",
                "enum": [
                  "auto",
                  "text",
                  "number",
                  "currency",
                  "percent",
                  "date"
                ]
              },
              "description": "Presentation-only format keyed by binding. Percentage values are fractions."
            },
            "navigationButtons": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "object"
              },
              "description": "Group-owned buttons inherited by View placements; see custom Group buttons guide for mappings and restrictions."
            },
            "actionButtons": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "object"
              },
              "description": "Group-owned buttons inherited by View placements; see custom Group buttons guide for mappings and restrictions."
            },
            "linkButtons": {
              "type": "array",
              "maxItems": 10,
              "items": {
                "type": "object"
              },
              "description": "Group-owned buttons inherited by View placements; see custom Group buttons guide for mappings and restrictions."
            },
            "description": {
              "type": "string",
              "description": "Plain-text summary, at most 4000 UTF-8 bytes."
            },
            "defaultSort": {
              "type": "object",
              "properties": {
                "mode": {
                  "enum": [
                    "recordId",
                    "column",
                    "updatedAt"
                  ]
                },
                "column": {
                  "type": "string"
                },
                "direction": {
                  "enum": [
                    "asc",
                    "desc"
                  ]
                }
              },
              "required": [
                "mode"
              ],
              "additionalProperties": false
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            "version": {
              "type": "integer",
              "minimum": 1
            },
            "action": {
              "enum": [
                "save",
                "remove"
              ],
              "default": "save"
            },
            "name": {
              "type": "string",
              "maxLength": 100
            },
            "key": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9-]{0,63}$"
            },
            "queryId": {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            "renderer": {
              "enum": [
                "table",
                "form"
              ]
            },
            "fieldIds": {
              "type": "array",
              "maxItems": 100,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              }
            },
            "createFieldIds": {
              "type": "array",
              "maxItems": 100,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              }
            },
            "editableFieldIds": {
              "type": "array",
              "maxItems": 100,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              }
            },
            "userTypeIds": {
              "type": "array",
              "maxItems": 100,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              }
            },
            "operations": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "enum": [
                  "read",
                  "create",
                  "update",
                  "delete"
                ]
              }
            },
            "icon": {
              "$ref": "#/components/schemas/SourceIcon"
            },
            "description": {
              "type": "string",
              "description": "Plain-text summary, at most 4000 UTF-8 bytes."
            },
            "defaultSort": {
              "type": "object",
              "properties": {
                "mode": {
                  "enum": [
                    "recordId",
                    "column",
                    "updatedAt"
                  ]
                },
                "column": {
                  "type": "string"
                },
                "direction": {
                  "enum": [
                    "asc",
                    "desc"
                  ]
                }
              },
              "required": [
                "mode"
              ],
              "additionalProperties": false
            }
          }
        }
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Get authorized table/form metadata

GET /v1/organizations/{organizationId}/groups/{groupId}

Returns group ID/name/renderer/version, objectTypeId, query ID/version, intersected operations, and ordered readable fields with canCreate/canUpdate flags and permitted defaults. Owner bypasses visibility but not group restrictions. Contextual groups require their declared inputs and optionally accept viewId/placementKey/viewVersion. Their row responses contain rows/values/cells and per-cell destination revisions; they accept limit 1–50 and an ObjectId after cursor. Contextual groups do not accept scalar sort parameters. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Active membership and selected-role data/group authorization

ParameterLocationDescription
organizationIdpath
groupIdpath
contextsquery
viewIdquery
placementKeyquery
viewVersionquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Run the group query with narrowing access

GET /v1/organizations/{organizationId}/groups/{groupId}/rows

Returns the same page contract as query execution; role visibility, group projection, data/field/related-row policies apply. Request parameters bind to group and query versions. Contextual groups require their declared inputs and optionally accept viewId/placementKey/viewVersion. Their row responses contain rows/values/cells and per-cell destination revisions; they accept limit 1–50 and an ObjectId after cursor. Contextual groups do not accept scalar sort parameters. Summary mode returns authorized aggregates, scopeLabel and read-only drill-down; summary pagination uses 64-character bucket IDs. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups. Contextual search and filters apply before pagination and intersect permissions. Configured defaultSort applies across pages. Contextual row pages default to 25 and allow up to 50; legacy query-only pages default to 50 and allow up to 100.

Access: Active membership and selected-role data/group authorization

ParameterLocationDescription
organizationIdpath
groupIdpath
limitquery
afterquery
sortFieldIdquery
sortDirectionquery
contextsquery
viewIdquery
placementKeyquery
viewVersionquery
bucketqueryReturned summary bucket ID for read-only source drill-down.
searchqueryContextual groups with search enabled; authorized dataset search before pagination.
filtersqueryURL-encoded JSON array of {key,logic:all|any,conditions:[{op,value,upper?}]}. Up to twenty readable columns, three conditions each; columns combine with AND. Requires filtering enabled; unavailable for summary results.
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Create a record through an editable group

POST /v1/organizations/{organizationId}/groups/{groupId}/objects

Intersects group and data grants, validates fields/schema/defaults, and requires the new record to satisfy the saved query. Related-only creation is denied. Stale group/query versions return 409; field errors map to error.fields. Contextual groups support explicit anchor create/delete grants with groupVersion, contexts and optional viewId/placementKey/viewVersion. Creation requires a direct records source and no active scope. Summary groups reject writes. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Active membership and selected-role data/group authorization

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
groupIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "objectTypeId",
        "data",
        "groupVersion",
        "queryVersion"
      ],
      "properties": {
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "data": {
          "type": "object",
          "description": "Immutable field keys and strict schema values."
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "queryVersion": {
          "type": "integer",
          "minimum": 1
        }
      }
    }
  }
}
Responses
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Update or delete a record through a group

POST /v1/organizations/{organizationId}/groups/{groupId}/objects/{objectId}

Existing record must satisfy current group query and role row policy. Group operations/fields narrow underlying grants. Updates may move records out of the query. Record/group/query revisions are checked; normal relationship deletion rules apply. Contextual groups support explicit anchor create/delete grants with groupVersion, contexts and optional viewId/placementKey/viewVersion. Creation requires a direct records source and no active scope. Summary groups reject writes. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Active membership and selected-role data/group authorization

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
groupIdpath
objectIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "revision",
        "groupVersion",
        "queryVersion"
      ],
      "properties": {
        "revision": {
          "type": "integer",
          "minimum": 1
        },
        "action": {
          "enum": [
            "update",
            "delete"
          ],
          "default": "update"
        },
        "data": {
          "type": "object",
          "description": "Immutable field keys and strict schema values."
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "queryVersion": {
          "type": "integer",
          "minimum": 1
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Get live relationship choices

GET /v1/organizations/{organizationId}/groups/{groupId}/bindings/{bindingKey}/options

Requires an editable declared relationship binding, parent update and explicit relationship-write grant. Runs the configured query with current target read/row/field access. Returns options, pagination, and queryVersion; no arbitrary source query is accepted. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Selected-role data, binding, context, and optional view-placement access

ParameterLocationDescription
organizationIdpath
groupIdpath
bindingKeypath
contextsquery
viewIdquery
placementKeyquery
viewVersionquery
rowIdquery
limitquery
afterquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Save one explicit field or relationship

POST /v1/organizations/{organizationId}/groups/{groupId}/bindings/{bindingKey}/value

Field writes require value and destination revision. Relationship writes require edgeRevision, expectedTargetObjectId, targetObjectId (or null), and queryVersion. The server resolves targets from the binding, rechecks current row/path/field permissions, assigned-profile conditions, live query membership, cardinality and revisions. Group/view versions are required as applicable. Replacement retires old before activating new; no multi-document transactional guarantee. Member runtime access requires an authorized View placement (viewId, placementKey, viewVersion); standalone Group preview is Owner-only. Member collection listings return no standalone Groups.

Access: Selected-role data, binding, context, and optional view-placement access

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
groupIdpath
bindingKeypath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "rowId",
        "groupVersion"
      ],
      "properties": {
        "contexts": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        },
        "rowId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "viewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "placementKey": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9-]{0,63}$"
        },
        "viewVersion": {
          "type": "integer",
          "minimum": 1
        },
        "revision": {
          "type": "integer",
          "minimum": 1
        },
        "value": {},
        "edgeRevision": {
          "type": "integer",
          "minimum": 0
        },
        "expectedTargetObjectId": {
          "oneOf": [
            {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "targetObjectId": {
          "oneOf": [
            {
              "type": "string",
              "pattern": "^[a-f0-9]{24}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "queryVersion": {
          "type": "integer",
          "minimum": 1
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

List views or owner configuration catalog

GET /v1/organizations/{organizationId}/views

Returns role-visible summaries and required typed contexts. manage=1 returns Owner-only definitions. An empty context contract supports an all-records view.

Access: Selected-role data, binding, context, and optional view-placement access

ParameterLocationDescription
organizationIdpath
managequery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Create, update, or retire a DynamicView

POST /v1/organizations/{organizationId}/views

Owner-only. Save requires name/key/contexts/userTypeIds/placements; updates require id/version. Declared view contexts are required. Required group inputs must map to matching types; optional inputs may remain unmapped. Placement restrictions narrow group permissions. Retirement uses id/version/action=remove. Optional icon selects a SourceIcon. View placement icon defaults to inheritance when absent/null; empty string hides it and a listed icon overrides it. Placements may inherit Group-owned buttons, hide them, narrow UserTypes or move them to row/toolbar/page display. Read-only placements deny action mutations. Search and filtering restrictions cannot enable capabilities prohibited by the Group.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "version": {
          "type": "integer",
          "minimum": 1
        },
        "action": {
          "enum": [
            "save",
            "remove"
          ]
        },
        "name": {
          "type": "string",
          "maxLength": 100
        },
        "key": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9-]{0,63}$"
        },
        "contexts": {
          "type": "array",
          "maxItems": 4,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "key",
              "objectTypeId"
            ],
            "properties": {
              "key": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9-]{0,63}$"
              },
              "objectTypeId": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              },
              "required": {
                "type": "boolean",
                "default": true
              }
            }
          }
        },
        "userTypeIds": {
          "type": "array",
          "maxItems": 100,
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        },
        "placements": {
          "type": "array",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "key",
              "groupId",
              "contextMap"
            ],
            "properties": {
              "key": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9-]{0,63}$"
              },
              "groupId": {
                "type": "string",
                "pattern": "^[a-f0-9]{24}$"
              },
              "contextMap": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9-]{0,63}$"
                }
              },
              "restriction": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "readBindingKeys": {
                    "type": "array",
                    "maxItems": 40,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9-]{0,63}$"
                    }
                  },
                  "editBindingKeys": {
                    "type": "array",
                    "maxItems": 40,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9-]{0,63}$"
                    }
                  },
                  "readOnly": {
                    "type": "boolean"
                  },
                  "userTypeIds": {
                    "type": "array",
                    "maxItems": 100,
                    "items": {
                      "type": "string",
                      "pattern": "^[a-f0-9]{24}$"
                    }
                  },
                  "searchEnabled": {
                    "type": "boolean",
                    "description": "May narrow, never expand Group permissions."
                  },
                  "filterEnabled": {
                    "type": "boolean",
                    "description": "May narrow, never expand Group permissions."
                  },
                  "allowCreate": {
                    "type": "boolean",
                    "description": "May narrow, never expand Group permissions."
                  },
                  "allowDelete": {
                    "type": "boolean",
                    "description": "May narrow, never expand Group permissions."
                  },
                  "createBindingKeys": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "icon": {
                "$ref": "#/components/schemas/SourceIcon"
              },
              "title": {
                "type": "string",
                "description": "Optional plain-text section heading, at most 200 UTF-8 bytes."
              },
              "buttons": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "Existing View-owned navigation buttons."
              },
              "actionButtons": {
                "type": "array",
                "items": {
                  "type": "object"
                },
                "description": "Existing View-owned action buttons."
              },
              "inheritGroupButtons": {
                "type": "boolean",
                "default": true
              },
              "buttonOverrides": {
                "type": "object",
                "description": "Keys are navigation:<key>, action:<key> or link:<key>. Restrictions intersect Group grants.",
                "additionalProperties": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "hidden": {
                      "type": "boolean"
                    },
                    "display": {
                      "enum": [
                        "row",
                        "toolbar",
                        "page"
                      ]
                    },
                    "userTypeIds": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "pattern": "^[a-f0-9]{24}$"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "icon": {
          "$ref": "#/components/schemas/SourceIcon"
        },
        "description": {
          "type": "string",
          "description": "Plain text, at most 4000 UTF-8 bytes."
        },
        "appearance": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "backgroundColor": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^#[a-fA-F0-9]{6}$"
            },
            "borderColor": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^#[a-fA-F0-9]{6}$"
            },
            "density": {
              "enum": [
                "compact",
                "comfortable"
              ]
            },
            "showBackButton": {
              "type": "boolean"
            },
            "showTitle": {
              "type": "boolean"
            },
            "showFavorite": {
              "type": "boolean"
            }
          }
        },
        "actionButtons": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "Independent View page actions; see bindings and Views guide."
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Resolve authorized reusable group placements

GET /v1/organizations/{organizationId}/views/{viewId}

Requires all declared context IDs before rendering. Validates role, tenant and row access, maps named contexts, and applies per-placement read/edit/visibility restrictions. Context IDs never expand underlying data access.

Access: Selected-role data, binding, context, and optional view-placement access

ParameterLocationDescription
organizationIdpath
viewIdpath
contextsquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Owner Records: List authorized records

GET /v1/organizations/{organizationId}/object-types/{objectTypeId}/records

Requires selected Owner role. ObjectType is fixed by the path. Collection GET includes schema metadata. Existing record validation and revision rules apply.

Access: Active member; selected-role operation, row, and field access

ParameterLocationDescription
organizationIdpath
objectTypeIdquery
limitquery
afterquery
objectTypeIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Owner Records: Create a record

POST /v1/organizations/{organizationId}/object-types/{objectTypeId}/records

Requires selected Owner role. ObjectType is fixed by the path. Collection GET includes schema metadata. Existing record validation and revision rules apply.

Access: Active member; selected-role operation, row, and field access

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
objectTypeIdpath
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "objectTypeId",
        "data"
      ],
      "properties": {
        "objectTypeId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "data": {
          "type": "object",
          "description": "Immutable field keys with strictly typed schema values. Unknown or unauthorized fields are rejected."
        },
        "action": {
          "const": "create"
        }
      }
    }
  }
}
Responses
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Owner Records: Update or soft-delete a record

POST /v1/organizations/{organizationId}/object-types/{objectTypeId}/records/{objectId}

Requires selected Owner role. ObjectType is fixed by the path. Collection GET includes schema metadata. Existing record validation and revision rules apply.

Access: Active member; selected-role operation, row, and field access

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
objectIdpath
X-CSRF-Tokenheader
objectTypeIdpath
Request body

{
  "application/json": {
    "schema": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "revision",
            "data"
          ],
          "properties": {
            "revision": {
              "type": "integer",
              "minimum": 1
            },
            "action": {
              "const": "update"
            },
            "data": {
              "type": "object",
              "description": "Immutable field keys with strictly typed schema values. Unknown or unauthorized fields are rejected."
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "revision",
            "action"
          ],
          "properties": {
            "revision": {
              "type": "integer",
              "minimum": 1
            },
            "action": {
              "const": "delete"
            }
          }
        }
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Read personal favorites and dashboard pins visible to the selected role

GET /v1/organizations/{organizationId}/favorites

Access:

ParameterLocationDescription
organizationIdpath
Responses
  • 200: favoriteGroups, favoriteViews, pinnedGroups and pinnedViews arrays of definition IDs. Current user and organization only.

Set a personal favorite or dashboard pin

POST /v1/organizations/{organizationId}/favorites

Authenticated active member; CSRF required. Does not grant data access. Each list is bounded to 200 IDs. Setting false can remove a formerly visible source.

Access:

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "required": [
        "kind",
        "id",
        "setting",
        "enabled"
      ],
      "additionalProperties": false,
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "groups",
            "views"
          ]
        },
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "setting": {
          "type": "string",
          "enum": [
            "favorite",
            "pinned"
          ]
        },
        "enabled": {
          "type": "boolean"
        }
      }
    }
  }
}
Responses
  • 200: Preference saved
  • 404: Source unavailable to selected role
  • 422: Invalid input or list limit

List DynamicActions

GET /v1/organizations/{organizationId}/actions

Returns active versioned definitions including inputs, operation, conditions and allowed UserTypes. No query parameters.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Configure a DynamicAction

POST /v1/organizations/{organizationId}/actions

Create, update or retire an explicit action. Updates and retirement require id/version; referenced action contracts are dependency-protected. Operation creates one record with up to four connections or updates one existing record. See bindings and Views guide for invocation.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "version": {
          "type": "integer",
          "minimum": 1
        },
        "action": {
          "type": "string",
          "enum": [
            "save",
            "remove"
          ]
        },
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "operation": {
          "type": "object"
        },
        "conditions": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "userTypeIds": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-f0-9]{24}$"
          }
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Prepare authorized action inputs

POST /v1/organizations/{organizationId}/actions/{actionId}/prepare

Requires a valid authorized View/button invocation and current action/View/Group versions. Returns action fields, prompted inputs and resolved revisions.

Access: Authorized View/button and action/data grants

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
actionIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "viewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "viewVersion": {
          "type": "integer",
          "minimum": 1
        },
        "placementKey": {
          "type": "string"
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "contexts": {
          "type": "object"
        },
        "buttonKey": {
          "type": "string"
        },
        "rowId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "rowRevision": {
          "type": "integer",
          "minimum": 1
        },
        "actionVersion": {
          "type": "integer",
          "minimum": 1
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

List authorized prompted record choices

POST /v1/organizations/{organizationId}/actions/{actionId}/options

Requires a valid authorized View/button invocation and current action/View/Group versions. Returns options, hasMore and nextCursor; pages contain up to 25 authorized records.

Access: Authorized View/button and action/data grants

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
actionIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "viewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "viewVersion": {
          "type": "integer",
          "minimum": 1
        },
        "placementKey": {
          "type": "string"
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "contexts": {
          "type": "object"
        },
        "buttonKey": {
          "type": "string"
        },
        "rowId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "rowRevision": {
          "type": "integer",
          "minimum": 1
        },
        "actionVersion": {
          "type": "integer",
          "minimum": 1
        },
        "inputKey": {
          "type": "string"
        },
        "after": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Execute an explicit DynamicAction

POST /v1/organizations/{organizationId}/actions/{actionId}/execute

Requires a valid authorized View/button invocation and current action/View/Group versions. Requires current revisions and an idempotency requestId; returns result. Conditions, data/field/connection grants and Group/View restrictions are rechecked.

Access: Authorized View/button and action/data grants

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
actionIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "viewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "viewVersion": {
          "type": "integer",
          "minimum": 1
        },
        "placementKey": {
          "type": "string"
        },
        "groupVersion": {
          "type": "integer",
          "minimum": 1
        },
        "contexts": {
          "type": "object"
        },
        "buttonKey": {
          "type": "string"
        },
        "rowId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "rowRevision": {
          "type": "integer",
          "minimum": 1
        },
        "actionVersion": {
          "type": "integer",
          "minimum": 1
        },
        "records": {
          "type": "object"
        },
        "values": {
          "type": "object"
        },
        "revisions": {
          "type": "object"
        },
        "requestId": {
          "type": "string"
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

List reusable View navigations

GET /v1/organizations/{organizationId}/navigations

Returns active navigation definitions. No query parameters.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Configure reusable View navigation

POST /v1/organizations/{organizationId}/navigations

Inputs must exactly match destination View contexts and types. Updates require id/version. Retirement is blocked while referenced.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "version": {
          "type": "integer",
          "minimum": 1
        },
        "action": {
          "type": "string",
          "enum": [
            "save",
            "remove"
          ]
        },
        "name": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "kind": {
          "type": "string",
          "enum": [
            "openView"
          ]
        },
        "targetViewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "inputs": {
          "type": "array",
          "items": {
            "type": "object"
          }
        }
      }
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Review current record connections

GET /v1/organizations/{organizationId}/record-connections

Returns connections, hasMore and nextCursor. Includes endpoint labels, revisions, availability, canDisconnect and canModify. Mutations use relationship edges routes; this overview is read-only.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
relationshipIdquery
afterquery
limitquery
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Review ObjectType dependencies

GET /v1/organizations/{organizationId}/object-types/{objectTypeId}/dependencies

Returns dependency information for an active ObjectType, filtered by management permissions.

Access: ObjectType management permission

ParameterLocationDescription
organizationIdpath
objectTypeIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Review preserved field values and migrations

GET /v1/organizations/{organizationId}/object-types/{objectTypeId}/field-migrations

Returns fields, relationships, migrations, fieldKinds, optionQueries and relationshipSources. Includes active/retired fields and recent non-preview jobs.

Access: Owner mode

ParameterLocationDescription
organizationIdpath
objectTypeIdpath
Responses
  • 200: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

Choose, preview or apply a preserved-value migration

POST /v1/organizations/{organizationId}/object-types/{objectTypeId}/field-migrations

Use action=choices for replacement choices, preview to validate source/destination settings, then apply with only action, previewId and previewToken. Apply requires an unexpired actor-bound preview and current versions; source values remain preserved. See ObjectTypes and fields guide for replacement and conflict behavior.

Access: Owner mode

CSRF: Send the session's X-CSRF-Token header.

ParameterLocationDescription
organizationIdpath
objectTypeIdpath
X-CSRF-Tokenheader
Request body

{
  "application/json": {
    "schema": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "action": {
          "type": "string",
          "enum": [
            "choices",
            "preview",
            "apply"
          ]
        },
        "sourceId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "sourceVersion": {
          "type": "integer",
          "minimum": 1
        },
        "targetId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "targetVersion": {
          "type": "integer",
          "minimum": 1
        },
        "conflictPolicy": {
          "type": "string"
        },
        "retireAfter": {
          "type": "boolean"
        },
        "previewId": {
          "type": "string",
          "pattern": "^[a-f0-9]{24}$"
        },
        "previewToken": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "targetKind": {
          "type": "string"
        },
        "from": {
          "type": "string"
        },
        "mappings": {
          "type": "array",
          "items": {}
        },
        "newField": {
          "type": "object"
        },
        "sourceKind": {
          "type": "string",
          "enum": [
            "field",
            "relationship"
          ]
        },
        "sourceFrom": {
          "type": "string"
        }
      },
      "required": [
        "action"
      ]
    }
  }
}
Responses
  • 200: Successful response.
  • 201: Successful response.
  • 400: Malformed JSON.
  • 401: Authentication required.
  • 403: CSRF, operation, field, role, or membership access denied.
  • 404: Resource absent or row access denied.
  • 409: Revision, schema, cardinality, dependency, identity, or concurrent mutation conflict.
  • 413: Request or record too large.
  • 415: JSON content required.
  • 422: Invalid input; record validation errors may include error.fields.

DynamicActions ​

MethodOrganization-relative pathPurpose
GET / POST/actionsOwner action catalog and versioned configuration
POST/actions/{id}/prepareAuthorize a View/button invocation and prepare input fields
POST/actions/{id}/optionsPage through authorized record input choices
POST/actions/{id}/executeExecute with current revisions and an idempotency request ID

Reusable buttons are configured on Groups and inherited by View placements; existing View page and placement-owned buttons remain supported. See custom Group buttons. Action role grants intersect data, field, connection, group and context permissions. See bindings and Views and action creation permissions.

Dynamic Tables — product guides and API reference.