Skip to main content

/v1/database

The HTTP endpoints in /v1/database allow clients to interact with Spacetime databases in a variety of ways, including retrieving information, creating and deleting databases, invoking reducers and evaluating SQL queries.

At a glance

RouteDescription
POST /v1/databasePublish a new database given its module code.
POST /v1/database/:name_or_identityPublish to a database given its module code.
GET /v1/database/:name_or_identityGet a JSON description of a database.
DELETE /v1/database/:name_or_identityDelete a database.
GET /v1/database/:name_or_identity/namesGet the names this database can be identified by.
POST /v1/database/:name_or_identity/namesAdd a new name for this database.
PUT /v1/database/:name_or_identity/namesSet the list of names for this database.
GET /v1/database/:name_or_identity/identityGet the identity of a database.
GET /v1/database/:name_or_identity/subscribeBegin a WebSocket connection.
POST /v1/database/:name_or_identity/call/:reducerInvoke a reducer in a database.
GET /v1/database/:name_or_identity/schemaGet the schema for a database.
GET /v1/database/:name_or_identity/logsRetrieve logs from a database.
POST /v1/database/:name_or_identity/sqlRun a SQL query against a database.

POST /v1/database

Publish a new database with no name.

Accessible through the CLI as spacetime publish.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

A WebAssembly module in the binary format.

Returns

If the database was successfully published, returns JSON in the form:

{ "Success": {
    "database_identity": string,
    "op": "created" | "updated"
} }

POST /v1/database/:name_or_identity

Publish to a database with the specified name or identity. If the name doesn't exist, creates a new database.

Accessible through the CLI as spacetime publish.

Query Parameters

NameValue
clearA boolean; whether to clear any existing data when updating an existing database.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

A WebAssembly module in the binary format.

Returns

If the database was successfully published, returns JSON in the form:

{ "Success": {
    "domain": null | string,
    "database_identity": string,
    "op": "created" | "updated"
} }

If a database with the given name exists, but the identity provided in the Authorization header does not have permission to edit it, returns 401 UNAUTHORIZED along with JSON in the form:

{ "PermissionDenied": {
    "name": string
} }

GET /v1/database/:name_or_identity

Get a database's identity, owner identity, host type, number of replicas and a hash of its WASM module.

Returns

Returns JSON in the form:

{
    "database_identity": string,
    "owner_identity": string,
    "host_type": "wasm",
    "initial_program": string
}
FieldTypeMeaning
"database_identity"StringThe Spacetime identity of the database.
"owner_identity"StringThe Spacetime identity of the database's owner.
"host_type"StringThe module host type; currently always "wasm".
"initial_program"StringHash of the WASM module with which the database was initialized.

DELETE /v1/database/:name_or_identity

Delete a database.

Accessible through the CLI as spacetime delete <identity>.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

GET /v1/database/:name_or_identity/names

Get the names this database can be identified by.

Returns

Returns JSON in the form:

{ "names": array<string> }

where <names> is a JSON array of strings, each of which is a name which refers to the database.

POST /v1/database/:name_or_identity/names

Add a new name for this database.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

Takes as the request body a string containing the new name of the database.

Returns

If the name was successfully set, returns JSON in the form:

{ "Success": {
    "domain": string,
    "database_result": string
} }

If the new name already exists but the identity provided in the Authorization header does not have permission to edit it, returns JSON in the form:

{ "PermissionDenied": {
    "domain": string
} }

PUT /v1/database/:name_or_identity/names

Set the list of names for this database.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

Takes as the request body a list of names, as a JSON array of strings.

Returns

If the name was successfully set, returns JSON in the form:

{ "Success": null }

If any of the new names already exist but the identity provided in the Authorization header does not have permission to edit it, returns 401 UNAUTHORIZED along with JSON in the form:

{ "PermissionDenied": null }

GET /v1/database/:name_or_identity/identity

Get the identity of a database.

Returns

