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.

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.

Appendix: 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)