post data isn't always available, default to empty dict