Plaid INVALID_BODY 'body could not be parsed as JSON' when passing datetime to phone_number_verified_time

With plaid-python 9.3.0, passing a Python datetime to LinkTokenCreateRequestUser.phone_number_verified_time failed with INVALID_BODY / error_message: 'body could not be parsed as JSON'. Inspecting the request showed the SDK serialized the datetime without a trailing 'Z' ("1969-12-31T16:00:00" instead of "1969-12-31T16:00:00Z"). The reporter used datetime.fromtimestamp(0), which produces a naive datetime with no timezone info. The SDK type-checks the field, so passing a pre-formatted string fails with ApiTypeError.

Pass a timezone-aware datetime, not a naive one. datetime.fromtimestamp(0) has no tzinfo, so the SDK serializes it without the 'Z' suffix and Plaid rejects the body. Use datetime.datetime.now(datetime.timezone.utc) or datetime.datetime(2021, 11, 1, 0, 0, tzinfo=datetime.timezone.utc). You can't pass a string instead — the field is type-checked and raises ApiTypeError for str. A maintainer acknowledged the error message is misleading (the body IS valid JSON) and filed an internal issue to be less picky about datetime formats. Source: https://github.com/plaid/plaid-python/issues/414

Source: https://github.com/plaid/plaid-python/issues/414