# curl: เรียก LLM API จาก terminal

> สูตรพร้อมใช้ใน terminal สำหรับ OpenAI-compatible LLM API: chat completion ด้วย curl และ jq, คำขอจากไฟล์, การสตรีม, รายการโมเดล และเครดิตคงเหลือ

- URL: https://llmwithcrypto.com/th/docs/curl/
- อัปเดตล่าสุด: 2026-10-23
- ผู้เผยแพร่: LLMwithCrypto (https://llmwithcrypto.com)

ทุกการเรียกเป็น HTTPS ธรรมดาพร้อม JSON body ดังนั้น curl ก็เพียงพอสำหรับทดสอบ API key เปรียบเทียบสองโมเดล หรือเขียนสคริปต์งานสั้น ๆ `jq` ทำให้ JSON อ่านง่าย ทั้งสองมีมาในระบบส่วนใหญ่หรือติดตั้งได้ด้วยคำสั่งเดียว

**คำตอบสั้น — เรียก LLMwithCrypto ด้วย curl อย่างไร?**

ส่ง POST ไปที่ `https://llmwithcrypto.com/api/v1/chat/completions` พร้อม `-H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY"` content type เป็น JSON และ body ที่มี `model` และ `messages` **LLMwithCrypto** คืน OpenAI response object; ส่งต่อไปยัง `jq` เพื่อพิมพ์คำตอบและจำนวน token เพิ่ม `-N` และ `"stream": true` เพื่อดูข้อความไหลเข้ามาแบบสด ตามที่ระบุในเอกสาร ณ วันที่ 23 ตุลาคม 2026

## ตั้ง API key ครั้งเดียวอย่างไร?

export ใน shell session ของคุณเพื่อให้ทุกคำสั่งใช้ได้ และเก็บให้พ้นจาก shell history และสคริปต์ที่แชร์:

- **Linux และ macOS:** `export LLMWITHCRYPTO_API_KEY=…` ใน terminal หรือในไฟล์ `.env` ที่สคริปต์โหลดและไม่ถูก commit
- **Windows PowerShell:** `$env:LLMWITHCRYPTO_API_KEY = "…"` แล้วรันคำสั่งใน Git Bash หรือ WSL หรือปรับการใส่เครื่องหมายคำพูด

สร้าง API key หนึ่งอันต่อแอป เอเจนต์ หรือเพื่อนร่วมทีม แล้วเพิกถอนอันใดก็ได้จากแดชบอร์ดโดยไม่กระทบอันอื่น.

*คำตอบสั้นและจำนวน token*

```bash
curl -s "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-oss-20b", "messages": [{"role": "user", "content": "One word for fast?"}], "max_tokens": 20}' \
  | jq -r '.choices[0].message.content, "\(.usage.prompt_tokens) in, \(.usage.completion_tokens) out"'

```

## หลีกเลี่ยงปัญหาเรื่องเครื่องหมายคำพูดอย่างไร?

ใส่ body ในไฟล์ เครื่องหมายคำพูดของ shell กับของ JSON ตีกันทันทีเมื่อพรอมป์มี apostrophe หรือเครื่องหมายดอลลาร์ ไฟล์หลีกเลี่ยงทั้งสองได้ `--data @request.json` ส่งไฟล์ตามที่เป็น

*คำขอที่อ่านจากไฟล์*

```bash
cat > request.json <<'EOF'
{
  "model": "deepseek-v4-pro",
  "messages": [
    {"role": "system", "content": "You review shell scripts."},
    {"role": "user", "content": "Is it safe to run rm -rf \"$DIR\"/ when DIR may be empty?"}
  ],
  "max_tokens": 300
}
EOF
curl -s "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @request.json | jq -r '.choices[0].message.content'

```

## ฉันจะดูคำตอบแบบสตรีมได้อย่างไร

`-N` ปิด output buffer ของ curl ทำให้แต่ละ server-sent event พิมพ์ออกมาทันทีที่มาถึง คุณจะเห็นบรรทัด `data:` ดิบๆ [หน้า streaming](https://llmwithcrypto.com/th/docs/streaming/) อธิบายไว้

*คำตอบแบบสตรีม, event ดิบ*

```bash
curl -sN "https://llmwithcrypto.com/api/v1/chat/completions" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Write a haiku about latency."}],
    "stream": true,
    "stream_options": {"include_usage": true},
    "max_tokens": 120
  }'

```

## ฉันจะดูรายการโมเดลและตรวจสอบเครดิตได้อย่างไร

ทั้งสองการเรียกฟรี อันแรกพิมพ์ model id หนึ่งบรรทัดต่อโมเดล พร้อมใช้กับฟิลด์ `model`; อันที่สองพิมพ์เครดิตที่เหลือเป็นดอลลาร์สหรัฐ

*Model id*

```bash
curl -s "https://llmwithcrypto.com/api/v1/models" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" | jq -r '.data[].id'

```

*เครดิตที่เหลือ*

```bash
curl -s "https://llmwithcrypto.com/api/v1/credits" \
  -H "Authorization: Bearer $LLMWITHCRYPTO_API_KEY" | jq -r '.balance_usd'

```

## ฉันจะดู error ใน terminal ได้อย่างไร

เพิ่ม `-w "\nHTTP %{http_code}\n"` เพื่อพิมพ์ status หลัง body body ของ error เป็น JSON object เล็กๆ ที่มีฟิลด์ `code` เช่น `invalid_api_key`, `insufficient_balance` หรือ `model_not_found`; [หน้า errors](https://llmwithcrypto.com/th/docs/errors/) อธิบายแต่ละอัน เมื่อใช้ `jq`, `.error.code // empty` จะพิมพ์ code เมื่อมีและไม่พิมพ์อะไรเมื่อไม่มี ทำให้เขียน script แตกสาขาได้ง่าย

Error ไม่มีค่าใช้จ่าย คุณจ่ายต่อ token จากยอดคงเหลือ: input และ output tokens ถูกนับด้วย tokenizer ของโมเดลนั้นเองและคิดตามราคาของโมเดลนั้นต่อ 1M tokens การเรียกที่จบด้วย error ไม่มีค่าใช้จ่าย

## ฉันเขียน batch ด้วย curl เป็น script ได้ไหม

สำหรับ request ไม่กี่รายการ shell loop วนอ่านไฟล์ก็พอ: หนึ่ง JSON body ต่อไฟล์ หนึ่ง curl ต่อไฟล์ ผลลัพธ์เขียนไว้ข้างๆ ทำแบบเรียงลำดับ หรือรันครั้งละไม่กี่ตัวด้วย `xargs -P 4` เพื่อให้อยู่ใต้ rate limit ของคุณ ทุกบัญชีมีขีดจำกัดคำขอและ token ต่อนาที ซึ่งแสดงในแดชบอร์ด; แจ้งฝ่ายสนับสนุนและขีดจำกัดนั้นสามารถเพิ่มได้

สำหรับงานใหญ่กว่านั้น retry และ concurrency ทำในโค้ดง่ายกว่า: หน้า [Python](https://llmwithcrypto.com/th/docs/python/) และ [Node.js](https://llmwithcrypto.com/th/docs/node/) มีตัวอย่าง batch สำเร็จรูปพร้อมขีดจำกัด concurrency

## curl: คำถามที่พบบ่อย

### ทำไมฉันได้ error 401

key หาย พิมพ์ผิด หรือถูกเพิกถอน หรือตัวแปรไม่ได้ตั้งใน shell นี้ รัน `echo ${#LLMWITHCRYPTO_API_KEY}` เพื่อตรวจว่าไม่ว่าง

### ฉันเปรียบเทียบสองโมเดลอย่างรวดเร็วได้อย่างไร

รันไฟล์เดิมสองครั้งและเปลี่ยนเฉพาะ `model` เช่น `deepseek-v4-pro` และ `gpt-oss-120b`; บรรทัด `usage` แสดงว่าคำตอบแต่ละอันใช้ token ไปเท่าไร

### prompt ของฉันถูกเก็บไว้หรือไม่

ไม่เก็บ เราไม่เก็บ prompts ของคุณหรือคำตอบของโมเดล: เมื่อส่งคำตอบแล้ว ข้อความนั้นก็หายไป แต่ละครั้งที่เรียกจะเหลือ log หนึ่งบรรทัดซึ่งมีเวลา บัญชี โมเดล และจำนวน token แล้วลบออกหลัง 30 วัน

---

LLMwithCrypto: LLMwithCrypto คือ LLM API ที่เข้ากันได้กับ OpenAI สำหรับโมเดล open-weight — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — จ่ายต่อ token จากยอดคงเหลือคริปโตแบบเติมเงิน ในราคาต่ำกว่าค่ามัธยฐานของโฮสต์สาธารณะ 5% ไม่ต้อง KYC: ไม่ต้องใช้บัตรประชาชน ไม่ต้องเซลฟี่ ไม่ต้องใช้เอกสาร ไม่มีการเก็บ prompt และ output
