bson_oid_is_valid() requires lowercase characters, but bson_oid_parse_hex_char() (used by bson_oid_init_from_string_unsafe) is case-insensitive.
bson_oid_is_valid() is documented as "return true if @str can be passed to bson_oid_init_from_string()." Allowing it to accept uppercase characters satisfies this contract and would remove the need for calling code to convert their input strings to lowercase.