Decode JSON Nested Objects

I’ve tried a very simplified version of it, which works:

Poison.decode!(json_string, as: %{ "page" => %Page{} })

(With the Page module defined as you defined it above, and with json_string being the json string of your data.)

This should work for you too. I suggest you proceed from there, and see at what point that EncoderError creeps in. (For instance, quite possibly you have a typo somewhere.)