Pricing and benchmarks · 2026-08-28
Solar Pro 4 pricing: promotion, cache and standard rates
Check Solar Pro 4 promotion dates, standard USD per million token rates and a worked calculation that separates cached input from credit top-up charges.
Two pricing periods as checked on August 28, 2026
Solar Pro 4’s promotion charges $0.03 for input, $0.006 for cache reads and $0.12 for output per million tokens through September 10, 2026, 23:59 UTC. Budget later usage at standard rates.
Checked on August 28, Upstage’s pricing page lists standard amounts; its official launch announcement supplies the 90% discount and deadline. The LLMTR catalog changes periods at 2026-09-11T00:00:00.000Z, or September 11 at 03:00 in Turkey. The table separates these windows.
| Item | Promotion (USD/1M tokens) | Standard (USD/1M tokens) |
|---|---|---|
| Uncached input | 0.03 | 0.30 |
| Cache reads | 0.006 | 0.06 |
| Output | 0.12 | 1.20 |
Cached tokens are part of total input
Let P be total input tokens, C the cached portion and O total output tokens. Apply the regular input rate to P − C. Charging all of P before adding C would count cached tokens twice.
Cost = ((P − C) × input rate + C × cache rate + O × output rate) / 1,000,000. Only tokens reported as cache reads receive that discount. Repeating text does not make every token in every request cheaper.
Keeping repeated instructions and shared documents at the prompt’s beginning is a useful design choice. Nevertheless, measure cache hits from usage counters rather than guaranteeing them in your budget.
A worked example with 100,000 input tokens
Suppose a task uses 100,000 input tokens: 80,000 cache reads and 20,000 uncached tokens, plus 5,000 total output tokens. These are illustrative assumptions, not a live measurement or invoice.
Promotional cost is 0.02 × 0.03 + 0.08 × 0.006 + 0.005 × 0.12 = $0.00168. Standard rates give $0.0168 for the same distribution. At unchanged volumes, 10,000 such tasks consume $16.80 or $168 of model usage, respectively.
Without cache hits, those input and output volumes cost $0.036 at standard rates. Include this scenario to expose the difference when an expected discount does not materialize.
| Item | Tokens | Promotional cost (USD) | Standard cost (USD) |
|---|---|---|---|
| Uncached input | 20,000 | 0.00060 | 0.0060 |
| Cache reads | 80,000 | 0.00048 | 0.0048 |
| Total output | 5,000 | 0.00060 | 0.0060 |
| Total | 105,000 | 0.00168 | 0.0168 |
Include reasoning and retries in the budget
LLMTR’s August 11, 2026 Upstage record includes reasoning tokens in completion_tokens at the output rate. Do not add reasoning_tokens again when using that total. A short visible answer alone does not reveal total output consumption.
Upstage’s announcement describes the reasoning default differently from LLMTR’s measurement on that date. This article does not perform a new live test; the example explicitly selects none for reasoning_effort instead of relying on a default.
Include every model turn and retry when budgeting a task. When comparing effort settings, consider completed tasks and required human review as well as token charges.
Inspect usage without recording content
LLMTR’s record reads the cache counter from prompt_tokens_details.cached_tokens. The Python example shows usage counters without logging the prompt or model answer. A missing counter appears as null; do not interpret that as verified zero consumption.
Set LLMTR_BASE_URL to the complete API root, including /v1; the example appends no second /v1. LLMTR_API_KEY comes from the environment. Do not mix this LLMTR request with direct Upstage credentials or model identifiers. This example was not executed; running it can create billable usage.
LLMTR example that prints token counters only.
import json
import os
from urllib.request import Request, urlopen
payload = {
"model": "upstage/solar-pro4",
"messages": [{"role": "user", "content": "Summarize: A cache reuses previous work."}],
"reasoning_effort": "none",
"max_tokens": 256,
}
request = Request(
os.environ["LLMTR_BASE_URL"].rstrip("/") + "/chat/completions",
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": "Bearer " + os.environ["LLMTR_API_KEY"],
"Content-Type": "application/json",
},
)
with urlopen(request, timeout=60) as response:
result = json.load(response)
usage = result.get("usage")
if not isinstance(usage, dict):
raise RuntimeError("Usage missing; do not estimate billing.")
prompt_details = usage.get("prompt_tokens_details") or {}
completion_details = usage.get("completion_tokens_details") or {}
print(json.dumps({
"prompt_tokens": usage.get("prompt_tokens"),
"cached_tokens": prompt_details.get("cached_tokens"),
"completion_tokens": usage.get("completion_tokens"),
"reasoning_tokens": completion_details.get("reasoning_tokens"),
}))
Separate credit top-up margin from model usage
LLMTR applies its 8% platform margin when adding credit, not to the table’s model token rates. For $10 of credit, the margin calculation is $0.80. Account for model consumption separately from purchasing credit. These examples exclude taxes and currency conversion.
Split September’s budget into two periods. Use standard rates for usage after the promotion and retain a no-cache scenario when hit rates are uncertain. Sum consumption before rounding tiny request amounts, then reconcile payments and invoices against the relevant usage records.
Frequently asked questions
Does the Solar Pro 4 promotion mean free usage?
No. It is a temporary price discount. Uncached input, cache reads and output remain separate paid items; the promotion is not a promise of free or unlimited usage.
Does caching discount every request?
No guarantee applies. Check costs against reported cache-read tokens rather than the number of repeated requests. If the counter is missing, the hit rate is not verified.
Does buying credit early preserve promotional pricing?
Adding credit does not change the model’s dated pricing windows. Budget future usage at the rate applicable to that period instead of extending promotional assumptions into the standard period.