> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sinarcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Models and pricing

> Search AI models, filter by mode, spot zero data retention (ZDR) versions, compare capabilities and per-token prices, and see how a price becomes a charge.

The **Models** page lists the AI models available on SinarCloud. For each model, it shows what input the model accepts, what it can do, how many tokens it handles, and its price in rupiah. Use it to choose a model, copy its alias, and work out what a request will cost.

## Find a model

In the console sidebar, under **AI**, click **Models**.

![The Models page with Clear filters and Refresh at the top right and the search box below them, with deepseek entered. Under the search box, the All and Text mode buttons with counts sit above a table of DeepSeek models, one marked with the Popular sparkle icon and some tagged ZDR. The table has Model, Input, Output, Cache read, Cache write, and Context columns and a Details button on each row.](https://mintcdn.com/sinar-cloud/Zz311Jgf5s_A88RD/images/ai-models.png?fit=max\&auto=format\&n=Zz311Jgf5s_A88RD\&q=85\&s=62aacc42fd75bc459731e588f703775f)

The Models page with the search box, mode buttons, and the model table

To narrow the list, type in the search box above the table. It matches the model name, alias, publisher, and description.

Below the search box, a row of mode buttons shows one type of model at a time: **All**, **Text**, **Completion**, **Embeddings**, **Image**, **Transcription**, **Speech**, **Video**, and **Rerank**. Each button shows how many models of that type match your search, and a type with no matching models is hidden, unless it's the one you selected. **Text** shows chat models, whose details show the mode **CHAT**.

When you've entered a search or selected a mode other than **All**, a **Clear filters** button appears next to **Refresh**. It clears the search and selects **All** again. If nothing matches, the page shows **No models match**. Click **Clear all filters** to see every model again. Models marked **Popular** come first. The list refreshes every 30 seconds, or click **Refresh**.

## Read the model table

The table lists every matching model on one page.

| Column | What it shows |
| - | - |
| **Model** | The name and tags on the first line. Below it, the model alias with a copy icon (**Copy model alias**), then the publisher. |
| **Input (Rp/1M)** | Price per 1M input tokens. |
| **Output (Rp/1M)** | Price per 1M output tokens. |
| **Cache read (Rp/1M)** | Price per 1M tokens read from the prompt cache. A dash means the model has no cache read price. |
| **Cache write (Rp/1M)** | The standard price per 1M tokens written to the prompt cache. A dash means the model has no such price. The 1-hour price is in the model's details. |
| **Context** | The context window in tokens, such as 200K, with the maximum output below it. Hover over a number to see it in full. |

At the end of each row, **Details** opens the [model's details](#view-model-details).

All prices are per 1M (one million) tokens. The console rounds prices for display, but charges use the exact price.

The **Model** column can also show these tags:

* **Popular** (sparkle icon): a model SinarCloud features.
* **Free** and **New**: labels that highlight a model. They don't change its price.
* **ZDR**: a zero data retention version. See [Zero data retention models](#zero-data-retention-models).
* A discount such as **20% off**: a promotion applies to your account. Hover over the tag to see the promotion's name.
* A signup offer such as **50% off for new signups**, below the publisher: see [Promotions and signup offers](#promotions-and-signup-offers).

### Model status

The table doesn't show a model's status. Open the model's details to see it next to the publisher.

| Status | What it means |
| - | - |
| **Available** | The model accepts requests. |
| **Preview** | The model is in preview and might not accept requests yet. Test it before you rely on it. |
| **Temporarily unavailable** | The model can't take requests right now. Requests return a `model_not_found` error. |

Retired models no longer appear on the page.

## Zero data retention models

Some models also come in a zero data retention (ZDR) version. With a ZDR version, your prompts and responses aren't kept after your request is complete. Other models use standard data handling, where prompts and responses may be retained for logging only.

A ZDR version is a model of its own:

* Its name ends in **(ZDR)**, its alias ends in `-zdr`, and it has the **ZDR** tag in the table and in its details.
* It has its own price, which can be higher than the standard version's.
* Its context window and maximum output can be smaller than the standard version's.

Not every model has a ZDR version. ZDR versions are listed with all the other models. To find them, look for the **ZDR** tag, or search for `zdr`. To use one, send its alias in the `model` field, as with any other model.

## Capabilities

Capabilities describe what a model can do. SinarCloud checks each request against them, so pick a model that lists every feature you use. A model's details list its capabilities on the **Overview** tab, under **Model capabilities**.

> [!TIP]
>
> To send images, pick a model that lists **Image input** or **Vision** as a capability. The Image icon under **Supported inputs** alone doesn't decide this.

> [accordion] All capabilities and what they mean
>
> | Capability | What it means |
> | - | - |
> | **Chat completions** | Generates replies from a conversation of messages. |
> | **Responses** | Generates output through the Responses API. |
> | **Completions** | Continues text from a prompt. |
> | **Embeddings** | Converts input into numerical vectors for similarity search and comparison. |
> | **Streaming** | Delivers output incrementally as it is generated. |
> | **Tool use** | Can request calls to tools or functions provided by your application. |
> | **JSON mode** | Can return output in JSON format. |
> | **Structured outputs** | Can generate output that follows a supplied schema. |
> | **Vision** | Understands visual content in images. |
> | **Image input** | Accepts images as input. |
> | **Audio input** | Accepts audio as input. |
> | **Audio output** | Can return audio as output. |
> | **Reasoning** | Supports reasoning tasks that require multiple steps. |
> | **Coding** | Supports writing, explaining, and working with code. |
> | **Image generation** | Creates images from a prompt. |
> | **Audio transcription** | Converts speech in an audio file into text. |
> | **Speech generation** | Generates spoken audio from text. |
> | **Video generation** | Creates video from a prompt. |
> | **Rerank** | Reorders results by their relevance to a query. |

## View model details

Click **Details** at the end of a row.

![The model details dialog for a DeepSeek model, showing its publisher, the Available, CHAT, and Popular badges, its alias with a copy icon, a button to get the model's API, and the Try in playground and Use via API buttons. Below are the prices per 1M tokens, with both cache write prices showing Not available, the context window and maximum output, and the Overview tab open with Supported inputs, Model capabilities with a description of each, and Publish date.](https://mintcdn.com/sinar-cloud/ShOrAB8ikH3IKe3Y/images/ai-model-details.png?fit=max\&auto=format\&n=ShOrAB8ikH3IKe3Y\&q=85\&s=b884851a91e53793346bdf6f50ad95af)

A model's details with prices, limits, and capabilities

The details view shows:

* The model's publisher, status, mode, and tags, and its alias with a copy icon (**Copy model ID**).
* A **Get the** *model name* **API** button, which opens [API keys](https://docs.sinarcloud.com/ai/api-keys.md).
* **Try in playground**, which opens the [Playground](https://docs.sinarcloud.com/ai/playground.md) with this model selected. It works only for models that can take requests, support chat completions, and accept text. Otherwise, it's disabled and the dialog says **This model is not available in the chat playground.**
* A **Use via API** button, which jumps to the **Use via API** tab.
* Every price and limit: input, output, cache read, both cache write prices, context window, and maximum output. A price the model doesn't offer shows **Not available**.
* Any signup offer or promotion for the model.

The **Overview** tab lists the supported inputs (Text, Image, PDF, Audio, or Video), explains each capability, and shows the model's publish date. If the model doesn't list its inputs or capabilities, the tab shows **Not specified**. The **Use via API** tab has samples in cURL, Python, TypeScript, and Go, plus setups for the OpenCode, OpenClaw, and Hermes agents. They already contain the API base URL and alias. Replace `YOUR_API_KEY` with your key.

Samples call the first endpoint the model supports: chat completions, then Responses, completions, and embeddings. A model that supports none of these has no samples. The OpenCode and OpenClaw setups need **Chat completions** or **Responses**, and the Hermes setup needs **Chat completions**. If the model doesn't list both **Streaming** and **Tool use**, the agent setups warn that agent workflows may not work.

## Use the model alias in requests

The alias is the value you send in the `model` field. Aliases are lowercase and can contain slashes, so copy the alias and use it exactly as shown. To copy it, click the copy icon next to the alias, in the table or in the model's details.

The base URL is `https://ai.sinarcloud.com/v1`. Set your API key as an environment variable, then replace `deepseek/deepseek-v4-1-flash` with the alias you copied:

```bash cURL theme={null}
export SINARCLOUD_API_KEY="your-api-key"

curl "https://ai.sinarcloud.com/v1/chat/completions" \
  -H "Authorization: Bearer $SINARCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek/deepseek-v4-1-flash", "messages": [{"role": "user", "content": "Reply with ok"}]}'
```

```python Python theme={null}
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["SINARCLOUD_API_KEY"],
    base_url="https://ai.sinarcloud.com/v1",
)
response = client.chat.completions.create(
    model="deepseek/deepseek-v4-1-flash",
    messages=[{"role": "user", "content": "Reply with ok"}],
)
print(response.choices[0].message.content)
```

Each endpoint needs its matching capability: **Chat completions** for `/chat/completions`, **Responses** for `/responses`, **Completions** for `/completions`, and **Embeddings** for `/embeddings`. If the model doesn't support the endpoint or a feature you use, or the alias is unknown, the request fails. See [Send requests](https://docs.sinarcloud.com/ai/requests.md) for every check and error.

> [!NOTE]
>
> Only these endpoints run models today. Models in other modes, such as image generation, can appear in the list but can't be called yet. To list the models you can call, send `GET /models` with your API key.

## Promotions and signup offers

When a discount applies, the price columns show the regular price crossed out and the discounted price below it.

* **Promotion**: a discount for your account, for example from a [coupon](https://docs.sinarcloud.com/billing/coupons.md) you redeemed or a signup offer you received. If more than one promotion applies, you get the largest discount.
* **Signup offer**: a discount new accounts get automatically when they sign up while the offer runs. Its price has the caption **New signup price**. Hover over the offer label to see the spots remaining and the end date (UTC).

> [!WARNING]
>
> A **New signup price** applies only to accounts that received the offer at signup. Other accounts pay the regular price or their own promotional price.

Promotions and signup offers apply only while they run. After the end date, or once the offer's budget is used up, you pay the regular price, even for a signup offer you received.

If the label reads **Signup offer fully claimed**, new accounts can't get the offer, but accounts that already have it keep the discount. If it reads **Signup offer currently unavailable**, the offer's budget is used up and its discount doesn't apply right now.

## How a price becomes a charge

The price in effect when a request starts applies to the whole request, and so does the promotion chosen at that moment.

```text theme={null}
charge = ( uncached input tokens × input price
         + cache read tokens     × cache read price
         + cache write tokens    × cache write price
         + output tokens         × output price ) ÷ 1,000,000
```

Cache writes use **Cache write (standard)** for the default `5m` cache duration, or **Cache write (1 hour)** for `1h`. A request is rejected if it uses a cache duration whose price shows **Not available**, or if it mixes both durations. If the model has no cache read price, cached input tokens are charged at the input price.

For example, a model costs Rp 15,000 per 1M input tokens and Rp 60,000 per 1M output tokens. A request with 2,000 input tokens and 500 output tokens costs Rp 30 for input and Rp 30 for output, so Rp 60 in total. Charges aren't rounded to whole rupiah, so a small request can cost a fraction of a rupiah. Every request that costs something has a full price of at least Rp 0.6, though: if its tokens cost less, its full price is Rp 0.6. Requests on a free model, and requests that use no tokens, stay free. For more worked examples, including cache reads and writes, see [How tokens are counted](https://docs.sinarcloud.com/ai/tokens.md).

[Token credits](https://docs.sinarcloud.com/ai/token-credits.md) for the model pay first. A promotion then discounts what's left, and your [balance](https://docs.sinarcloud.com/billing/overview.md) pays the rest. Under a 100% promotion, the request is free and your token credits aren't used. If a promotion's budget runs low, the discount can be smaller than its percentage, and token credits or your balance pay the difference.

A request starts only if your balance is above zero, you have token credits for the model, or the request costs nothing. Otherwise, you get a `402` error with the code `insufficient_balance`. The charge is taken when the request finishes, even if your balance goes below zero, and your next top-up covers that first. See each charge in [Usage and spending](https://docs.sinarcloud.com/ai/usage.md).

### When a price changes

Model prices can change, but a request that has already started keeps its price.

Before some price increases, SinarCloud emails the account's owners, usually about a week ahead, if your account used the model in the last 30 days. The subject reads "*model* costs more from *date*". The email lists the current and new prices per 1M input and output tokens and the date the new price applies. Requests before then keep the current price. Not every price increase comes with this email, so check the **Models** page before you rely on a price. See [When a model's price changes](https://docs.sinarcloud.com/billing/overview.md#when-a-models-price-changes).

> [card] [Create an API key](https://docs.sinarcloud.com/ai/api-keys.md)
>
> Create the key your requests use.

> [card] [Send requests](https://docs.sinarcloud.com/ai/requests.md)
>
> Call the API with an OpenAI-compatible client.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.