Skip to main content

System API

The System API manages the Revisium platform — projects, branches, revisions, tables, rows, and users. Available as GraphQL and REST.

GraphQL

The System GraphQL API is served at:

  • Cloud: https://cloud.revisium.io/graphql
  • Standalone: http://localhost:9222/graphql
  • Docker: http://localhost:8080/graphql

Authentication

mutation {
login(data: { username: "admin", password: "admin" }) {
accessToken
}
}

Use the token in the Authorization header:

Authorization: Bearer <accessToken>

Tables

mutation {
createTable(data: {
revisionId: "<draftRevisionId>"
tableId: "products"
schema: { ... }
}) { id }
}

Rows

mutation {
createRow(data: {
revisionId: "<draftRevisionId>"
tableId: "products"
rowId: "iphone-16"
data: { title: "iPhone 16 Pro", price: 999 }
}) { id }
}

Bulk Operations

Create, update, patch, or delete multiple rows in a single request:

mutation {
createRows(data: {
revisionId: "<draftRevisionId>"
tableId: "products"
rows: [
{ rowId: "iphone-16", data: { title: "iPhone 16 Pro", price: 999 } },
{ rowId: "macbook-m4", data: { title: "MacBook M4", price: 1999 } }
]
}) { tableId }
}

Querying Rows

query {
rows(data: {
revisionId: "<revisionId>"
tableId: "products"
first: 20
after: null
where: { data: { path: ["price"], gte: 100 } }
orderBy: [{ field: createdAt, direction: desc }]
}) {
edges {
node { id data }
cursor
}
pageInfo { hasNextPage endCursor }
totalCount
}
}

Full-text search across all tables and fields:

query {
searchRows(data: {
revisionId: "<revisionId>"
query: "iPhone"
first: 10
}) {
edges {
node { row { id } table { id } matches { value path highlight } }
}
}
}

Commits & Changes

# Commit draft changes
mutation {
createRevision(data: {
organizationId: "admin"
projectName: "my-project"
branchName: "master"
comment: "Add products"
}) { id }
}

# Get changes before commit
query {
revisionChanges(data: { revisionId: "<draftRevisionId>" }) {
tableChanges { tableId type }
rowChanges { tableId rowId type }
}
}

REST

The System REST API provides the same operations under /api:

  • Cloud: https://cloud.revisium.io/api
  • Standalone: http://localhost:9222/api
  • Docker: http://localhost:8080/api

Swagger UI available at /api (e.g., http://localhost:9222/api).

Tables

MethodPathDescription
POST/api/revision/:revisionId/tablesCreate table
PATCH/api/revision/:revisionId/tables/:tableIdUpdate table schema (JSON Patch)
PATCH/api/revision/:revisionId/tables/:tableId/renameRename table
DELETE/api/revision/:revisionId/tables/:tableIdDelete table

Rows

MethodPathDescription
POST/api/revision/:revisionId/tables/:tableId/create-rowCreate row
POST/api/revision/:revisionId/tables/:tableId/create-rowsCreate rows (bulk)
PUT/api/revision/:revisionId/tables/:tableId/rows/:rowIdUpdate (replace) row
PUT/api/revision/:revisionId/tables/:tableId/update-rowsUpdate rows (bulk)
PATCH/api/revision/:revisionId/tables/:tableId/rows/:rowIdPatch row
PATCH/api/revision/:revisionId/tables/:tableId/patch-rowsPatch rows (bulk)
PATCH/api/revision/:revisionId/tables/:tableId/rows/:rowId/renameRename row
DELETE/api/revision/:revisionId/tables/:tableId/rows/:rowIdDelete row
DELETE/api/revision/:revisionId/tables/:tableId/rowsDelete rows (bulk)

Querying

MethodPathDescription
POST/api/revision/:revisionId/tables/:tableId/rowsQuery rows (filter, sort, paginate)
GET/api/revision/:revisionId/tables/:tableId/rows/:rowIdGet single row
GET/api/revision/:revisionId/tables/:tableId/count-rowsCount rows

Files

MethodPathDescription
POST/api/revision/:revisionId/tables/:tableId/rows/:rowId/upload/:fileIdUpload file (multipart/form-data, max 50MB)

Branches & Commits

MethodPathDescription
POST/api/organization/:orgId/projects/:name/branches/:branch/create-revisionCommit
POST/api/organization/:orgId/projects/:name/branches/:branch/revert-changesRevert draft

Client Library

The @revisium/client TypeScript library provides a typed client for the System API:

import { RevisiumClient } from '@revisium/client';

const client = new RevisiumClient({
url: 'http://localhost:8080',
username: 'admin',
password: 'admin',
});

const project = await client.getProject('my-org', 'my-project');
const tables = await client.getTables(revisionId);