diff --git a/lib/jsonapi_compliable/base.rb b/lib/jsonapi_compliable/base.rb
index d1fa897..0dfd56f 100644
--- a/lib/jsonapi_compliable/base.rb
+++ b/lib/jsonapi_compliable/base.rb
@@ -117,7 +117,7 @@ def jsonapi_scope(scope, opts = {})
     # @see Deserializer#initialize
     # @return [Deserializer]
     def deserialized_params
-      @deserialized_params ||= JsonapiCompliable::Deserializer.new(params, request.env)
+      @deserialized_params ||= JsonapiCompliable::Deserializer.new(params, request.method, request.env)
     end
 
     # Create the resource model and process all nested relationships via the
@@ -243,7 +243,7 @@ def default_jsonapi_render_options
     private
 
     def force_includes?
-      not deserialized_params.data.nil?
+      not deserialized_params.data.empty?
     end
 
     def perform_render_jsonapi(opts)
diff --git a/lib/jsonapi_compliable/deserializer.rb b/lib/jsonapi_compliable/deserializer.rb
index 3420aee..b2fa843 100644
--- a/lib/jsonapi_compliable/deserializer.rb
+++ b/lib/jsonapi_compliable/deserializer.rb
@@ -46,16 +46,22 @@
 #   { type: 'authors', method: :create, temp_id: 'abc123' }
 class JsonapiCompliable::Deserializer
   # @param payload [Hash] The incoming payload with symbolized keys
+  # @param method [String] The method that the request was sent with
   # @param env [Hash] the Rack env (e.g. +request.env+).
-  def initialize(payload, env)
+  def initialize(payload, method, env)
     @payload = payload
     @payload = @payload[:_jsonapi] if @payload.has_key?(:_jsonapi)
+    @method = method
     @env = env
   end
 
   # @return [Hash] the raw :data value of the payload
   def data
-    @payload[:data]
+    if ["GET", "DELETE"].include?(@method)
+      @payload[:data] || {}
+    else
+      @payload[:data] or raise JsonapiCompliable::Errors::BadRequest.new("No data payload present")
+    end
   end
 
   # @return [String] the raw :id value of the payload
diff --git a/lib/jsonapi_compliable/errors.rb b/lib/jsonapi_compliable/errors.rb
index 13e02cf..7be98dd 100644
--- a/lib/jsonapi_compliable/errors.rb
+++ b/lib/jsonapi_compliable/errors.rb
@@ -1,9 +1,10 @@
 module JsonapiCompliable
   module Errors
-    class BadFilter < StandardError; end
-    class ValidationError < StandardError; end
+    class ValidationError < RuntimeError; end
+    class BadRequest < RuntimeError; end
+    class BadFilter < BadRequest; end
 
-    class UnsupportedPageSize < StandardError
+    class UnsupportedPageSize < BadRequest
       def initialize(size, max)
         @size, @max = size, max
       end
@@ -13,7 +14,7 @@ def message
       end
     end
 
-    class StatNotFound < StandardError
+    class StatNotFound < BadRequest
       def initialize(attribute, calculation)
         @attribute = attribute
         @calculation = calculation
diff --git a/spec/deserializer_spec.rb b/spec/deserializer_spec.rb
index c683032..8f3191f 100644
--- a/spec/deserializer_spec.rb
+++ b/spec/deserializer_spec.rb
@@ -10,7 +10,29 @@
     }
   end
 
-  let(:instance) { described_class.new(payload, {}) }
+  let(:instance) { described_class.new(payload, "GET", {}) }
+
+  describe '#data' do
+    subject { instance.data }
+
+    context 'when data is present' do
+      it 'returns the proper sub-object' do
+        expect(subject).to eq(payload[:data])
+      end
+    end
+
+    context 'when data is absent' do
+      let(:payload) do
+        {
+            foo: 'bar'
+        }
+      end
+
+      it 'returns an empty hash' do
+        expect(subject).to eq({})
+      end
+    end
+  end
 
   describe '#attributes' do
     subject { instance.attributes }
@@ -31,6 +53,18 @@
         expect(subject[:id]).to eq('123')
       end
     end
+
+    context 'when data is absent' do
+      let(:payload) do
+        {
+            foo: 'bar'
+        }
+      end
+
+      it 'returns an empty hash' do
+        expect(subject).to eq({})
+      end
+    end
   end
 
   describe '#relationships' do