OATDA List Models
List all available AI models from OATDA's providers with optional filtering.
When to Use
Use this skill when the user wants to:
- See what models are available through OATDA
- Find the right model for a specific task (chat, image, video, audio)
- Know which providers are supported
- Filter models by type or provider
Prerequisites
The user needs an OATDA API key. Check in this order:
$OATDA_API_KEYenvironment variable~/.oatda/credentials.jsonconfig file
If neither exists, tell the user:
You need an OATDA API key. Get one at https://oatda.com, then set it:
export OATDA_API_KEY=your_key_here
Step-by-Step Instructions
1. Resolve the API key
# Check env var first; if empty, auto-load from credentials file
if [[ -z "$OATDA_API_KEY" ]]; then
export OATDA_API_KEY=$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)
fi
# Verify key exists (show first 8 chars only)
echo "${OATDA_API_KEY:0:8}"
If the output is empty or null, stop and ask the user to configure their API key.
IMPORTANT:
- Never print the full API key. Only show the first 8 characters for verification.
- The key resolution script and subsequent
curlcommands must run in the same shell session. Each separate bash/terminal invocation starts with an isolated environment where previously exported variables are lost. Either run all commands in one session, or chain them (e.g.,export OATDA_API_KEY=... && curl ...).
2. Determine filters
Parse the user's request for optional filters:
- type:
chat,image,video, oraudio(omit for all types) - provider: Provider name like
openai,anthropic,google, etc.
3. Make the API call
List all models (no filters):
curl -s -X GET "https://oatda.com/api/v1/llm/models" \
-H "Authorization: Bearer $OATDA_API_KEY"
Filter by type:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=chat" \
-H "Authorization: Bearer $OATDA_API_KEY"
List audio models:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=audio" \
-H "Authorization: Bearer $OATDA_API_KEY"
Filter by provider:
curl -s -X GET "https://oatda.com/api/v1/llm/models?provider=openai" \
-H "Authorization: Bearer $OATDA_API_KEY"
Combine filters:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=image&provider=openai" \
-H "Authorization: Bearer $OATDA_API_KEY"
4. Parse the response
The API returns an OpenAI-compatible format. Image, video, and audio models include supported_params showing model-specific parameters:
{
"total": 42,
"filter": {
"type": "all",
"provider": null
},
"chatModels": [
{"id": "openai/gpt-5", "provider": "openai", "model": "gpt-5", "displayName": "GPT-5"},
{"id": "anthropic/claude-sonnet-4-5-20250929", "provider": "anthropic", "model": "claude-sonnet-4-5-20250929", "displayName": "Claude Sonnet 4.5"}
],
"imageModels": [
{
"id": "openai/dall-e-3",
"provider": "openai",
"model": "dall-e-3",
"displayName": "DALL-E 3",
"supported_params": {
"style": {"type": "string", "values": ["vivid", "natural"], "default": "vivid"},
"quality": {"type": "string", "values": ["standard", "hd"], "default": "standard"}
}
}
],
"videoModels": [
{
"id": "bytedance/seedance-1-5-pro-251215",
"provider": "bytedance",
"model": "seedance-1-5-pro-251215",
"displayName": "Seedance 1.5 Pro",
"supported_params": {
"ratio": {"type": "string", "values": ["16:9", "9:16", "1:1"], "default": "16:9"},
"duration": {"type": "string", "values": ["5", "10"], "default": "5"},
"generate_audio": {"type": "boolean", "default": false, "optional": true},
"camera_fixed": {"type": "boolean", "default": false, "optional": true},
"first_frame_image": {"type": "file", "accept": "image/*", "optional": true, "description": "Starting frame image URL"},
"last_frame_image": {"type": "file", "accept": "image/*", "optional": true, "description": "Ending frame image URL"}
}
}
],
"audio_models": [
{
"id": "openai/gpt-4o-mini-tts",
"provider": "openai",
"model_name": "gpt-4o-mini-tts",
"display_name": "OpenAI GPT-4o Mini TTS",
"supported_params": {
"audio_modes": ["tts"],
"voice": {"type": "select", "values": ["alloy", "echo", "fable", "onyx", "nova", "shimmer", "coral"]},
"response_format": {"type": "select", "values": ["mp3", "wav", "opus"]}
}
},
{
"id": "openai/whisper-1",
"provider": "openai",
"model_name": "whisper-1",
"display_name": "OpenAI Whisper",
"supported_params": {
"audio_modes": ["transcription", "translation"],
"response_format": {"type": "string", "values": ["json", "text", "srt", "verbose_json", "vtt"]}
}
}
]
}
5. Understanding supported_params
Image, video, and audio models include a supported_params object that describes model-specific parameters. Use this to discover what parameters each model accepts before generation, transcription, or translation.
Structure of each parameter:
| Field | Type | Description |
|---|---|---|
type |
string | Parameter type: string, number, boolean, or file |
values |
array | Allowed values (for enum-type strings) |
default |
any | Default value if not specified |
description |
string | Human-readable description |
optional |
boolean | Whether the parameter is optional |
accept |
string | For file types: accepted MIME types (e.g., "image/*") |
min / max |
number | Range constraints for numeric values |
File-type parameters: Parameters with type: "file" require a publicly accessible URL (https://...), not local file paths. Examples include mask, first_frame_image, last_frame_image.
Audio modes: Audio models may support one or more modes such as tts, transcription, and translation. Use this to choose the correct skill:
tts→/oatda:oatda-generate-speechtranscription→/oatda:oatda-transcribe-audiotranslation→/oatda:oatda-translate-audio
Example - Discovering image model params:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=image&provider=bytedance" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.image_models[].supported_params'
This reveals that Bytedance Seedream supports: size, watermark, seed, negative_prompt, etc.
Example - Discovering video model params:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=video&provider=bytedance" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.video_models[].supported_params'
This reveals that Seedance supports: ratio, duration, generate_audio, camera_fixed, first_frame_image, last_frame_image, etc.
Example - Discovering audio model params:
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=audio&provider=openai" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.audio_models[] | {id, supported_params}'
This reveals whether a model supports speech generation, transcription, translation, and which voices or response formats are available.
6. Present results
Format the models in a readable way, organized by category:
Chat Models (N total):
openai/gpt-5— GPT-5anthropic/claude-sonnet-4-5-20250929— Claude Sonnet 4.5- ...
Image Models (N total):
openai/dall-e-3— DALL-E 3- ...
Video Models (N total):
minimax/T2V-01— MiniMax T2V-01- ...
Audio Models (N total):
openai/gpt-4o-mini-tts— OpenAI GPT-4o Mini TTSopenai/whisper-1— OpenAI Whisper- ...
If the response format differs (e.g., flat data array with id and object fields), adapt accordingly and group by provider or capability.
7. Handle errors
| HTTP Status | Meaning | Action |
|---|---|---|
| 401 | Invalid API key | Tell user to check their key |
| 429 | Rate limited | Wait and retry |
Full Example
User asks: "What OpenAI models are available?"
curl -s -X GET "https://oatda.com/api/v1/llm/models?provider=openai" \
-H "Authorization: Bearer $OATDA_API_KEY"
User asks: "Show me all image generation models"
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=image" \
-H "Authorization: Bearer $OATDA_API_KEY"
User asks: "Show me all audio models"
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=audio" \
-H "Authorization: Bearer $OATDA_API_KEY"
User asks: "What parameters does Seedance video model support?"
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=video&provider=bytedance" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.video_models[] | select(.model | contains("seedance")) | .supported_params'
This returns all supported parameters for Seedance, including ratio, duration, generate_audio, camera_fixed, first_frame_image, last_frame_image, etc.
Tips
- This is a GET request with query parameters, not POST
- Use this skill to help users find the right model for other OATDA skills
- The
idfield (e.g.,openai/gpt-4o) is the model identifier used in other skills - Use
supported_paramsto discover model-specific parameters before generating images/videos or using audio models - For file-type params (mask, reference images), provide publicly accessible URLs
- NEVER expose the full API key in output
- Related skills:
/oatda:oatda-text-completion,/oatda:oatda-generate-image,/oatda:oatda-generate-video,/oatda:oatda-generate-speech,/oatda:oatda-transcribe-audio,/oatda:oatda-translate-audio,/oatda:oatda-vision-analysis