diff --git a/app/serializers/pipeline_entity.rb b/app/serializers/pipeline_entity.rb
index d04a4990cb0861990204e6f22efc356cbaf855ec..61f0f11d7d23ac06b86e2161689385b1e7bf2dae 100644
--- a/app/serializers/pipeline_entity.rb
+++ b/app/serializers/pipeline_entity.rb
@@ -40,10 +40,12 @@ class PipelineEntity < Grape::Entity
     end
 
     expose :path do |pipeline|
-      namespace_project_tree_path(
-        pipeline.project.namespace,
-        pipeline.project,
-        id: pipeline.ref)
+      if pipeline.ref
+        namespace_project_tree_path(
+          pipeline.project.namespace,
+          pipeline.project,
+          id: pipeline.ref)
+      end
     end
 
     expose :tag?, as: :tag
diff --git a/changelogs/unreleased/fix-pipeline-ref-path-serialization.yml b/changelogs/unreleased/fix-pipeline-ref-path-serialization.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f60ab01a6f1142787c05a76b8aca37b1803a0e9d
--- /dev/null
+++ b/changelogs/unreleased/fix-pipeline-ref-path-serialization.yml
@@ -0,0 +1,4 @@
+---
+title: Do not generate pipeline branch/tag path if not present
+merge_request: 8658
+author:
diff --git a/spec/serializers/pipeline_entity_spec.rb b/spec/serializers/pipeline_entity_spec.rb
index b19464c7117aefd2390f7cd4b69698b83fef3725..ccb72973f9c2de19db795e56c85b70206fbaf8d0 100644
--- a/spec/serializers/pipeline_entity_spec.rb
+++ b/spec/serializers/pipeline_entity_spec.rb
@@ -134,5 +134,17 @@ describe PipelineEntity do
         expect(subject).not_to have_key(:yaml_errors)
       end
     end
+
+    context 'when pipeline ref is empty' do
+      let(:pipeline) { create(:ci_empty_pipeline) }
+
+      before do
+        allow(pipeline).to receive(:ref).and_return(nil)
+      end
+
+      it 'does not generate branch path' do
+        expect(subject[:ref][:path]).to be_nil
+      end
+    end
   end
 end