# Oatda Text Completion

> Generate text, code, or chat completions using OATDA's unified LLM API gateway — like calling ChatGPT, Claude, Gemini, GPT-5, Claude Sonnet 4.5, Grok 4, or Qwen from a single endpoint. Triggers when the user wants to generate, write, summarize, translate, or complete text via OpenAI, Anthropic, Google, Deepseek, Mistral, xAI, Alibaba/Qwen, MiniMax, ZAI/GLM, Moonshot/Kimi, or Bytedance. Also use when comparing outputs across models or using aliases like "gpt-4o", "gpt-5", "claude", "gemini", "deepseek", "grok", "qwen", "mistral", "kimi".

- Skill: `devcsde/oatda-text-completion-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add devcsde/oatda-text-completion-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/devcsde/oatda-text-completion-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: devcsde (https://skillmd.com/u/devcsde)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/devcsde/oatda-text-completion-2

---


# OATDA Text Completion

Generate text from 10+ LLM providers through OATDA's unified API.

## API Key Resolution

All commands need the OATDA API key. Resolve it inline for each `exec` call:

```bash
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}"
```

If the key is empty or `null`, tell the user to get one at https://oatda.com and configure it.

**Security**: Never print the full API key. Only verify existence or show first 8 chars.

## Model Mapping

| User says | Provider | Model |
|-----------|----------|-------|
| gpt-4o | openai | gpt-4o |
| gpt-4o-mini | openai | gpt-4o-mini |
| gpt-5 | openai | gpt-5 |
| gpt-5-mini | openai | gpt-5-mini |
| o1 | openai | o1 |
| o3 | openai | o3 |
| claude, sonnet | anthropic | claude-sonnet-4-5-20250929 |
| haiku | anthropic | claude-haiku-4-5-20251001 |
| opus | anthropic | claude-opus-4-5-20251101 |
| gemini | google | gemini-3-pro-preview |
| gemini-2.5 | google | gemini-2.5-pro |
| deepseek | deepseek | deepseek-v4-pro |
| mistral | mistral | mistral-large-latest |
| grok | xai | grok-4-fast |
| grok-4 | xai | grok-4-1-fast-reasoning |
| qwen | alibaba | qwen3-max |
| kimi, moonshot | moonshot | kimi-k2.7-code |
| glm | zai | glm-5 |

**Default**: `openai` / `gpt-4o` if no model specified. If user provides `provider/model` format, split on `/`.

> ⚠️ Models update frequently. If a model ID fails, query `oatda-list-models` for the latest available models.

> ⚠️ Models update frequently. If a model ID fails, query `oatda-list-models` for the latest available models.

## API Call

```bash
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OATDA_API_KEY" \
  -d '{
    "provider": "<PROVIDER>",
    "model": "<MODEL>",
    "prompt": "<USER_PROMPT>",
    "temperature": 0.7,
    "maxTokens": 4096
  }'
```

### Optional Parameters

- `temperature`: 0 (deterministic) to 2 (creative). Default: 0.7
- `maxTokens`: Max tokens to generate. Default: 4096 (max 128000 for some models)
- `stream`: Set to `true` for streaming (not recommended via curl)

## Response Format

```json
{
  "success": true,
  "provider": "openai",
  "model": "gpt-4o",
  "response": "The generated text content...",
  "tokenUsage": {
    "prompt_tokens": 25,
    "completion_tokens": 150,
    "total_tokens": 175,
    "cost": 0.001375
  }
}
```

Present the `response` field to the user. Optionally mention token usage and cost.

## Error Handling

| HTTP Status | Meaning | Action |
|-------------|---------|--------|
| 401 | Invalid API key | Tell user to check key at https://oatda.com/dashboard/api-keys |
| 402 | Insufficient credits | Tell user to check balance at https://oatda.com/dashboard/usage |
| 429 | Rate limited | Wait 5 seconds and retry once |
| 400 | Bad request / model not found | Check model format, suggest `oatda-list-models` |

## Example

User: "Write a haiku about code using claude"

```bash
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OATDA_API_KEY" \
  -d '{
    "provider": "anthropic",
    "model": "claude-sonnet-4-5-20250929",
    "prompt": "Write a haiku about code",
    "temperature": 0.7,
    "maxTokens": 256
  }'
```

## Notes

- The API expects `prompt` as a plain string, NOT a `messages` array
- Split `provider/model` into separate JSON fields
- For long-form content, increase `maxTokens`
- Use `oatda-list-models` to see all available models
- Use `oatda-vision-analysis` for image analysis tasks

