diff --git a/lib/topic_creator.rb b/lib/topic_creator.rb
index 71655b0f6c9..db325d3a80f 100644
--- a/lib/topic_creator.rb
+++ b/lib/topic_creator.rb
@@ -121,6 +121,8 @@ class TopicCreator
     category = find_category
     @guardian.ensure_can_create!(Topic, category) unless (@opts[:skip_validations] || @opts[:archetype] == Archetype.private_message)
 
+    raise Discourse::NotFound if @opts[:category] && !@opts[:category].blank? && category.nil?
+
     topic_params[:category_id] = category.id if category.present?
 
     topic_params[:created_at] = Time.zone.parse(@opts[:created_at].to_s) if @opts[:created_at].present?
diff --git a/spec/requests/posts_controller_spec.rb b/spec/requests/posts_controller_spec.rb
index e07a238b8c4..73c863b63c3 100644
--- a/spec/requests/posts_controller_spec.rb
+++ b/spec/requests/posts_controller_spec.rb
@@ -775,6 +775,34 @@ describe PostsController do
         }
         expect(response.status).to eq(403)
       end
+
+      it 'will raise an error if specified category cannot be found' do
+        user = Fabricate(:admin)
+        master_key = ApiKey.create_master_key.key
+
+        post "/posts.json", params: {
+          api_username: user.username,
+          api_key: master_key,
+          title: 'this is a test title',
+          raw: 'this is test body',
+          category: 'invalid'
+        }
+        expect(response.status).to eq(404)
+      end
+
+      it 'can create topics with an empty category param' do
+        user = Fabricate(:admin)
+        master_key = ApiKey.create_master_key.key
+
+        post "/posts.json", params: {
+          api_username: user.username,
+          api_key: master_key,
+          title: 'title for a topic without a category',
+          raw: 'body for my topic without a category',
+          category: ''
+        }
+        expect(response.status).to eq(200)
+      end
     end
 
     describe "when logged in" do