eSignature API > API Documentation > The Envelope XML

The Envelope XML

This page will teach you about the envelope XML for eSignAnyWhere.

Envelope Structure

The envelope XML contains all information about an envelope. Basically it consists of the envelope definition and the workflow. The workflow itself exists of steps and within the steps of the recipients. Signing recipients have to have the workstep configuration. The workstep configuration is the definition of the signing task.

EnvelopeXML

The next lines of code shows an simple envelope XML:

<envelope>
  <!--  META information for envelope: e.g.: Name, eMailSubject, Reminders, Expiration, CallbackURL etc.  -->
  <steps>
    <step>
      <!-- Step x in Workflow: Information about recipient(s) and Workstep Configuration -->
      <workstepConfiguration />
    </step>
    <step>
      <!-- next step in workflow -->
      <workstepConfiguration />
    </step>
  </steps>
</envelope>

The following table shows the different icons for the document status with explanation:

Hello World Tutorial - Envelope XML Source

<envelope>
  <name>test</name>
  <eMailSubject>Please sign the enclosed envelope</eMailSubject>
  <eMailBody>Dear #RecipientFirstName# #RecipientLastName#

#PersonalMessage#

Please sign the envelope #EnvelopeName#

Envelope will expire at #ExpirationDate#</eMailBody>
  <enableReminders>true</enableReminders>
  <firstReminderDayAmount>5</firstReminderDayAmount>
  <recurrentReminderDayAmount>3</recurrentReminderDayAmount>
  <beforeExpirationReminderDayAmount>3</beforeExpirationReminderDayAmount>
  <daysUntilExpire>28</daysUntilExpire>
  <callbackUrl></callbackUrl>
  <metaData>Your meta data</metaData>
  <statusUpdateCallbackUrl></statusUpdateCallbackUrl>
  <displayedEmailSender></displayedEmailSender>
  <steps>
    <step>
      <emailBodyExtra></emailBodyExtra>
      <orderIndex>1</orderIndex>
      <recipientType>Signer</recipientType>
      <useDefaultAgreements>true</useDefaultAgreements>
      <documentOptions>
        <documentOption docRef="1">
          <isHidden>false</isHidden>
        </documentOption>
      </documentOptions>
      <workstepConfiguration skipThirdPartyChecks="0">
        <WorkstepLabel>test</WorkstepLabel>
        <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
        <WorkstepTimeToLiveInMinutes>43210</WorkstepTimeToLiveInMinutes>
        <FinishAction />
        <ViewerPreferences>
          <SendVisibleArea allowedDomain="*">0</SendVisibleArea>
          <FinishWorkstepOnOpen>0</FinishWorkstepOnOpen>
        </ViewerPreferences>
        <Policy version="1.1.0.0">
          <AdhocPolicies>
            <AllowModificationsAfterSignature>1</AllowModificationsAfterSignature>
          </AdhocPolicies>
          <GeneralPolicies>
            <AllowAdhocFreeHandAnnotations>0</AllowAdhocFreeHandAnnotations>
            <AllowAdhocPdfAttachments>0</AllowAdhocPdfAttachments>
            <AllowAdhocPdfPageAppending>0</AllowAdhocPdfPageAppending>
            <AllowAdhocPictureAnnotations>0</AllowAdhocPictureAnnotations>
            <AllowAdhocSignatures>0</AllowAdhocSignatures>
            <AllowAdhocStampings>0</AllowAdhocStampings>
            <AllowAdhocTypewriterAnnotations>0</AllowAdhocTypewriterAnnotations>
            <AllowEmailDocument>1</AllowEmailDocument>
            <AllowFinishWorkstep>1</AllowFinishWorkstep>
            <AllowPrintDocument>1</AllowPrintDocument>
            <AllowRejectWorkstep>1</AllowRejectWorkstep>
            <AllowSaveAuditTrail>1</AllowSaveAuditTrail>
            <AllowSaveDocument>1</AllowSaveDocument>
            <AllowUndoLastAction>1</AllowUndoLastAction>
            <AllowRotatingPages>0</AllowRotatingPages>
            <AllowRejectWorkstepDelegation>1</AllowRejectWorkstepDelegation>
          </GeneralPolicies>
          <WorkstepTasks originalSequenceMode="NoSequenceEnforced" SequenceMode="NoSequenceEnforced">
            <Task type="SignField" DocRefNumber="1" id="1#XyzmoDuplicateIdSeperator#Signature_36cff3f5-38b2-cc21-a467-713e8bb2de18" internalCompleted="0" finishPercentage="0" completed="0" enabled="1" displayName="" required="1" />
          </WorkstepTasks>
        </Policy>
        <timeCreated>2019-09-24T09:56:35.5231387Z</timeCreated>
        <TransactionCodeConfigurations>
    <TransactionCodeConfiguration trConfId="smsAuthTransactionCodeId">
    </TransactionCodeConfiguration>
  </TransactionCodeConfigurations>
        <receiverInformation>
          <userInformation>
            <firstName>Charly</firstName>
            <lastName>Xyzmo</lastName>
            <eMail>##EMAIL##</eMail>
          </userInformation>
          <showNamirialDisposableDisclaimer>1</showNamirialDisposableDisclaimer>
        </receiverInformation>
        <senderInformation>
          <userInformation>
            <firstName>Charly</firstName>
            <lastName>Xyzmo</lastName>
            <eMail>##EMAIL##</eMail>
          </userInformation>
        </senderInformation>
        <pdfForms isEditingAllowed="0" />
        <TypewriterAnnotationTaskInfo />
        <attachmentFields />
        <signatureTemplate>
          <version>1.2.0.2</version>
          <positionReferenceCorner>Lower_Left</positionReferenceCorner>
          <positionUnits>PdfUnits</positionUnits>
          <sig id="1#XyzmoDuplicateIdSeperator#Signature_36cff3f5-38b2-cc21-a467-713e8bb2de18">
            <TaskDisplayName />
            <param name="enabled">1</param>
            <positionPage>1</positionPage>
            <positionX>72</positionX>
            <positionY>525.92</positionY>
            <width>190</width>
            <height>80</height>
            <param name="positioning">onPage</param>
            <param name="req">1</param>
            <param name="fd" />
            <param name="fd_dateformat">dd-MM-yyyy HH:mm:ss</param>
            <param name="fd_timezone">datetimeutc</param>
            <DocRefNumber>1</DocRefNumber>
            <AllowedSignatureTypes>
              <sigType id="9e0e5ea9-2ba0-4769-84dc-fe7b20b134a5" type="Picture">
                <allowedCapturingMethods>Click2Sign</allowedCapturingMethods>
                <StampImprintConfiguration>
                  <DisplayExtraInformation>1</DisplayExtraInformation>
                  <DisplayEmail>1</DisplayEmail>
                  <DisplayIp>1</DisplayIp>
                  <DisplayName>1</DisplayName>
                  <DisplaySignatureDate>1</DisplaySignatureDate>
                  <FontFamily>Times New Roman</FontFamily>
                  <FontSize>11</FontSize>
                </StampImprintConfiguration>
              </sigType>
            </AllowedSignatureTypes>
          </sig>
        </signatureTemplate>
        <resourceUris>
          <signatureImagesUri>https://demo.xyzmo.com//Resource/SignatureImages/?link=1VcbZC4rhfQ0vfJ~XelpnshMFFPCcKU6sOGw6EeLE1KvNaOBF1j8A1PC7mUq21moG</signatureImagesUri>
          <delegationUri>https://demo.xyzmo.com//Resource/Delegate</delegationUri>
        </resourceUris>
        <AuditingToolsConfiguration WriteAuditTrail="0">
          <NotificationConfiguration />
        </AuditingToolsConfiguration>
        <LoggingMetaInformation>
          <envelopeId>e841898d-9bba-48c7-b3c5-4e057a77089a</envelopeId>
          <envelopeRecipientId>4c1a2900-5b4b-49b2-906a-f50f5daeea18</envelopeRecipientId>
        </LoggingMetaInformation>
      </workstepConfiguration>
      <recipients>
        <recipient>
          <eMail>##EMAIL##</eMail>
          <emailBodyExtra></emailBodyExtra>
          <firstName>Charly</firstName>
          <lastName>Xyzmo</lastName>
          <languageCode>en</languageCode>
          <disableEmail>false</disableEmail>
          <skipExternalDataValidation>false</skipExternalDataValidation>
          <addAndroidAppLink>false</addAndroidAppLink>
          <addIosAppLink>false</addIosAppLink>
          <addWindowsAppLink>false</addWindowsAppLink>
          <allowDelegation>true</allowDelegation>
          <authentications />
        </recipient>
      </recipients>
    </step>
    <step>
      <emailBodyExtra></emailBodyExtra>
      <orderIndex>2</orderIndex>
      <recipientType>Cc</recipientType>
      <useDefaultAgreements>false</useDefaultAgreements>
      <recipients>
        <recipient>
          <eMail>##EMAIL##</eMail>
          <emailBodyExtra></emailBodyExtra>
          <firstName>Charly</firstName>
          <lastName>Xyzmo</lastName>
          <languageCode>en</languageCode>
          <disableEmail>false</disableEmail>
          <skipExternalDataValidation>false</skipExternalDataValidation>
          <addAndroidAppLink>false</addAndroidAppLink>
          <addIosAppLink>false</addIosAppLink>
          <addWindowsAppLink>false</addWindowsAppLink>
          <allowDelegation>false</allowDelegation>
          <authentications />
        </recipient>
      </recipients>
    </step>
  </steps>
  <attachSignedDocumentsToEnvelopeLog>false</attachSignedDocumentsToEnvelopeLog>
