Skip to main content
GET
Browse and Edit Keys
Every /data endpoint needs the Intermediary plan or higher, on the database owner’s account — not the caller’s. Below that the answer is PLAN_RESTRICTED_FEATURE (403). It is also dashboard-session only: an API key gets API_KEY_SCOPE_DENIED (403) here, regardless of its scopes.
Redis only. There is no arbitrary command endpoint: the surface is SCAN, typed reads, typed writes, UNLINK, EXPIRE/PERSIST and INFO. KEYS, FLUSHALL, FLUSHDB, CONFIG, DEBUG, SCRIPT and EVAL are not reachable through the API.
string
required
The ID of the database.
string
Glob for SCAN MATCH. Defaults to *.
string
Cursor from the previous page. Numeric; anything else is rejected.
number
Hint for the scan batch. Maximum 200.
string
Workspace the database belongs to.
The listing always uses SCAN, never KEYS — KEYS blocks the customer’s own Redis while it runs.

Response

object

Read one key

string
/v1/databases/{id}/data/keys/{key}
Returns { key, type, ttl_seconds, value, truncated }, discriminated by type: string (string), hash (object), list / set / stream (array of strings), zset (array of { member, score }). The read stops at 1000 items or 1 MB, whichever comes first, and truncated is true when it did. A truncated value is a partial read: writing it back replaces the key with only what you received.

Write, expire and delete

Mutations require owner or admin in the workspace and are recorded in the activity log.
string
/v1/databases/{id}/data/keys/{key}
Body: { key, type, value, ttl_seconds? }. The key in the URL is the one written — a different key in the body is ignored. The write replaces the key rather than merging into it. Values are capped at 1 MB. Streams are read-only.
string
/v1/databases/{id}/data/keys/{key}/expire
Body: { ttl_seconds } — null means PERSIST.
string
/v1/databases/{id}/data/keys
Body: { keys } — up to 200 keys, removed with UNLINK. All three answer { "response": { "affected": <number> } }.