BerriAI/litellm · error · HTTPException
start_date must be on or before end_date
Error message
start_date must be on or before end_date
What it means
Range sanity check for tag listing: after parsing both dates, start_date greater than end_date is rejected with 400 because an inverted range can never match data. At-fault input is an out-of-order date pair.
Source
Thrown at litellm/proxy/management_endpoints/tag_management_endpoints.py:568
def _validate_tag_list_date_range(start_date: str | None, end_date: str | None) -> None:
"""Require both dates together, and enforce YYYY-MM-DD format with start <= end."""
if (start_date is None) != (end_date is None):
raise HTTPException(
status_code=400,
detail="start_date and end_date must be provided together",
)
if start_date is None:
return
try:
start: Final = datetime.strptime(start_date, "%Y-%m-%d")
end: Final = datetime.strptime(end_date, "%Y-%m-%d")
except ValueError as e:
raise HTTPException(
status_code=400,
detail=f"Invalid date format, expected YYYY-MM-DD: {e}",
)
if start > end:
raise HTTPException(
status_code=400,
detail="start_date must be on or before end_date",
)
@router.get(
"/tag/list",
tags=["tag management"],
dependencies=[Depends(user_api_key_auth)],
)
async def list_tags(
user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
start_date: str | None = Query(
None,
description=(
"Optional start date (YYYY-MM-DD). When provided together with "
"end_date, dynamic tags are limited to those active in the window. "
"Stored tags are always returned."View on GitHub (pinned to 77b7c6c40c)
Solutions
- Set start_date on or before end_date.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/proxy/management_endpoints/tag_management_endpoints.py:568 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/412b74478feda3bb.
Report an issue: GitHub.