What's the point of throwing an exception in that function? I mean it looks like you're trying to use both concepts: functions that throw an exception in case of errors and functions that return `{error, Reason}` tuple. I don't think this is a good practice, since it really makes the code awkward.
Anyway, please, review the internal `jesse_uri` return types. I see that a lot of code here simple translates atoms to lists and vice versa. Note, that `jesse_uri` is your internal module which si completely in your responsibility. So it makes sense to design its types so that it will be convenient to use them everywhere without translation.