BerriAI/litellm · error · ValueError

VANTAGE_INTEGRATION_TOKEN must be provided for Vantage expor

Error message

VANTAGE_INTEGRATION_TOKEN must be provided for Vantage exports

What it means

For provider="vantage", after the api_key check the factory also requires an integration token (resolved from overrides or VANTAGE_INTEGRATION_TOKEN). The token identifies the Vantage integration that receives the FOCUS export, so it cannot be omitted. Note it is validated after VANTAGE_API_KEY, so if both are missing you see error 401 first.

Source

Thrown at litellm/integrations/focus/destinations/factory.py:65

                "region_name": overrides.get("region_name") or os.getenv("FOCUS_S3_REGION_NAME"),
                "endpoint_url": overrides.get("endpoint_url") or os.getenv("FOCUS_S3_ENDPOINT_URL"),
                "aws_access_key_id": overrides.get("aws_access_key_id") or os.getenv("FOCUS_S3_ACCESS_KEY"),
                "aws_secret_access_key": overrides.get("aws_secret_access_key") or os.getenv("FOCUS_S3_SECRET_KEY"),
                "aws_session_token": overrides.get("aws_session_token") or os.getenv("FOCUS_S3_SESSION_TOKEN"),
            }
            if not resolved.get("bucket_name"):
                raise ValueError("FOCUS_S3_BUCKET_NAME must be provided for S3 exports")
            return {k: v for k, v in resolved.items() if v is not None}
        if provider == "vantage":
            resolved = {
                "api_key": overrides.get("api_key") or os.getenv("VANTAGE_API_KEY"),
                "integration_token": overrides.get("integration_token") or os.getenv("VANTAGE_INTEGRATION_TOKEN"),
                "base_url": overrides.get("base_url") or os.getenv("VANTAGE_BASE_URL", "https://api.vantage.sh"),
            }
            if not resolved.get("api_key"):
                raise ValueError("VANTAGE_API_KEY must be provided for Vantage exports")
            if not resolved.get("integration_token"):
                raise ValueError("VANTAGE_INTEGRATION_TOKEN must be provided for Vantage exports")
            return {k: v for k, v in resolved.items() if v is not None}
        if provider == "gcs":
            resolved = {
                "bucket_name": overrides.get("bucket_name") or os.getenv("FOCUS_GCS_BUCKET_NAME"),
                "service_account_json": overrides.get("service_account_json")
                or os.getenv("FOCUS_GCS_PATH_SERVICE_ACCOUNT"),
            }
            if not resolved.get("bucket_name"):
                raise ValueError("FOCUS_GCS_BUCKET_NAME must be provided for GCS exports")
            return {k: v for k, v in resolved.items() if v is not None}
        if provider == "mavvrik":
            resolved = {
                "api_key": overrides.get("api_key") or os.getenv("MAVVRIK_API_KEY"),
                "api_endpoint": overrides.get("api_endpoint") or os.getenv("MAVVRIK_API_ENDPOINT"),
                "connection_id": overrides.get("connection_id") or os.getenv("MAVVRIK_CONNECTION_ID"),
            }
            return {k: v for k, v in resolved.items() if v is not None}
        raise NotImplementedError(f"Provider '{provider}' not supported for Focus export configuration")

View on GitHub (pinned to 6c2dcb801b)

Solutions

  1. Set VANTAGE_INTEGRATION_TOKEN to the token generated for your Vantage integration.
  2. Or pass integration_token in the destination config overrides.
  3. Pair it with VANTAGE_API_KEY in the same secret/env block so they stay in sync.

Example fix

# before
overrides = {"api_key": key}  # integration_token missing

# after
overrides = {"api_key": key, "integration_token": os.environ["VANTAGE_INTEGRATION_TOKEN"]}
Defensive patterns

Strategy: validation

Validate before calling

import os

if not (overrides.get("integration_token") or os.getenv("VANTAGE_INTEGRATION_TOKEN")):
    raise SystemExit("VANTAGE_INTEGRATION_TOKEN missing: generate one in the Vantage dashboard")

Try / catch

try:
    cfg = focus_destination_config(provider="vantage", overrides=overrides)
except ValueError as e:
    if "VANTAGE_INTEGRATION_TOKEN" in str(e):
        log_config_error("vantage", missing=["integration_token"])
    raise

Prevention

When it happens

Trigger: Creating a vantage Focus destination where api_key resolves successfully but integration_token is absent from both overrides and the environment.

Common situations: Only VANTAGE_API_KEY was configured in deployment; the integration token was regenerated/rotated in the Vantage dashboard and the old env var removed; copy-paste of docs that only show the API key; typo VANTAGE_INTEGRATION_TOKEN vs VANTAGE_INTEGRATIONTOKEN.

Related errors


AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15). Data as JSON: /api/errors/7909966927004b87. Report an issue: GitHub.