Embeddings
Documents' text and semantic searches embedded with your own OpenAI, Voyage, Gemini or Cohere key, or hosted by SkimmerDB at cost.
List embedding keys
/v1/embedding-keys The tenant's own provider keys SkimmerDB embeds with (bring your own key): which providers, and a hint of each key. Needs an admin key without namespace limits or caps, or the owner's login (as managing API keys).
Answer
keysEmbeddingKey[] |
keys[].providerstringopenai or voyage. |
keys[].hintstringThe key's first and last characters: the key itself is never shown again. |
keys[].created_atstring |
keys[].updated_atstring |
Status codes
200OK |
401No key, or an unknown or revoked one. |
403The key's scope or namespaces don't allow it, or the tenant is suspended. |
curl -s https://api.skimmerdb.com/v1/embedding-keys \
-H "Authorization: Bearer $KEY"from skimmerdb import SkimmerDB
from skimmerdb._api.api.embeddings import list_embedding_keys
db = SkimmerDB() # SKIMMERDB_KEY
answer = list_embedding_keys.sync(client=db.api)import { SkimmerDB } from "skimmerdb";
import { listEmbeddingKeys } from "skimmerdb/api";
const db = new SkimmerDB(); // SKIMMERDB_KEY
const { data } = await listEmbeddingKeys({ client: db.client });{
"keys": [
{
"provider": "openai",
"hint": "sk-…a1b2",
"created_at": "2026-10-16T09:00:00Z",
"updated_at": "2026-10-16T09:00:00Z"
}
]
}Store an embedding key
/v1/embedding-keys/{provider} Stores (or replaces) the tenant's key for a provider (openai, voyage, gemini or cohere), after checking it with the provider (one tiny embedding with its default model, billed by the provider). Kept encrypted; never shown again. Namespaces with an embedding model (embed) then embed documents' text and semantic searches with it; the provider bills the tenant, SkimmerDB counts the tokens (usage.embed_tokens) and charges nothing for them. Needs an admin key without namespace limits or caps, or the owner's login (as managing API keys).
Parameters
providerstring · pathrequired |
Body application/json
keystringrequiredThe provider's API key. Checked with the provider (one tiny embedding), then stored encrypted; never shown again. |
Answer
providerstringopenai or voyage. |
hintstringThe key's first and last characters: the key itself is never shown again. |
created_atstring |
updated_atstring |
Status codes
200OK |
401No key, or an unknown or revoked one. |
403The key's scope or namespaces don't allow it, or the tenant is suspended. |
404No such namespace, document, key or tenant (or one this key may not see: the same answer). |
422Invalid: the message says why (code invalid with fields: which input fields; query_timeout: past the plan's time limit; scan_refused: send scan: true). |
429Over the tenant's or the key's rate, concurrency or cap, or writes arriving faster than the namespace commits them (code write_busy): retry after Retry-After seconds. |
502Billing (Stripe) is unavailable right now. |
curl -s -X PUT https://api.skimmerdb.com/v1/embedding-keys/provider \
-H "Authorization: Bearer $KEY" \
-d '{"key":"sk-proj-..."}'from skimmerdb import SkimmerDB
from skimmerdb._api.api.embeddings import set_embedding_key
from skimmerdb._api.models import EmbeddingKeyRequest
db = SkimmerDB() # SKIMMERDB_KEY
answer = set_embedding_key.sync("provider", client=db.api, body=EmbeddingKeyRequest.from_dict({"key":"sk-proj-..."}))import { SkimmerDB } from "skimmerdb";
import { setEmbeddingKey } from "skimmerdb/api";
const db = new SkimmerDB(); // SKIMMERDB_KEY
const { data } = await setEmbeddingKey({ client: db.client, path: { provider: "provider" }, body: {"key":"sk-proj-..."} });{
"provider": "openai",
"hint": "sk-…a1b2",
"created_at": "2026-10-16T09:00:00Z",
"updated_at": "2026-10-16T09:00:00Z"
}Delete an embedding key
/v1/embedding-keys/{provider} Forgets the tenant's key for a provider at once. Writes that need it (text without vectors in a namespace with that provider's model) and semantic searches then answer 422 embedding_key_missing. Needs an admin key without namespace limits or caps, or the owner's login (as managing API keys).
Parameters
providerstring · pathrequired |
Status codes
204Done (no body) |
401No key, or an unknown or revoked one. |
403The key's scope or namespaces don't allow it, or the tenant is suspended. |
404No such namespace, document, key or tenant (or one this key may not see: the same answer). |
curl -s -X DELETE https://api.skimmerdb.com/v1/embedding-keys/provider \
-H "Authorization: Bearer $KEY"from skimmerdb import SkimmerDB
from skimmerdb._api.api.embeddings import delete_embedding_key
db = SkimmerDB() # SKIMMERDB_KEY
answer = delete_embedding_key.sync("provider", client=db.api)import { SkimmerDB } from "skimmerdb";
import { deleteEmbeddingKey } from "skimmerdb/api";
const db = new SkimmerDB(); // SKIMMERDB_KEY
const { data } = await deleteEmbeddingKey({ client: db.client, path: { provider: "provider" } });