Platform
ScaiWave ScaiGrid ScaiCore ScaiBot ScaiDrive ScaiKey Models Tools & Services
Solutions
Organisations Developers Internet Service Providers Managed Service Providers AI-in-a-Box
Resources
Support Documentation Blog Downloads
Company
About Research Careers Investment Opportunities Contact
Log in

API

The Scuttle API manages realms, databases, accounts and grants. Base URL: https://scuttle.scailabs.ai/api/v1. Requests and responses are JSON.

Authentication#

Send Authorization: Bearer <token>. Automation uses Scuttle API tokens (sct_...), created under API tokens in the console and scoped to a tenant or a single realm with a role. Tokens are shown once and stored hashed. Console users authenticate through ScaiKey.

Asynchronous operations#

Every change to a database or account answers 202 Accepted with an operation object. Poll GET /operations/{id}; state moves from queued to running to succeeded or failed. A failed operation carries the exact difference between the requested and the observed state in error.

Errors#

Errors are RFC 9457 problem documents (application/problem+json) with type, title, status, detail and a request_id to quote in support requests. A resource you have no role on answers 404, not 403.

Pagination#

List endpoints take limit (default 50, maximum 200) and cursor, and return {items, next_cursor}.

Endpoints#

Method and path Purpose
GET /me your principal, tenant and realm roles
GET /myip the address Scuttle sees you connecting from, and the allowed_networks entry for it (no authentication; ?format=text for the bare address)
GET /clusters clusters with region, service level and endpoint
GET /tenants/{tenant} tenant and its quotas
GET /tenants/{tenant}/usage?from=&to= daily usage per cluster
GET, POST /tenants/{tenant}/realms list, create (slug, display_name)
GET, PATCH, DELETE /tenants/{tenant}/realms/{realm} read, update, delete (only when empty)
GET /tenants/{tenant}/realms/{realm}/members list members
PUT, DELETE .../members/{principal} set role (admin, operator, viewer), remove
GET, POST .../realms/{realm}/databases list, create (name, cluster, charset?, collation?)
GET, DELETE .../databases/{name} read with connection info; delete (purged after 14 days)
GET, POST .../realms/{realm}/accounts list, create (name, cluster, grants, allowed_networks? — IPv4 CIDRs and single IPv6 addresses /128 —, max_user_connections?)
GET, PATCH, DELETE .../accounts/{name} read; change attributes and grants (full replace); delete
POST .../accounts/{name}:rotate-password returns the new password once
GET /operations/{id}, GET /tenants/{tenant}/operations operation status and history
GET, POST, DELETE /tenants/{tenant}/api-tokens list, create (name, role: viewer | operator | admin | tenant_admin, realm? to limit it to one realm, expires_at?), revoke; the token itself is returned once, on creation
GET /tenants/{tenant}/directory?q=, GET .../realms/{realm}/directory?q= find users and groups of your tenant by name, e-mail or group name, to grant a role to (tenant admins / realm admins)
GET /tenants/{tenant}/admins, PUT, DELETE .../admins/{principal} tenant admins (users or groups; {"principal_type": "user" | "group"})
GET .../databases/{name}/backups restorable window and backups
POST .../databases/{name}:restore restore into a new database: {"target": "...", "point_in_time": "..."} (time optional: latest)
POST .../databases/{name}:export build a .sql.gz of the database at a point in time ({"point_in_time": ...}, optional)
GET .../databases/{name}/exports/{operation_id} the export's download link, valid 24 hours (operators)
POST .../databases/{name}:purge-backups erase a deleted database's backups now (tenant admins)

Grants#

A grant is {"scope": "realm" | "database", "database": "<name>", "profile": "dba" | "readwrite" | "readonly"}. PATCH with grants replaces the complete set.

Quotas#

Defaults for std: 20 realms per tenant, 50 databases and 50 accounts per realm, 100 connections per account (up to 500), 14 days before a deleted database is purged, 14 days of point-in-time backups.

Updated 2026-09-26 16:25:25 View source (.md) rev 5