langgenius/dify · error · ProviderQuotaExceededError

provider_quota_exceeded

provider_quota_exceeded

Error message

Your quota for Dify Hosted Model Provider has been exhausted. Please go to Settings -> Model Provider to complete your own provider credentials.

What it means

HTTP 400 ProviderQuotaExceededError, raised by the STT endpoint. The model layer raised QuotaExceededError: the Dify Hosted Model Provider usage quota for the tenant is exhausted. The controller surfaces a fixed message directing the user to configure their own provider credentials.

Source

Thrown at api/controllers/console/explore/audio.py:85

            return response
        except services.errors.app_model_config.AppModelConfigBrokenError:
            logger.exception("App model config broken.")
            raise AppUnavailableError()
        except NoAudioUploadedServiceError:
            raise NoAudioUploadedError()
        except AudioTooLargeServiceError as e:
            raise AudioTooLargeError(str(e))
        except UnsupportedAudioTypeServiceError:
            raise UnsupportedAudioTypeError()
        except ProviderNotSupportSpeechToTextServiceError:
            raise ProviderNotSupportSpeechToTextError()
        except SpeechToTextDisabledServiceError:
            raise SpeechToTextDisabledError()
        except ProviderTokenNotInitError as ex:
            raise ProviderNotInitializeError(ex.description)
        except QuotaExceededError:
            raise ProviderQuotaExceededError()
        except ModelCurrentlyNotSupportError:
            raise ProviderModelCurrentlyNotSupportError()
        except InvokeError as e:
            raise CompletionRequestError(e.description)
        except ValueError as e:
            raise e
        except Exception as e:
            logger.exception("internal server error.")
            raise InternalServerError()


@console_ns.route(
    "/installed-apps/<uuid:installed_app_id>/text-to-audio",
    endpoint="installed_app_text",
)
class ChatTextApi(InstalledAppResource):
    @console_ns.expect(console_ns.models[TextToAudioPayload.__name__])
    @console_ns.response(200, "Success", console_ns.models[AudioBinaryResponse.__name__])

View on GitHub (pinned to ef8544b173)

Solutions

  1. Upgrade the Dify Cloud plan or wait for the quota window to reset.
  2. Configure your own model provider credentials (Settings -> Model Provider) and set them as default so calls route through your account instead of the hosted pool.
  3. Audit which apps/installed-apps are consuming the most STT calls and throttle or disable unused ones.
Defensive patterns

Strategy: fallback

Try / catch

try { await postAudio(file) }
catch (e) {
  if (e.code === 400 && e.error_code === 'provider_quota_exceeded') {
    notifyUser('Hosted quota exhausted. Configure your own provider credentials.')
  } else throw e
}

Prevention

When it happens

Trigger: POST /console/explore/installed-apps/{id}/audio-to-text on Dify Cloud where the hosted trial quota for the tenant is fully consumed, and no personal provider credentials are configured as a fallback.

Common situations: Free-tier / trial Dify Cloud workspace that hit its monthly call cap; spike in transcription traffic consuming the remaining quota; org migrating off hosted trial but not yet configured own keys.

Related errors


AI-assisted analysis of langgenius/dify@ef8544b173 (2026-08-12). Data as JSON: /api/errors/0420acd21f51cd30. Report an issue: GitHub.