# cURL

> cURL দিয়ে Tokens API চালান: chat completion, streaming, Anthropic Messages, model-এর তালিকা, usage দেখা, আর error response থেকে request ID পড়া।

key ঠিকমতো কাজ করছে কি না দেখতে আর Tokens API ঠিক কী ফেরত দেয় তা দেখতে cURL-ই সবচেয়ে দ্রুত উপায়। মাঝখানে কোনো SDK থাকে না। নিচের প্রতিটি উদাহরণ আপনার key `TOKENS_API_KEY` থেকে পড়ে, তাই আগে এটা set করে নিন।

```bash
export TOKENS_API_KEY="tok_live_your_key"
```

Windows PowerShell-এ `$env:TOKENS_API_KEY = "tok_live_your_key"` লিখুন, আর `curl`-এর বদলে `curl.exe` চালান। কারণ Windows PowerShell 5.1-এ `curl` আসলে `Invoke-WebRequest`-এর alias, আর সেটার flag আলাদা। নিচের command-এ `\` দিয়ে যে লাইন ভাঙা হয়েছে, সেটা bash আর zsh-এর জন্য। PowerShell-এ পুরো command এক লাইনে লিখুন, অথবা backtick ব্যবহার করুন।

## cURL দিয়ে chat completion পাঠান

OpenAI-compatible base URL হলো `https://tokens.bd/v1`। পরিচয় দিতে `Authorization: Bearer` header ব্যবহার করুন।

```bash
curl https://tokens.bd/v1/chat/completions \
  -H "Authorization: Bearer $TOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4.1-flash",
    "messages": [
      {"role": "system", "content": "You are a terse code reviewer."},
      {"role": "user", "content": "What does `set -euo pipefail` do?"}
    ],
    "max_tokens": 300
  }'
```

Response একটা সাধারণ chat completion object। উত্তর থাকে `choices[0].message.content`-এ, আর token-এর হিসাব থাকে `usage`-এ। প্রতিটি field-এর বিস্তারিত পাবেন [Chat Completions](/docs/chat-completions) পেজে।

`model` দেওয়া বাধ্যতামূলক। Request body সর্বোচ্চ 10 MB হতে পারে, এর বেশি হলে `413` আসবে।

## -N দিয়ে token stream করুন

Body-তে `"stream": true` দিন আর command-এ `-N` (`--no-buffer`) যোগ করুন। তাহলে পুরো response শেষ হওয়ার অপেক্ষা না করে প্রতিটি server-sent event আসামাত্র cURL সেটা print করবে।

```bash
curl -N https://tokens.bd/v1/chat/completions \
  -H "Authorization: Bearer $TOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Count from 1 to 10, one number per line."}],
    "stream": true,
    "stream_options": {"include_usage": true}
  }'
```

Output-এ প্রথমে `data: {...}` লাইনগুলো আসবে, যেগুলোতে `choices[0].delta.content` থাকে। শেষে আসবে `data: [DONE]`। Usage chunk-টা (এর `choices` array ফাঁকা) শুধু তখনই আসে যখন request-এ `stream_options.include_usage` দেওয়া থাকে। এটা বাদ দিলে stream-এ কোনো token count থাকবে না। Event-এর format নিয়ে আরও জানতে দেখুন [Streaming](/docs/streaming)।

## Anthropic Messages API চালান

একই key Anthropic-compatible endpoint-এও চলে। এবার key পাঠান `x-api-key` header-এ। `Authorization: Bearer` দিলেও চলবে, দুটোই নেওয়া হয়।

```bash
curl https://tokens.bd/v1/messages \
  -H "x-api-key: $TOKENS_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4.1-flash",
    "max_tokens": 300,
    "messages": [{"role": "user", "content": "Explain a git rebase in two sentences."}]
  }'
```

Model-কে Anthropic-এর হতেই হবে এমন কোনো কথা নেই। আপনি যে model-এর নাম দেবেন, gateway সেটা যে provider চালায় তার জন্য request-টা নিজে বদলে নেয়। Anthropic-style event stream করতে `"stream": true` আর `-N` যোগ করুন। বিস্তারিত [Messages](/docs/messages) পেজে।

:::note
Anthropic-এর জন্য বানানো SDK ও tool সাধারণত base URL চায় `/v1` ছাড়া (`https://tokens.bd`), কারণ ওরা নিজেরাই শেষে `/v1/messages` জুড়ে নেয়। সরাসরি cURL চালালে আপনাকে পুরো path নিজে লিখতে হবে।
:::

