GPT-5.6 Terra, Sol, and Luna: how they differ and when to use which

Similarly named models with no stated difference. Here's how to find out in a couple of requests which one fits your workload.

4 min · · Updated · models

Update, October 2026. GPT-5.6 Terra (gpt-5.6-terra) is currently unavailable in Zukko. Current model list: the Models page or GET https://api.zukko.pro/v1/models. Closest replacement: gpt-5.6-sol.

The GPT-5.6 line in the catalog had three ids: gpt-5.6-terra, gpt-5.6-sol, and gpt-5.6-luna; gpt-5.6-sol and gpt-5.6-luna are available now. These are OpenAI-compatible models with extended thinking and a 1,000,000-token context window (not every model in the catalog is like that: GLM has 128K and no vision). The catalog doesn't publish a spec sheet spelling out how they differ in quality or speed, and guessing from the names — Terra, Sol, Luna — is a bad strategy: a name guarantees nothing about a model's size or behavior.

What you can learn without spending a token

Before comparing models on real requests, it's worth checking price and limits first — no key required:

bash
curl https://api.zukko.pro/v1/models/info | jq '.data[] | select(.id | startswith("gpt-5.6"))'

/v1/models/info returns extended details: limits and pricing per model. If the per-token price of the variants differs noticeably (Sol is $0.30, Luna $0.10 per 1M tokens), that's already a practical signal — the pricier model in a line is usually meant for harder tasks, the cheaper one for volume.

A plain list confirming the models exist, without the details, is even simpler:

bash
curl https://api.zukko.pro/v1/models

Comparing on the same request

The most honest way to see the difference is to run an identical prompt through the available models in the line and compare not just the text but the headers that come back with it.

bash
import requests

KEY = "fetch_your_key"
PROMPT = "Explain the difference between optimistic locking and pessimistic locking using an account balance update as an example"

for model in ["gpt-5.6-sol", "gpt-5.6-luna"]:
    resp = requests.post(
        "https://api.zukko.pro/v1/chat/completions",
        headers={"Authorization": f"Bearer {KEY}"},
        json={
            "model": model,
            "messages": [{"role": "user", "content": PROMPT}],
            "max_tokens": 600,
        },
        timeout=120,
    )
    cost = resp.headers.get("X-Zukko-Cost-Micros")
    print(model, "cost_micros=", cost, "len=", len(resp.json()["choices"][0]["message"]["content"]))

X-Zukko-Cost-Micros shows the cost of that specific request in micro-dollars — a million micro-dollars equals one dollar. Run a dozen prompts typical of your own workload this way and you get an actual price and output-length comparison for your task, not an abstract benchmark from someone else's post.

Counting tokens ahead of time on the OpenAI-compatible path

There's no free token-counting endpoint for /v1/chat/completions and /v1/responses equivalent to /v1/messages/count_tokens on the Anthropic-compatible side — that one only counts for Claude models. For the GPT-5.6 line it's more practical to rely on the usage field in the response itself and on the history via GET /v1/usage.

Extended thinking is equally available on both available models

Since the GPT-5.6 line has extended thinking and a 1M context window, the difference between Sol and Luna isn't whether the feature exists — it's how each one handles a task once it's turned on, and what that costs in price and latency. Checking that takes the same approach: an identical request, compared on cost and output.

If a model in the line gets retired

When a model in the line is switched off (as already happened to gpt-5.6-terra), a request to it returns 503 model_disabled — not a 404 and not model_retired. Look for a replacement in the current GET https://api.zukko.pro/v1/models list or on the Models page in the dashboard; for Terra the closest replacement is gpt-5.6-sol.

If you're used to gpt-4o or gpt-4

Those ids don't exist in this catalog — they're old names from the direct OpenAI API, not something temporarily disabled. Moving to the gateway means explicitly picking one of the current ids: gpt-5.6-sol, gpt-5.6-luna for the GPT line, or a model from another family — claude-sonnet-5, glm-5.3, and so on (current list: GET https://api.zukko.pro/v1/models) — if the task allows switching vendors too, not just versions. There's no automatic name mapping: the old id just returns 404 model_not_found.

Balance before and after — an honest total cost check

If the comparison isn't one request but a batch of several dozen, it's easier to check total balance rather than sum X-Zukko-Cost-Micros line by line:

bash
curl https://api.zukko.pro/v1/balance -H "Authorization: Bearer fetch_your_key"

Run the batch on one model, check balance before and after, then repeat for the other model — that shows the real total cost difference across the models on your actual volume without manually adding up per-request headers.

If you're comparing through a tool, not directly

If test requests go through Cursor, Cline, or another OpenAI-compatible tool rather than a standalone script, first make sure the base is set with the /v1 suffix: https://api.zukko.pro/v1. Without it, a model comparison turns into a comparison of 404 errors — the most common reason "the model isn't responding" has nothing to do with the choice between Sol and Luna.

The practical takeaway

Without a published spec sheet, comparing Sol and Luna by description alone doesn't get you far. Use /v1/models/info for price, and your own run of representative requests for quality. It takes five minutes and a few cents, and gives you an answer for your actual task instead of a general opinion about the line.

zukko

Pay 25×
less

for Claude Code & ChatGPT

One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.

Get API keyDocumentation

api.zukko.pro · fetch_*

GPT-5.6 Terra vs Sol vs Luna explained · Zukko