KV Store is a lightweight, server-side key-value database for your app. Use it to cache data, ensure webhook idempotency, or store transient server state. It’s available in server functions, webhook handlers, and event handlers.
The KV Store is experimental and may change in the future. Please don’t use it in production versions of your app. We do not guarantee backward compatibility, or that the API will remain stable.

Example: Caching a response from an external API

When your app calls an external API, you don’t always need to fetch fresh data every time. With the KV Store, you can cache the response and set a TTL so it clears itself after a certain period of time.
get-users.server.ts
import { experimental_kv } from "attio/server";

export default async function getAllUsers() {
  const users = await experimental_kv.get("users");

  if (users !== null) {
    return users.value;
  }

  const response = await fetch("https://api.emailsequence.com/v1/users");
  const data = await response.json();
  await experimental_kv.set("users", data, { ttlInSeconds: 60 * 60 * 24 * 30 });
  return data;
}

API

get(key: string): Promise<{ value: string } | null>

const value = await experimental_kv.get("key")
Get the value of a key. Returns null if the key does not exist.

Parameters

key
string
required
The key to get the value of.

set(key: string, value: string, options?: { ttlInSeconds?: number }): Promise<void>

await experimental_kv.set("key", "value", { ttlInSeconds: 60 })
Set the value of a key. Optionally, you can set a TTL in seconds after which the key will be deleted.

Parameters

key
string
required
The key to set the value of.
value
string
required
The value to set for the key.
options
{ ttlInSeconds?: number }
The options for the key. Currently, the only option is ttlInSeconds which is the number of seconds after which the key will be deleted.

delete(key: string): Promise<void>

await experimental_kv.delete("key")
Delete a key.

Parameters

key
string
required
The key to delete.