grpc-ecosystem/grpc-gateway · error

the provided default value %q is not a valid RFC3339 date-ti

Error message

the provided default value %q is not a valid RFC3339 date-time string

What it means

Validation error from validateDefaultValueTypeAndFormat: for a header parameter with format date-time, the provided default value string does not parse as a valid RFC3339 date-time. The offending input is the default_value option on the string/date-time header parameter.

Source

Thrown at protoc-gen-openapiv2/internal/genopenapi/template.go:2764

			return fmt.Errorf("the provided format %q is not a valid extension of the type %q", format, headerType)
		}
	case "boolean":
		return nil
	}
	return fmt.Errorf("the provided header type %q is not supported", headerType)
}

func validateDefaultValueTypeAndFormat(headerType string, defaultValue string, format string) error {
	switch headerType {
	case "string":
		if !isQuotedString(defaultValue) {
			return fmt.Errorf("the provided default value %q does not match provider type %q, or is not properly quoted with escaped quotations", defaultValue, headerType)
		}
		switch format {
		case "date-time":
			unquoteTime := strings.Trim(defaultValue, `"`)
			if _, err := time.Parse(time.RFC3339, unquoteTime); err != nil {
				return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue)
			}
		case "date":
			const layoutRFC3339Date = "2006-01-02"
			unquoteDate := strings.Trim(defaultValue, `"`)
			if _, err := time.Parse(layoutRFC3339Date, unquoteDate); err != nil {
				return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue)
			}
		}
	case "number":
		if err := isJSONNumber(defaultValue, headerType); err != nil {
			return err
		}
	case "integer":
		switch format {
		case "int32":
			if _, err := strconv.ParseInt(defaultValue, 0, 32); err != nil {
				return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format)
			}

View on GitHub (pinned to a58a4436a3)

Solutions

  1. Supply the default as a full RFC3339 timestamp, e.g. "1970-01-01T00:00:00Z".
  2. Fix missing timezone offset or 'T' separator in the value.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at protoc-gen-openapiv2/internal/genopenapi/template.go:2764 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grpc-ecosystem/grpc-gateway@a58a4436a3 (2026-09-02). Data as JSON: /api/errors/7329592acd5b9e62. Report an issue: GitHub.