Significant-Gravitas/AutoGPT · error · HTTPException

Media storage is not configured

Error message

Media storage is not configured

What it means

Returned (503 Service Unavailable) when the logo upload endpoint checks settings.config.media_gcs_bucket_name and finds it empty. The instance has no Google Cloud Storage bucket configured, so media uploads cannot be served.

Solutions

  1. Set the media GCS bucket configuration (bucket name and credentials) in the backend settings/environment
  2. Restart the backend after applying the configuration
  3. If you do not intend to support uploads, avoid exposing the logo upload UI on that instance

Example fix

# .env / environment
# before: MEDIA_GCS_BUCKET_NAME unset
# after
MEDIA_GCS_BUCKET_NAME=my-media-bucket
MEDIA_GCS_KEY=en...
Defensive patterns

Strategy: validation

Validate before calling

if not settings.config.media_gcs_bucket_name:
    raise RuntimeError("media storage unconfigured — logo upload unavailable")

Type guard

def media_storage_configured(bucket: str | None) -> bool:
    return bool(bucket)

Try / catch

if resp.status_code == 503:
    disable_logo_upload_ui()  # instance capability, not user error

Prevention

When it happens

Trigger: POSTing a logo upload on a self-hosted deployment where the MEDIA_GCS_BUCKET_NAME (media storage) settings are not set.

Common situations: Fresh self-hosted installs without GCS credentials; missing env vars in docker-compose/.env; production config not applied to a new environment.

Related errors


AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14). Data as JSON: /api/errors/792494e93d613f7a. Report an issue: GitHub.

Appendix: source

Thrown at autogpt_platform/backend/backend/api/features/oauth.py:700

    - Allowed formats: JPEG, PNG, WebP
    - Maximum file size: 3MB

    The image is uploaded to cloud storage and the app's logoUrl is updated.
    Returns the updated application info.
    """
    # Verify ownership to reduce vulnerability to DoS(torage) or DoM(oney) attacks
    if (
        not (app := await get_oauth_application_by_id(app_id))
        or app.owner_id != user_id
    ):
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="OAuth App not found",
        )

    # Check GCS configuration
    if not settings.config.media_gcs_bucket_name:
        raise HTTPException(
            status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
            detail="Media storage is not configured",
        )

    # Validate content type
    content_type = file.content_type
    if content_type not in LOGO_ALLOWED_TYPES:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail=f"Invalid file type. Allowed: JPEG, PNG, WebP. Got: {content_type}",
        )

    # Read file content
    try:
        file_bytes = await file.read()
    except Exception as e:
        logger.error(f"Error reading logo file: {e}")
        raise HTTPException(

View on GitHub (pinned to 9c8bb5550f)