diff --git a/EnvelopeGenerator.Application/Signatures/Behaviors/EnvelopeReceiverResolutionBehavior.cs b/EnvelopeGenerator.Application/Signatures/Behaviors/EnvelopeReceiverResolutionBehavior.cs
new file mode 100644
index 00000000..c90603e3
--- /dev/null
+++ b/EnvelopeGenerator.Application/Signatures/Behaviors/EnvelopeReceiverResolutionBehavior.cs
@@ -0,0 +1,54 @@
+using AutoMapper;
+using DigitalData.Core.Abstraction.Application.Repository;
+using DigitalData.Core.Exceptions;
+using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver;
+using EnvelopeGenerator.Application.Common.Extensions;
+using EnvelopeGenerator.Application.Signatures.Commands;
+using EnvelopeGenerator.Domain.Entities;
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+
+namespace EnvelopeGenerator.Application.Signatures.Behaviors;
+
+///
+/// Pipeline behavior that resolves and validates EnvelopeReceiver.
+/// Executes FIRST in the signing process - before all other behaviors.
+/// If EnvelopeReceiver is not provided, it queries the database using EnvelopeReceiverQueryBase parameters.
+///
+public class EnvelopeReceiverResolutionBehavior : IPipelineBehavior
+{
+ private readonly IRepository _erRepo;
+ private readonly IMapper _mapper;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public EnvelopeReceiverResolutionBehavior(IRepository erRepo, IMapper mapper)
+ {
+ _erRepo = erRepo;
+ _mapper = mapper;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task Handle(SignCommand request, RequestHandlerDelegate next, CancellationToken cancellationToken)
+ {
+ // If EnvelopeReceiver is not provided, query it from database
+ if (request.EnvelopeReceiver is null)
+ {
+ var er = await _erRepo.Query.Where(request, notnull: true).SingleOrDefaultAsync(cancellationToken)
+ ?? throw new NotFoundException("EnvelopeReceiver not found");
+
+ request.SetEnvelopeReceiver(_mapper.Map(er));
+ }
+
+ return await next(cancellationToken);
+ }
+}