claude-opus-5-5 shows up on hiapi's own model card with input and output modalities both listed as text — no image generation, no image input mentioned. So when a brief calls for "product images," the honest answer is the same one you'd give for any pure-text LLM: wrong tool. What it's actually good for in an online store is writing: product descriptions, listing copy, and support replies. It also has a reasoning parameter most people never touch, and that parameter has a real, billable side effect worth knowing before you wire it into a production pipeline. Four real calls against the hiapi API below, with real output, real token counts, and one gotcha that cost real money to find.
The reasoning.effort parameter, and what it actually buys you
claude-opus-5-5's model card lists five reasoning efforts: low, medium, high, xhigh, max. The request shape is:
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 500,
"reasoning": {"effort": "high"},
"messages": [
{"role": "system", "content": "You are an e-commerce copywriter. Write a 60-word product description. No superlatives."},
{"role": "user", "content": "Product: insulated water bottle. 750ml, stainless steel, double-wall vacuum insulation, leak-proof lid, matte finish. Keeps drinks cold 24h, hot 12h."}
]
}'
Two other request shapes look plausible and both fail: a top-level reasoning_effort field and an Anthropic-native thinking: {"type": "enabled", "budget_tokens": ...} block both return invalid_request. reasoning: {"effort": "..."} is the only shape that works on this route.
The assumption going in was that a higher effort level would cost more tokens for a harder-thinking answer. Sending the exact same 60-word-description prompt at max_tokens: 500 across minimal (undocumented, more on that below), low, medium, high, and max says otherwise:
| effort | prompt_tokens | completion_tokens | finish_reason |
|---|---|---|---|
| minimal | 130 | 499 | stop |
| low | 130 | 499 | stop |
| medium | 130 | 499 | stop |
| high | 130 | 499 | stop |
| max | 130 | 499 | stop |
Every level billed exactly 499 completion tokens for the same prompt. Not close — identical. What actually changed was the writing:
minimal: Stay hydrated anywhere with this 750ml stainless steel water bottle. Double-wall insulation keeps drinks cold for 24 hours and hot for 12, so your water stays refreshing from trails to gym sessions. The leak-proof lid seals tight in your pack, while the matte finish resists scratches and feels secure in hand. BPA-free, durable, ready for every workout and outdoor adventure.
high: Stainless Steel Insulated Water Bottle, 750ml. Built for long trails and longer workouts. Double-wall stainless steel insulation keeps drinks cold 24 hours or hot 12, so your water tastes fresh to the last sip. The leak-proof lid seals tight in a pack or gym bag. The matte finish resists scuffs and sweaty hands. 750ml holds enough for a full ride without weighing you down.
high added a bolded title line and reordered the pitch; minimal skipped straight to the pitch. Both landed at 60 words, both stayed inside the "no superlatives" rule, both cost the same. low and medium filled in between with progressively less structure. Note that minimal isn't actually on the documented five-level list — it wasn't rejected, but treat an undocumented value as unsupported rather than relying on it in production; use one of the five listed levels (low/medium/high/xhigh/max).
The real lesson: reasoning.effort changes style, not price. At a fixed max_tokens, cost tracks the ceiling you set, not the effort string. If you're budgeting a copywriting pipeline by effort level expecting low to be the cheap tier, it isn't — max_tokens is the only lever that moves the bill.
The gotcha: reasoning eats into your max_tokens budget, silently
That "cost tracks max_tokens" finding has a sharp edge. claude-opus-5-5 reasons internally before it writes the visible reply, and that internal reasoning draws from the same max_tokens ceiling as the answer itself. Push the effort up without raising the ceiling, and the model can run out of budget mid-answer — or before it writes anything visible at all.
First case, effort: xhigh at max_tokens: 500 on a plain copywriting prompt:
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 500,
"reasoning": {"effort": "xhigh"},
"messages": [
{"role": "system", "content": "You are an e-commerce copywriter. Given a product spec, write a title (max 70 characters), 3 bullet features, and a 2-3 sentence description. No superlatives, no exclamation marks."},
{"role": "user", "content": "Product: insulated travel mug. Material: 18/8 stainless steel, double-wall vacuum insulation. Capacity: 16oz. Lid: leak-proof slide lock. Keeps drinks hot 6 hours, cold 12 hours."}
]
}'
Actual response, unedited — it cuts off mid-sentence:
Title: 16oz Insulated Travel Mug, Stainless Steel, Leak-Proof Slide Lock Lid
Features:
- Temperature retention: Double-wall vacuum insulation keeps drinks hot for 6 hours and cold for 12 hours.
- Durable construction: Made from 18/8 stainless steel that resists rust and doesn't retain flavors.
- Leak-proof lid: The slide lock seals the opening, so you can toss the mug in a bag without worrying about spills.
Description: This 16oz travel mug uses double-wall vacuum insulation to hold your coffee hot through the morning or your
finish_reason: "length", 500 completion tokens billed, and the description clause just stops at "or your" — no closing punctuation, no error, no warning field. A pipeline that only checks for HTTP 200 would ship that half-sentence straight into a listing.
Second case is worse: a support-reply prompt at max_tokens: 300 with default reasoning came back completely empty.
{
"finish_reason": "length",
"usage": {"prompt_tokens": 157, "completion_tokens": 300, "total_tokens": 457},
"message": {"content": "", "reasoning_details": [{"text": "", "type": "reasoning.text"}]}
}
content is an empty string. The reasoning_details field confirms why: the model spent the entire 300-token budget on internal reasoning ("text": "" — not even the reasoning trace is exposed, just an opaque encrypted signature blob) and had nothing left to write the actual reply. hiapi still billed the full 300 completion tokens for that call — you pay for the thinking whether or not it produces a visible answer.
The fix in both cases is the same: set max_tokens with real headroom above what the visible answer needs, especially at high/xhigh/max effort. Don't trust finish_reason: "stop" as proof of a good answer, either — check that content is both non-empty and actually ends the thought before you write it to a database.
Use case: customer support reply drafting
Feed it your policy and a real customer message:
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 400,
"reasoning": {"effort": "medium"},
"messages": [
{
"role": "system",
"content": "You are a customer support agent for an online water bottle store. Policy: 30-day return window from delivery. Manufacturing defects reported after the window should be referred to the manufacturer'\''s own warranty. Reply in under 100 words, empathetic but concise, end with a clear next step."
},
{
"role": "user",
"content": "I bought a water bottle 35 days ago and the seal is already leaking. Can I get a refund or exchange?"
}
]
}'
Actual response, unedited:
I'm sorry about the leak. Since it's been 35 days, the order is past our 30-day return window, so I can't process a return or exchange through us. Many water bottle brands warranty seal defects from normal use, so I'd recommend contacting the manufacturer directly. If you share your order number, I can give you the brand's details to help with that claim.
It applied the exact policy edge case correctly — 35 days is past the 30-day window, so it declined the direct return and redirected to manufacturer warranty instead of just apologizing and offering a refund anyway. 277 completion tokens, finish_reason: "stop", a complete answer with no truncation. This is the same model, same account, same medium effort as the copywriting table above — the difference here is max_tokens: 400 gave it enough room to both reason and answer.
Vision works, even though the model card says it doesn't
One more real, verified surprise: claude-opus-5-5's model card lists Input modalities: text — no image input mentioned anywhere. Sending it an image anyway works:
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 150,
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "In one sentence, what is in this photo?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
}'
Actual response, unedited (truncated by the same max_tokens mechanics covered above — 150 wasn't enough room):
This is a neatly arranged flat-lay of men's everyday accessories on a gray surface, including a black zip wallet, aviator sunglasses, a tweed bow tie, a notebook
It read the photo correctly. The model card's "text" modality listing is wrong, or at least incomplete, for this route — the same disagreement-between-card-and-reality pattern the claude-opus-4-8 writeup ran into on its vision claim. Don't build a pipeline that gates on the published modality list; send a real request and read the real response, same as with the reasoning parameter above.
Cost notes
Nine real calls, all billed on the single claude-opus-5-5 route (no -aws or other pricing variant exists for this model, unlike claude-opus-4-8), at $2.02/M input and $10.08/M output tokens per the hiapi pricing page:
| call | prompt_tokens | completion_tokens | cost |
|---|---|---|---|
| effort table × 5 (minimal/low/medium/high/max) | 650 | 2,495 | $0.0264 |
| xhigh truncation gotcha | 185 | 500 | $0.0054 |
| empty-reply gotcha | 157 | 300 | $0.0033 |
| support reply | 3,590 | 277 | $0.0100 |
| vision aside | 690 | 150 | $0.0029 |
| total | 5,272 | 3,722 | $0.0482 |
No image generation anywhere in this — claude-opus-5-5 doesn't produce images, so every dollar above is token cost, and the two "gotcha" rows are the ones worth budgeting extra for: they billed real money for output that was either cut off or completely blank.
FAQ
Can claude-opus-5-5 generate product images? No. Its model card lists text-only input and output modalities, and every response above is text. If the job is actually producing new product photography, that needs an image-generation model, not this one.
Does a higher reasoning.effort cost more?
Not by itself. At a fixed max_tokens, all five documented levels billed the identical completion-token count in testing above — effort changes the writing, not the token count. What costs more is raising max_tokens to give a higher effort level room to both reason and answer.
Why did I get an empty response with no error?
max_tokens was too low for the reasoning the model did internally before writing. It's not a bug — finish_reason will say "length" and you'll still be billed for the full token count, but content can come back empty or truncated. Always check that content is non-empty and complete, not just that the call returned 200.
Does it actually support image input?
Yes, confirmed by sending a real image in the request above and getting back an accurate description — even though the model's own card lists text as the only input modality.
Getting started
To try this yourself: an hiapi API key, the claude-opus-5-5 model page for current pricing and the full reasoning-effort list, and if you're comparing text-only models for the same e-commerce copy-and-support workload, the claude-opus-4-8 writeup covers the same ground on the previous Opus generation — worth checking whether the max_tokens/reasoning tradeoff above is worth the jump before you switch a production pipeline over.



