Skip to content
أكاكوسAcacus
تواصل مع المبيعاتContact sales
Docs menu

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 as balance inside error. The OpenAI libraries now fill in code, type and param. See Errors.
  • 401 errors have codes, MISSING_API_KEY and INVALID_API_KEY, and say how to fix the problem.
  • An unknown path gets 404 NOT_FOUND, and the message names the path and the endpoints the API has. A known path with the wrong method gets 405 METHOD_NOT_ALLOWED, with an Allow header.
  • A body that isn't a JSON object, such as null or an array, gets 400 INVALID_JSON.
  • 400 INVALID_PARAMETER for a model that isn't a string, a max_tokens or max_completion_tokens that isn't a whole number of at least 1, a stream that isn't true or false, and the old functions and function_call fields (use tools). These used to fall back to defaults without an error.
  • GET /v1/models lists only deepseek-v4-flash and deepseek-v4-pro. A third id, listed by mistake, gets 400 MODEL_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 temperature 5, gets DeepSeek's error and status instead of an empty 200 stream, so the SDKs raise it.
  • Every reply from the API has an x-request-id header, non-streamed replies too.
  • GET /v1/usage counts tokens: prompt and output tokens since 00:00 UTC, and in total. It used to count requests.
  • Free tier: a reasoning_effort other than none, with no thinking field, gets 402 FREE_TIER_THINKING, like a thinking field that asks for thinking. It used to be dropped without a word.
  • Free tier: the 402 messages say what to change: a lower max_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 503 UPSTREAM_DOWN, not a 401 or 402 that 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 code UPSTREAM_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 429 concurrency_limit without 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-flash is now answered by DeepSeek V4.1 Flash, and the model field of a reply says deepseek-flash. Keep sending deepseek-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_tokens can be up to 32,768 tokens on both models. It was 8,192 tokens. A request that sets no max_tokens still stops at 8,192 tokens.
  • Images: deepseek-v4-pro refuses them with 400 MODEL_NO_VISION. It used to answer without seeing them. An image outside a user message gets 400 IMAGE_NOT_IN_USER_MESSAGE, and more than 32 images in one request get 400 TOO_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 402 FREE_TIER_THINKING. A free request without a thinking field has thinking turned off.
  • Paid requests: when your balance can't cover a request's full max_tokens, max_tokens is 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 402 FREE_TIER_DAILY_LIMIT with reason request_too_large.
  • Free tier: 402 FREE_TIER_DAILY_LIMIT has reason allowance when some of today's allowance is left, but not enough for the request. Without a reason, the day's allowance is used up.
  • Free tier: 402 FREE_TIER_EXHAUSTED with reason paused when 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_id to an id made from your account, in place of any user_id you send.

24 September 2026

Suspended accounts, and the usage log

  • A suspended account's keys get 403 ACCOUNT_SUSPENDED, with a suspension object, 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/v1 with deepseek-v4-flash and deepseek-v4-pro, and a small free daily allowance.
  • Free tier: deepseek-v4-flash only (402 FREE_TIER_MODEL for 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.