API Reference
Complete REST API documentation for integrating with SAM.
SAM provides a built-in REST API that's compatible with OpenAI's formatfor integrating SAM into your applications, scripts, and workflows. Use it for building custom UIs, automating tasks, or connecting SAM to larger systems. The API gives you programmatic access to all of SAM's capabilities.
What's covered: - Complete endpoint reference with examples - OpenAI-compatible chat completions API - Conversation management endpoints - Memory and RAG API endpoints - Streaming responses with SSE - Error handling and best practices
Why use the API: - Build custom frontends and UIs - Integrate SAM into existing applications - Automate workflows with scripts - Create specialized tools and interfaces - Access SAM from other programming languages
Prerequisites: - Basic understanding of REST APIs - Familiarity with JSON - Knowledge of HTTP methods (GET, POST, DELETE) - Optional: Understanding of Server-Sent Events (SSE) for streaming
Base URL
http://localhost:8080
Default port: 8080 (configurable in preferences)
Authentication
Currently no authentication required for localhost.
For remote access, configure authentication in SAM preferences.
Endpoints
POST /api/chat/completions
Send a chat message and receive a response.
Request Body:
{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Hello"}
],
"temperature": 0.7,
"max_tokens": 2000,
"stream": false,
"tools": []
}
Response (non-streaming):
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1699123456,
"model": "gpt-4",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I help you?"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 28,
"total_tokens": 43
},
"sam_metadata": {
"provider": {
"type": "openai",
"name": "OpenAI",
"is_local": false,
"base_url": "api.openai.com"
},
"model_info": {
"context_window": 8192,
"max_output_tokens": 8192,
"supports_tools": true,
"supports_vision": false,
"supports_streaming": true,
"family": "gpt-4"
},
"workflow": {
"iterations": 1,
"max_iterations": 300,
"tool_call_count": 0,
"tools_used": [],
"duration_seconds": 2.5,
"completion_reason": "workflow_complete",
"had_errors": false
},
"cost_estimate": {
"estimated_cost_usd": 0.0012,
"prompt_cost_per_1k": 0.03,
"completion_cost_per_1k": 0.06,
"currency": "USD",
"note": "Estimated based on published pricing"
}
}
}
SAM Enhanced Metadata
SAM enriches API responses with comprehensive metadata in the sam_metadata field:
| Field | Description |
|---|---|
provider |
Provider info: type, name, local/remote status, base URL |
model_info |
Model capabilities: context window, output limits, tool/vision/streaming support |
workflow |
Execution details: iterations, tool calls, duration, completion reason |
cost_estimate |
USD cost estimate with per-1K token rates |
Provider Types: openai, github-copilot, deepseek, gemini, minimax, openrouter, local-llama, local-mlx, remote-llama, ollama-cloud, zai, zai-coding, custom
Completion Reasons: workflow_complete, max_iterations_reached, cancelled, error, tool_execution_failed
Response (streaming with stream: true):
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1699123456,"model":"gpt-4","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1699123456,"model":"gpt-4","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: [DONE]
GET /api/models
List available models.
Response:
{
"object": "list",
"data": [
{
"id": "gpt-4",
"object": "model",
"owned_by": "openai"
},
{
"id": "mlx-qwen-7b",
"object": "model",
"owned_by": "local"
}
]
}
Common Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
model |
string | Model to use | Required |
messages |
array | Conversation messages | Required |
temperature |
number | Randomness (0.0-2.0) | 0.7 |
max_tokens |
integer | Max response length | 2000 |
top_p |
number | Nucleus sampling | 1.0 |
stream |
boolean | Enable streaming | false |
tools |
array | Available tools | [] |
Message Format
{
"role": "user|assistant|system|tool",
"content": "Message content",
"tool_calls": [] // For assistant messages with tool calls
}
POST /api/chat/tool-response
Submit user response for blocked tool execution (User Collaboration Protocol).
Request Body:
{
"toolCallId": "call_abc123",
"userResponse": "yes",
"conversationId": "uuid-here"
}
POST /api/chat/autonomous
Multi-step autonomous workflow endpoint with agent orchestration.
Request Body:
{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Build a todo app"}],
"maxIterations": 50
}
GET /v1/conversations
List all conversations.
Response:
{
"conversations": [
{
"id": "uuid",
"title": "My Conversation",
"messageCount": 42
}
]
}
GET /v1/conversations/:conversationId
Get specific conversation details.
GET /api/prompts/system
List available system prompts.
GET /api/prompts/mini
List available mini prompts.
GET /api/topics
List shared topics for cross-conversation collaboration.
Response:
{
"topics": [
{
"id": "project-alpha",
"name": "Project Alpha",
"created_at": "2026-01-05T10:30:00Z",
"conversation_count": 3
}
]
}
GET /api/models/download/:downloadId/status
Check download status.
DELETE /api/models/download/:downloadId
Cancel ongoing download.
GET /api/tool_result
Retrieve large persisted tool results (>16KB auto-persist).
Query Parameters:
- resultId (string): Tool result ID
GET /debug/mcp/tools
List all MCP tools with complete schemas (for debugging).
Response:
{
"tools": [
{
"name": "file_operations",
"description": "File operations: read, search, write, and manage workspace files",
"inputSchema": {
"type": "object",
"properties": {
"operation": {"type": "string", "enum": ["read_file", "list_dir", ...]},
"filePath": {"type": "string"}
}
}
}
]
}
POST /debug/mcp/execute
Execute an MCP tool directly (bypassing AI, for testing).
Request Body:
{
"tool": "file_operations",
"arguments": {
"operation": "read_file",
"filePath": "/path/to/file.txt",
"startLine": 1,
"endLine": 10
}
}
Response:
{
"success": true,
"result": "File content here...",
"execution_time_ms": 45
}
GET /debug/tools/available
Get tool registry status and availability.
Response:
{
"total_tools": 16,
"enabled_tools": 12,
"disabled_tools": 4,
"tools": [
{"name": "file_operations", "enabled": true, "operation_count": 16},
{"name": "terminal_operations", "enabled": false, "operation_count": 1}
]
}
Tool Calling
SAM provides MCP (Model Context Protocol) tools that the AI can automatically invoke to complete tasks. For complete tool documentation, see Tools Reference.
Available Tools
SAM includes the following tools:
| Tool | Operations | Status | Description |
|---|---|---|---|
think |
1 | Enabled | Planning and structured reasoning |
increase_max_iterations |
1 | Enabled | Request more iterations for complex tasks |
read_tool_result |
1 | Enabled | Retrieve large persisted tool results |
user_collaboration |
1 | Enabled | Pause for user input, decisions, or approval |
file_operations |
18 | Enabled | Read, write, edit, and search files |
terminal_operations |
1 | Enabled | Execute shell commands |
memory_operations |
14 | Enabled | Store, search, and recall memories |
todo_operations |
4 | Enabled | Manage structured todo lists |
web_operations |
3 | Enabled | Web research, search, fetch |
document_operations |
3 | Enabled | Import, create, and manage documents |
calendar_operations |
9 | Enabled | macOS Calendar integration |
contacts_operations |
6 | Enabled | macOS Contacts integration |
notes_operations |
6 | Enabled | Apple Notes integration |
spotlight_search |
5 | Enabled | macOS Spotlight search |
weather_operations |
3 | Enabled | Current weather and forecast |
image_generation |
2 | Enabled | Generate images via remote ALICE |
math_operations |
4 | Enabled | Calculate, convert, and run formula math |
code_intelligence |
2 | Enabled | Find symbol usages and search commit history |
version_control |
9 | Enabled | Git version control operations |
remote_execution |
5 | Enabled | Run tasks on remote systems over SSH |
apply_patch |
1 | Enabled | Apply multi-file patches |
agent_operations |
7 | Enabled | Spawn and coordinate sub-agents |
Note: SAM provides 22 tools (78 operations total). Core tools are automatically available to the AI. Advanced tools (terminal, subagent, remote execution) are disabled by default for security and can be enabled via API or UI preferences.
Tool Invocation Format
Tools are invoked using OpenAI's function calling format. For consolidated tools, include the operation parameter:
Request with tools:
{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Read the README file"}
],
"tools": [
{
"type": "function",
"function": {
"name": "file_operations",
"description": "File operations: read, search, write, and manage workspace files",
"parameters": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "File operation to perform",
"enum": ["read_file", "list_dir", "create_file", "replace_string", ...]
},
"filePath": {
"type": "string",
"description": "File path for read/write operations"
}
},
"required": ["operation"]
}
}
}
]
}
Model's tool call:
{
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc123",
"type": "function",
"function": {
"name": "file_operations",
"arguments": "{\"operation\":\"read_file\",\"filePath\":\"/path/to/README.md\"}"
}
}]
}
Tool result response:
{
"role": "tool",
"tool_call_id": "call_abc123",
"name": "file_operations",
"content": "{\"success\":true,\"content\":\"# README\\n\\nThis is the README file...\"}"
}
Common Tool Calling Patterns
Read a file:
{
"name": "file_operations",
"arguments": {
"operation": "read_file",
"filePath": "/project/src/main.swift"
}
}
Search code:
{
"name": "file_operations",
"arguments": {
"operation": "grep_search",
"query": "func.*authenticate",
"isRegexp": true,
"includePattern": "**/*.swift"
}
}
Execute terminal command:
{
"name": "terminal_operations",
"arguments": {
"operation": "run_command",
"command": "npm install",
"explanation": "Install project dependencies"
}
}
Search conversation memory:
{
"name": "memory_operations",
"arguments": {
"operation": "search_memory",
"query": "API configuration",
"similarity_threshold": "0.3"
}
}
Git commit:
{
"name": "version_control",
"arguments": {
"operation": "git_commit",
"message": "feat: Add authentication module",
"files": ["src/auth.swift", "tests/auth_test.swift"]
}
}
Tool Response Format
Tool results are returned as JSON strings in the content field:
Success response:
{
"success": true,
"data": "Tool execution result",
"message": "Operation completed successfully"
}
Error response:
{
"success": false,
"error": "Error message",
"message": "Operation failed"
}
Multi-Turn Tool Calling
Complex tasks may require multiple tool calls. The conversation continues with tool results:
// Turn 1: User request
{"role": "user", "content": "Find and update the version number"}
// Turn 2: AI calls search tool
{"role": "assistant", "tool_calls": [{"function": {"name": "file_operations", "arguments": "{\"operation\":\"grep_search\",\"query\":\"version\"}"}}]}
// Turn 3: Tool result
{"role": "tool", "content": "Found in config.json: \"version\": \"1.0.0\""}
// Turn 4: AI calls edit tool
{"role": "assistant", "tool_calls": [{"function": {"name": "file_operations", "arguments": "{\"operation\":\"replace_string\",\"filePath\":\"config.json\",\"oldString\":\"\\\"version\\\": \\\"1.0.0\\\"\",\"newString\":\"\\\"version\\\": \\\"1.1.0\\\"\"}"}}]}
// Turn 5: Tool result
{"role": "tool", "content": "{\"success\": true}"}
// Turn 6: AI response
{"role": "assistant", "content": "Version number updated from 1.0.0 to 1.1.0"}
Tool Authorization
Some operations require user authorization:
- Auto-approved: Read operations, write operations inside working directory
- Require approval: Write operations outside working directory, destructive operations
When authorization is required, the AI can use the user_collaboration tool:
{
"name": "user_collaboration",
"arguments": {
"prompt": "May I delete the old backup files?",
"authorize_operation": "file_operations.delete_file"
}
}
Examples
Simple Chat
curl -X POST http://localhost:8080/api/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "What is 2+2?"}
]
}'
Streaming Response
curl -N -X POST http://localhost:8080/api/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Write a poem"}
],
"stream": true
}'
With SAM Tools
Note: SAM's built-in tools are automatically available. This example shows how to use them via the API:
curl -X POST http://localhost:8080/api/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Read the package.json file"}
]
}'
The AI will automatically invoke file_operations with operation: read_file.
For custom tool integrations:
curl -X POST http://localhost:8080/api/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "Search for authentication code"}
],
"tools": [
{
"type": "function",
"function": {
"name": "file_operations",
"description": "File operations",
"parameters": {
"type": "object",
"properties": {
"operation": {"type": "string", "enum": ["grep_search"]},
"query": {"type": "string"},
"isRegexp": {"type": "boolean"}
},
"required": ["operation"]
}
}
}
]
}'
Error Handling
Error Response Format:
{
"error": {
"message": "Invalid API key",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
Common Error Codes:
- invalid_request_error - Malformed request
- authentication_error - Invalid API key
- rate_limit_error - Too many requests
- server_error - Internal server error
Rate Limits
SAM does not impose rate limits for localhost access.
For remote access, configure rate limits in preferences.
SDK Examples
Python
import openai
openai.api_base = "http://localhost:8080/api"
openai.api_key = "not-needed-for-local"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
JavaScript
const response = await fetch('http://localhost:8080/api/chat/completions', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gpt-4',
messages: [{role: 'user', content: 'Hello'}]
})
});
const data = await response.json();
console.log(data.choices[0].message.content);
For more examples, see Developer's Guide.