diff --git a/DocumentOperator.Application/MergePdfs/MergePdfsCommand.cs b/DocumentOperator.Application/MergePdfs/MergePdfsCommand.cs
new file mode 100644
index 0000000..77c8f75
--- /dev/null
+++ b/DocumentOperator.Application/MergePdfs/MergePdfsCommand.cs
@@ -0,0 +1,53 @@
+using DocumentOperator.Application.Common.Interfaces;
+using FluentValidation;
+using MediatR;
+
+namespace DocumentOperator.Application.MergePdfs;
+
+///
+/// Command to merge multiple PDF documents into a single PDF.
+///
+public record MergePdfsCommand : IRequest
+{
+ ///
+ /// PDF streams to merge. Minimum 2 required. Each must be at Position=0.
+ ///
+ public required IReadOnlyList PdfStreams { get; init; }
+
+ ///
+ /// Optional page ranges per PDF (null = all pages).
+ /// Format: "1-3,5" means pages 1, 2, 3, and 5.
+ /// If provided, array length must match PdfStreams length.
+ ///
+ public IReadOnlyList? PageRanges { get; init; }
+}
+
+///
+/// Handler for MergePdfsCommand.
+/// Delegates PDF merge operation to infrastructure layer.
+///
+public class MergePdfsCommandHandler(IPdfProcessor pdfProcessor)
+ : IRequestHandler
+{
+ public async Task Handle(MergePdfsCommand request, CancellationToken cancellationToken)
+ {
+ return await pdfProcessor.MergePdfsAsync(request.PdfStreams, request.PageRanges);
+ }
+}
+
+///
+/// Validator for MergePdfsCommand.
+///
+public class MergePdfsCommandValidator : AbstractValidator
+{
+ public MergePdfsCommandValidator()
+ {
+ RuleFor(x => x.PdfStreams)
+ .NotNull()
+ .WithMessage("PDF streams are required");
+
+ RuleFor(x => x.PdfStreams)
+ .Must(streams => streams != null && streams.Count >= 2)
+ .WithMessage("At least 2 PDF files are required for merging");
+ }
+}