Skip to main content
Crusoe Support Help Center home page
Crusoe

How-To List Model Features via curl and the Inference API

Akshay Gajulammagari
Akshay Gajulammagari
Updated

Introduction

Crusoe Managed Inference exposes an OpenAI-compatible /v1/models endpoint that returns the full catalog as JSON. Every model comes back with its architecture, parameter count, context length, quantization, tags, per-token pricing, and — most usefully — the exact list of request parameters it accepts.

That last field is the one worth knowing about. supported_parameters tells you up front whether a model will accept tools, response_format, reasoning_effort, or logprobs, so you can check before sending a request rather than debugging a rejection. The same applies to context_length and top_provider.max_completion_tokens when you are sizing a batch job.

This article covers listing the whole catalog, filtering to one model, and reading the fields that matter — along with the metadata the API does not return, which is just as important to know.

Prerequisites

  • Valid API Key for the Crusoe Inference API
  • curl Installed (Default on macOS and Linux; via WSL or Git Bash on Windows)
  • jq Installed (Optional, Recommended for Readable JSON Output) — brew install jq on macOS, apt install jq on Linux

Instructions

Step 1: List All Available Models

Set KEY to your API key in the shell first, then run:

curl -s "https://api.inference.crusoecloud.com/v1/models" \
  -H "Authorization: Bearer $KEY" | jq

This returns a JSON list of every model currently available, along with their properties.

ℹ️ Note: Export the key as a variable rather than pasting it into the command. A key typed inline is written to your shell history and is visible in the process list while the request runs.

Step 2: Filter to a Specific Model

If you only want details for one model, filter the response by model ID:

curl -s "https://api.inference.crusoecloud.com/v1/models" \
  -H "Authorization: Bearer $KEY" | \
  jq '.data[] | select(.id == "deepseek-ai/Deepseek-V4-Flash")'

Replace deepseek-ai/Deepseek-V4-Flash with the model ID you are looking for.

Example Output

{
  "id": "deepseek-ai/Deepseek-V4-Flash",
  "name": "deepseek-ai/Deepseek-V4-Flash",
  "created": 0,
  "description": "The DeepSeek-V4 series includes two strong Mixture-of-Experts (MoE) language models — DeepSeek-V4-Pro with 1.6T parameters (49B activated) and DeepSeek-V4-Flash with 284B parameters (13B activated) — both supporting a context length of one million tokens. Both models are pre-trained on more than 32T diverse and high-quality tokens, followed by a comprehensive post-training pipeline. The DeepSeek-V4 series includes two strong Mixture-of-Experts (MoE) language models — DeepSeek-V4-Pro with 1.6T parameters (49B activated) and DeepSeek-V4-Flash with 284B parameters (13B activated) — both supporting a context length of one million tokens. Both models are pre-trained on more than 32T diverse and high-quality tokens, followed by a comprehensive post-training pipeline. The post-training features a two-stage paradigm: independent cultivation of domain-specific experts (through SFT and RL with GRPO), followed by unified model consolidation via on-policy distillation, integrating distinct proficiencies across diverse domains into a single model.",
  "icon": "https://huggingface.co/api/organizations/deepseek-ai/avatar",
  "owned_by": "deepseek",
  "is_public": true,
  "type": "chat",
  "context_length": 1048576,
  "quantization": "fp8",
  "architecture": {
    "modality": "text",
    "tokenizer": "transformers",
    "instruct_type": "",
    "parameter_count": 158069433298
  },
  "tags": [
    "text to text",
    "tool calling"
  ],
  "supported_parameters": [
    "chat_template_kwargs",
    "frequency_penalty",
    "logit_bias",
    "logprobs",
    "max_completion_tokens",
    "max_tokens",
    "metadata",
    "min_p",
    "parallel_tool_calls",
    "presence_penalty",
    "prompt_cache_key",
    "reasoning_effort",
    "repetition_penalty",
    "response_format",
    "safety_identifier",
    "seed",
    "service_tier",
    "stop",
    "structured_outputs",
    "temperature",
    "tool_choice",
    "tools",
    "top_k",
    "top_logprobs",
    "top_p",
    "user"
  ],
  "is_billed_by_token": true,
  "pricing": {
    "prompt": "0.14",
    "completion": "0.28",
    "image": "0",
    "request": "0",
    "video": "0",
    "input_cache_reads": "0.03"
  },
  "top_provider": {
    "context_length": 1048576,
    "max_completion_tokens": 1048576,
    "is_moderated": false
  }
}

⚠️ Warning: Do not treat description as authoritative. It is upstream model-card prose passed through unchanged, and in the sample above it contradicts the structured data in the same response — the text claims 284B parameters while architecture.parameter_count reports roughly 158B. The opening two sentences are also repeated verbatim. Read the structured fields, not the blurb.

Notes and Limitations

  • No checkpoint or version date field. The API does not currently return a model's training checkpoint or release date as a structured field. If a model has multiple versions or checkpoints, this information, when available, is typically included as part of the model name, such as a date suffix like 0324, not as a separate field.
  • The created field is unreliable. Some models return 0 or a placeholder value. It should not be used to determine release or checkpoint date.
  • Version metadata varies by provider. If you need version-specific information that is not reflected in the model name or this listing, check the model documentation page for that specific model.

Example

A team is moving a structured-extraction job onto Crusoe and needs a model that will accept response_format for JSON-mode output and tools for function calling, with enough context to take a full document in one pass.

Rather than trial-and-error against the chat endpoint, they list the catalog once and filter it locally:

curl -s "https://api.inference.crusoecloud.com/v1/models" \
  -H "Authorization: Bearer $KEY" | \
  jq -r '.data[]
    | select(.supported_parameters | index("response_format") and index("tools"))
    | select(.context_length >= 131072)
    | "\(.id)\t\(.context_length)\t\(.pricing.prompt)"'

That returns only the models that can actually do the job, with their context length and prompt price, so the choice comes down to cost rather than guesswork. Checking pricing.input_cache_reads at the same time is worthwhile for a job that resends the same system prompt on every call.

Related Articles

Related to

Was this article helpful?

0 out of 0 found this helpful

Still need help?

Our support team is ready to assist you with any questions.

Have more questions? Submit a request

Related Articles

Recently Viewed

Comments

0 comments

Article is closed for comments.