## আপনার key দিয়ে কোন কোন model চলবে দেখুন

```bash
curl https://tokens.bd/v1/models \
  -H "Authorization: Bearer $TOKENS_API_KEY"
```

এটা এই মুহূর্তে এই key-এর জন্য যে model-গুলো পাওয়া যাচ্ছে তার তালিকা দেয়। হিসাবে ধরা হয় আপনার plan, Wallet-এর ব্যালান্স আর key-এর allowed-models list। Model ID মুখস্থ থেকে না লিখে এখান থেকে copy করুন। দামসহ পুরো catalog আছে [/models](/models) পেজে।

শুধু ID-গুলো বের করতে চাইলে `jq` ব্যবহার করুন:

```bash
curl -s https://tokens.bd/v1/models \
  -H "Authorization: Bearer $TOKENS_API_KEY" | jq -r '.data[].id'
```

## Plan usage আর Wallet-এর ব্যালান্স দেখুন

`GET /v1/tokens/usage` শুধু Tokens-এ আছে। এটা আপনার plan, চালু usage window, Wallet-এর ব্যালান্স আর এই key-এর সীমাগুলো দেখায়। এটা শুধু পড়ার call, এর জন্য কোনো টাকা কাটে না।

```bash
curl -s https://tokens.bd/v1/tokens/usage \
  -H "Authorization: Bearer $TOKENS_API_KEY" | jq
```

Response-এর উপরের স্তরে এই field-গুলো থাকে:

| Field     | কী থাকে                                                                                                                       |
| --------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `plan`    | Plan-এর নাম, tier আর `periodEnd`। চালু plan না থাকলে `null`                                                                  |
| `windows` | চালু usage window (`session_5h`, `weekly`, `monthly`), প্রতিটিতে `unit`, `limit`, `used`, `remaining`, `percentUsed`, `resetsAt` |
| `wallet`  | `balanceUsd`, অথবা `null`                                                                                                     |
| `key`     | আপনি যে key দিয়ে call করেছেন তার `monthlySpendCapUsd` আর `allowedModels`                                                     |

কোনো request `429 window_exhausted` দিয়ে ব্যর্থ হলে আর window কখন reset হবে জানতে চাইলে এই call-টাই করুন।

## -i আর x-tokens-request-id দিয়ে error debug করুন

Body-র সাথে response header-ও দেখতে `-i` দিন। প্রতিটি response-এ `x-tokens-request-id` থাকে। Support প্রথমেই এটা চাইবে।

```bash
curl -i https://tokens.bd/v1/chat/completions \
  -H "Authorization: Bearer $TOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "not-a-real/model", "messages": [{"role": "user", "content": "hi"}]}'
```

```http
HTTP/2 404
content-type: application/json
x-tokens-request-id: 7f3c...
x-request-id: ...

{"error":{"message":"...","type":"...","code":"model_not_found","param":null,"request_id":"7f3c..."}}
```

শুধু HTTP status দেখে থেমে যাবেন না, `error.code`-টা পড়ুন। `403`-এর মানে হতে পারে key inactive, model-টা key-এর allow-list-এ নেই, অথবা spend cap ছুঁয়ে গেছে। তিনটার সমাধান তিন রকম। `429` এলে `Retry-After` header দেখুন। Tokens `X-RateLimit-*` header পাঠায় না।

Script-এ এক লাইনে status যাচাই করতে চাইলে `-w` দিয়ে শুধু code print করুন:

```bash
curl -s -o /dev/null -w "%{http_code}\n" https://tokens.bd/v1/models \
  -H "Authorization: Bearer $TOKENS_API_KEY"
```

`200` এলে key ঠিক আছে। `401` এলে key নেই অথবা ভুল। সব code-এর তালিকা আর কোনটায় কী করবেন তা আছে [Errors](/docs/errors) আর [Troubleshooting](/docs/troubleshooting) পেজে।

## কোন কোন endpoint নেই

Gateway এই endpoint-গুলো চালায়: `/v1/chat/completions`, `/v1/completions` (পুরোনো), `/v1/messages`, `/v1/responses`, `/v1/embeddings` (শুধু embedding model-এর জন্য), `/v1/models` আর `/v1/tokens/usage`। Image generation, audio, file, batch, assistant, fine-tuning আর moderation endpoint-এ গেলে `404 unsupported_endpoint` আসবে। তবে chat request-এর ভেতরে model-কে ছবি পাঠানো চলে: দেখুন [Image input](/docs/vision)।

---
Page: https://tokens.bd/bn/docs/curl