Returns a hex string of the specified database's identity.

GET /v1/database/:name_or_identity/subscribe

Begin a WebSocket connection with a database.

Required Headers

For more information about WebSocket headers, see RFC 6455.

NameValue
Sec-WebSocket-Protocolv1.bsatn.spacetimedb or v1.json.spacetimedb
ConnectionUpdgrade
Upgradewebsocket
Sec-WebSocket-Version13
Sec-WebSocket-KeyA 16-byte value, generated randomly by the client, encoded as Base64.

The SpacetimeDB binary WebSocket protocol, v1.bsatn.spacetimedb, encodes messages as well as reducer and row data using BSATN. Its messages are defined here.

The SpacetimeDB text WebSocket protocol, v1.json.spacetimedb, encodes messages according to the SATS-JSON format.

Optional Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

POST /v1/database/:name_or_identity/call/:reducer

Invoke a reducer in a database.

Path parameters

NameValue
:reducerThe name of the reducer.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

A JSON array of arguments to the reducer.

GET /v1/database/:name_or_identity/schema

Get a schema for a database.

Accessible through the CLI as spacetime describe <name_or_identity>.

Query Parameters

NameValue
versionThe version of RawModuleDef to return, e.g. 9.

Returns

Returns a RawModuleDef in JSON form.

Example response from /schema?version=9 for the default module generated by spacetime init
{
  "typespace": {
    "types": [
      {
        "Product": {
          "elements": [
            {
              "name": {
                "some": "name"
              },
              "algebraic_type": {
                "String": []
              }
            }
          ]
        }
      }
    ]
  },
  "tables": [
    {
      "name": "person",
      "product_type_ref": 0,
      "primary_key": [],
      "indexes": [],
      "constraints": [],
      "sequences": [],
      "schedule": {
        "none": []
      },
      "table_type": {
        "User": []
      },
      "table_access": {
        "Private": []
      }
    }
  ],
  "reducers": [
    {
      "name": "add",
      "params": {
        "elements": [
          {
            "name": {
              "some": "name"
            },
            "algebraic_type": {
              "String": []
            }
          }
        ]
      },
      "lifecycle": {
        "none": []
      }
    },
    {
      "name": "identity_connected",
      "params": {
        "elements": []
      },
      "lifecycle": {
        "some": {
          "OnConnect": []
        }
      }
    },
    {
      "name": "identity_disconnected",
      "params": {
        "elements": []
      },
      "lifecycle": {
        "some": {
          "OnDisconnect": []
        }
      }
    },
    {
      "name": "init",
      "params": {
        "elements": []
      },
      "lifecycle": {
        "some": {
          "Init": []
        }
      }
    },
    {
      "name": "say_hello",
      "params": {
        "elements": []
      },
      "lifecycle": {
        "none": []
      }
    }
  ],
  "types": [
    {
      "name": {
        "scope": [],
        "name": "Person"
      },
      "ty": 0,
      "custom_ordering": true
    }
  ],
  "misc_exports": [],
  "row_level_security": []
}

GET /v1/database/:name_or_identity/logs

Retrieve logs from a database.

Accessible through the CLI as spacetime logs <name_or_identity>.

Query Parameters

NameValue
num_linesNumber of most-recent log lines to retrieve.
followA boolean; whether to continue receiving new logs via a stream.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Returns

Text, or streaming text if follow is supplied, containing log lines.

POST /v1/database/:name_or_identity/sql

Run a SQL query against a database.

Accessible through the CLI as spacetime sql <name_or_identity> <query>.

Required Headers

NameValue
AuthorizationA Spacetime token as Bearer auth.

Data

SQL queries, separated by ;.

Returns

Returns a JSON array of statement results, each of which takes the form:

{
    "schema": ProductType,
    "rows": array
}

The schema will be a JSON-encoded ProductType describing the type of the returned rows.

The rows will be an array of JSON-encoded ProductValues, each of which conforms to the schema.