In this article
A command that works in a terminal can be tempting to drop straight into a script. With Ollama, a clearer starting point is to choose the interface whose documented role matches the task.
The CLI covers interactive model use, model-management commands, and setup for supported integrations. Ollama explicitly presents its HTTP API as an interface for building applications with local or cloud models (Ollama CLI, API introduction).
This makes the practical boundary straightforward:
- Start with the CLI when a person is chatting, managing models, or configuring a supported tool.
- Start with the HTTP API when software needs documented response fields, HTTP status handling, authentication rules, or streaming behavior.
This is a documentation-based comparison, not a performance or reliability test.
Task-to-interface decision table
| Task | Starting point | Why |
|---|---|---|
| Chat with a model in a terminal | CLI | ollama run starts an interactive chat |
| Enter multiline prompts or provide an image manually | CLI | Both are documented terminal workflows |
| Download, list, create, or remove models | CLI | Ollama provides dedicated management commands |
| Check or stop running models | CLI | ollama ps and ollama stop cover those actions |
| Configure and launch a supported external application | CLI | ollama launch provides an interactive setup workflow |
| Generate content inside an application | HTTP API | Ollama documents the API for application development |
| Read generated content programmatically | HTTP API | Native chat responses document message.content |
| Classify request failures | HTTP API | The API documents HTTP statuses and JSON errors |
| Display generation progressively | HTTP API streaming | Supported endpoints can return newline-delimited JSON |
| Run a discrete management command from a shell workflow | CLI | The documented command directly represents the management action |
| Build logic around inference results | HTTP API | The API exposes documented data and transport behavior |
These are starting points rather than restrictions. The useful question is not simply whether a shell can run a command, but which documented interface provides the information the automation needs.
Use the CLI for interactive work
For a person working in a terminal, the direct workflow is:
ollama run gemma4
Ollama’s quickstart describes ollama run as starting a chat and says to enter /bye to leave. The CLI also documents multiline input wrapped in triple quotes and image paths supplied to multimodal models (Ollama quickstart, Ollama CLI).
Model management is another clear CLI use. Documented commands include:
ollama pullto download a modelollama rmto remove a modelollama lsto list modelsollama createto create a customized model from a Modelfileollama psto list running modelsollama stopto stop a running modelollama serveto start Ollama
These commands suit direct administration and setup because each represents a specific operator action (Ollama CLI).
The CLI also provides ollama launch, an interactive workflow for configuring and starting supported external applications. The documented integrations include OpenCode, Claude Code, Codex, VS Code, and Droid. You can select both an integration and a model:
ollama launch claude --model qwen3.5
This workflow is specifically documented for setting up supported applications with Ollama models (Ollama CLI).
Use the HTTP API for programmatic inference
Ollama describes its API as the interface for building applications with cloud or local models (API introduction). The native API has two documented targets:
| Target | Base URL | Authentication |
|---|---|---|
| Direct cloud access | https://ollama.com/api |
API key required |
| Local Ollama server | http://localhost:11434/api |
No authorization header required |
Using cloud models through a local server is a separate configuration: Ollama requires the user to sign in (API introduction).
For a non-streaming request to the native /api/chat endpoint, Ollama’s example sends a model, a messages list, and "stream": false. The application reads the generated answer from message.content (API introduction).
That response field is specific to the documented native chat example. Ollama’s compatibility interfaces use different locations:
- OpenAI Chat Completions:
choices[0].message.content - OpenAI Responses: text content inside
output - Anthropic Messages: text blocks inside
content
The compatible interfaces also use different base URLs, and Ollama says its OpenAI and Anthropic compatibility layers each cover a subset of the original API. Follow the reference for the interface you select rather than carrying assumptions from one format to another (Ollama quickstart).
Let required error handling guide the choice
When an automation must classify failures, the API provides explicit documented behavior. Ollama lists common HTTP statuses including:
400for a bad request404when a resource such as a model is not found429for too many requests500for an internal server error502for a bad gateway
Errors are returned as JSON with an error property (API errors). That contract lets an application branch on the HTTP result and decode the accompanying error message.
This distinction is useful in shell workflows too. Running ollama pull for a discrete model-management action follows a documented CLI command. If the workflow instead needs to extract generated content or classify inference failures, the API’s documented fields and status behavior provide the more relevant application boundary.
Choose streaming deliberately
Certain endpoints, including /api/generate, stream by default as newline-delimited JSON with the application/x-ndjson content type. On endpoints that support streaming, sending "stream": false returns one JSON response instead (API streaming).
Ollama describes the options as follows:
- Streaming: intended for real-time output and longer generations
- Non-streaming: simpler to process and suited to short or structured output
Streaming clients must also handle failures inside the stream. If an error occurs after the response starts, the HTTP status cannot be changed. Ollama instead sends an NDJSON object with an error property, so the client needs to inspect every streamed object (API errors).
Streaming behavior is endpoint-specific; the documentation says that certain endpoints stream by default, not all of them.
A compact decision rule
Ask what the workflow needs:
- Interactive chat or manual input? Use the CLI.
- A discrete model-management action? Start with the documented CLI command.
- Supported integration setup? Use
ollama launch. - Generated content inside an application? Use the API.
- Structured failure handling? Use HTTP statuses and JSON errors.
- Progressive output? Use a supported streaming endpoint and process every NDJSON object.
- One response that is simpler to decode? Set
"stream": falsewhere supported.
Ollama’s API is not strictly versioned, although Ollama says it is expected to remain stable and backward compatible, with rare deprecations announced in release notes (API introduction). Applications should still use the fields documented for their selected endpoint.
The concise rule is: start with the CLI when a human is operating Ollama, and start with the documented HTTP API when software is integrating with it.
No comments yet