Skip to content

cURL

Environment

export OPENAI_API_KEY="sk-..."
export BASE="https://api.chris.hellotopia.io/v1"

List models

curl -s "$BASE/models" \
  -H "Authorization: Bearer $OPENAI_API_KEY" | jq '.data[].id'

Chat

curl -s "$BASE/chat/completions" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.1:8b",
    "messages": [{"role": "user", "content": "One-word greeting."}]
  }' | jq '.choices[0].message.content'

Chat — streaming (SSE)

curl -N "$BASE/chat/completions" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3.3:70b",
    "stream": true,
    "messages": [{"role": "user", "content": "Count to 10 slowly."}]
  }'

The response is an text/event-stream with data: {...} lines. Parse by stripping data: and JSON-decoding each line until data: [DONE].

Embeddings

curl -s "$BASE/embeddings" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "embed/nomic-embed-text",
    "input": ["hello world", "foo bar"]
  }' | jq '.data[] | .embedding | length'

Transcription

curl -s "$BASE/audio/transcriptions" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F "file=@meeting.m4a" \
  -F "model=whisper-large-v3" \
  -F "language=en" | jq -r .text