2235 lines
82 KiB
YAML
2235 lines
82 KiB
YAML
openapi: 3.1.0
|
||
info:
|
||
title: Ollama API
|
||
version: 0.1.0
|
||
license:
|
||
name: MIT
|
||
url: https://opensource.org/licenses/MIT
|
||
description: |
|
||
OpenAPI specification for the Ollama HTTP API
|
||
servers:
|
||
- url: http://localhost:11434
|
||
description: Ollama
|
||
security: []
|
||
components:
|
||
securitySchemes:
|
||
bearerAuth:
|
||
type: http
|
||
scheme: bearer
|
||
bearerFormat: API Key
|
||
parameters:
|
||
DigestParam:
|
||
name: digest
|
||
in: path
|
||
required: true
|
||
description: SHA256 digest identifier, prefixed with `sha256:`
|
||
schema:
|
||
type: string
|
||
schemas:
|
||
ModelOptions:
|
||
type: object
|
||
description: Runtime options that control text generation
|
||
properties:
|
||
# Sampling Options
|
||
seed:
|
||
type: integer
|
||
description: Random seed used for reproducible outputs
|
||
temperature:
|
||
type: number
|
||
format: float
|
||
description: Controls randomness in generation (higher = more random)
|
||
top_k:
|
||
type: integer
|
||
description: Limits next token selection to the K most likely
|
||
top_p:
|
||
type: number
|
||
format: float
|
||
description: Cumulative probability threshold for nucleus sampling
|
||
min_p:
|
||
type: number
|
||
format: float
|
||
description: Minimum probability threshold for token selection
|
||
stop:
|
||
oneOf:
|
||
- type: string
|
||
- type: array
|
||
items:
|
||
type: string
|
||
description: Stop sequences that will halt generation
|
||
|
||
# Runtime Options
|
||
num_ctx:
|
||
type: integer
|
||
description: Context length size (number of tokens)
|
||
num_predict:
|
||
type: integer
|
||
description: Maximum number of tokens to generate
|
||
additionalProperties: true
|
||
GenerateRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
prompt:
|
||
type: string
|
||
description: Text for the model to generate a response from
|
||
suffix:
|
||
type: string
|
||
description: Used for fill-in-the-middle models, text that appears after the user prompt and before the model response
|
||
images:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Base64-encoded images for models that support image input
|
||
format:
|
||
description: Structured output format for the model to generate a response from. Supports either the string `"json"` or a JSON schema object.
|
||
oneOf:
|
||
- type: string
|
||
- type: object
|
||
system:
|
||
description: System prompt for the model to generate a response from
|
||
type: string
|
||
stream:
|
||
description: When true, returns a stream of partial responses
|
||
type: boolean
|
||
default: true
|
||
think:
|
||
$ref: "#/components/schemas/ThinkValue"
|
||
raw:
|
||
type: boolean
|
||
description: When true, returns the raw response from the model without any prompt templating
|
||
keep_alive:
|
||
oneOf:
|
||
- type: string
|
||
- type: number
|
||
description: Model keep-alive duration (for example `5m` or `0` to unload immediately)
|
||
options:
|
||
$ref: "#/components/schemas/ModelOptions"
|
||
logprobs:
|
||
type: boolean
|
||
description: Whether to return log probabilities of the output tokens
|
||
top_logprobs:
|
||
type: integer
|
||
description: Number of most likely tokens to return at each token position when logprobs are enabled
|
||
GenerateResponse:
|
||
type: object
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
created_at:
|
||
type: string
|
||
description: ISO 8601 timestamp of response creation
|
||
response:
|
||
type: string
|
||
description: The model's generated text response
|
||
thinking:
|
||
type: string
|
||
description: The model's generated thinking output
|
||
done:
|
||
type: boolean
|
||
description: Indicates whether generation has finished
|
||
done_reason:
|
||
type: string
|
||
description: Reason the generation stopped
|
||
total_duration:
|
||
type: integer
|
||
description: Time spent generating the response in nanoseconds
|
||
load_duration:
|
||
type: integer
|
||
description: Time spent loading the model in nanoseconds
|
||
prompt_eval_count:
|
||
type: integer
|
||
description: Number of input tokens in the prompt
|
||
prompt_eval_cached_count:
|
||
type: integer
|
||
description: Number of prompt tokens read from the cache
|
||
prompt_eval_duration:
|
||
type: integer
|
||
description: Time spent evaluating uncached prompt tokens in nanoseconds
|
||
eval_count:
|
||
type: integer
|
||
description: Number of output tokens generated in the response
|
||
eval_duration:
|
||
type: integer
|
||
description: Time spent generating tokens in nanoseconds
|
||
logprobs:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/Logprob"
|
||
description: Log probability information for the generated tokens when logprobs are enabled
|
||
GenerateStreamEvent:
|
||
type: object
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
created_at:
|
||
type: string
|
||
description: ISO 8601 timestamp of response creation
|
||
response:
|
||
type: string
|
||
description: The model's generated text response for this chunk
|
||
thinking:
|
||
type: string
|
||
description: The model's generated thinking output for this chunk
|
||
done:
|
||
type: boolean
|
||
description: Indicates whether the stream has finished
|
||
done_reason:
|
||
type: string
|
||
description: Reason streaming finished
|
||
total_duration:
|
||
type: integer
|
||
description: Time spent generating the response in nanoseconds
|
||
load_duration:
|
||
type: integer
|
||
description: Time spent loading the model in nanoseconds
|
||
prompt_eval_count:
|
||
type: integer
|
||
description: Number of input tokens in the prompt
|
||
prompt_eval_cached_count:
|
||
type: integer
|
||
description: Number of prompt tokens read from the cache
|
||
prompt_eval_duration:
|
||
type: integer
|
||
description: Time spent evaluating uncached prompt tokens in nanoseconds
|
||
eval_count:
|
||
type: integer
|
||
description: Number of output tokens generated in the response
|
||
eval_duration:
|
||
type: integer
|
||
description: Time spent generating tokens in nanoseconds
|
||
ChatMessage:
|
||
type: object
|
||
required: [role, content]
|
||
properties:
|
||
role:
|
||
type: string
|
||
enum: [system, user, assistant, tool]
|
||
description: Author of the message.
|
||
content:
|
||
type: string
|
||
description: Message text content
|
||
images:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Base64-encoded image content
|
||
description: Optional list of inline images for multimodal models
|
||
tool_calls:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/ToolCall"
|
||
description: Tool call requests produced by the model
|
||
ToolCall:
|
||
type: object
|
||
properties:
|
||
function:
|
||
type: object
|
||
required: [name]
|
||
properties:
|
||
name:
|
||
type: string
|
||
description: Name of the function to call
|
||
description:
|
||
type: string
|
||
description: What the function does
|
||
arguments:
|
||
type: object
|
||
description: JSON object of arguments to pass to the function
|
||
ToolDefinition:
|
||
type: object
|
||
required: [type, function]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [function]
|
||
description: Type of tool (always `function`)
|
||
function:
|
||
type: object
|
||
required: [name, parameters]
|
||
properties:
|
||
name:
|
||
type: string
|
||
description: Function name exposed to the model
|
||
description:
|
||
type: string
|
||
description: Human-readable description of the function
|
||
parameters:
|
||
type: object
|
||
description: JSON Schema for the function parameters
|
||
ChatRequest:
|
||
type: object
|
||
required: [model, messages]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
messages:
|
||
type: array
|
||
description: Chat history as an array of message objects (each with a role and content)
|
||
items:
|
||
$ref: "#/components/schemas/ChatMessage"
|
||
tools:
|
||
type: array
|
||
description: Optional list of function tools the model may call during the chat
|
||
items:
|
||
$ref: "#/components/schemas/ToolDefinition"
|
||
format:
|
||
oneOf:
|
||
- type: string
|
||
enum: [json]
|
||
- type: object
|
||
description: Format to return a response in. Can be `json` or a JSON schema
|
||
options:
|
||
$ref: "#/components/schemas/ModelOptions"
|
||
stream:
|
||
type: boolean
|
||
default: true
|
||
think:
|
||
$ref: "#/components/schemas/ThinkValue"
|
||
keep_alive:
|
||
oneOf:
|
||
- type: string
|
||
- type: number
|
||
description: Model keep-alive duration (for example `5m` or `0` to unload immediately)
|
||
logprobs:
|
||
type: boolean
|
||
description: Whether to return log probabilities of the output tokens
|
||
top_logprobs:
|
||
type: integer
|
||
description: Number of most likely tokens to return at each token position when logprobs are enabled
|
||
ChatResponse:
|
||
type: object
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name used to generate this message
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
description: Timestamp of response creation (ISO 8601)
|
||
message:
|
||
type: object
|
||
properties:
|
||
role:
|
||
type: string
|
||
enum: [assistant]
|
||
description: Always `assistant` for model responses
|
||
content:
|
||
type: string
|
||
description: Assistant message text
|
||
thinking:
|
||
type: string
|
||
description: Optional deliberate thinking trace when `think` is enabled
|
||
tool_calls:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/ToolCall"
|
||
description: Tool calls requested by the assistant
|
||
images:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Optional base64-encoded images in the response
|
||
done:
|
||
type: boolean
|
||
description: Indicates whether the chat response has finished
|
||
done_reason:
|
||
type: string
|
||
description: Reason the response finished
|
||
total_duration:
|
||
type: integer
|
||
description: Total time spent generating in nanoseconds
|
||
load_duration:
|
||
type: integer
|
||
description: Time spent loading the model in nanoseconds
|
||
prompt_eval_count:
|
||
type: integer
|
||
description: Number of tokens in the prompt
|
||
prompt_eval_cached_count:
|
||
type: integer
|
||
description: Number of prompt tokens read from the cache
|
||
prompt_eval_duration:
|
||
type: integer
|
||
description: Time spent evaluating uncached prompt tokens in nanoseconds
|
||
eval_count:
|
||
type: integer
|
||
description: Number of tokens generated in the response
|
||
eval_duration:
|
||
type: integer
|
||
description: Time spent generating tokens in nanoseconds
|
||
logprobs:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/Logprob"
|
||
description: Log probability information for the generated tokens when logprobs are enabled
|
||
ChatStreamEvent:
|
||
type: object
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name used for this stream event
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
description: When this chunk was created (ISO 8601)
|
||
message:
|
||
type: object
|
||
properties:
|
||
role:
|
||
type: string
|
||
description: Role of the message for this chunk
|
||
content:
|
||
type: string
|
||
description: Partial assistant message text
|
||
thinking:
|
||
type: string
|
||
description: Partial thinking text when `think` is enabled
|
||
tool_calls:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/ToolCall"
|
||
description: Partial tool calls, if any
|
||
images:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Partial base64-encoded images, when present
|
||
done:
|
||
type: boolean
|
||
description: True for the final event in the stream
|
||
ThinkValue:
|
||
description: Controls a model's thinking output. Use `/api/show` to discover the supported values and default for the selected model. `true` requests thinking, `false` requests no thinking output, and `null` uses the model default. String values are model-defined; supported names must match `/api/show` exactly. Numbers are not supported.
|
||
oneOf:
|
||
- type: boolean
|
||
- type: string
|
||
- type: "null"
|
||
Thinking:
|
||
type: object
|
||
required: [values, default]
|
||
description: Thinking controls advertised by a model. Models without thinking metadata omit this field.
|
||
properties:
|
||
values:
|
||
type: array
|
||
description: Values explicitly supported by the model's `think` request field. Booleans represent on/off controls and strings represent model-defined levels. An array containing only `false` identifies a model without thinking support.
|
||
items:
|
||
oneOf:
|
||
- type: boolean
|
||
- type: string
|
||
default:
|
||
description: Value used when `think` is not set. For models that use this metadata for named thinking levels, unsupported names resolve to this default.
|
||
oneOf:
|
||
- type: boolean
|
||
- type: string
|
||
StatusEvent:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
description: Human-readable status message
|
||
digest:
|
||
type: string
|
||
description: Content digest associated with the status, if applicable
|
||
total:
|
||
type: integer
|
||
description: Total number of bytes expected for the operation
|
||
completed:
|
||
type: integer
|
||
description: Number of bytes transferred so far
|
||
StatusResponse:
|
||
type: object
|
||
properties:
|
||
status:
|
||
type: string
|
||
description: Current status message
|
||
EmbedRequest:
|
||
type: object
|
||
required: [model, input]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
input:
|
||
oneOf:
|
||
- type: string
|
||
- type: array
|
||
items:
|
||
type: string
|
||
description: Text or array of texts to generate embeddings for
|
||
truncate:
|
||
type: boolean
|
||
default: true
|
||
description: If true, truncate inputs that exceed the context window. If false, returns an error.
|
||
dimensions:
|
||
type: integer
|
||
description: Number of dimensions to generate embeddings for
|
||
keep_alive:
|
||
type: string
|
||
description: Model keep-alive duration
|
||
options:
|
||
$ref: "#/components/schemas/ModelOptions"
|
||
EmbedResponse:
|
||
type: object
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model that produced the embeddings
|
||
embeddings:
|
||
type: array
|
||
items:
|
||
type: array
|
||
items:
|
||
type: number
|
||
description: Array of vector embeddings
|
||
total_duration:
|
||
type: integer
|
||
description: Total time spent generating in nanoseconds
|
||
load_duration:
|
||
type: integer
|
||
description: Load time in nanoseconds
|
||
prompt_eval_count:
|
||
type: integer
|
||
description: Number of input tokens processed to generate embeddings
|
||
CreateRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Name for the model to create
|
||
from:
|
||
type: string
|
||
description: Existing model to create from
|
||
template:
|
||
type: string
|
||
description: Prompt template to use for the model
|
||
renderer:
|
||
type: string
|
||
description: Name of the renderer for the model
|
||
parser:
|
||
type: string
|
||
description: Name of the parser for the model
|
||
files:
|
||
type: object
|
||
additionalProperties:
|
||
type: string
|
||
description: Source file names mapped to their SHA-256 digests. Split GGUF models must include each shard under its original split filename.
|
||
draft_files:
|
||
type: object
|
||
additionalProperties:
|
||
type: string
|
||
description: Draft source file names mapped to their SHA-256 digests
|
||
license:
|
||
oneOf:
|
||
- type: string
|
||
- type: array
|
||
items:
|
||
type: string
|
||
description: License string or list of licenses for the model
|
||
system:
|
||
type: string
|
||
description: System prompt to embed in the model
|
||
parameters:
|
||
type: object
|
||
description: Key-value parameters for the model
|
||
messages:
|
||
description: Message history to use for the model
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/ChatMessage"
|
||
quantize:
|
||
type: string
|
||
description: Quantization level to apply during import (e.g. `nvfp4`)
|
||
draft_quantize:
|
||
type: string
|
||
description: Quantization level to apply to draft weights during import
|
||
requires:
|
||
type: string
|
||
description: Minimum Ollama version required by the model
|
||
capabilities:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Capabilities to add without removing inherited or inferred capabilities (e.g. `decision` for compatible decision models)
|
||
stream:
|
||
type: boolean
|
||
default: true
|
||
description: Stream status updates
|
||
CopyRequest:
|
||
type: object
|
||
required: [source, destination]
|
||
properties:
|
||
source:
|
||
type: string
|
||
description: Existing model name to copy from
|
||
destination:
|
||
type: string
|
||
description: New model name to create
|
||
DeleteRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name to delete
|
||
PullRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Name of the model to download
|
||
insecure:
|
||
type: boolean
|
||
description: Allow downloading over insecure connections
|
||
stream:
|
||
type: boolean
|
||
default: true
|
||
description: Stream progress updates
|
||
PushRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Name of the model to publish
|
||
insecure:
|
||
type: boolean
|
||
description: Allow publishing over insecure connections
|
||
stream:
|
||
type: boolean
|
||
default: true
|
||
description: Stream progress updates
|
||
ShowRequest:
|
||
type: object
|
||
required: [model]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name to show
|
||
verbose:
|
||
type: boolean
|
||
description: If true, includes large verbose fields in the response.
|
||
ShowResponse:
|
||
type: object
|
||
properties:
|
||
thinking:
|
||
$ref: "#/components/schemas/Thinking"
|
||
parameters:
|
||
type: string
|
||
description: Model parameter settings serialized as text
|
||
license:
|
||
type: string
|
||
description: The license of the model
|
||
modified_at:
|
||
type: string
|
||
description: Last modified timestamp in ISO 8601 format
|
||
details:
|
||
type: object
|
||
description: High-level model details
|
||
template:
|
||
type: string
|
||
description: The template used by the model to render prompts
|
||
capabilities:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: List of supported features
|
||
model_info:
|
||
type: object
|
||
description: Additional model metadata
|
||
ModelSummary:
|
||
type: object
|
||
description: Summary information for a locally available model
|
||
properties:
|
||
name:
|
||
type: string
|
||
description: Model name
|
||
model:
|
||
type: string
|
||
description: Model name
|
||
remote_model:
|
||
type: string
|
||
description: Name of the upstream model, if the model is remote
|
||
remote_host:
|
||
type: string
|
||
description: URL of the upstream Ollama host, if the model is remote
|
||
modified_at:
|
||
type: string
|
||
description: Last modified timestamp in ISO 8601 format
|
||
size:
|
||
type: integer
|
||
description: Total size of the model on disk in bytes
|
||
digest:
|
||
type: string
|
||
description: SHA256 digest identifier of the model contents
|
||
details:
|
||
type: object
|
||
description: Additional information about the model's format and family
|
||
properties:
|
||
format:
|
||
type: string
|
||
description: Model file format (for example `gguf`)
|
||
family:
|
||
type: string
|
||
description: Primary model family (for example `llama`)
|
||
families:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: All families the model belongs to, when applicable
|
||
parameter_size:
|
||
type: string
|
||
description: Approximate parameter count label (for example `7B`, `13B`)
|
||
quantization_level:
|
||
type: string
|
||
description: Quantization level used (for example `Q4_0`)
|
||
ListResponse:
|
||
type: object
|
||
properties:
|
||
models:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/ModelSummary"
|
||
Ps:
|
||
type: object
|
||
properties:
|
||
name:
|
||
type: string
|
||
description: Name of the running model
|
||
model:
|
||
type: string
|
||
description: Name of the running model
|
||
size:
|
||
type: integer
|
||
description: Size of the model in bytes
|
||
digest:
|
||
type: string
|
||
description: SHA256 digest of the model
|
||
details:
|
||
type: object
|
||
description: Model details such as format and family
|
||
expires_at:
|
||
type: string
|
||
description: Time when the model will be unloaded
|
||
size_vram:
|
||
type: integer
|
||
description: VRAM usage in bytes
|
||
context_length:
|
||
type: integer
|
||
description: Context length for the running model
|
||
PsResponse:
|
||
type: object
|
||
properties:
|
||
models:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/Ps"
|
||
description: Currently running models
|
||
WebSearchRequest:
|
||
type: object
|
||
required: [query]
|
||
properties:
|
||
query:
|
||
type: string
|
||
description: Search query string
|
||
max_results:
|
||
type: integer
|
||
minimum: 1
|
||
maximum: 10
|
||
default: 5
|
||
description: Maximum number of results to return
|
||
WebSearchResult:
|
||
type: object
|
||
properties:
|
||
title:
|
||
type: string
|
||
description: Page title of the result
|
||
url:
|
||
type: string
|
||
format: uri
|
||
description: Resolved URL for the result
|
||
content:
|
||
type: string
|
||
description: Extracted text content snippet
|
||
WebSearchResponse:
|
||
type: object
|
||
properties:
|
||
results:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/WebSearchResult"
|
||
description: Array of matching search results
|
||
WebFetchRequest:
|
||
type: object
|
||
required: [url]
|
||
properties:
|
||
url:
|
||
type: string
|
||
format: uri
|
||
description: The URL to fetch
|
||
WebFetchResponse:
|
||
type: object
|
||
properties:
|
||
title:
|
||
type: string
|
||
description: Title of the fetched page
|
||
content:
|
||
type: string
|
||
description: Extracted page content
|
||
links:
|
||
type: array
|
||
items:
|
||
type: string
|
||
format: uri
|
||
description: Links found on the page
|
||
VersionResponse:
|
||
type: object
|
||
properties:
|
||
version:
|
||
type: string
|
||
description: Version of Ollama
|
||
TokenLogprob:
|
||
type: object
|
||
description: Log probability information for a single token alternative
|
||
properties:
|
||
token:
|
||
type: string
|
||
description: The text representation of the token
|
||
logprob:
|
||
type: number
|
||
description: The log probability of this token
|
||
bytes:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
description: The raw byte representation of the token
|
||
Logprob:
|
||
type: object
|
||
description: Log probability information for a generated token
|
||
properties:
|
||
token:
|
||
type: string
|
||
description: The text representation of the token
|
||
logprob:
|
||
type: number
|
||
description: The log probability of this token
|
||
bytes:
|
||
type: array
|
||
items:
|
||
type: integer
|
||
description: The raw byte representation of the token
|
||
top_logprobs:
|
||
type: array
|
||
items:
|
||
$ref: "#/components/schemas/TokenLogprob"
|
||
description: Most likely tokens and their log probabilities at this position
|
||
SystemOneContent:
|
||
description: A nonempty string, or an object or array serialized as JSON text. Not interpreted as chat messages or multimodal input.
|
||
oneOf:
|
||
- type: string
|
||
pattern: '\S'
|
||
- type: object
|
||
additionalProperties: true
|
||
- type: array
|
||
items: {}
|
||
SystemOneChoiceQuestion:
|
||
title: Choice
|
||
type: object
|
||
required: [type, instructions, criteria]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [choice]
|
||
instructions:
|
||
$ref: "#/components/schemas/SystemOneContent"
|
||
criteria:
|
||
type: object
|
||
description: Option keys mapped to descriptions, or null for a bare label. Keys must not be blank; ties follow the model's option order. The option limit depends on the model.
|
||
minProperties: 2
|
||
maxProperties: 255
|
||
propertyNames:
|
||
pattern: '\S'
|
||
additionalProperties:
|
||
type: [string, "null"]
|
||
SystemOneNoulQuestion:
|
||
title: Noul
|
||
type: object
|
||
required: [type, instructions]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [noul]
|
||
instructions:
|
||
$ref: "#/components/schemas/SystemOneContent"
|
||
criteria:
|
||
type: object
|
||
description: Optional descriptions for the two outcomes. Omitted entries use model-specific defaults.
|
||
properties:
|
||
"false":
|
||
type: string
|
||
default: "No"
|
||
"true":
|
||
type: string
|
||
default: "Yes"
|
||
additionalProperties: false
|
||
SystemOneScoreQuestion:
|
||
title: Score
|
||
type: object
|
||
required: [type, instructions, criteria]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [score]
|
||
instructions:
|
||
$ref: "#/components/schemas/SystemOneContent"
|
||
criteria:
|
||
type: array
|
||
description: Descriptions ordered from the lowest score (index 0) to the highest. Defines a scale from 0 to the number of criteria minus 1. The maximum number of levels depends on the model.
|
||
minItems: 2
|
||
maxItems: 26
|
||
items:
|
||
type: string
|
||
SystemOneRequest:
|
||
type: object
|
||
required: [model, state, questions]
|
||
properties:
|
||
model:
|
||
type: string
|
||
pattern: '\S'
|
||
description: Local model trained for System One, such as nimble. Requires compatible GGUF weights and a scoring-capable runner; cloud and MLX/Safetensors models are not supported.
|
||
state:
|
||
$ref: "#/components/schemas/SystemOneContent"
|
||
images:
|
||
type: array
|
||
description: Base64-encoded images shared by all questions, in request order. Requires Clef or Clef Flash with vision weights. URLs and data URLs are not supported.
|
||
items:
|
||
type: string
|
||
format: byte
|
||
questions:
|
||
type: object
|
||
description: Named questions about the shared state. Answers are not passed to later questions.
|
||
minProperties: 1
|
||
maxProperties: 64
|
||
propertyNames:
|
||
pattern: '\S'
|
||
additionalProperties:
|
||
oneOf:
|
||
- $ref: "#/components/schemas/SystemOneChoiceQuestion"
|
||
- $ref: "#/components/schemas/SystemOneNoulQuestion"
|
||
- $ref: "#/components/schemas/SystemOneScoreQuestion"
|
||
keep_alive:
|
||
oneOf:
|
||
- type: string
|
||
- type: number
|
||
description: How long to keep the model loaded after the request, as a duration string (such as 5m) or seconds. Zero unloads after the request; a negative value keeps it loaded. Defaults to the server's keep-alive setting (5m unless configured otherwise).
|
||
SystemOneProbabilities:
|
||
type: object
|
||
description: Probabilities normalized over the supplied candidates, summing to 1 subject to floating-point precision.
|
||
additionalProperties:
|
||
type: number
|
||
minimum: 0
|
||
maximum: 1
|
||
SystemOneConfidence:
|
||
type: number
|
||
minimum: 0
|
||
maximum: 1
|
||
description: Distribution concentration, calculated as 1 - H(p) / ln(N), where H(p) is entropy and N is the candidate count. Zero means uniform probabilities; values near 1 mean one candidate dominates. Not calibrated correctness.
|
||
SystemOneChoiceAnswer:
|
||
title: Choice
|
||
type: object
|
||
required: [type, choice, probabilities, confidence]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [choice]
|
||
choice:
|
||
type: string
|
||
description: Option key with the highest probability. Ties follow the model's option order.
|
||
probabilities:
|
||
$ref: "#/components/schemas/SystemOneProbabilities"
|
||
confidence:
|
||
$ref: "#/components/schemas/SystemOneConfidence"
|
||
SystemOneNoulAnswer:
|
||
title: Noul
|
||
type: object
|
||
required: [type, noul]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [noul]
|
||
noul:
|
||
type: number
|
||
minimum: 0
|
||
maximum: 1
|
||
description: Probability of true among the false and true candidates. This is a number, not a Boolean.
|
||
SystemOneScoreAnswer:
|
||
title: Score
|
||
type: object
|
||
required: [type, score, legend, probabilities, confidence]
|
||
properties:
|
||
type:
|
||
type: string
|
||
enum: [score]
|
||
score:
|
||
type: number
|
||
minimum: 0
|
||
maximum: 25
|
||
description: Probability-weighted average of the zero-based criterion indices, from 0 to the number of criteria minus 1. Not rounded to a level or normalized to 0–1.
|
||
legend:
|
||
type: object
|
||
description: Zero-based indices as string keys mapped to the criterion descriptions.
|
||
additionalProperties:
|
||
type: string
|
||
probabilities:
|
||
$ref: "#/components/schemas/SystemOneProbabilities"
|
||
description: Probabilities keyed by zero-based criterion indices as strings.
|
||
confidence:
|
||
$ref: "#/components/schemas/SystemOneConfidence"
|
||
SystemOneResponse:
|
||
type: object
|
||
required: [model, answers, usage]
|
||
properties:
|
||
model:
|
||
type: string
|
||
description: Model name from the request.
|
||
answers:
|
||
type: object
|
||
description: Answers keyed by the question names in the request.
|
||
additionalProperties:
|
||
oneOf:
|
||
- $ref: "#/components/schemas/SystemOneChoiceAnswer"
|
||
- $ref: "#/components/schemas/SystemOneNoulAnswer"
|
||
- $ref: "#/components/schemas/SystemOneScoreAnswer"
|
||
usage:
|
||
type: object
|
||
required: [input_tokens, output_tokens]
|
||
properties:
|
||
input_tokens:
|
||
type: integer
|
||
minimum: 0
|
||
description: Total evaluated input tokens, including image positions. Shared context is counted again when the model scores questions separately.
|
||
output_tokens:
|
||
type: integer
|
||
minimum: 0
|
||
description: Tokens generated internally for scoring, including prefix preparation and retries. May exceed the question count; not the length of the JSON response.
|
||
UsageMetrics:
|
||
type: object
|
||
required: [request_count]
|
||
properties:
|
||
request_count:
|
||
type: integer
|
||
minimum: 0
|
||
description: Number of recorded requests.
|
||
usage_usd:
|
||
type: number
|
||
description: Total value of the requests in USD, including usage covered by your plan and usage paid from purchased credits.
|
||
input_tokens:
|
||
type: integer
|
||
description: Recorded input tokens, including cached input tokens.
|
||
cached_input_tokens:
|
||
type: integer
|
||
description: Recorded input tokens read from cache, already included in input_tokens.
|
||
output_tokens:
|
||
type: integer
|
||
description: Recorded output tokens.
|
||
UsageBucket:
|
||
allOf:
|
||
- $ref: "#/components/schemas/UsageMetrics"
|
||
- type: object
|
||
required: [from, until]
|
||
properties:
|
||
from:
|
||
type: string
|
||
format: date-time
|
||
description: Start of the bucket in UTC, inclusive.
|
||
until:
|
||
type: string
|
||
format: date-time
|
||
description: End of the bucket in UTC, exclusive.
|
||
partial:
|
||
type: boolean
|
||
description: Present and true for the current hour or day, which is still in progress.
|
||
UsageResponse:
|
||
type: object
|
||
required: [range, scope, granularity, from, until, totals, buckets]
|
||
properties:
|
||
range:
|
||
type: string
|
||
enum: [24h, 7d, 30d]
|
||
description: Selected time range.
|
||
scope:
|
||
type: string
|
||
enum: [self, team]
|
||
description: Selected usage scope.
|
||
granularity:
|
||
type: string
|
||
enum: [hour, day]
|
||
description: "Set automatically: hour for 24h, day for 7d and 30d."
|
||
from:
|
||
type: string
|
||
format: date-time
|
||
description: Start of the range in UTC, inclusive.
|
||
until:
|
||
type: string
|
||
format: date-time
|
||
description: End of the range in UTC, exclusive.
|
||
totals:
|
||
$ref: "#/components/schemas/UsageMetrics"
|
||
description: Usage across the entire range.
|
||
buckets:
|
||
type: array
|
||
description: Usage in chronological order, including buckets with no recorded requests.
|
||
items:
|
||
$ref: "#/components/schemas/UsageBucket"
|
||
IncludedBalance:
|
||
title: Included credits
|
||
type: object
|
||
required: [balance_usd, allowance_usd, period]
|
||
properties:
|
||
balance_usd:
|
||
type: number
|
||
description: Remaining included credits in USD.
|
||
allowance_usd:
|
||
type: number
|
||
description: Included credits available for the full period in USD.
|
||
period:
|
||
type: object
|
||
required: [from, until]
|
||
properties:
|
||
from:
|
||
type: string
|
||
format: date-time
|
||
description: Start of the included period in UTC, inclusive.
|
||
until:
|
||
type: string
|
||
format: date-time
|
||
description: End of the included period in UTC, exclusive.
|
||
LegacyBalanceLimit:
|
||
type: object
|
||
required: [remaining_percent, resets_at]
|
||
properties:
|
||
remaining_percent:
|
||
type: number
|
||
minimum: 0
|
||
maximum: 100
|
||
description: Percentage of the limit remaining.
|
||
resets_at:
|
||
type: string
|
||
format: date-time
|
||
description: Next reset time in UTC.
|
||
LegacyIncludedBalance:
|
||
title: Legacy plan limits
|
||
type: object
|
||
required: [session, weekly]
|
||
properties:
|
||
session:
|
||
$ref: "#/components/schemas/LegacyBalanceLimit"
|
||
weekly:
|
||
$ref: "#/components/schemas/LegacyBalanceLimit"
|
||
BalanceResponse:
|
||
type: object
|
||
required: [included, purchased]
|
||
properties:
|
||
included:
|
||
oneOf:
|
||
- $ref: "#/components/schemas/IncludedBalance"
|
||
- $ref: "#/components/schemas/LegacyIncludedBalance"
|
||
purchased:
|
||
type: object
|
||
required: [balance_usd]
|
||
properties:
|
||
balance_usd:
|
||
type: number
|
||
description: Remaining unexpired purchased credits in USD.
|
||
ErrorResponse:
|
||
type: object
|
||
properties:
|
||
error:
|
||
type: string
|
||
description: Error message describing what went wrong
|
||
paths:
|
||
/v1/systemone:
|
||
post:
|
||
summary: Answer typed questions
|
||
description: |
|
||
Answer choice, yes/no, and scoring questions with a local System One model. Requires Ollama v0.35.0 or later. See the [decision guide](/capabilities/decision) for examples.
|
||
operationId: systemone
|
||
x-mint:
|
||
href: /api/systemone
|
||
metadata:
|
||
title: System One
|
||
sidebarTitle: /v1/systemone
|
||
content: |
|
||
<Note>
|
||
Currently available locally in Ollama.
|
||
</Note>
|
||
|
||
- Returns one JSON response; streaming, video, tools, and generation controls are not supported.
|
||
- Requests without images must fit within 64 KiB; requests with images must fit within 32 MiB, including base64 and JSON. The complete input must fit the loaded context window. Nimble and Tev also require two token positions for scoring. Input is never truncated.
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Choose a label
|
||
source: |
|
||
curl http://localhost:11434/v1/systemone \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{
|
||
"model": "nimble",
|
||
"state": "Our checkout has returned 500 errors since 9am.",
|
||
"questions": {
|
||
"label": {
|
||
"type": "choice",
|
||
"instructions": "Which label fits this ticket?",
|
||
"criteria": {
|
||
"billing": "Payments and refunds",
|
||
"bug": "Software errors",
|
||
"account": "Login and account access"
|
||
}
|
||
}
|
||
}
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/SystemOneRequest"
|
||
example:
|
||
model: nimble
|
||
state: Our checkout has returned 500 errors since 9am.
|
||
questions:
|
||
label:
|
||
type: choice
|
||
instructions: Which label fits this ticket?
|
||
criteria:
|
||
billing: Payments and refunds
|
||
bug: Software errors
|
||
account: Login and account access
|
||
responses:
|
||
"200":
|
||
description: Answers and token usage for all questions. Example probabilities and confidence are rounded to four decimal places; results and usage can vary with the model and server configuration.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/SystemOneResponse"
|
||
example:
|
||
model: nimble
|
||
answers:
|
||
label:
|
||
type: choice
|
||
choice: bug
|
||
probabilities:
|
||
billing: 0.0125
|
||
bug: 0.9781
|
||
account: 0.0093
|
||
confidence: 0.8906
|
||
usage:
|
||
input_tokens: 174
|
||
output_tokens: 1
|
||
"400":
|
||
description: Invalid request, unsupported model or runner, or a rendered prompt that exceeds the loaded context. Cloud models are rejected.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"404":
|
||
description: Local model not found. Download the model before making a request.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"413":
|
||
description: Request body exceeds 64 KiB without images or 32 MiB with images.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
example:
|
||
error: request body must not exceed 64 KiB without images
|
||
"500":
|
||
description: Model loading, rendering, or scoring failed.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
/api/generate:
|
||
post:
|
||
summary: Generate a response
|
||
description: Generates a response for the provided prompt
|
||
operationId: generate
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/generate
|
||
href: /api/generate
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"prompt": "Why is the sky blue?"
|
||
}'
|
||
- lang: bash
|
||
label: Non-streaming
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"prompt": "Why is the sky blue?",
|
||
"stream": false
|
||
}'
|
||
- lang: bash
|
||
label: Thinking
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gpt-oss",
|
||
"prompt": "What is 1+1?",
|
||
"think": "low",
|
||
"stream": false
|
||
}'
|
||
- lang: bash
|
||
label: With options
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"prompt": "Why is the sky blue?",
|
||
"options": {
|
||
"temperature": 0.8,
|
||
"top_p": 0.9,
|
||
"seed": 42
|
||
}
|
||
}'
|
||
- lang: bash
|
||
label: Structured outputs
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"prompt": "What are the populations of the United States and Canada?",
|
||
"stream": false,
|
||
"format": {
|
||
"type": "object",
|
||
"properties": {
|
||
"countries": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"properties": {
|
||
"country": {"type": "string"},
|
||
"population": {"type": "integer"}
|
||
},
|
||
"required": ["country", "population"]
|
||
}
|
||
}
|
||
},
|
||
"required": ["countries"]
|
||
}
|
||
}'
|
||
- lang: bash
|
||
label: With images
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"prompt": "What is in this picture?",
|
||
"images": ["iVBORw0KGgoAAAANSUhEUgAAAG0AAABmCAYAAADBPx+VAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA3VSURBVHgB7Z27r0zdG8fX743i1bi1ikMoFMQloXRpKFFIqI7LH4BEQ+NWIkjQuSWCRIEoULk0gsK1kCBI0IhrQVT7tz/7zZo888yz1r7MnDl7z5xvsjkzs2fP3uu71nNfa7lkAsm7d++Sffv2JbNmzUqcc8m0adOSzZs3Z+/XES4ZckAWJEGWPiCxjsQNLWmQsWjRIpMseaxcuTKpG/7HP27I8P79e7dq1ars/yL4/v27S0ejqwv+cUOGEGGpKHR37tzJCEpHV9tnT58+dXXCJDdECBE2Ojrqjh071hpNECjx4cMHVycM1Uhbv359B2F79+51586daxN/+pyRkRFXKyRDAqxEp4yMlDDzXG1NPnnyJKkThoK0VFd1ELZu3TrzXKxKfW7dMBQ6bcuWLW2v0VlHjx41z717927ba22U9APcw7Nnz1oGEPeL3m3p2mTAYYnFmMOMXybPPXv2bNIPpFZr1NHn4HMw0KRBjg9NuRw95s8PEcz/6DZELQd/09C9QGq5RsmSRybqkwHGjh07OsJSsYYm3ijPpyHzoiacg35MLdDSIS/O1yM778jOTwYUkKNHWUzUWaOsylE00MyI0fcnOwIdjvtNdW/HZwNLGg+sR1kMepSNJXmIwxBZiG8tDTpEZzKg0GItNsosY8USkxDhD0Rinuiko2gfL/RbiD2LZAjU9zKQJj8RDR0vJBR1/Phx9+PHj9Z7REF4nTZkxzX4LCXHrV271qXkBAPGfP/atWvu/PnzHe4C97F48eIsRLZ9+3a3f/9+87dwP1JxaF7/3r17ba+5l4EcaVo0lj3SBq5kGTJSQmLWMjgYNei2GPT1MuMqGTDEFHzeQSP2wi/jGnkmPJ/nhccs44jvDAxpVcxnq0F6eT8h4ni/iIWpR5lPyA6ETkNXoSukvpJAD3AsXLiwpZs49+fPn5ke4j10TqYvegSfn0OnafC+Tv9ooA/JPkgQysqQNBzagXY55nO/oa1F7qvIPWkRL12WRpMWUvpVDYmxAPehxWSe8ZEXL20sadYIozfmNch4QJPAfeJgW3rNsnzphBKNJM2KKODo1rVOMRYik5ETy3ix4qWNI81qAAirizgMIc+yhTytx0JWZuNI03qsrgWlGtwjoS9XwgUhWGyhUaRZZQNNIEwCiXD16tXcAHUs79co0vSD8rrJCIW98pzvxpAWyyo3HYwqS0+H0BjStClcZJT5coMm6D2LOF8TolGJtK9fvyZpyiC5ePFi9nc/oJU4eiEP0jVoAnHa9wyJycITMP78+eMeP37sXrx44d6+fdt6f82aNdkx1pg9e3Zb5W+RSRE+n+VjksQWifvVaTKFhn5O8my63K8Qabdv33b379/PiAP//vuvW7BggZszZ072/+TJk91YgkafPn166zXB1rQHFvouAWHq9z3SEevSUerqCn2/dDCeta2jxYbr69evk4MHDyY7d+7MjhMnTiTPnz9Pfv/+nfQT2ggpO2dMF8cghuoM7Ygj5iWCqRlGFml0QC/ftGmTmzt3rmsaKDsgBSPh0/8yPeLLBihLkOKJc0jp8H8vUzcxIA1k6QJ/c78tWEyj5P3o4u9+jywNPdJi5rAH9x0KHcl4Hg570eQp3+vHXGyrmEeigzQsQsjavXt38ujRo44LQuDDhw+TW7duRS1HGgMxhNXHgflaNTOsHyKvHK5Ijo2jbFjJBQK9YwFd6RVMzfgRBmEfP37suBBm/p49e1qjEP2mwTViNRo0VJWH1deMXcNK08uUjVUu7s/zRaL+oLNxz1bpANco4npUgX4G2eFbpDFyQoQxojBCpEGSytmOH8qrH5Q9vuzD6ofQylkCUmh8DBAr+q8JCyVNtWQIidKQE9wNtLSQnS4jDSsxNHogzFuQBw4cyM61UKVsjfr3ooBkPSqqQHesUPWVtzi9/vQi1T+rJj7WiTz4Pt/l3LxUkr5P2VYZaZ4URpsE+st/dujQoaBBYokbrz/8TJNQYLSonrPS9kUaSkPeZyj1AWSj+d+VBoy1pIWVNed8P0Ll/ee5HdGRhrHhR5GGN0r4LGZBaj8oFDJitBTJzIZgFcmU0Y8ytWMZMzJOaXUSrUs5RxKnrxmbb5YXO9VGUhtpXldhEUogFr3IzIsvlpmdosVcGVGXFWp2oU9kLFL3dEkSz6NHEY1sjSRdIuDFWEhd8KxFqsRi1uM/nz9/zpxnwlESONdg6dKlbsaMGS4EHFHtjFIDHwKOo46l4TxSuxgDzi+rE2jg+BaFruOX4HXa0Nnf1lwAPufZeF8/r6zD97WK2qFnGjBxTw5qNGPxT+5T/r7/7RawFC3j4vTp09koCxkeHjqbHJqArmH5UrFKKksnxrK7FuRIs8STfBZv+luugXZ2pR/pP9Ois4z+TiMzUUkUjD0iEi1fzX8GmXyuxUBRcaUfykV0YZnlJGKQpOiGB76x5GeWkWWJc3mOrK6S7xdND+W5N6XyaRgtWJFe13GkaZnKOsYqGdOVVVbGupsyA/l7emTLHi7vwTdirNEt0qxnzAvBFcnQF16xh/TMpUuXHDowhlA9vQVraQhkudRdzOnK+04ZSP3DUhVSP61YsaLtd/ks7ZgtPcXqPqEafHkdqa84X6aCeL7YWlv6edGFHb+ZFICPlljHhg0bKuk0CSvVznWsotRu433alNdFrqG45ejoaPCaUkWERpLXjzFL2Rpllp7PJU2a/v7Ab8N05/9t27Z16KUqoFGsxnI9EosS2niSYg9SpU6B4JgTrvVW1flt1sT+0ADIJU2maXzcUTraGCRaL1Wp9rUMk16PMom8QhruxzvZIegJjFU7LLCePfS8uaQdPny4jTTL0dbee5mYokQsXTIWNY46kuMbnt8Kmec+LGWtOVIl9cT1rCB0V8WqkjAsRwta93TbwNYoGKsUSChN44lgBNCoHLHzquYKrU6qZ8lolCIN0Rh6cP0Q3U6I6IXILYOQI513hJaSKAorFpuHXJNfVlpRtmYBk1Su1obZr5dnKAO+L10Hrj3WZW+E3qh6IszE37F6EB+68mGpvKm4eb9bFrlzrok7fvr0Kfv727dvWRmdVTJHw0qiiCUSZ6wCK+7XL/AcsgNyL74DQQ730sv78Su7+t/A36MdY0sW5o40ahslXr58aZ5HtZB8GH64m9EmMZ7FpYw4T6QnrZfgenrhFxaSiSGXtPnz57e9TkNZLvTjeqhr734CNtrK41L40sUQckmj1lGKQ0rC37x544r8eNXRpnVE3ZZY7zXo8NomiO0ZUCj2uHz58rbXoZ6gc0uA+F6ZeKS/jhRDUq8MKrTho9fEkihMmhxtBI1DxKFY9XLpVcSkfoi8JGnToZO5sU5aiDQIW716ddt7ZLYtMQlhECdBGXZZMWldY5BHm5xgAroWj4C0hbYkSc/jBmggIrXJWlZM6pSETsEPGqZOndr2uuuR5rF169a2HoHPdurUKZM4CO1WTPqaDaAd+GFGKdIQkxAn9RuEWcTRyN2KSUgiSgF5aWzPTeA/lN5rZubMmR2bE4SIC4nJoltgAV/dVefZm72AtctUCJU2CMJ327hxY9t7EHbkyJFseq+EJSY16RPo3Dkq1kkr7+q0bNmyDuLQcZBEPYmHVdOBiJyIlrRDq41YPWfXOxUysi5fvtyaj+2BpcnsUV/oSoEMOk2CQGlr4ckhBwaetBhjCwH0ZHtJROPJkyc7UjcYLDjmrH7ADTEBXFfOYmB0k9oYBOjJ8b4aOYSe7QkKcYhFlq3QYLQhSidNmtS2RATwy8YOM3EQJsUjKiaWZ+vZToUQgzhkHXudb/PW5YMHD9yZM2faPsMwoc7RciYJXbGuBqJ1UIGKKLv915jsvgtJxCZDubdXr165mzdvtr1Hz5LONA8jrUwKPqsmVesKa49S3Q4WxmRPUEYdTjgiUcfUwLx589ySJUva3oMkP6IYddq6HMS4o55xBJBUeRjzfa4Zdeg56QZ43LhxoyPo7Lf1kNt7oO8wWAbNwaYjIv5lhyS7kRf96dvm5Jah8vfvX3flyhX35cuX6HfzFHOToS1H4BenCaHvO8pr8iDuwoUL7tevX+b5ZdbBair0xkFIlFDlW4ZknEClsp/TzXyAKVOmmHWFVSbDNw1l1+4f90U6IY/q4V27dpnE9bJ+v87QEydjqx/UamVVPRG+mwkNTYN+9tjkwzEx+atCm/X9WvWtDtAb68Wy9LXa1UmvCDDIpPkyOQ5ZwSzJ4jMrvFcr0rSjOUh+GcT4LSg5ugkW1Io0/SCDQBojh0hPlaJdah+tkVYrnTZowP8iq1F1TgMBBauufyB33x1v+NWFYmT5KmppgHC+NkAgbmRkpD3yn9QIseXymoTQFGQmIOKTxiZIWpvAatenVqRVXf2nTrAWMsPnKrMZHz6bJq5jvce6QK8J1cQNgKxlJapMPdZSR64/UivS9NztpkVEdKcrs5alhhWP9NeqlfWopzhZScI6QxseegZRGeg5a8C3Re1Mfl1ScP36ddcUaMuv24iOJtz7sbUjTS4qBvKmstYJoUauiuD3k5qhyr7QdUHMeCgLa1Ear9NquemdXgmum4fvJ6w1lqsuDhNrg1qSpleJK7K3TF0Q2jSd94uSZ60kK1e3qyVpQK6PVWXp2/FC3mp6jBhKKOiY2h3gtUV64TWM6wDETRPLDfSakXmH3w8g9Jlug8ZtTt4kVF0kLUYYmCCtD/DrQ5YhMGbA9L3ucdjh0y8kOHW5gU/VEEmJTcL4Pz/f7mgoAbYkAAAAAElFTkSuQmCC"]
|
||
}'
|
||
- lang: bash
|
||
label: Load model
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4"
|
||
}'
|
||
- lang: bash
|
||
label: Unload model
|
||
source: |
|
||
curl http://localhost:11434/api/generate -d '{
|
||
"model": "gemma4",
|
||
"keep_alive": 0
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/GenerateRequest"
|
||
example:
|
||
model: gemma4
|
||
prompt: Why is the sky blue?
|
||
responses:
|
||
"200":
|
||
description: Generation responses
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/GenerateResponse"
|
||
example:
|
||
model: "gemma4"
|
||
created_at: "2025-10-17T23:14:07.414671Z"
|
||
response: "Hello! How can I help you today?"
|
||
done: true
|
||
done_reason: "stop"
|
||
total_duration: 174560334
|
||
load_duration: 101397084
|
||
prompt_eval_count: 11
|
||
prompt_eval_duration: 13074791
|
||
eval_count: 18
|
||
eval_duration: 52479709
|
||
application/x-ndjson:
|
||
schema:
|
||
$ref: "#/components/schemas/GenerateStreamEvent"
|
||
/api/chat:
|
||
post:
|
||
summary: Generate a chat message
|
||
description: Generate the next chat message in a conversation between a user and an assistant.
|
||
operationId: chat
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/chat
|
||
href: /api/chat
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/chat -d '{
|
||
"model": "gemma4",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "why is the sky blue?"
|
||
}
|
||
]
|
||
}'
|
||
- lang: bash
|
||
label: Non-streaming
|
||
source: |
|
||
curl http://localhost:11434/api/chat -d '{
|
||
"model": "gemma4",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "why is the sky blue?"
|
||
}
|
||
],
|
||
"stream": false
|
||
}'
|
||
- lang: bash
|
||
label: Structured outputs
|
||
source: |
|
||
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
|
||
"model": "gemma4",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "What are the populations of the United States and Canada?"
|
||
}
|
||
],
|
||
"stream": false,
|
||
"format": {
|
||
"type": "object",
|
||
"properties": {
|
||
"countries": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"properties": {
|
||
"country": {"type": "string"},
|
||
"population": {"type": "integer"}
|
||
},
|
||
"required": ["country", "population"]
|
||
}
|
||
}
|
||
},
|
||
"required": ["countries"]
|
||
}
|
||
}'
|
||
- lang: bash
|
||
label: Tool calling
|
||
source: |
|
||
curl http://localhost:11434/api/chat -d '{
|
||
"model": "qwen3",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "What is the weather today in Paris?"
|
||
}
|
||
],
|
||
"stream": false,
|
||
"tools": [
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "get_current_weather",
|
||
"description": "Get the current weather for a location",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"location": {
|
||
"type": "string",
|
||
"description": "The location to get the weather for, e.g. San Francisco, CA"
|
||
},
|
||
"format": {
|
||
"type": "string",
|
||
"description": "The format to return the weather in, e.g. 'celsius' or 'fahrenheit'",
|
||
"enum": ["celsius", "fahrenheit"]
|
||
}
|
||
},
|
||
"required": ["location", "format"]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}'
|
||
- lang: bash
|
||
label: Thinking
|
||
source: |
|
||
curl http://localhost:11434/api/chat -d '{
|
||
"model": "gpt-oss",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "What is 1+1?"
|
||
}
|
||
],
|
||
"think": "low"
|
||
}'
|
||
- lang: bash
|
||
label: Images
|
||
source: |
|
||
curl http://localhost:11434/api/chat -d '{
|
||
"model": "gemma4",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "What is in this image?",
|
||
"images": [
|
||
"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"
|
||
]
|
||
}
|
||
]
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ChatRequest"
|
||
responses:
|
||
"200":
|
||
description: Chat response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ChatResponse"
|
||
example:
|
||
model: "gemma4"
|
||
created_at: "2025-10-17T23:14:07.414671Z"
|
||
message:
|
||
role: "assistant"
|
||
content: "Hello! How can I help you today?"
|
||
done: true
|
||
done_reason: "stop"
|
||
total_duration: 174560334
|
||
load_duration: 101397084
|
||
prompt_eval_count: 11
|
||
prompt_eval_duration: 13074791
|
||
eval_count: 18
|
||
eval_duration: 52479709
|
||
application/x-ndjson:
|
||
schema:
|
||
$ref: "#/components/schemas/ChatStreamEvent"
|
||
/api/embed:
|
||
post:
|
||
summary: Generate embeddings
|
||
description: Creates vector embeddings representing the input text
|
||
operationId: embed
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/embed
|
||
href: /api/embed
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/embed -d '{
|
||
"model": "embeddinggemma",
|
||
"input": "Why is the sky blue?"
|
||
}'
|
||
- lang: bash
|
||
label: Multiple inputs
|
||
source: |
|
||
curl http://localhost:11434/api/embed -d '{
|
||
"model": "embeddinggemma",
|
||
"input": [
|
||
"Why is the sky blue?",
|
||
"Why is the grass green?"
|
||
]
|
||
}'
|
||
- lang: bash
|
||
label: Truncation
|
||
source: |
|
||
curl http://localhost:11434/api/embed -d '{
|
||
"model": "embeddinggemma",
|
||
"input": "Generate embeddings for this text",
|
||
"truncate": true
|
||
}'
|
||
- lang: bash
|
||
label: Dimensions
|
||
source: |
|
||
curl http://localhost:11434/api/embed -d '{
|
||
"model": "embeddinggemma",
|
||
"input": "Generate embeddings for this text",
|
||
"dimensions": 128
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/EmbedRequest"
|
||
example:
|
||
model: embeddinggemma
|
||
input: "Generate embeddings for this text"
|
||
responses:
|
||
"200":
|
||
description: Vector embeddings for the input text
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/EmbedResponse"
|
||
example:
|
||
model: "embeddinggemma"
|
||
embeddings:
|
||
- [
|
||
0.010071029,
|
||
-0.0017594862,
|
||
0.05007221,
|
||
0.04692972,
|
||
0.054916814,
|
||
0.008599704,
|
||
0.105441414,
|
||
-0.025878139,
|
||
0.12958129,
|
||
0.031952348,
|
||
]
|
||
total_duration: 14143917
|
||
load_duration: 1019500
|
||
prompt_eval_count: 8
|
||
/api/tags:
|
||
get:
|
||
summary: List models
|
||
description: Fetch a list of models and their details
|
||
operationId: list
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/tags
|
||
href: /api/tags
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: List models
|
||
source: |
|
||
curl http://localhost:11434/api/tags
|
||
responses:
|
||
"200":
|
||
description: List available models
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ListResponse"
|
||
example:
|
||
models:
|
||
- name: "gemma4"
|
||
model: "gemma4"
|
||
modified_at: "2025-10-03T23:34:03.409490317-07:00"
|
||
size: 9608350245
|
||
digest: "c6eb396dbd5992bbe3f5cdb947e8bbc0ee413d7c17e2beaae69f5d569cf982eb"
|
||
details:
|
||
format: "gguf"
|
||
family: "gemma4"
|
||
families:
|
||
- "gemma4"
|
||
parameter_size: "8.0B"
|
||
quantization_level: "Q4_K_M"
|
||
/api/ps:
|
||
get:
|
||
summary: List running models
|
||
description: Retrieve a list of models that are currently running
|
||
operationId: ps
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/ps
|
||
href: /api/ps
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: List running models
|
||
source: |
|
||
curl http://localhost:11434/api/ps
|
||
responses:
|
||
"200":
|
||
description: Models currently loaded into memory
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/PsResponse"
|
||
example:
|
||
models:
|
||
- name: "gemma4"
|
||
model: "gemma4"
|
||
size: 6591830464
|
||
digest: "c6eb396dbd5992bbe3f5cdb947e8bbc0ee413d7c17e2beaae69f5d569cf982eb"
|
||
details:
|
||
parent_model: ""
|
||
format: "gguf"
|
||
family: "gemma4"
|
||
families:
|
||
- "gemma4"
|
||
parameter_size: "8.0B"
|
||
quantization_level: "Q4_K_M"
|
||
expires_at: "2025-10-17T16:47:07.93355-07:00"
|
||
size_vram: 5333539264
|
||
context_length: 4096
|
||
/api/show:
|
||
post:
|
||
summary: Show model details
|
||
operationId: show
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/show
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/show -d '{
|
||
"model": "gemma4"
|
||
}'
|
||
- lang: bash
|
||
label: Verbose
|
||
source: |
|
||
curl http://localhost:11434/api/show -d '{
|
||
"model": "gemma4",
|
||
"verbose": true
|
||
}'
|
||
- lang: bash
|
||
label: Thinking controls
|
||
source: |
|
||
curl http://localhost:11434/api/show -d '{
|
||
"model": "gpt-oss"
|
||
}'
|
||
- lang: bash
|
||
label: Thinking controls
|
||
source: |
|
||
curl http://localhost:11434/api/show -d '{
|
||
"model": "gpt-oss"
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ShowRequest"
|
||
example:
|
||
model: gemma4
|
||
responses:
|
||
"200":
|
||
description: Model information
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ShowResponse"
|
||
example:
|
||
parameters: "temperature 0.7\nnum_ctx 2048"
|
||
license: "Gemma Terms of Use \n\nLast modified: February 21, 2024..."
|
||
capabilities:
|
||
- "completion"
|
||
- "thinking"
|
||
- "vision"
|
||
thinking:
|
||
values:
|
||
- false
|
||
- true
|
||
default: true
|
||
modified_at: "2025-08-14T15:49:43.634137516-07:00"
|
||
details:
|
||
parent_model: ""
|
||
format: "gguf"
|
||
family: "gemma4"
|
||
families:
|
||
- "gemma4"
|
||
parameter_size: "8.0B"
|
||
quantization_level: "Q4_K_M"
|
||
model_info:
|
||
gemma4.attention.head_count: 8
|
||
gemma4.attention.head_count_kv: 2
|
||
gemma4.attention.key_length: 512
|
||
gemma4.attention.key_length_swa: 256
|
||
gemma4.attention.layer_norm_rms_epsilon: 0.000001
|
||
gemma4.attention.shared_kv_layers: 18
|
||
gemma4.attention.sliding_window: 512
|
||
gemma4.attention.value_length: 512
|
||
gemma4.attention.value_length_swa: 256
|
||
gemma4.audio.attention.head_count: 8
|
||
gemma4.audio.attention.layer_norm_epsilon: 0.000001
|
||
gemma4.audio.block_count: 12
|
||
gemma4.audio.conv_kernel_size: 5
|
||
gemma4.audio.embedding_length: 1024
|
||
gemma4.audio.feed_forward_length: 4096
|
||
gemma4.block_count: 42
|
||
gemma4.context_length: 131072
|
||
gemma4.embedding_length: 2560
|
||
gemma4.embedding_length_per_layer_input: 256
|
||
gemma4.feed_forward_length: 10240
|
||
gemma4.final_logit_softcapping: 30
|
||
gemma4.rope.dimension_count: 512
|
||
gemma4.rope.dimension_count_swa: 256
|
||
gemma4.rope.freq_base: 1000000
|
||
gemma4.rope.freq_base_swa: 10000
|
||
gemma4.vision.attention.head_count: 12
|
||
gemma4.vision.attention.layer_norm_epsilon: 0.000001
|
||
gemma4.vision.block_count: 16
|
||
gemma4.vision.embedding_length: 768
|
||
gemma4.vision.feed_forward_length: 3072
|
||
gemma4.vision.num_channels: 3
|
||
gemma4.vision.patch_size: 16
|
||
gemma4.vision.projector.scale_factor: 3
|
||
general.architecture: "gemma4"
|
||
general.file_type: 15
|
||
general.quantization_version: 2
|
||
tokenizer.ggml.add_bos_token: false
|
||
tokenizer.ggml.add_eos_token: false
|
||
tokenizer.ggml.add_mask_token: false
|
||
tokenizer.ggml.add_padding_token: false
|
||
tokenizer.ggml.add_unknown_token: false
|
||
tokenizer.ggml.bos_token_id: 2
|
||
tokenizer.ggml.eos_token_id: 1
|
||
tokenizer.ggml.eos_token_ids:
|
||
- 1
|
||
- 106
|
||
- 50
|
||
tokenizer.ggml.mask_token_id: 4
|
||
tokenizer.ggml.merges: null
|
||
tokenizer.ggml.model: "llama"
|
||
tokenizer.ggml.padding_token_id: 0
|
||
tokenizer.ggml.pre: "gemma4"
|
||
tokenizer.ggml.scores: null
|
||
tokenizer.ggml.token_type: null
|
||
tokenizer.ggml.tokens: null
|
||
tokenizer.ggml.unknown_token_id: 3
|
||
/api/create:
|
||
post:
|
||
summary: Create a model
|
||
operationId: create
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/create
|
||
href: /api/create
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/create -d '{
|
||
"from": "gemma4",
|
||
"model": "alpaca",
|
||
"system": "You are Alpaca, a helpful AI assistant. You only answer with Emojis."
|
||
}'
|
||
- lang: bash
|
||
label: Create from existing
|
||
source: |
|
||
curl http://localhost:11434/api/create -d '{
|
||
"model": "ollama",
|
||
"from": "gemma4",
|
||
"system": "You are Ollama the llama."
|
||
}'
|
||
- lang: bash
|
||
label: Create from GGUF
|
||
source: |
|
||
curl http://localhost:11434/api/create -d '{
|
||
"model": "my-gguf-model",
|
||
"files": {
|
||
"model.gguf": "sha256:432f310a77f4650a88d0fd59ecdd7cebed8d684bafea53cbff0473542964f0c3"
|
||
}
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/CreateRequest"
|
||
example:
|
||
model: mario
|
||
from: gemma4
|
||
system: "You are Mario from Super Mario Bros."
|
||
responses:
|
||
"200":
|
||
description: Stream of create status updates
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusResponse"
|
||
example:
|
||
status: "success"
|
||
application/x-ndjson:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusEvent"
|
||
example:
|
||
status: "success"
|
||
/api/blobs/{digest}:
|
||
head:
|
||
summary: Check if a blob exists
|
||
operationId: headBlob
|
||
parameters:
|
||
- $ref: "#/components/parameters/DigestParam"
|
||
responses:
|
||
"200":
|
||
description: Blob exists
|
||
"400":
|
||
description: Invalid digest
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"404":
|
||
description: Blob not found
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"500":
|
||
description: Failed to inspect blob
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
post:
|
||
summary: Push a blob
|
||
operationId: createBlob
|
||
parameters:
|
||
- $ref: "#/components/parameters/DigestParam"
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/octet-stream:
|
||
schema:
|
||
type: string
|
||
format: binary
|
||
responses:
|
||
"200":
|
||
description: Blob already exists
|
||
"201":
|
||
description: Blob created
|
||
"400":
|
||
description: Invalid digest or blob content
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"500":
|
||
description: Failed to write blob
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
/api/copy:
|
||
post:
|
||
summary: Copy a model
|
||
operationId: copy
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/copy
|
||
href: /api/copy
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Copy a model to a new name
|
||
source: |
|
||
curl http://localhost:11434/api/copy -d '{
|
||
"source": "gemma4",
|
||
"destination": "gemma4-backup"
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/CopyRequest"
|
||
example:
|
||
source: gemma4
|
||
destination: gemma4-backup
|
||
responses:
|
||
"200":
|
||
description: Model successfully copied
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusResponse"
|
||
example:
|
||
status: "success"
|
||
"400":
|
||
description: Model could not be copied
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"404":
|
||
description: Source model not found
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
/api/pull:
|
||
post:
|
||
summary: Pull a model
|
||
operationId: pull
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/pull
|
||
href: /api/pull
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/pull -d '{
|
||
"model": "gemma4"
|
||
}'
|
||
- lang: bash
|
||
label: Non-streaming
|
||
source: |
|
||
curl http://localhost:11434/api/pull -d '{
|
||
"model": "gemma4",
|
||
"stream": false
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/PullRequest"
|
||
example:
|
||
model: gemma4
|
||
responses:
|
||
"200":
|
||
description: Pull status updates.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusResponse"
|
||
example:
|
||
status: "success"
|
||
application/x-ndjson:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusEvent"
|
||
example:
|
||
status: "success"
|
||
/api/push:
|
||
post:
|
||
summary: Push a model
|
||
operationId: push
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/push
|
||
href: /api/push
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Push model
|
||
source: |
|
||
curl http://localhost:11434/api/push -d '{
|
||
"model": "my-username/my-model"
|
||
}'
|
||
- lang: bash
|
||
label: Non-streaming
|
||
source: |
|
||
curl http://localhost:11434/api/push -d '{
|
||
"model": "my-username/my-model",
|
||
"stream": false
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/PushRequest"
|
||
example:
|
||
model: my-username/my-model
|
||
responses:
|
||
"200":
|
||
description: Push status updates.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusResponse"
|
||
example:
|
||
status: "success"
|
||
application/x-ndjson:
|
||
schema:
|
||
$ref: "#/components/schemas/StatusEvent"
|
||
example:
|
||
status: "success"
|
||
/api/delete:
|
||
delete:
|
||
summary: Delete a model
|
||
operationId: delete
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/delete
|
||
href: /api/delete
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Delete model
|
||
source: |
|
||
curl -X DELETE http://localhost:11434/api/delete -d '{
|
||
"model": "gemma4"
|
||
}'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/DeleteRequest"
|
||
example:
|
||
model: gemma4
|
||
responses:
|
||
"200":
|
||
description: Model successfully deleted
|
||
/api/version:
|
||
get:
|
||
summary: Get version
|
||
description: Retrieve the version of the Ollama
|
||
operationId: version
|
||
x-mint:
|
||
metadata:
|
||
sidebarTitle: /api/version
|
||
x-codeSamples:
|
||
- lang: bash
|
||
label: Default
|
||
source: |
|
||
curl http://localhost:11434/api/version
|
||
responses:
|
||
"200":
|
||
description: Version information
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/VersionResponse"
|
||
example:
|
||
version: "0.12.6"
|
||
/api/usage:
|
||
get:
|
||
summary: Cloud usage
|
||
description: Usage statistics for cloud inference, web search, and web fetch.
|
||
operationId: usage
|
||
servers:
|
||
- url: https://ollama.com
|
||
description: Ollama Cloud
|
||
security:
|
||
- bearerAuth: []
|
||
parameters:
|
||
- name: range
|
||
in: query
|
||
description: Completed UTC hours or days to include, plus the current partial hour or day.
|
||
schema:
|
||
type: string
|
||
enum: [24h, 7d, 30d]
|
||
default: 7d
|
||
- name: scope
|
||
in: query
|
||
description: Your requests, or your team's requests. Team scope requires being a team admin.
|
||
schema:
|
||
type: string
|
||
enum: [self, team]
|
||
default: self
|
||
responses:
|
||
"200":
|
||
description: Usage for the selected range and scope.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/UsageResponse"
|
||
"400":
|
||
description: Invalid query parameters.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"401":
|
||
description: Invalid credentials.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"403":
|
||
description: Account suspended or team scope requested without team admin access.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"429":
|
||
description: Too many requests.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
headers:
|
||
Retry-After:
|
||
description: Seconds to wait before retrying.
|
||
schema:
|
||
type: integer
|
||
minimum: 1
|
||
"503":
|
||
description: Usage reporting is temporarily unavailable.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
/api/balance:
|
||
get:
|
||
summary: Balance
|
||
description: Check your remaining usage credits.
|
||
operationId: balance
|
||
servers:
|
||
- url: https://ollama.com
|
||
description: Ollama Cloud
|
||
security:
|
||
- bearerAuth: []
|
||
responses:
|
||
"200":
|
||
description: Current included and purchased balances.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/BalanceResponse"
|
||
"400":
|
||
description: Invalid query parameters.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"401":
|
||
description: Invalid credentials.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"403":
|
||
description: Account suspended.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
"429":
|
||
description: Too many requests.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|
||
headers:
|
||
Retry-After:
|
||
description: Seconds to wait before retrying.
|
||
schema:
|
||
type: integer
|
||
minimum: 1
|
||
"503":
|
||
description: Balance reporting is temporarily unavailable.
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/ErrorResponse"
|