Page last updated: July 22, 2026
Creating an IPEN Session
An IPEN (In-Person Electronic Notarization) is a notarization session that your notary conducts face-to-face with the signer. Creating an IPEN through the API prepares everything ahead of the meeting: the documents, the participants, and the assigned notary.
Below is an example request to create an IPEN order:
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-H 'Content-Type: application/json' \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-d $'{
"internal_id": "((internal_order_id))",
"notary": "((notary_user_id))",
"document_urls": ["https://pdfobject.com/pdf/sample.pdf"],
"participants": [{
"email": "john.doe@notarylive.com",
"first_name": "Johnny",
"last_name": "Doe",
"type": "signer"}]
}'
A successful request will generate the following response:
{
"success":1,
"link_to_order":"https://notarylive.com/ipen/edit/{unique_ipen_identifier}"
}
Please note: Unlike our RON API, the link_to_order is intended for the
notary you assigned to the order, not for the signer. The link opens the IPEN session editor, where your
notary reviews the documents and conducts the in-person signing. The notary must be logged in to their
NotaryLive notary account to open it.
Validation Failures
Invalid credentials will return a 401 response with the message: HTTP/1.0 401 Unauthorized
Invalid or missing payload data will return a 400 HTTP response with a JSON body containing success =
0 as well as an array of errors containing both a standardized error code, as well as a
human-readable description of what caused the error:
If you continue having issues, please take a look at our troubleshooting guide.
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-H 'Content-Type: application/json' \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-d $'{
"internal_id": "((internal_order_id))",
"document_urls": ["https://pdfobject.com/pdf/sample.pdf"],
"participants": [{
"email": "john.doe@notarylive.com",
"last_name": "Doe",
"first_name": "Johnny"}]
}'
{
"success": 0,
"errors": [
{
"code": "validation_failed",
"message": "The notary field is required."
},
{
"code": "validation_failed",
"message": "The participants.0.type field is required."
}
]
}
In addition to the validation_failed errors shown above, the following error codes can be returned
when creating an IPEN order:
| Error Code | Description |
invalid_credentials |
The supplied credentials are not IPEN API credentials. RON and eSign API credentials cannot be used with IPEN endpoints |
invalid_notary |
The supplied notary is not an IPEN-approved notary in your organization |
invalid_webhook_url |
The supplied webhook_url is not a working, publicly accessible URL |
restricted_email_in_use |
One or more participant emails belong to an account type that is not allowed to sign |
file_creation_failed |
We could not download or process one or more of the supplied documents |
Attaching Documents
Every IPEN order requires at least one document, supplied through either document_urls or
document_files.
via Document URL
To upload a document to notarize, pass in a comma-separated list of document urls as shown below:
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-H 'Content-Type: application/json' \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-d $'{
"internal_id": "((internal_order_id))",
"notary": "((notary_user_id))",
"document_urls": [
"https://pdfobject.com/pdf/sample.pdf",
"https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
],
"participants": [{
"email": "john.doe@notarylive.com",
"first_name": "Johnny",
"last_name": "Doe",
"type": "signer"}]
}'
Each file will be attached as a separate document and all documents will be notarized within the same in-person session with your notary.
via Direct File Upload
In the direct file upload approach, the file must exist on the same server infrastructure as where the API request is originating from. You will then reference the full file path to the document within the API call:
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-H 'Content-Type: multipart/form-data' \
-F "document_files[0]=@/path/to/document_1.pdf" \
-F "document_files[1]=@/path/to/document_2.pdf" \
-F "notary=((notary_user_id))" \
-F "participants[0][first_name]=Johnny" \
-F "participants[0][last_name]=Doe" \
-F "participants[0][email]=john.doe@notarylive.com" \
-F "participants[0][type]=signer" \
-F "internal_id=internal_order_id"
Please note: The API will fail with an error message if the file does not exist or the full file path is not specified correctly.
Please note: API calls including large documents or multiple documents will take longer to process than API calls with smaller filesize documents.
Adding Participants
You can add signers and witnesses to the request in the IPEN API by using the participants
parameter. The participants parameter accepts an array of objects representing participants, the first
signer will always be treated as the primary signer. Each participant object must contain the following
parameters:
first_name- The first name of the participantlast_name- The last name of the participantemail- The email address of the participanttype- The type of the participant, eithersignerorwitness
For more information on the validation rules for participant names and emails, please click here.
You can add multiple signers and witnesses to the request in this manner:
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-H 'Content-Type: application/json' \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-d $'{
"internal_id": "((internal_order_id))",
"notary": "((notary_user_id))",
"document_urls": ["https://pdfobject.com/pdf/sample.pdf"],
"participants": [{
"email": "john.doe@notarylive.com",
"first_name": "Johnny",
"last_name": "Doe",
"type": "signer"
}, {
"email": "jane.doe@notarylive.com",
"first_name": "Jane",
"last_name": "Doe",
"type": "witness"
}]
}'
Please note: Since the session happens in person, all participants must be physically present with your notary at the time of the signing.
Please note: Each additional signer or witness you add to the request increases the price of the order by $5 dollars.
Choosing the Notary
The notary parameter is required and must be set to the NotaryLive user ID of
a notary who belongs to your organization and has been approved for IPEN. You can view your organization's
notaries as well as their user IDs in your dashboard, under the Users tab.
Please note: Because the signing happens in person on your notary's device, the notary pool
options available in our RON API (any_nl_notary and any_of_mine) are not supported
for IPEN. Every IPEN order must be assigned to one specific notary.
If none of your notaries have been approved for IPEN yet, please reach out to us at support@notarylive.com for assistance activating IPEN.
Naming the Session
You can give the session a name that your team and your notary will recognize by supplying the
session_name parameter. The session name is shown in your dashboard's session archive.
curl -X POST "https://notarylive.com/api/v1/ipen/create" \
-H 'Content-Type: application/json' \
-u '((your_ipen_api_id)):((your_ipen_api_key))' \
-d $'{
"internal_id": "((internal_order_id))",
"notary": "((notary_user_id))",
"session_name": "Smith Refinance Closing",
"document_urls": ["https://pdfobject.com/pdf/sample.pdf"],
"participants": [{
"email": "john.doe@notarylive.com",
"first_name": "Johnny",
"last_name": "Doe",
"type": "signer"}]
}'
After the Session
Once your notary has met with the participants, completed the signing, and finalized the session, the documents are digitally sealed with the notary's certificate. At that point:
- The
ipen_completewebhook event is sent to yourwebhook_urlwith links to the signed document(s) - The completed session appears in your dashboard under Sessions > IPEN
Please note: For orders created through this API, NotaryLive does not email
the completed document(s) to the participants, the notary, or your Business Account. Retrieve the documents
from the ipen_complete webhook event instead, and store them on
your own infrastructure. The links it contains expire 30 minutes after the session is completed.
Billing
IPEN orders are always charged to your Business Account — there is no customer payment step. Only orders which complete the notarial event successfully will be charged to your account. Billing for these orders occurs at the end of the month and will be reflected in your monthly invoice.
Please note: Orders created with sandbox credentials are never billed, and the final document(s) produced by a sandbox session are watermarked.
Webhook Events
To receive status updates as the order moves through the system, supply a publicly accessible
webhook_url in your create call. The following webhook events are sent during the IPEN order
lifecycle:
| Event Name | JSON Payload |
ipen_created |
|
ipen_canceled |
|
ipen_complete |
|
Please note: the links_to_documents will only be accessible for
30 minutes. Please have a plan in place to download and store the documents on your own
infrastructure, as NotaryLive does not email the completed document(s) to the participants,
the notary, or your Business Account for orders created through this API.
Please note: If you supply a company_email instead of a
webhook_url, the webhook event data will be emailed to that address instead. If both are
supplied, the email is only sent when your webhook endpoint repeatedly fails to return a success response.
Webhook Security
All webhook messages sent by NotaryLive are sent over HTTPS to ensure messages are encrypted in transit.
While HMAC verification is a common security measure, integrating partners have had difficulty replicating the HMAC signature, especially when the Content-Type isn't application/json. For this reason, NotaryLive does not support HMAC signing for webhooks.
Instead, we recommend treating webhooks as simple notifications that the session order status has changed and then use the IPEN Status API to retrieve the details of the status change.
Internal ID
The internal_id parameter is used to identify the order in your internal systems. It is returned
as the their_order_id field in every webhook event, and our support
team can use it to locate the order if you ever need assistance.
Validation Rules
The following are the validation rules for all arguments within the IPEN creation API call:
| Parameter | Validation Rules |
|---|---|
company_email |
Optional | Email | Max length: 100 characters | The email address NotaryLive will send status updates to, as an order moves through the system. If a webhook url is supplied and the webhook receives a 200-response from the server, the email will not be sent to this email address |
document_files |
Optional | Array of files | Supported file types: pdf, doc, docx, png, jpg, jpeg, heic, heif | One of
document_files or document_urls is required |
document_urls |
Optional | Array of urls | Supported file types: pdf, doc, docx, png, jpg, jpeg, heic, heif | One of
document_files or document_urls is required |
internal_id |
Optional | String | A value you supply that helps identify this record in your internal systems. For more details, click here |
notary |
Required | String | The NotaryLive user ID of an IPEN-approved notary in your organization. For more information, click here |
participants |
Required | Array of objects | Must include at least one participant of the type signer |
participants.*.email |
Required | Email | Max length: 100 characters | The email address of the participant |
participants.*.first_name |
Required | String | Max length: 35 characters | Letters, commas, periods, hypens, apostrophes and spaces only | The first name of the participant |
participants.*.last_name |
Required | String | Max length: 50 characters | Letters, commas, periods, hypens, apostrophes and spaces only | The last name of the participant |
participants.*.type |
Required | String | Options: signer, witness | The type of the participant |
session_name |
Optional | String | Max length: 191 characters | A name for the session, shown in your dashboard's session archive |
webhook_url |
Optional | Url | Must be publicly accessible | The url NotaryLive will POST status updates to, as an order moves through the system. For more details, click here |
Copyright © 2026, NotaryLive.com