NemoRouter

cURL Examples

Use NemoRouter with cURL from the command line

cURL is the fastest way to test NemoRouter from the command line. Every example on this page is copy-paste ready — just set your API key and go.

Setup

Set your API key as an environment variable:

export NEMOROUTER_API_KEY="sk-nemo-your-key-here"

All examples below reference $NEMOROUTER_API_KEY. Make sure it's set in your shell before running them.

Chat Completions

Basic Chat

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "What is an LLM gateway?"}
    ]
  }'

With System Message

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "You are a concise technical writer. Answer in 2-3 sentences."},
      {"role": "user", "content": "Explain API rate limiting."}
    ],
    "temperature": 0.5,
    "max_tokens": 256
  }'

Multi-Turn Conversation

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is Python?"},
      {"role": "assistant", "content": "Python is a high-level, interpreted programming language known for its simplicity and readability."},
      {"role": "user", "content": "What are its main use cases?"}
    ]
  }'

Using Different Models

Switch providers by changing the model field:

# Anthropic Claude
curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-4-sonnet",
    "messages": [
      {"role": "user", "content": "Write a haiku about cloud computing."}
    ]
  }'
# Google Gemini
curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.5-pro",
    "messages": [
      {"role": "user", "content": "What are the key differences between REST and GraphQL?"}
    ]
  }'
# Meta Llama
curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-4-scout",
    "messages": [
      {"role": "user", "content": "Explain microservices architecture."}
    ]
  }'

Streaming

Stream the response token by token using server-sent events:

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "Write a short poem about APIs."}
    ],
    "stream": true
  }'

Each line in the response is a server-sent event:

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"In"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":" circuits"},"finish_reason":null}]}

data: [DONE]

JSON Mode

Force the model to output valid JSON:

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "You output JSON. Return a list of 3 colors with name and hex fields."},
      {"role": "user", "content": "Give me colors."}
    ],
    "response_format": {"type": "json_object"}
  }'

Function Calling

Define tools for the model to call:

curl https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "What is the weather in Tokyo?"}
    ],
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_weather",
          "description": "Get the current weather in a given location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "City name, e.g. Tokyo, Japan"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"]
          }
        }
      }
    ],
    "tool_choice": "auto"
  }'

Embeddings

Single Text

curl https://api.nemorouter.ai/v1/embeddings \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "NemoRouter is an enterprise LLM gateway."
  }'

Batch Embeddings

curl https://api.nemorouter.ai/v1/embeddings \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": [
      "First document about AI gateways.",
      "Second document about API management.",
      "Third document about cost optimization."
    ]
  }'

Custom Dimensions

curl https://api.nemorouter.ai/v1/embeddings \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-large",
    "input": "NemoRouter simplifies LLM access.",
    "dimensions": 256
  }'

List Models

List all available models:

curl https://api.nemorouter.ai/v1/models \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY"

Pretty-Print with jq

curl -s https://api.nemorouter.ai/v1/models \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" | jq '.data[] | .id'

Get a Specific Model

curl https://api.nemorouter.ai/v1/models/gpt-4o \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY"

Useful cURL Flags

FlagPurposeExample
-sSilent mode (no progress bar)curl -s https://...
-vVerbose (show headers)curl -v https://...
-o file.jsonSave response to filecurl -o response.json https://...
-w "\n"Add trailing newlinecurl -w "\n" https://...
--max-time 30Timeout after 30 secondscurl --max-time 30 https://...

View Response Headers

Use -v or -i to see NemoRouter's response headers:

curl -i https://api.nemorouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Look for NemoRouter-specific headers in the response:

x-nemo-org-id: your-org-uuid
x-nemo-key-alias: sk-...xxxx

Shell Script Example

A complete shell script that calls NemoRouter:

#!/bin/bash
set -euo pipefail

# Check for API key
if [ -z "${NEMOROUTER_API_KEY:-}" ]; then
  echo "Error: NEMOROUTER_API_KEY is not set"
  exit 1
fi

BASE_URL="https://api.nemorouter.ai/v1"
MODEL="${1:-gpt-4o}"
PROMPT="${2:-Hello, NemoRouter!}"

echo "Model: $MODEL"
echo "Prompt: $PROMPT"
echo "---"

curl -s "$BASE_URL/chat/completions" \
  -H "Authorization: Bearer $NEMOROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(cat <<EOF
{
  "model": "$MODEL",
  "messages": [{"role": "user", "content": "$PROMPT"}],
  "max_tokens": 256
}
EOF
)" | jq -r '.choices[0].message.content'

Usage:

chmod +x nemo-chat.sh
./nemo-chat.sh gpt-4o "What is NemoRouter?"
./nemo-chat.sh claude-4-sonnet "Write a haiku about APIs."

Error Responses

Common errors you'll encounter:

401 Unauthorized

{
  "error": {
    "message": "Invalid API key provided.",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

Fix: Check that $NEMOROUTER_API_KEY is set and valid.

402 Payment Required

{
  "error": {
    "message": "Insufficient credits.",
    "type": "billing_error",
    "code": "insufficient_credits"
  }
}

Fix: Add credits from the Billing page in your dashboard.

429 Too Many Requests

{
  "error": {
    "message": "Rate limit exceeded.",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}

Fix: Wait and retry, or upgrade your plan for higher rate limits.

Next Steps

Was this page helpful?