Skip to main content
Endpoint
POST /llm/v1/embeddings
curl -X POST https://api.case.dev/llm/v1/embeddings \
  -H "Authorization: Bearer sk_case_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/text-embedding-3-small",
    "input": "Plaintiff alleges negligence in post-operative care"
  }'
casedev llm:v1 create-embedding \
  --model openai/text-embedding-3-small \
  --input "Plaintiff alleges negligence in post-operative care"
import Casedev from 'casedev';

const client = new Casedev({ apiKey: 'sk_case_YOUR_API_KEY' });

const result = await client.llm.v1.createEmbedding({
  model: 'openai/text-embedding-3-small',
  input: 'Plaintiff alleges negligence in post-operative care'
});

console.log(result.data[0].embedding);  // [0.016, -0.022, ...]
import casedev

client = casedev.Casedev(api_key='sk_case_YOUR_API_KEY')

result = client.llm.v1.create_embedding(
    model='openai/text-embedding-3-small',
    input='Plaintiff alleges negligence in post-operative care'
)

print(result.data[0].embedding)  # [0.016, -0.022, ...]
result, _ := client.Llm.V1.NewEmbedding(ctx, casedev.LlmV1NewEmbeddingParams{
	Model: casedev.F("openai/text-embedding-3-small"),
	Input: casedev.F("Plaintiff alleges negligence in post-operative care"),
})
fmt.Println(result.Data[0].Embedding)
Response
{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [-0.016, 0.022, -0.011, ...]
    }
  ],
  "model": "openai/text-embedding-3-small",
  "usage": {
    "prompt_tokens": 12,
    "total_tokens": 12
  }
}

Parameters

ParameterTypeRequiredDescription
modelstringYesEmbedding model ID
inputstring or arrayYesText(s) to embed

Embedding models

ModelDimensionsBest for$/1K tokens
openai/text-embedding-3-small1536General purpose$0.00002
openai/text-embedding-3-large3072Higher quality$0.00013
voyage/voyage-law-21024Legal documents$0.00012
voyage/voyage-3.51536General purpose$0.00006
For legal documents, use voyage/voyage-law-2. It’s specifically trained on legal text.

Batch embeddings

Embed multiple texts in one request:
casedev llm:v1 create-embedding \
  --model openai/text-embedding-3-small \
  --input "Plaintiff alleges negligence in post-operative care"
const result = await client.llm.v1.createEmbedding({
  model: 'openai/text-embedding-3-small',
  input: [
    'Medical record from January 2024',
    'Deposition transcript page 45',
    'Expert witness report summary'
  ]
});

// result.data[0].embedding, result.data[1].embedding, ...
result = client.llm.v1.create_embedding(
    model='openai/text-embedding-3-small',
    input=[
        'Medical record from January 2024',
        'Deposition transcript page 45',
        'Expert witness report summary'
    ]
)

# result.data[0].embedding, result.data[1].embedding, ...
result, _ := client.Llm.V1.NewEmbedding(ctx, casedev.LlmV1NewEmbeddingParams{
	Model: casedev.F("openai/text-embedding-3-small"),
	Input: casedev.F([]string{
		"Text one",
		"Text two",
		"Text three",
	}),
})
// result.Data[0].Embedding, result.Data[1].Embedding, ...

Use cases

# 1. Embed your query
casedev llm:v1 create-embedding \
  --model voyage/voyage-law-2 \
  --input "negligence in surgical procedure"

# 2. Compare to document embeddings (cosine similarity)
# 3. Return most similar documents
// 1. Embed your query
const queryResult = await client.llm.v1.createEmbedding({
  model: 'voyage/voyage-law-2',
  input: 'negligence in surgical procedure'
});

// 2. Compare to document embeddings (cosine similarity)
// 3. Return most similar documents
# 1. Embed your query
query_result = client.llm.v1.create_embedding(
    model='voyage/voyage-law-2',
    input='negligence in surgical procedure'
)

# 2. Compare to document embeddings (cosine similarity)
# 3. Return most similar documents
// 1. Embed your query
queryResult, _ := client.Llm.V1.NewEmbedding(ctx, casedev.LlmV1NewEmbeddingParams{
	Model: casedev.F("voyage/voyage-law-2"),
	Input: casedev.F("negligence in surgical procedure"),
})

// 2. Compare to document embeddings (cosine similarity)
// 3. Return most similar documents

Document similarity

# Compare two documents (embed each separately, then compute similarity)
casedev llm:v1 create-embedding \
  --model voyage/voyage-law-2 \
  --input "Plaintiff expert testimony on standard of care"

casedev llm:v1 create-embedding \
  --model voyage/voyage-law-2 \
  --input "Defense expert rebuttal on treatment protocols"
// Compare two documents
const result = await client.llm.v1.createEmbedding({
  model: 'voyage/voyage-law-2',
  input: [
    'Plaintiff expert testimony on standard of care',
    'Defense expert rebuttal on treatment protocols'
  ]
});

// Calculate cosine similarity:
// ~1.0 = very similar, ~0.5 = somewhat related, ~0.0 = unrelated
# Compare two documents
result = client.llm.v1.create_embedding(
    model='voyage/voyage-law-2',
    input=[
        'Plaintiff expert testimony on standard of care',
        'Defense expert rebuttal on treatment protocols'
    ]
)

# Calculate cosine similarity:
# ~1.0 = very similar, ~0.5 = somewhat related, ~0.0 = unrelated
// Compare two documents
result, _ := client.Llm.V1.NewEmbedding(ctx, casedev.LlmV1NewEmbeddingParams{
	Model: casedev.F("voyage/voyage-law-2"),
	Input: casedev.F([]string{
		"Plaintiff expert testimony on standard of care",
		"Defense expert rebuttal on treatment protocols",
	}),
})

// Calculate cosine similarity:
// ~1.0 = very similar, ~0.5 = somewhat related, ~0.0 = unrelated
Tip: Use the same model for indexing and querying. Mixing models produces poor results.