ISO8601 timestamp input fields do not accept "+00:00" as zone designator, only "Z"

(#820) Bug Needs triage api

Observed behaviour

The parser for ISO8601 is overly restrictive - it only allows "Z" as the zone designator but not "+00:00". While I can understand not wanting to support iso8601 timestamp in non-UTC timezones due to added complexity, it would be good to at least support both ways of specifying that the timestamp is in UTC that ISO8601 allows (since it's just a matter of expanding the regex for the zone designator part to be (Z|\+00:00) rather than just Z). Especially since some programming languages may choose to output ISO8601 timestamps with +00:00 rather than Z (as is the case in Python's datetime.datetime.isoformat(), for example). Also, limitations of what can be parsed should be documented.

Reproduction steps

  1. Make an API request to any endpoint requring ISO8601 timestamp with a "+00:00" instead of "Z" use as the zone designator, e.g. "2026-09-07T18:33:12.120000+00:00"
  2. See "The provided value is in an invalid format" error returned by the API.
As a concrete example:
PATCH /guilds/{guild.id}/members/{member.id}

{"communication_disabled_until":"2026-09-07T18:33:12.120000+00:00"}
Results in:
{
    "code": "INVALID_FORM_BODY",
    "message": "Invalid form body.",
    "errors": [
        {
            "path": "communication_disabled_until",
            "message": "The provided value is in an invalid format.",
            "code": "INVALID_FORMAT"
        }
    ]
}

Build information

This is an API issue, so not relevant.

Platform

API

Evidence

Everything relevant has already been presented above.

4 comments

Sign in with Fluxer to comment and vote.
Comment by @Jackenmen
RexSystem 1 vote originally by @Jackenmen on GitHub OP
Update: Based on https://github.com/fluxerapp/fluxer/blob/746a75187a60b9ba16acd213ca7878a109d2200a/fluxer_gateway/src/utils/utils.erl#L65, I assumed that none of the endpoints support "+00:00" as timezone but it seems that this function is only used for parsing the communication_disabled_until field so it's possible that the issue is limited only to that endpoint. At the very least, I found that the POST /channels/{channel.id}/messages endpoint is more lenient and allows use of "+00:00".
Comment by @massmarketconsumer-arch
RexSystem 1 vote originally by @massmarketconsumer-arch on GitHub
I have investigated this issue and implemented a complete fix across both the schema validation (z.iso.datetime({offset: true}) in GuildRequestSchemas.ts and UserRequestSchemas.ts) and the Gateway parser (parse_iso8601_to_unix_ms in fluxer_gateway/src/utils/utils.erl) to support UTC offset designators (+00:00 / -00:00). All test suites pass. May I please be approved to submit the pull request?