Endpoint
POST /llm/v1/chat/completions
curl -X POST https://api.case.dev/llm/v1/chat/completions \
-H "Authorization: Bearer sk_case_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4.5",
"messages": [
{"role": "user", "content": "Summarize this deposition in 3 bullet points."}
]
}'
casedev llm:v1:chat create-completion \
--model anthropic/claude-sonnet-4.5 \
--message '{role: user, content: "Summarize this deposition in 3 bullet points."}'
import Casedev from 'casedev';
const client = new Casedev({ apiKey: 'sk_case_YOUR_API_KEY' });
const response = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-sonnet-4.5',
messages: [
{ role: 'user', content: 'Summarize this deposition in 3 bullet points.' }
]
});
console.log(response.choices[0].message.content);
import casedev
client = casedev.Casedev(api_key='sk_case_YOUR_API_KEY')
response = client.llm.v1.chat.create_completion(
model='anthropic/claude-sonnet-4.5',
messages=[
{'role': 'user', 'content': 'Summarize this deposition in 3 bullet points.'}
]
)
print(response.choices[0].message.content)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("anthropic/claude-sonnet-4.5"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F("Summarize this deposition in 3 bullet points."),
}}),
})
fmt.Println(resp.Choices[0].Message.Content)
Response
{
"id": "gen_01K972J7KV4Y0MJZ3SRTA6YYMH",
"object": "chat.completion",
"model": "anthropic/claude-sonnet-4.5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Here are the key points:\n\n• Witness testified that...\n• Documents reviewed include...\n• Timeline established from..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 245,
"completion_tokens": 87,
"total_tokens": 332,
"cost": 0.000105
}
}
Parameters
Required
| Parameter | Type | Description |
|---|---|---|
messages | array | The conversation. Each message has a role and content. |
Optional
| Parameter | Type | Default | Description |
|---|---|---|---|
model | string | casemark/core-large | Which model to use. Browse all 195+ models → |
max_tokens | number | 4096 | Maximum tokens to generate |
temperature | number | 1 | Randomness (0-2). Use 0 for factual tasks. |
stream | boolean | false | Stream response token-by-token |
stop | array | null | Stop generation when these strings appear |
Messages
Each message in themessages array:
| Field | Type | Description |
|---|---|---|
role | string | system, user, or assistant |
content | string | The message text |
System prompts
Set the AI’s behavior with a system message:casedev llm:v1:chat create-completion \
--model anthropic/claude-sonnet-4.5 \
--message '{role: system, content: "You are a legal assistant. Be concise. Cite case law when relevant."}' \
--message '{role: user, content: "What are the elements of negligence?"}'
const response = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-sonnet-4.5',
messages: [
{
role: 'system',
content: 'You are a legal assistant. Be concise. Cite case law when relevant.'
},
{
role: 'user',
content: 'What are the elements of negligence?'
}
]
});
response = client.llm.v1.chat.create_completion(
model='anthropic/claude-sonnet-4.5',
messages=[
{
'role': 'system',
'content': 'You are a legal assistant. Be concise. Cite case law when relevant.'
},
{
'role': 'user',
'content': 'What are the elements of negligence?'
}
]
)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("anthropic/claude-sonnet-4.5"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleSystem),
Content: casedev.F("You are a legal assistant. Be concise. Cite case law when relevant."),
},
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F("What are the elements of negligence?"),
},
}),
})
fmt.Println(resp.Choices[0].Message.Content)
Multi-turn conversations
Include previous messages to maintain context:casedev llm:v1:chat create-completion \
--model openai/gpt-4o \
--message '{role: user, content: "What is a deposition?"}' \
--message '{role: assistant, content: "A deposition is sworn testimony taken outside of court..."}' \
--message '{role: user, content: "How long do they typically last?"}'
const response = await client.llm.v1.chat.createCompletion({
model: 'openai/gpt-4o',
messages: [
{ role: 'user', content: 'What is a deposition?' },
{ role: 'assistant', content: 'A deposition is sworn testimony taken outside of court...' },
{ role: 'user', content: 'How long do they typically last?' }
]
});
response = client.llm.v1.chat.create_completion(
model='openai/gpt-4o',
messages=[
{'role': 'user', 'content': 'What is a deposition?'},
{'role': 'assistant', 'content': 'A deposition is sworn testimony taken outside of court...'},
{'role': 'user', 'content': 'How long do they typically last?'}
]
)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("openai/gpt-4o"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{
{Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser), Content: casedev.F("What is a deposition?")},
{Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleAssistant), Content: casedev.F("A deposition is sworn testimony taken outside of court...")},
{Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser), Content: casedev.F("How long do they typically last?")},
}),
})
fmt.Println(resp.Choices[0].Message.Content)
Streaming
Get responses token-by-token as they’re generated:casedev llm:v1:chat create-completion \
--model anthropic/claude-sonnet-4.5 \
--message '{role: user, content: "Write a case summary."}' \
--stream
const stream = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-sonnet-4.5',
messages: [{ role: 'user', content: 'Write a case summary.' }],
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
stream = client.llm.v1.chat.create_completion(
model='anthropic/claude-sonnet-4.5',
messages=[{'role': 'user', 'content': 'Write a case summary.'}],
stream=True
)
for chunk in stream:
print(chunk.choices[0].delta.content or '', end='')
package main
import (
"context"
"net/http"
casedev "github.com/CaseMark/casedev-go"
"github.com/CaseMark/casedev-go/option"
)
func main() {
client := casedev.NewClient()
var httpResp *http.Response
client.Llm.V1.Chat.NewCompletion(context.TODO(), casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("anthropic/claude-sonnet-4.5"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F("Write a case summary."),
}}),
Stream: casedev.F(true),
}, option.WithResponseInto(&httpResp))
// Read httpResp.Body as SSE stream
}
Vision
Send images to models that support vision (Claude, GPT-4o):Typescript
const response = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-sonnet-4.5',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'What medical equipment is visible in this image?' },
{ type: 'image_url', image_url: { url: 'https://example.com/exhibit-a.jpg' } }
]
}
]
});
Usage and costs
Every response includes token counts and cost:Response
{
"usage": {
"prompt_tokens": 1245,
"completion_tokens": 387,
"total_tokens": 1632,
"cost": 0.004896
}
}
Reduce costs: Use
temperature: 0 for factual extraction. Try cheaper models like deepseek/deepseek-chat or qwen/qwen-2.5-72b-instruct for simpler tasks.Common patterns
Deposition summary
casedev llm:v1:chat create-completion \
--model anthropic/claude-sonnet-4.5 \
--message '{role: system, content: "Summarize depositions with: 1. Key admissions 2. Timeline of events 3. Credibility issues 4. Contradictions with other testimony"}' \
--message '{role: user, content: "<deposition text>"}' \
--temperature 0.3 \
--max-tokens 2000
const response = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-sonnet-4.5',
messages: [
{
role: 'system',
content: `Summarize depositions with:
1. Key admissions
2. Timeline of events
3. Credibility issues
4. Contradictions with other testimony`
},
{ role: 'user', content: depositionText }
],
temperature: 0.3,
max_tokens: 2000
});
response = client.llm.v1.chat.create_completion(
model='anthropic/claude-sonnet-4.5',
messages=[
{
'role': 'system',
'content': 'Summarize depositions with:\n1. Key admissions\n2. Timeline of events\n3. Credibility issues\n4. Contradictions with other testimony'
},
{'role': 'user', 'content': deposition_text}
],
temperature=0.3,
max_tokens=2000
)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("anthropic/claude-sonnet-4.5"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleSystem),
Content: casedev.F("Summarize depositions with:\n1. Key admissions\n2. Timeline of events\n3. Credibility issues\n4. Contradictions with other testimony"),
},
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F(depositionText),
},
}),
Temperature: casedev.F(0.3),
MaxTokens: casedev.F(int64(2000)),
})
fmt.Println(resp.Choices[0].Message.Content)
Contract clause extraction
casedev llm:v1:chat create-completion \
--model openai/gpt-4o \
--message '{role: system, content: "Extract all indemnification clauses. Return JSON: [{clause_text, page, party_protected}]"}' \
--message '{role: user, content: "<contract text>"}' \
--temperature 0
const response = await client.llm.v1.chat.createCompletion({
model: 'openai/gpt-4o',
messages: [
{
role: 'system',
content: 'Extract all indemnification clauses. Return JSON: [{clause_text, page, party_protected}]'
},
{ role: 'user', content: contractText }
],
temperature: 0
});
response = client.llm.v1.chat.create_completion(
model='openai/gpt-4o',
messages=[
{
'role': 'system',
'content': 'Extract all indemnification clauses. Return JSON: [{clause_text, page, party_protected}]'
},
{'role': 'user', 'content': contract_text}
],
temperature=0
)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("openai/gpt-4o"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleSystem),
Content: casedev.F("Extract all indemnification clauses. Return JSON: [{clause_text, page, party_protected}]"),
},
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F(contractText),
},
}),
Temperature: casedev.F(0.0),
})
fmt.Println(resp.Choices[0].Message.Content)
Medical record review
casedev llm:v1:chat create-completion \
--model anthropic/claude-opus-4 \
--message '{role: system, content: "You are a medical-legal expert. Identify standard-of-care deviations and timeline inconsistencies."}' \
--message '{role: user, content: "<medical records>"}' \
--max-tokens 5000
const response = await client.llm.v1.chat.createCompletion({
model: 'anthropic/claude-opus-4',
messages: [
{
role: 'system',
content: 'You are a medical-legal expert. Identify standard-of-care deviations and timeline inconsistencies.'
},
{ role: 'user', content: medicalRecords }
],
max_tokens: 5000
});
response = client.llm.v1.chat.create_completion(
model='anthropic/claude-opus-4',
messages=[
{
'role': 'system',
'content': 'You are a medical-legal expert. Identify standard-of-care deviations and timeline inconsistencies.'
},
{'role': 'user', 'content': medical_records}
],
max_tokens=5000
)
resp, _ := client.Llm.V1.Chat.NewCompletion(ctx, casedev.LlmV1ChatNewCompletionParams{
Model: casedev.F("anthropic/claude-opus-4"),
Messages: casedev.F([]casedev.LlmV1ChatNewCompletionParamsMessage{
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleSystem),
Content: casedev.F("You are a medical-legal expert. Identify standard-of-care deviations and timeline inconsistencies."),
},
{
Role: casedev.F(casedev.LlmV1ChatNewCompletionParamsMessagesRoleUser),
Content: casedev.F(medicalRecords),
},
}),
MaxTokens: casedev.F(int64(5000)),
})
fmt.Println(resp.Choices[0].Message.Content)

