Developer

Credentials API

Securely store API keys and secrets for your custom resource.

Credentials API

The Credentials API provides secure key-value storage for secrets such as API keys, tokens, and passwords. Values are encrypted at rest using SQLCipher and are scoped by your resource’s manifest ID — each resource has its own isolated credential namespace.

Capability required: credentials:store

Frontend (iframe)

import { createResourceClient } from "@rightplace/sdk";

const rp = createResourceClient();
await rp.ready();

// Store an API key
await rp.credentials.set("openai_api_key", "sk-...");

// Retrieve it later
const apiKey = await rp.credentials.get("openai_api_key");
// → "sk-..."

// List stored credential keys (returns key names only, not values)
const keys = await rp.credentials.list();
// → ["openai_api_key"]

// Delete a credential
await rp.credentials.delete("openai_api_key");

Backend (Node.js)

The same API is available in backend methods via the rp host object:

import { createResourceServer } from "@rightplace/sdk/server";

const server = createResourceServer({
  methods: {
    saveApiKey: async (params, { rp }) => {
      await rp.credentials.set("api_key", params.apiKey);
      return { ok: true };
    },

    fetchData: async (_params, { rp }) => {
      const apiKey = await rp.credentials.get("api_key");
      if (!apiKey) throw new Error("API key not configured");

      const res = await rp.http.request("https://api.example.com/data", {
        headers: { Authorization: `Bearer ${apiKey}` },
      });
      return JSON.parse(res.body);
    },
  },
});

server.start();

API Reference

rp.credentials.get(key)

ParameterTypeDescription
keystringThe credential key to retrieve
ReturnsPromise<string | null>The value, or null if not found

rp.credentials.set(key, value)

ParameterTypeDescription
keystringThe credential key to store
valuestringThe secret value to store
ReturnsPromise<void>

rp.credentials.delete(key)

ParameterTypeDescription
keystringThe credential key to delete
ReturnsPromise<void>

rp.credentials.list()

ParameterTypeDescription
ReturnsPromise<string[]>Array of credential key names (not values)

Manifest Configuration

{
  "capabilities": [
    "credentials:store"
  ]
}

Notes

  • Values are encrypted at rest via SQLCipher. They are never exposed in logs.
  • list() returns key names only, never the secret values.
  • Credentials are scoped by manifest ID, not resource instance. All instances of the same resource type share the same credential store.
  • Credentials persist across app restarts and resource updates.
  • Use credentials for secrets (API keys, tokens, passwords). For non-sensitive data, use the Storage API instead.