Skip to main content
Turso uses scoped, JWT-based tokens to control access to your databases. Every token can be restricted by database, permission level, and expiration — giving you full control over what each client can and cannot do.

Scoping Levels

Tokens are scoped at multiple levels, from broad to narrow:
LevelScopeHow to create
GroupAccess all databases in a groupturso group tokens create <group>
DatabaseAccess a single databaseturso db tokens create <database>
Read-onlyQueries only, no writesAdd --read-only flag
Table + ActionSpecific tables and operationsAdd -p <table>:<actions> flag
Time-limitedAuto-expires after a durationAdd --expiration 7d flag
These can be combined. For example, a read-only token scoped to a single database that expires in 7 days:
turso db tokens create mydb --read-only --expiration 7d
Or a token that only allows reading from all tables and inserting into comments:
turso db tokens create mydb \
  -p all:data_read \
  -p comments:data_add

Issuing Tokens

There are two ways to issue tokens: Both approaches support fine-grained permissions to control access at the table and action level.

Using Tokens

All tokens are passed as the authToken when creating a database client:
import { createClient } from "@tursodatabase/serverless";

const db = createClient({
  url: "<your-database-url>",
  authToken: "<your-token>",
});
You can get your database URL with turso db show <database-name> --url.