Having todo_item as a parent resource in TimeEntry was not useful and was removing todo_item_id from the list of attributes.
That's a legacy method from the 37Signals wrapper and i'm not sure why it was there. It doesn't seem to affect rails < 3 (the method is ignored) but it affects rails >= 3 when the name of the resource in the API is different than the name of the class, for example Basecamp::Message that should use "post" as the resource name in the API calls.
IOStream instead of String for post data When posting a large file ~ 4MB to basecamp this error was thrown. Timeout::Error .rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/net/protocol.rb:140:in `rescue in rbuf_fill' Using an IOStream instead of a String for the post data solves this.