Database
Key-value storage and serverless scripts
The Database module provides key-value storage and serverless script execution.
Put Data
POST
/v1/platform/data SDK:
sdk.platform.data.put() Store data with a key.
const { ok } = await sdk.platform.data.put({
key: 'user:preferences:usr_abc123',
value: {
theme: 'dark',
language: 'en',
notifications: true
}
});
console.log(ok);Parameters
| Name | Type | Description |
|---|---|---|
key required | string | Unique key for the data |
value required | JSON value | JSON-serializable data to store |
previous_key optional | string | Optional key to delete in the same write |
Scan Data
GET
/v1/platform/data SDK:
sdk.platform.data.scan() Retrieve data by exact key prefix.
// Get single key
const result = await sdk.platform.data.scan({
key: "user:preferences:usr_abc123",
});
console.log(result.value[0]?.value);
// Scan by prefix
const prefixResult = await sdk.platform.data.scan({
key: "user:preferences:",
limit: 100,
});
prefixResult.value.forEach((item) => {
console.log(item.key, item.value);
});
Parameters
| Name | Type | Description |
|---|---|---|
key required | string | Exact key or key prefix to scan |
limit optional | number | Max items to return |
Delete Data
DELETE
/v1/platform/data SDK:
sdk.platform.data.delete() Delete data by key.
const { ok } = await sdk.platform.data.delete({
key: "user:preferences:usr_abc123",
});
console.log(ok);
Run Script
POST
/v1/platform/scripts SDK:
sdk.platform.runScript() Execute a serverless script.
const { success, message } = await sdk.platform.runScript({
name: 'migrate',
value: JSON.stringify({ dryRun: true })
});
console.log(success, message);Parameters
| Name | Type | Description |
|---|---|---|
name required | string | Script name |
value optional | string | Script input |
username optional | string | Write-only script credential when required |
password optional | string | Write-only script credential when required |
Use Cases
Namespaced Preferences
await sdk.platform.data.put({
key: `user:preferences:${userId}`,
value: {
theme: "dark",
notifications: true,
},
});
const preferences = await sdk.platform.data.scan({
key: `user:preferences:${userId}`,
});
console.log(preferences.value[0]?.value);
Feature Flags (Simple)
// Store feature config
await sdk.platform.data.put({
key: "config:features",
value: {
newCheckout: true,
darkMode: false,
betaFeatures: ["feature-a", "feature-b"],
},
});
// Check feature
async function isFeatureEnabled(feature: string): Promise<boolean> {
const result = await sdk.platform.data.scan({
key: "config:features",
});
const value = result.value[0]?.value;
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
return (value as Record<string, unknown>)[feature] === true;
}
Key Naming Conventions
Use colons to create hierarchical keys:
user:preferences:{userId}
config:{name}
Tip
Use meaningful prefixes to organize your data and enable efficient prefix-based scans.
Warning
The key-value store is designed for simple data storage. For complex queries or relations, use your own database.