</envelope>
  

Envelope Section

The Envelope Section contains the configuration of the envelope.

The example configures the following settings:

  • Name of the envelope (name)
  • E-Mail Subject
  • E-Mail Body: the message for the signers email (see Email Templating for more details and the available tags).
  • Reminders and expiration
    • enableReminders: if set to false, no reminders will be sent at all
    • firstReminderDayAmount: an active recipient will retrieve a 1st notification after the defined amount of days. Values: 1 to (daysUntilExpire – 1)
    • recurrentReminderDayAmount: an active recipient will retrieve a recurring notification after the first notification every configured days. Values: 1 to (daysUntilExpire – 1)
    • beforeExpirationReminderDayAmount:an active recipient will retrieve a notification on the configured days before expiration. Values: positive integer
    • daysUntilExpire: If the envelope isn’t finished or rejected within the defined amount of days, the envelope will expire. Values: 1 to _global.xml ‘maxEnvelopeValidityInDays’ setting (default: 28)
  • Callback URL is fired when the envelope is finished (this means successfully finished & signed or by a recipient rejected). So you can notify your integrating system and get the information which envelope is finished (placeholder for envelope id is ##EnvelopeId##). If you want to listen to events within the workflow use the workstep-callbacks.
    Attention: if the callback URL doesn’t return a HTTP 200 the envelope goes into an error state is will not be finished! eSAW tries to call the URL until it gets a HTTP 200 or reaches the limit of callback-attempts (30).
  • The meta data element allows you to store additional, non-eSAW-data (e.g. for archiving) directly in the envelope. You can retrieve this information via getEnvelopeById call. An example of metaData is to store data for the archiving system in the envelope. The callback-integrating solution then can download the files (PDF & Audit-Trail) and store them directly in the archive.
  • DisplayedEmailSender Configuration: If the displayedEmailSender is empty only eSignAnywhere is used. If the field is not empty, this text will be used before ” via eSignAnywhere”. Without displayedEmailSender the organization default setting is used. On-Premise or private SaaS allows to modify “via eSignAnywhere” text.
  • attachSignedDocumentsToEnvelopeLog allows to add the final & signed document to the audit trail. Per default this feature is disabled. Note: this requires eSAW 3.4+

Following collapse contains an example of an envelope section.

Envelope section

<name>eSignAnyWhere Tutorial</name>
   <eMailSubject>Hello World</eMailSubject>
   <eMailBody>Dear #RecipientFirstName#! Please sign this document.</eMailBody>
   <enableReminders>True</enableReminders>
   <firstReminderDayAmount>1</firstReminderDayAmount>
   <recurrentReminderDayAmount>1</recurrentReminderDayAmount>
   <beforeExpirationReminderDayAmount>1</beforeExpirationReminderDayAmount>
   <daysUntilExpire>2</daysUntilExpire>
   <!-- callback to your backend system on a completed envelope 
   <callbackUrl>http://172.16.17.78:57550/default.aspx?EnvelopeId=##EnvelopeId##&amp;myParamForMe=1234</callbackUrl> 
   -->
   <callbackUrl />
   <metaData>Your meta data</metaData>
   <displayedEmailSender></displayedEmailSender>
   <attachSignedDocumentsToEnvelopeLog>1</attachSignedDocumentsToEnvelopeLog>

Step(s) Section

The step(s) section is defining the workflow. You can define steps (with the order-index) and its recipients (at least one recipient, parallel recipients are supported).

  <steps>
    <step>
      <!-- Step x in Workflow: Information about recipient(s) and Workstep Configuration -->
      <workstepConfiguration />
    </step>
    <step>
      <!-- next step in workflow -->
      <workstepConfiguration />
    </step>
  </steps>
Recipient Configuration within a Step

Example of a simple step (one recipient as signer with empty workstep configuration; see section about workstep configuration for more details):

<step>
  <emailBodyExtra />
  <orderIndex>1</orderIndex>
  <recipientType>Signer</recipientType>
  <recipients>
    <recipient>
      <languageCode>en-us</languageCode>
      <eMail>first.signer@email.com</eMail>
      <firstName>First</firstName>
      <lastName>Signer</lastName>
      <allowDelegation>True</allowDelegation>
      <!-- No notification will be sent if set to True
              use this in case you want to integrate this step into a portal or handle this step with another product (Kiosk, iOS/Android/Windows Phone App -->
      <disableEmail>False</disableEmail> 
      <!-- optional authentication methods for this recipient -->
    </recipient>
  </recipients>
  <workstepConfiguration />
</step>

The following parts are configured in this example:

  • emailBodyExtra
  • Order index in workflow
  • Recipient Type (Signer, CC, Acknowledge)
  • Recipient Data (Language, E-Mail, Firstname, Lastname, Delegation, Authentication)
  • Workstep configuration to define the signing task
Authentication

There are different authentications available. In this section the PIN and the SMS authentication are explained:

<authentications>
  <authentication>
    <method>Pin</method>
    <parameter>4812</parameter>
  </authentication>
  <authentication>
    <method>SMS</method>
    <parameter>+43664123456789</parameter>
  </authentication>
</authentications>

You can copy paste the authentication within the recipient tag. Following lines of code shows the place for the authentication:

<recipients>
        <recipient>
          <eMail>##EMAIL##</eMail>
          <emailBodyExtra></emailBodyExtra>
          <firstName>Charly</firstName>
          <lastName>Xyzmo</lastName>
          <languageCode>en</languageCode>
          <disableEmail>false</disableEmail>
          <skipExternalDataValidation>false</skipExternalDataValidation>
          <addAndroidAppLink>false</addAndroidAppLink>
          <addIosAppLink>false</addIosAppLink>
          <addWindowsAppLink>false</addWindowsAppLink>
          <allowDelegation>false</allowDelegation>
          <authentications>
            <authentication>
              <method>Sms</method>
              <parameter>+43664123456789</parameter>
            </authentication>
            <authentication>
              <method>Pin</method>
              <parameter>1234</parameter>
            </authentication>
          </authentications>
        </recipient>
</recipients>

To configure a OAuth2/SAML Authentication you can additionally use checks (eSAW 2.6+) to force a specific user to authenticate.

<authentications>
  <authentication>
    <!-- CustomAuthenticationProvider will be mapped to GenericOAuthProvider -->
    <method>CustomAuthenticationProvider</method>
    <parameter>nameofprovider</parameter>
    <checks>
      <check compareOperation="equals" fieldId="userprofile" value="a232656-6656-5665"></check>
    </checks>
  </authentication>
  <authentication>
    <method>CustomOAuthProvider</method>
    <parameter>nameofprovider</parameter>
      <checks>
      <check compareOperation="equals" fieldId="useremail" value="jordan@xyzmo.com"></check>
          <check compareOperation="equals" fieldId="userprofile" value="a232336-6656-5665"></check>
    </checks>
  </authentication>       
</authentications>
Hide Specific Documents

To configure the visibility of documents you first have to upload at least two documents. Therefor, upload two documents with the API call UploadTemporarySspFile_v1 to get two document Ids. After this API call you have to add the document Ids to the API call SendEnvelope_v1:

 <esig:sspFileIds>
            <esig:string>First document</esig:string>
	    <esig:string>Second document</esig:string>
 </esig:sspFileIds>

After adding the documents you can now configure the visibility of the documents.

API Configuration is done via envelope/steps/step/documentOption; Sample:

<envelope>
   ...
   <steps>
      <step>
         <emailBodyExtra>
         </emailBodyExtra>
         <orderIndex>1</orderIndex>
         <documentOptions>
             <documentOption docRef="1">
                 <isHidden>1</isHidden>
             </documentOption>
             <documentOption docRef="2">
                 <isHidden>1</isHidden>
             </documentOption>
         </documentOptions>
         <useDefaultAgreements>true</useDefaultAgreements>
         <recipientType>Signer</recipientType>
         <workstepConfiguration>...</workstepConfiguration>
         <recipients>
            <recipient>
               <eMail>next@recipient.domain</eMail>
               ...
            </recipient>
         </recipients>
      </step>
   </steps>
</envelope>

This feature is not available in all subscriptions.

Disposable Certificate Additional Information

If you want to use the disposable certificate you have to add additional information for the recipient:

<recipient>
  ...
  <disposableCertificateAdditionalInformation>
    <countryResidence>IT</countryResidence>
    <phoneMobile>+39XXXXXXXXXX</phoneMobile>
    <documentType>CI</documentType>
    <documentIssuedBy>Comune di XXXXXXXXX</documentIssuedBy>
    <documentIssuedOn>20XX-XX-01T00:00:00Z</documentIssuedOn>
    <documentExpiryDate>20XX-XX-30T00:00:00Z</documentExpiryDate>
    <serialNumber>XXXXXXXXXXXXXXXX</serialNumber>
    <identificationType>FOREIGN_TAX_CODE</identificationType>
    <identificationCountry>IT</identificationCountry>
    <documentNumber>XXXXXXXXXXXXX</documentNumber>
  </disposableCertificateAdditionalInformation>
<recipient>

Workstep Configuration

The workstep configuration is the most tricky part for an integration.

There are many ways how to make a workstep configuration. The following list shows some options:

  • Developer mode (Visit the guide)
  • Workstep designer
  • Create your own configuration
  • GetAdHocWorkstepConfiguration
  • Place advanced tags

Developer mode

To allow you to generate these, sometimes quite complex configuration, we created the Developer Mode. The Developer Mode allows you to use eSignAnyWhere as a “configuration builder”. This means you create your desired workflow with the eSignAnyWhere User Interface (upload document, define recipients, define signature and form fields, etc.) and download its configuration. So eSAW is generating the configuration for your via UI created workflow. Therefor, you do not have to know each step in the configuration and how it is build. Example: If you want to configure a signature field on your document you can first add it on a document in the SAW Viewer and then download the configuration and add the signature in your workstep configuration.

For more information please have a look at the developer mode guide.

Workstep Designer

With the workstep designer you can add fields, authentications, viewer preferences, general policies and more. Following steps guide you through the process of using the workstep designer:

  • Open the workstep designer
  • Select SignAnyWhere
  • Start designing
  • Create your workstep and finish it with the button “Save configuration”

Following Screenshots show you these steps:

 

workstep designer
You have to select “SignAnyWhere” for creating a eSignAnyWhere compatible workstep. Then you click “Start Designing”.

 

workstep designer
Via “+” (Plus) you can add & place signature fields on the document. “Create WorkStep” can be used for trying the current configuration in a SAW Viewer (default eSAW client). Save configuration downloads the current configuration.

You can also watch the following video which shows the process from the beginning.

Create your own configuration

You can also start with an empty workstep configuration and add those elements which you want. The next lines of code shows an example of an empty workstep configuration.

<WorkstepConfiguration>
    <pdfForms isEditingAllowed="1">
    <pdfFormsGroup id="formFilling1">
    </pdfFormsGroup>
    </pdfForms>
    <signatureTemplate></signatureTemplate>
    <signaturePluginConfiguration />
    <FinishAction />
    <Policy version="1.0.0.2">
        <GeneralPolicies />
        <WorkstepTasks></WorkstepTasks>
    </Policy>
</WorkstepConfiguration>

Signature

First you have to add the signature field in the signature template. You can copy paste the following code and replace the ##Placeholder## with the following signature configurations in the following section:

<signatureTemplate>##Placeholder##</signatureTemplate>

The following collapses shows examples of signature configurations (Click2Sign, Draw2Sign, Type2Sign and biometric signature):

Click2Sign

<sig id="93cce567-ae5c-4e98-ac99-9f56ac034250">
            <positionPage>1</positionPage>
            <DocRefNumber>1</DocRefNumber>
            <positionX>80.22857</positionX>
            <positionY>158.8629</positionY>
            <width>171.4286</width>
            <height>68.57143</height>
            <param name="enabled">1</param>
            <param name="completed">0</param>
            <param name="sigType">Picture</param>
            <param name="positioning">onPage</param>
            <param name="allowedCapturingMethods">Click2Sign</param>
        </sig>

Draw2Sign

<sig id="93cce567-ae5c-4e98-ac99-9f56ac034250">
            <positionPage>1</positionPage>
            <DocRefNumber>1</DocRefNumber>
            <positionX>80.22857</positionX>
            <positionY>158.8629</positionY>
            <width>171.4286</width>
            <height>68.57143</height>
            <param name="enabled">1</param>
            <param name="completed">0</param>
            <param name="sigType">Picture</param>
            <param name="positioning">onPage</param>
            <param name="allowedCapturingMethods">Draw2Sign</param>
        </sig>

Type2Sign

<sig id="93cce567-ae5c-4e98-ac99-9f56ac034250">
            <positionPage>1</positionPage>
            <DocRefNumber>1</DocRefNumber>
            <positionX>80.22857</positionX>
            <positionY>158.8629</positionY>
            <width>171.4286</width>
            <height>68.57143</height>
            <param name="enabled">1</param>
            <param name="completed">0</param>
            <param name="sigType">Picture</param>
            <param name="positioning">onPage</param>
            <param name="allowedCapturingMethods">Type2Sign</param>
        </sig>

Biometric

 <sig id="93cce567-ae5c-4e98-ac99-9f56ac034250">
            <positionPage>1</positionPage>
            <DocRefNumber>1</DocRefNumber>
            <positionX>80.22857</positionX>
            <positionY>158.8629</positionY>
            <width>171.4286</width>
            <height>68.57143</height>
            <param name="enabled">1</param>
            <param name="completed">0</param>
            <param name="positioning">onPage</param>
        <AllowedSignatureTypes>
              <sigType id="672d210e-9aa1-41b5-bb24-2e1b4b079f61" type="BiometricSignature">
                <bio>0</bio>
              </sigType>
            </AllowedSignatureTypes>
  </sig>

After you have added the signature field to the workstep configuration you have to add a new task for the signature field and you have to add the signature plugin information.
Note: The Id for the signature field must be the same as in the workstep task.
Following code shows an example for a workstep task. You can replace the workstep task from the empty workstep configuration by the following one:

<WorkstepTasks SequenceMode="SequenceOnlyRequiredTasks" originalSequenceMode="SequenceOnlyRequiredTasks">
            <Task enabled="1" completed="0" required="1" id="93cce567-ae5c-4e98-ac99-9f56ac034250" displayName="SignField 1" DocRefNumber="1" type="SignField" internalAllConcernedDocRefNumbersList="1" allRequiredFieldsFilledOnWorkstepCreation="0" />
        </WorkstepTasks>

 

GetAdHocWorkstepConfiguration

Another way to get the workstep configuration is to upload a file and call the GetAdHocWorkstepConfiguration_v1. For this API call you need the document Id which you got from the UploadTemporarySspFile_v1 and a AdHocWorkstepConfiguration. You can find an AdHocWorkstepConfiguration in the next collapse.

Then you receive an empty configuration based on the uploaded PDF. You can now add additional signature fields or change some behaviors

AdHocWorkstepConfiguration

 <AdhocWorkstepConfiguration>
  <!--A label for this workstep-->
  <WorkstepLabel>workstepLabel</WorkstepLabel>
  <!--Defines a image generation correction factor. If for example this document contains very small text, which might not be readable with the standard image resolution of the client, this factor can be used to tell the client to get a higher resolution.-->
  <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
  <!--Defines the time to live of all the documents created by the workstep. After this time to live is expired, all documents are deleted. '0' sets the time to live to forever.-->
  <WorkstepTimeToLiveInMinutes>10</WorkstepTimeToLiveInMinutes>
  <!--Configure the actions done by the server and the by the clients when the workstep is finished.-->
  <FinishAction>
    <!--Configure the action done by the server when the workstep is finished.-->
    <!--Attribute 'callSynchronous' wether the server should call that action before returning to the client which called FinishWorkstep. Possible values: '1' the server does not return until the action is completed. This may cause long waiting times for the client in case of timeouts or other errors, '0' the server returns to the client and calls the action afterwards. This may cause problems if the client finish action depends on the server finish action to be already completed-->
    <ServerAction callSynchronous="0">http://www.google.at</ServerAction>
    <!--A client action specifies the behavior of a specific client after a workstep is finished.-->
    <!--'clientName': defines which client should implement this behavior. Predefined client names are: 'SIGNificant WSI', 'SIGNificant iPadApp' and 'SIGNificant AndroidApp'. Any additional client name can be defined by the user.-->
    <!--'closeApp': defines if the client should close after finish.-->
    <!--'RemoveDocumentFromRecentDocumentList': if 1, the Document (Workstep) is removed from the document list, when the workstep has been successfully synced with the server.-->
    <!--'CallClientActionOnlyAfterSuccessfulSync': if 1, the clientAction (Uri) is called, when the workstep has been synced with the server. if 0, the clientAction (Uri) is called, when the user pressed finish/reject - independently, if the server was reachable and returned ok.-->
    <ClientAction clientName="WSI" closeApp="0" RemoveDocumentFromRecentDocumentList="0" CallClientActionOnlyAfterSuccessfulSync="1">www.google.at</ClientAction>
  </FinishAction>
  <!--[DEPRECATED]DefaultWidth: The default signature width for parsed signature fields in points. Specify SigTemplate.width instead.-->
  <!--[DEPRECATED]DefaultHeight: The default signature height for parsed signature fields in points. Specify SigTemplate.height instead.-->
  <!--Configure the adhoc workstep creation-->
  <NoSequenceEnforced>0</NoSequenceEnforced>
  <!--A template for signature definitions.-->
  <SigTemplate>
    <!--The elements width in points-->
    <width>50.5</width>
    <!--The elements height in points-->
    <height>100.5</height>
  </SigTemplate>
  <!--Configuration for parsing the form fields. Possible values: '1' parse the form fields, '0' do not parse form fields-->
  <!--Attribute 'mapRequiredFieldsToRequiredTask': set the form filling task required when some of the fields are required. Possible values: '1' required forms lead to required tasks, '0' required fields do not enforce the task to be required-->
  <!--Attribute 'formsGrouping': Specify how the parsed forms should be grouped into tasks. Possible values: 'PerPage' all forms on one page are grouped to one forms group, 'PerDocument' all forms of one document are grouped to one forms group, 'PerEnvelope' all forms of all documents inside the envelope are grouped to one forms group-->
  <!--Attribute 'returnSimplifiedConfig': Possible values: '1' return minified form field information, '0' return full form field information-->
  <!--Attribute 'addKeepExistingValueFlag': Possible values: '1' CreateWorkstep will use the PDF defined form field value, '0' CreateWorkstep will use the XML defined form field value-->
  <ParseFormFields mapRequiredFieldsToRequiredTask="0" formsGrouping="PerPage" returnSimplifiedConfig="0" addKeepExistingValueFlag="0">1</ParseFormFields>
  <!--If the workstep is not generated by hand but automatically generated by the Workstep Controller AdhocPolicies are specified-->
  <AdhocPolicies>
    <!--Configure if any modifications, like adding attachments, freehand annotations are allowed after a signature is applied-->
    <AllowModificationsAfterSignature>1</AllowModificationsAfterSignature>
  </AdhocPolicies>
  <!--Configurate the signatures for this workstep. One default configuration has to be defined. The default configuration is used for flatten signatures, adhoc signatures and signature fields which do not reference a special signature plugin configuration. The default configuration does not contain the attribute 'spcId'. If the attribute 'spcId' is defined the signature plugin configuration does only apply to signature fields referencing the configuration by specifiying <param name="spcId">id</param>.-->
  <signaturePluginConfiguration>
    <!--Configurate the signature properties-->
    <PdfSignatureProperties_V1>
      <!--Should the signatures be pdfA conformant. Note this setting does not convert a document into pdfA, it only keeps it pdfA conformant if it already is. Possible values: '1' sign pdfA conformant - in this case the file size will be bigger than without pdfA, '0' do not sign pdfA conformant.-->
      <PdfAConformant>0</PdfAConformant>
      <!--Defines if the signature should be PAdES part 4 compliant. Possible values: '1' sign the document PAdES part 4 compliant, '0' sign the document with standard pdf signature. Default value: '0'-->
      <PAdESPart4Compliant>0</PAdESPart4Compliant>
      <!--Defines if the certificate chain for the signing certificate should be embedded into the signature. Possible values: '1' include the certificate chain, '0' do not include the certificate chain. Default value: '0'-->
      <IncludeSigningCertificateChain>0</IncludeSigningCertificateChain>
      <!--Defines if and how the revocation information for the signing certificate chain should be embedded. Possible values: 'DoNotInclude' no revocation information is included, 'Include' the revocation information has to be included, if not possible the signature throws an exception, 'TryToInclude' if the revocation information can be fetched, it should be included, if not the signature is done without revocation information. Information about the signatures where the revocation information could not be included is saved into the WorkstepStatus, 'CheckRevocationIncludeOcsp' the revocation information has to be included when it is an OCSP, if checking of the revocation (OCSP or CRL) fails an exception is thrown. Information about the signatures where the revocation information could not be included is saved into the WorkstepStatus-->
      <SigningCertificateRevocationInformationIncludeMode>DoNotInclude</SigningCertificateRevocationInformationIncludeMode>
    </PdfSignatureProperties_V1>
    <!--Configurate the cryptographic data-->
    <PdfSignatureCryptographicData_V1>
      <!--The hash algorithm used for the signatures. Possible values: 'Sha1', 'Sha256', 'Sha512'-->
      <SignatureHashAlgorithm>Sha256</SignatureHashAlgorithm>
      <!--The description of the signing certificate. More than one SigningCertificateDescriptor can be defined by adding this node more than once. If more SigningCertificateDescriptors are present, these configurations are used as backup if the selected SigningCertificateDescriptor is not working. For example if no revocation information can be retrieved although it should be included into the signature.-->
      <SigningCertificateDescriptor>
        <!--The certificates identifier-->
        <Identifier>14527a6bcfa8b4d7d0183fca6b735b1c246d14ae</Identifier>
        <!--The certificate identifier type. Possible values: 'Subject', 'Sha1Thumbprint'-->
        <Type>Sha1Thumbprint</Type>
        <!--The cryptographic service provider to locate the certificate. Possible values: 'default' uses the servers certificate store, 'custom' uses the custom signature action-->
        <Csp>Default</Csp>
      </SigningCertificateDescriptor>
    </PdfSignatureCryptographicData_V1>
  </signaturePluginConfiguration>
  <!--Configure the signature string parsing-->
  <SigStringParsingConfiguration>
    <!--Defines a signature string to parse. Tag can be present more than once-->
    <SigStringsForParsing>
      <!--The start pattern of the signature string if it has a start and end pattern. Otherwise the whole word to parse-->
      <StartPattern>`sig</StartPattern>
      <!--End pattern if needed, otherwise empty-->
      <EndPattern>`</EndPattern>
      <!--Define if the signature strings should be cleared from the document. Possible values: '1' remove the signature strings from the document, '0' do not change the document-->
      <ClearSigString>1</ClearSigString>
      <!--Define if only the entire word should be searched. For example if start pattern is 'signature' only 'signature' but not 'signaturepad' is found. This option does only effect signature string without end patterns. Possible values: '1' search only the entire word, '0' search words containing the pattern as well.-->
      <SearchEntireWordOnly>1</SearchEntireWordOnly>
    </SigStringsForParsing>
  </SigStringParsingConfiguration>
  <!--Defines general policies for this workstep-->
  <GeneralPolicies>
    <!--Is the client allowed to save the workstep document-->
    <AllowSaveDocument>1</AllowSaveDocument>
    <!--Is the client allowed to save the audittrail document-->
    <AllowSaveAuditTrail>0</AllowSaveAuditTrail>
    <!--Is the client allowed to rotate the pages of the document-->
    <AllowRotatingPages>1</AllowRotatingPages>
    <!--Is the client allowed to append a file to the workstep-->
    <AllowAppendFileToWorkstep>1</AllowAppendFileToWorkstep>
    <!--Is the client allowed to add append tasks to the workstep-->
    <AllowAppendTasksToWorkstep>1</AllowAppendTasksToWorkstep>
    <!--Is the client allowed to email the workstep document-->
    <AllowEmailDocument>0</AllowEmailDocument>
    <!--Is the client allowed to print the workstep document-->
    <AllowPrintDocument>0</AllowPrintDocument>
    <!--Is the client allowed to finish the workstep-->
    <AllowFinishWorkstep>1</AllowFinishWorkstep>
    <!--Is the client allowed to reject the workstep-->
    <AllowRejectWorkstep>1</AllowRejectWorkstep>
    <!--Is the client allowed to undo actions-->
    <AllowUndoLastAction>1</AllowUndoLastAction>
    <!--Is the client allowed to colorize pdf forms-->
    <AllowColorizePdfForms>0</AllowColorizePdfForms>
    <!--Is the client allowed to add adhoc attachments-->
    <AllowAdhocPdfAttachments>0</AllowAdhocPdfAttachments>
    <!--Is the client allowed to add signatures which are not defined in the tasks-->
    <AllowAdhocSignatures>1</AllowAdhocSignatures>
    <!--Is the client allowed to add stampings which are not defined in the tasks-->
    <AllowAdhocStampings>1</AllowAdhocStampings>
    <!--Is the client allowed to add adhoc freehand annotations-->
    <AllowAdhocFreeHandAnnotations>1</AllowAdhocFreeHandAnnotations>
    <!--Is the client allowed to add adhoc typewriter annotations-->
    <AllowAdhocTypewriterAnnotations>1</AllowAdhocTypewriterAnnotations>
    <!--Is the client allowed to add adhoc picture annotations-->
    <AllowAdhocPictureAnnotations>0</AllowAdhocPictureAnnotations>
    <!--Is the client allowed to append adhoc documents-->
    <AllowAdhocPdfPageAppending>0</AllowAdhocPdfPageAppending>
  </GeneralPolicies>
</AdhocWorkstepConfiguration>

Place advanced tags

Another way to prepare the workstep is to use signature field placeholder (‘sig’) or advanced tags in the document. For signature field placeholders you need to get the AdHocWorkstepConfiguration via API (GetAdHocWorkstepConfiguration_v1) and for advanced tags you have first to perform a prepare call (PrepareSendEnvelopeSteps_v1). An alternative is to use the Workstep Designer. The workstep designer can help you creating a workstep xml and you can directly try it in the SignAnyWhere Viewer (the eSignAnyWhere default signing client).

Hello World Tutorial - WorkstepConfiguration XML

<workstepConfiguration>
   <WorkstepLabel />
   <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
   <WorkstepTimeToLiveInMinutes>900</WorkstepTimeToLiveInMinutes>
   <FinishAction>
      <ServerAction callSynchronous="0" />
      <ClientAction clientName="SIGNificant SignAnywhere" closeApp="0" RemoveDocumentFromRecentDocumentList="0" CallClientActionOnlyAfterSuccessfulSync="1" />
   </FinishAction>
   <signatureTemplate>
      <version>1.2.0.2</version>
      <positionUnits>PdfUnits</positionUnits>
      <positionReferenceCorner>Lower_Left</positionReferenceCorner>
      <sig id="c5dfe088-968b-462b-8cdf-15d282f0edb2">
         <positionPage>1</positionPage>
         <DocRefNumber>1</DocRefNumber>
         <positionX>51.42857</positionX>
         <positionY>464.7771</positionY>
         <width>171.4286</width>
         <height>68.57143</height>
         <param name="enabled">1</param>
         <param name="completed">0</param>
         <param name="bio">0</param>
         <param name="sigType">Picture</param>
         <param name="positioning">onPage</param>
         <param name="allowedCapturingMethods">Click2Sign</param>
      </sig>
   </signatureTemplate>
   <senderInformation>
      <userInformation>
         <firstName />
         <lastName />
         <eMail />
      </userInformation>
   </senderInformation>
   <receiverInformation>
      <userInformation>
         <firstName />
         <lastName />
         <eMail />
      </userInformation>
   </receiverInformation>
   <Agreements>
      <text language="en">++Here you should add the legal texts that are the base for the contract to be signed.++</text>
      <text language="*">++Here you should add the legal texts that are the base for the contract to be signed.++</text>
      <text language="de">++Hier sollten allfällige Regelungen stehen, die der Benutzer akzeptieren muss, bevor er den Vertrag / das Dokument unterzeichnet.++</text>
   </Agreements>
   <IntroTexts>
      <text language="en">++Here you should describe, what this transaction is about and what the user needs to do next.++</text>
      <text language="*">++Here you should describe, what this transaction is about and what the user needs to do next.++</text>
      <text language="de">++Hier sollten sie beschreiben, um was es sich bei dem Dokument handelt, und was der Benutzer nun tun soll.++</text>
   </IntroTexts>
   <pdfForms isEditingAllowed="1" />
   <attachmentFields />
   <PictureAnnotationTaskInfo>
      <MinResolution>100</MinResolution>
      <MaxResolution>1200</MaxResolution>
      <ColorDepth>Color16M</ColorDepth>
   </PictureAnnotationTaskInfo>
   <TypewriterAnnotationTaskInfo />
   <ViewerPreferences>
      <ShowVersionNumber>1</ShowVersionNumber>
      <EnableThumbnailDisplay>1</EnableThumbnailDisplay>
      <EnableWarningPopupOnLeave>1</EnableWarningPopupOnLeave>
      <WarningPopupDisplayAfter>FillOrSignField</WarningPopupDisplayAfter>
      <GuidingBehavior>GuideRequiredAndOptionalTasks</GuidingBehavior>
      <FormFieldsGuidingBehavior>AllowSubmitAlways</FormFieldsGuidingBehavior>
      <FinishWorkstepOnOpen>0</FinishWorkstepOnOpen>
   </ViewerPreferences>
   <Policy version="1.0.0.2">
      <GeneralPolicies>
         <AllowSaveDocument>1</AllowSaveDocument>
         <AllowSaveAuditTrail>1</AllowSaveAuditTrail>
         <AllowRotatingPages>1</AllowRotatingPages>
         <AllowAppendFileToWorkstep>0</AllowAppendFileToWorkstep>
         <AllowAppendTasksToWorkstep>0</AllowAppendTasksToWorkstep>
         <AllowEmailDocument>1</AllowEmailDocument>
         <AllowPrintDocument>1</AllowPrintDocument>
         <AllowFinishWorkstep>1</AllowFinishWorkstep>
         <AllowRejectWorkstep>1</AllowRejectWorkstep>
         <AllowUndoLastAction>1</AllowUndoLastAction>
         <AllowColorizePdfForms>0</AllowColorizePdfForms>
         <AllowAdhocPdfAttachments>1</AllowAdhocPdfAttachments>
         <AllowAdhocSignatures>1</AllowAdhocSignatures>
         <AllowAdhocStampings>1</AllowAdhocStampings>
         <AllowAdhocFreeHandAnnotations>1</AllowAdhocFreeHandAnnotations>
         <AllowAdhocTypewriterAnnotations>1</AllowAdhocTypewriterAnnotations>
         <AllowAdhocPictureAnnotations>1</AllowAdhocPictureAnnotations>
         <AllowAdhocPdfPageAppending>1</AllowAdhocPdfPageAppending>
      </GeneralPolicies>
      <WorkstepTasks SequenceMode="SequenceOnlyRequiredTasks" originalSequenceMode="SequenceOnlyRequiredTasks">
         <Task enabled="1" completed="0" required="1" id="c5dfe088-968b-462b-8cdf-15d282f0edb2" displayName="SignField 1" DocRefNumber="1" type="SignField" internalAllConcernedDocRefNumbersList="1" />
      </WorkstepTasks>
      <AdhocPolicies>
         <AllowModificationsAfterSignature>1</AllowModificationsAfterSignature>
      </AdhocPolicies>
   </Policy>
   <timeCreated>2017-03-15T11:02:31.7812969Z</timeCreated>
   <signaturePluginConfiguration>
      <PdfSignatureProperties_V1>
         <PdfAConformant>0</PdfAConformant>
         <PAdESPart4Compliant>0</PAdESPart4Compliant>
         <IncludeSigningCertificateChain>0</IncludeSigningCertificateChain>
         <SigningCertificateRevocationInformationIncludeMode>DoNotInclude</SigningCertificateRevocationInformationIncludeMode>
         <SignatureTimestampData>
            <Password />
            <SignatureHashAlgorithm>SHA1</SignatureHashAlgorithm>
            <Uri />
            <UserName />
         </SignatureTimestampData>
      </PdfSignatureProperties_V1>
      <PdfSignatureCryptographicData_V1>
         <SignatureHashAlgorithm>Sha256</SignatureHashAlgorithm>
         <SigningCertificateDescriptor>
            <Identifier>DDED02DC192573B722E8C027F0E47E63152EB822</Identifier>
            <Type>Sha1Thumbprint</Type>
            <Csp>Default</Csp>
         </SigningCertificateDescriptor>
      </PdfSignatureCryptographicData_V1>
   </signaturePluginConfiguration>
   <AuditingToolsConfiguration WriteAuditTrail="1">
      <NotificationConfiguration>
         <NotificationUrl>http://localhost:49999/ReceiverSample.aspx?WorkstepId=##WorkstepId##&amp;EventType=##EventType##&amp;Source=##Source##&amp;Time=##Time##&amp;Description=##Description##</NotificationUrl>
      </NotificationConfiguration>
   </AuditingToolsConfiguration>
   <TransactionCodeConfigurations>
      <TransactionCodeConfiguration trConfId="">
         <Message>Please sign the document with the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
      <TransactionCodeConfiguration trConfId="Trans1">
         <Message>Please accept the transactionId {tId} with the code: {Token}</Message>
         <hashAlgorithmIdentifier>Sha256</hashAlgorithmIdentifier>
      </TransactionCodeConfiguration>
   </TransactionCodeConfigurations>
</workstepConfiguration>

Input Validation for Form Fields

In the workstep configuration you can define (since version 3.1) a form field valdiation for text fields.

<textBox id="Text1">
   ...

   <minLength>5</minLength>
   <placeholders>
      <placeholder language="*">example.mail@xyzmo.com</placeholder>
      <placeholder language="de">beispiel.mail@xyzmo.com</placeholder>
   </placeholders>
   <tooltips>
      <tooltip language="*">Please enter your phone number in the format +{countryCode}{phoneNumber}</tooltip>
      <tooltip language="de">Bitte geben Sie hier Ihre Telefonnummer in dem Format +{Ländercode}{Telefonnummer} ein</tooltip>
   </tooltips>
   <inputValidation>
      <type>Number/Decimal/Currency/Phone/Email/Date/Time/Custom</type>
      <format>dd-MM-yyyy / \d*(\.|,)?\d?</format>
      <range from="-128" to="127" />
   </inputValidation>
</textBox>

In the next collapse you can find a workstep configuration with one recipient and a textfield for the input validation:

WorkstepConfiguration

<envelope>
  <name>test</name>
  <eMailSubject>Please sign the enclosed envelope</eMailSubject>
  <eMailBody>Dear #RecipientFirstName# #RecipientLastName#

#PersonalMessage#

Please sign the envelope #EnvelopeName#

Envelope will expire at #ExpirationDate#</eMailBody>
  <enableReminders>true</enableReminders>
  <firstReminderDayAmount>5</firstReminderDayAmount>
  <recurrentReminderDayAmount>3</recurrentReminderDayAmount>
  <beforeExpirationReminderDayAmount>3</beforeExpirationReminderDayAmount>
  <daysUntilExpire>28</daysUntilExpire>
  <callbackUrl></callbackUrl>
  <statusUpdateCallbackUrl></statusUpdateCallbackUrl>
  <displayedEmailSender></displayedEmailSender>
  <steps>
    <step>
      <emailBodyExtra></emailBodyExtra>
      <orderIndex>1</orderIndex>
      <recipientType>Signer</recipientType>
      <useDefaultAgreements>true</useDefaultAgreements>
      <documentOptions>
        <documentOption docRef="1">
          <isHidden>false</isHidden>
        </documentOption>
      </documentOptions>
      <workstepConfiguration skipThirdPartyChecks="0">
        <WorkstepLabel>test</WorkstepLabel>
        <SmallTextZoomFactorPercent>100</SmallTextZoomFactorPercent>
        <WorkstepTimeToLiveInMinutes>43210</WorkstepTimeToLiveInMinutes>
        <FinishAction />
        <ViewerPreferences>
          <SendVisibleArea allowedDomain="*">0</SendVisibleArea>
          <FinishWorkstepOnOpen>0</FinishWorkstepOnOpen>
        </ViewerPreferences>
        <Policy version="1.1.0.0">
          <AdhocPolicies>
            <AllowModificationsAfterSignature>1</AllowModificationsAfterSignature>
          </AdhocPolicies>
          <GeneralPolicies>
            <AllowAdhocFreeHandAnnotations>0</AllowAdhocFreeHandAnnotations>
            <AllowAdhocPdfAttachments>0</AllowAdhocPdfAttachments>
            <AllowAdhocPdfPageAppending>0</AllowAdhocPdfPageAppending>
            <AllowAdhocPictureAnnotations>0</AllowAdhocPictureAnnotations>
            <AllowAdhocSignatures>0</AllowAdhocSignatures>
            <AllowAdhocStampings>0</AllowAdhocStampings>
            <AllowAdhocTypewriterAnnotations>0</AllowAdhocTypewriterAnnotations>
            <AllowEmailDocument>1</AllowEmailDocument>
            <AllowFinishWorkstep>1</AllowFinishWorkstep>
            <AllowPrintDocument>1</AllowPrintDocument>
            <AllowRejectWorkstep>1</AllowRejectWorkstep>
            <AllowSaveAuditTrail>1</AllowSaveAuditTrail>
            <AllowSaveDocument>1</AllowSaveDocument>
            <AllowUndoLastAction>1</AllowUndoLastAction>
            <AllowRotatingPages>0</AllowRotatingPages>
            <AllowRejectWorkstepDelegation>0</AllowRejectWorkstepDelegation>
          </GeneralPolicies>
          <WorkstepTasks originalSequenceMode="NoSequenceEnforced" SequenceMode="NoSequenceEnforced">
            <Task id="73255b74-07b6-45cc-8522-167066a12b20" DocRefNumber="1" enabled="1" completed="0" type="FillFormsGroup" required="0" displayName="" />
          </WorkstepTasks>
        </Policy>
        <timeCreated>2019-09-27T11:44:54.5204547Z</timeCreated>
        <TransactionCodeConfigurations>
    <TransactionCodeConfiguration trConfId="smsAuthTransactionCodeId">
    </TransactionCodeConfiguration>
  </TransactionCodeConfigurations>
        <receiverInformation>
          <userInformation>
            <firstName>##NAME##</firstName>
            <lastName>##NAME##</lastName>
            <eMail>##EMAIL##</eMail>
          </userInformation>
          <showNamirialDisposableDisclaimer>1</showNamirialDisposableDisclaimer>
        </receiverInformation>
        <senderInformation>
          <userInformation>
            <firstName>##NAME##</firstName>
            <lastName>##NAME##</lastName>
            <eMail>##EMAIL##</eMail>
          </userInformation>
        </senderInformation>
        <pdfForms isEditingAllowed="0">
          <pdfFormsGroup id="73255b74-07b6-45cc-8522-167066a12b20">
            <textBox id="TextBox_cb0dc271-fb5b-8e9a-7001-89b14bfb33da">
              <DocRefNumber>1</DocRefNumber>
              <isRequired>0</isRequired>
              <positionPage>1</positionPage>
              <positionX>70</positionX>
              <positionY>667</positionY>
              <width>125</width>
              <height>20</height>
            </textBox>
          </pdfFormsGroup>
        </pdfForms>
        <TypewriterAnnotationTaskInfo />
        <attachmentFields />
        <signatureTemplate>
          <version>1.2.0.2</version>
          <positionReferenceCorner>Lower_Left</positionReferenceCorner>
          <positionUnits>PdfUnits</positionUnits>
        </signatureTemplate>
        <AuditingToolsConfiguration WriteAuditTrail="0">
          <NotificationConfiguration />
        </AuditingToolsConfiguration>
        <resourceUris />
        <LoggingMetaInformation>
          <envelopeId>24b99a22-dc93-45d8-b7c3-c5b607bca6ed</envelopeId>
          <envelopeRecipientId>7b7ef5f6-2e9a-49a0-a147-59324e6463d8</envelopeRecipientId>
        </LoggingMetaInformation>
      </workstepConfiguration>
      <recipients>
        <recipient>
          <eMail>##EMAIL##</eMail>
          <emailBodyExtra></emailBodyExtra>
          <firstName>##NAME##</firstName>
          <lastName>##NAME##</lastName>
          <languageCode>en</languageCode>
          <disableEmail>false</disableEmail>
          <skipExternalDataValidation>false</skipExternalDataValidation>
          <addAndroidAppLink>false</addAndroidAppLink>
          <addIosAppLink>false</addIosAppLink>
          <addWindowsAppLink>false</addWindowsAppLink>
          <allowDelegation>false</allowDelegation>
          <authentications />
        </recipient>
      </recipients>
    </step>
    <step>
      <emailBodyExtra></emailBodyExtra>
      <orderIndex>2</orderIndex>
      <recipientType>Cc</recipientType>
      <useDefaultAgreements>false</useDefaultAgreements>
      <recipients>
        <recipient>
          <eMail>##EMAIL##</eMail>
          <emailBodyExtra></emailBodyExtra>
          <firstName>##NAME##</firstName>
          <lastName>##NAME##</lastName>
          <languageCode>en</languageCode>
          <disableEmail>false</disableEmail>
          <skipExternalDataValidation>false</skipExternalDataValidation>
          <addAndroidAppLink>false</addAndroidAppLink>
          <addIosAppLink>false</addIosAppLink>
          <addWindowsAppLink>false</addWindowsAppLink>
          <allowDelegation>false</allowDelegation>
          <authentications />
        </recipient>
      </recipients>
    </step>
  </steps>
  <addFormFields>
    <document docRef="1">
      <textBox name="TextBox_cb0dc271-fb5b-8e9a-7001-89b14bfb33da" readOnly="false" required="false" x="70" y="667.92" width="125" height="20" page="1">
        <fontSettings>
          <textColor>#000000</textColor>
          <fontName>Times New Roman</fontName>
          <fontSize>11</fontSize>
          <fontStyleBold>false</fontStyleBold>
          <fontStyleItalic>false</fontStyleItalic>
          <textAlign>Left</textAlign>
        </fontSettings>
        <value />
        <maxLength>-1</maxLength>
        <isMultiLine>false</isMultiLine>
        <isPassword>false</isPassword>
        <isComb>false</isComb>
      </textBox>
    </document>
  </addFormFields>
  <attachSignedDocumentsToEnvelopeLog>false</attachSignedDocumentsToEnvelopeLog>
</envelope>

The following options are availabe:

  • Date
    • Format is required; Value: any .NET format
    • Range is optional and must match with given format
<inputValidation>
    <type>date</type>
    <format>dd. MMMM yyyy</format>
    <range from="13. Mai 2018" to="18. December 2019" />
</inputValidation>

  •  Email
    • no format or range
<inputValidation>
    <type>email<type>
</inputValidation>
  • Number
    • Format is required
      • decimalPlaces required; between 0..10
      • decimalSeparator (if decimalPlaces > 0): comma, point or apostrophe
      • thousandsSeparator (must be different to decimalSeparator): comma, point, apostrophe, blank
      • symbol (optional): any text, e.g. for currency
      • symbolLocation (required if symbol is set): start, startWithBlank, end, endWithBlank
      • Range: allowed (optional): must match with given format
 <inputValidation>
    <type>number</type>
    <format decimalPlaces="2" decimalSeparator="comma" thousandsSeparator="point" symbol="€" symbolLocation="endWithBlank" />
    <range from="-300,00 €" to="5.000,00 €" />
</inputValidation>
True (within the range) False (outside the range)
  • Phone
    • Format: required; International, InternationalLeadingZeros, InternationLeadingPlus
<inputValidation>
    <type>phone</type>
    <format type="international" />
</inputValidation>
  • Time
    • Format: required; any .NET time format
    • Range: allowed (optional), must match with given format
<inputValidation>
    <type>time</type>
    <format>HH:mm</format>
    <range from="12:00" to="18:00" />
</inputValidation>