1.24.1

(fix): Fix file upload endpoints crashing with NoMethodError. Generated multipart code now calls FormData#add_file instead of the non-existent to_form_data_part, file arrays add one part per file, and declared MIME types are forwarded as content_type:. FormData#add_file also accepts a file path String (matching the generated method signatures), reading the file contents and deriving the filename from the path. Non-file multipart properties are now added unless the value is nil, so false and 0 are no longer silently dropped while an explicitly-passed nil is still omitted rather than sent as an empty part.

(fix): Deserialize non-object JSON response bodies. Endpoints whose response is a top-level list, map, set, primitive, or unknown JSON value previously returned nil; they now parse the body and coerce it to the declared type. Bodies are parsed with symbolize_names: true to match Model.load, so an unknown value is symbol-keyed wherever it appears; maps whose keys coerce to Integer keep string keys, since JSON object keys are always strings and a Symbol cannot coerce to Integer. A named type behind an optional/nullable wrapper now deserializes through .load like a bare named type, so a union member is resolved instead of the body reaching the caller as raw parsed JSON. Every successful response with an empty body (including named types) returns nil instead of raising JSON::ParserError.

(fix): Preserve false values in model fields. Previously Model#initialize used || to coalesce values, so any boolean field set to false was dropped and never serialized (e.g. users.update(blocked: false) sent an empty body).