Help
Changelog
Changes to the Acacus API that can affect your code, newest first. Each date is the day, in UTC, when the change went live.
26 September 2026
Errors in OpenAI's format, GET /v1/models/{id}, and fixes
- Every error the API makes itself now has OpenAI's format,
{"error": {"message", "type", "code", "param"}}, with details such asbalanceinsideerror. The OpenAI libraries now fill incode,typeandparam. See Errors. - 401 errors have codes,
MISSING_API_KEYandINVALID_API_KEY, and say how to fix the problem. - An unknown path gets
404NOT_FOUND, and the message names the path and the endpoints the API has. A known path with the wrong method gets405METHOD_NOT_ALLOWED, with anAllowheader. - A body that isn't a JSON object, such as
nullor an array, gets400INVALID_JSON. 400INVALID_PARAMETERfor amodelthat isn't a string, amax_tokensormax_completion_tokensthat isn't a whole number of at least 1, astreamthat isn'ttrueorfalse, and the oldfunctionsandfunction_callfields (usetools). These used to fall back to defaults without an error.GET /v1/modelslists onlydeepseek-v4-flashanddeepseek-v4-pro. A third id, listed by mistake, gets400MODEL_NOT_FOUND, and that error's message now lists the ids that work.- New:
GET /v1/models/{id}, which the SDKs'models.retrieve()calls. It needs no key. - A streamed request that DeepSeek refuses, for example with
temperature5, gets DeepSeek's error and status instead of an empty200stream, so the SDKs raise it. - Every reply from the API has an
x-request-idheader, non-streamed replies too. GET /v1/usagecounts tokens: prompt and output tokens since 00:00 UTC, and in total. It used to count requests.- Free tier: a
reasoning_effortother thannone, with nothinkingfield, gets402FREE_TIER_THINKING, like athinkingfield that asks for thinking. It used to be dropped without a word. - Free tier: the
402messages say what to change: a lowermax_tokens, the size limits, or the 00:00 UTC reset. The codes are the same. - When DeepSeek refuses the Acacus gateway's own key or account, you get
503UPSTREAM_DOWN, not a401or402that looked like a problem with your key or wallet. An error from DeepSeek whose body isn't JSON now comes in the same error format, with the codeUPSTREAM_ERROR. - Internal paths that answered under
/v1/with an extra prefix, such as/v1/openai/and/v1/v1/, are gone (404). - Requests that DeepSeek refuses as invalid no longer appear on the Usage page as failed requests.
- A place in flight that is never given back, for example after a restart during a reply, clears 130 seconds after your last request that got a place. Refused retries used to keep it stuck, so a client that kept retrying got
429concurrency_limitwithout end. See Rate limits. - Console: the API keys list shows each key's first 12 characters, followed by dots. It used to end with 4 characters that were not part of the key.
- Docs: rewritten in English, with a page for each part of the API.
25 September 2026
DeepSeek V4.1 Flash, new prices, longer replies, free-tier changes
- DeepSeek renamed its Flash model:
deepseek-v4-flashis now answered by DeepSeek V4.1 Flash, and themodelfield of a reply saysdeepseek-flash. Keep sendingdeepseek-v4-flash. - New prices from 13:33 UTC, based on DeepSeek's new price list. The current prices are on Billing and the free tier.
max_tokenscan be up to 32,768 tokens on both models. It was 8,192 tokens. A request that sets nomax_tokensstill stops at 8,192 tokens.- Images:
deepseek-v4-prorefuses them with400MODEL_NO_VISION. It used to answer without seeing them. An image outside a user message gets400IMAGE_NOT_IN_USER_MESSAGE, and more than 32 images in one request get400TOO_MANY_IMAGES. - The balance check and the free allowance count an image as at most 1,024 prompt tokens, so free requests with images are no longer refused for their size, and paid ones no longer need a large balance.
- Free tier: a request that asks for thinking gets
402FREE_TIER_THINKING. A free request without athinkingfield has thinking turned off. - Paid requests: when your balance can't cover a request's full
max_tokens,max_tokensis lowered to what the balance covers, down to 8,192 tokens. - Free tier: the size limit is now 80,000 prompt tokens and 320,000 bytes of JSON, image data not counted. A larger request gets
402FREE_TIER_DAILY_LIMITwithreasonrequest_too_large. - Free tier:
402FREE_TIER_DAILY_LIMIThasreasonallowancewhen some of today's allowance is left, but not enough for the request. Without areason, the day's allowance is used up. - Free tier:
402FREE_TIER_EXHAUSTEDwithreasonpausedwhen free use is paused. - Free tier: requests made during DeepSeek's peak hours (01:00 to 04:00 and 06:00 to 10:00 UTC, Monday to Friday) use up the daily allowance twice as fast. Paid requests cost the same at every hour.
- The prompt cache is private to your account: the API sets DeepSeek's
user_idto an id made from your account, in place of anyuser_idyou send.
24 September 2026
Suspended accounts, and the usage log
- A suspended account's keys get
403ACCOUNT_SUSPENDED, with asuspensionobject, and a suspended account can't create keys. See Authentication and API keys. - Console: the Usage page lists every request, API requests included, with filters (dates, model, channel) and CSV export.
23 September 2026
Relaunch
- Acacus relaunched. The API answers at
https://ai.shafra.ly/v1withdeepseek-v4-flashanddeepseek-v4-pro, and a small free daily allowance. - Free tier:
deepseek-v4-flashonly (402FREE_TIER_MODELfor the other model), with replies of up to 2,048 tokens. - Paid requests: your balance must cover a request's largest possible cost before it runs.
Changes made before the relaunch on 23 September 2026 are not listed.