diff --git a/DocumentOperator.Application/ExtractPdfAttachments/ExtractPdfAttachmentsCommand.cs b/DocumentOperator.Application/ExtractPdfAttachments/ExtractPdfAttachmentsCommand.cs
new file mode 100644
index 0000000..7572e37
--- /dev/null
+++ b/DocumentOperator.Application/ExtractPdfAttachments/ExtractPdfAttachmentsCommand.cs
@@ -0,0 +1,43 @@
+using DocumentOperator.Application.Common.Interfaces;
+using FluentValidation;
+using MediatR;
+
+namespace DocumentOperator.Application.ExtractPdfAttachments;
+
+///
+/// Command to extract all embedded files from a PDF document and return as ZIP archive.
+///
+public record ExtractPdfAttachmentsCommand : IRequest
+{
+ ///
+ /// PDF document stream. Must be positioned at the beginning (Position = 0).
+ ///
+ public required Stream PdfStream { get; init; }
+}
+
+///
+/// Handler for ExtractPdfAttachmentsCommand.
+/// Extracts all embedded files from PDF and returns as ZIP archive.
+///
+public class ExtractPdfAttachmentsCommandHandler(IPdfProcessor pdfProcessor)
+ : IRequestHandler
+{
+ public async Task Handle(ExtractPdfAttachmentsCommand request, CancellationToken cancellationToken)
+ {
+ // Delegate to infrastructure layer
+ return await pdfProcessor.ExtractAttachmentsAsync(request.PdfStream);
+ }
+}
+
+///
+/// Validator for ExtractPdfAttachmentsCommand.
+///
+public class ExtractPdfAttachmentsCommandValidator : AbstractValidator
+{
+ public ExtractPdfAttachmentsCommandValidator()
+ {
+ RuleFor(x => x.PdfStream)
+ .NotNull()
+ .WithMessage("PDF stream is required");
+ }
+}