// premier signataire = le client
 MercatorSigning.OkSign.FormDescriptor.FormHelper formHelper1 = new MercatorSigning.OkSign.FormDescriptor.FormHelper
 {
     FieldMarker = "Signature_1",
     FieldWidth = 175,
     FieldHeight = 70,
     FieldSigningOptions = MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Tan | MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Eid | MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Pen | MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Itsme,
     SignerInfoName = actionEngine.ActionsRecord.NOM,
     SignerInfoMobile = actionEngine.ACTIONS["NUM_GSM"].ToString(),
     SignerInfoActingAs = actionEngine.ACTIONS["FONCTION"].ToString(),
     SignerInfoEmail = actionEngine.ActionsRecord.EMAIL,
 };
 // second signataire = contre-signature automatique autorisée via le portail OkSign
 MercatorSigning.OkSign.FormDescriptor.FormHelper formHelper2 = new MercatorSigning.OkSign.FormDescriptor.FormHelper
 {
     FieldMarker = "Signature_2",
     FieldWidth = 175,
     FieldHeight = 70,
     TeamMemberId = "bt_00000000-0000-0000-0000-000569645580"
 };
 MercatorSigning.OkSign.FormDescriptor formDescriptor = new MercatorSigning.OkSign.FormDescriptor
 {
     SendToMeEmail = "info@mercator.eu", // pas obligatoire si le mail à utiliser est celui dans le compte OkSign
     Logo = "https://www.mercator.eu/assets/images/logo.png", // pas obligatoire si le logo à utiliser est celui dans le compte OkSign
     FileName = Api.JustFName(fileToSign) // nom du fichier visible par le signataire. Peut contenir une chaîne libre terminant par .pdf
 };
 formDescriptor.FormHelpers.AddRange(formHelper1, formHelper2); // ajouter ici plusieurs signataires si nécessaire

 MercatorSigning.OkSign.OkSignResponse response = MercatorSigning.OkSign.UploadPdfForSignature(fileToSign, formDescriptor, actionEngine.TagString, out string error);
 if (!string.IsNullOrEmpty(error))
 {
     ...;
 }