Introduction
The ProNotary API allows you to access essential information related to Notaries, Clients, Transactions, and Documents. This documentation will guide you on how to leverage our API to enhance your workflow and integrate ProNotary functionality into your applications.
You may explore code examples on the right side of this page. Use the tabs in the top right to switch between programming languages and view examples in your preferred language.
API Root
The ProNotary API Root is the starting point for all your requests. Make sure to prefix your endpoint paths with the following base URL:
https://api.pronotary.com/api/p/v1
Authentication
Example authenticated request:
# With shell, you can just pass the correct header with each request
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
https://api.pronotary.com/api/p/v1/API_ENDPOINT
<?php
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/API_ENDPOINT');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Encode the API key and ID for basic authentication
const encodedCredentials = btoa("YOUR_API_KEY_ID:YOUR_API_KEY");
// Make the HTTP request using the fetch API
fetch(apiUrl, {
method: "GET",
headers: {
Authorization: `Basic ${encodedCredentials}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.
ProNotary uses HTTP basic authentication for authorizing API requests. To authenticate your API requests, ensure to include your API key ID as the HTTP auth username and your API key as the corresponding password.
You can create API keys from the Admin panel.
An authenticated API request should have a header that looks like the following:
Authorization: Basic encodedapikeyidandapikey
Errors
The ProNotary API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized -- Your API key is wrong. |
403 | Forbidden -- You are not authorized to access the requested resource. |
404 | Not Found -- The specified resource could not be found. |
405 | Method Not Allowed -- You tried to access a resource with an invalid method. |
406 | Not Acceptable -- You requested a format that isn't json. |
410 | Gone -- The requested resource has been removed from our servers. |
429 | Too Many Requests -- You're making too many requests! |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Rate Limiting
We use rate limiting to keep our API safe and stable. The default rate limiter allows up to 50 requests per minute.
Any request over the limit will return a 429 Too Many Requests error.
IP Address Whitelist
If you are calling our API with fixed IP addresses and want an additional layer of security beyond API key based authorization, you can restrict the IPs that ProNotary accepts requests from. To add IP addresses to the whitelist, visit the API Key Details Section within the Admin dashboard.
API Logs
You can view a history of your API requests in the API section of the Admin Dashboard - API > API Logs. These logs include details such as the associated API key's Key ID, the originating IP address of the request, the specific endpoint invoked, the request's status (either success or failure), the corresponding status code and the timestamp indicating the date of the request.
We encourage you to always review this logs to get detailed overview of your API interactions, facilitating effective monitoring and analysis of your Pronotary integration.
Clients
The client represents an individual that wants to perform a document notarization. Below you can find endpoints to create a client, fetch a list of clients and get the details of an individual client.
Create a Client
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--request POST \
--url https://api.pronotary.com/api/p/v1/clients \
--header 'Content-Type: application/json' \
--data '{
"first_name": "John",
"middle_name": "",
"last_name": "Doe",
"suffix": "",
"title": "",
"company": "",
"email": "[email protected]",
"password": "secret*Password1",
"address": "Nowhere",
"zip_code": "12345",
"city": "City",
"state": "TX",
"county": "Dallas",
"country": "US",
"phone": "0123456789"
}'
<?php
$data = [
'first_name' => 'John',
'middle_name' => '',
'last_name' => 'Doe',
'suffix' => '',
'title' => '',
'company' => '',
'email' => '[email protected]',
'password' => 'secret*Password1',
'address' => 'Nowhere',
'zip_code' => '12345',
'city' => 'City',
'state' => 'TX',
'county' => 'Dallas',
'country' => 'US',
'phone' => '0123456789',
];
// Encode data as JSON
$dataJson = json_encode($data);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/clients');
// Set cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY"),
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const data = {
first_name: "John",
middle_name: "",
last_name: "Doe",
suffix: "",
title: "",
company: "",
email: "[email protected]",
password: "secret*Password1",
address: "Nowhere",
zip_code: "12345",
city: "City",
state: "TX",
county: "Dallas",
country: "US",
phone: "0123456789",
};
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/clients", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "success",
"client": {
"id": 1072,
"full_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]"
}
}
Create a new client with the given details.
HTTP Request
POST /clients
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
first_name |
true |
null |
First name of the Client |
middle_name |
false |
null |
Middle name of the Client |
last_name |
true |
null |
Last name of the Client |
suffix |
false |
null |
Name suffix of the Client |
title |
false |
null |
The title of the Client |
company |
false |
null |
The Client's company |
email |
true |
null |
The Client's email |
password |
true |
null |
The Client's password. |
address |
true |
null |
The Client's email address |
zip_code |
true |
null |
The Client's Zip code |
city |
true |
null |
The Client's city |
state |
true |
null |
The Client's State |
county |
true |
null |
The Client's county |
country |
true |
null |
The Client's Country |
phone |
true |
null |
The Client's phone number |
List Clients
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url https://api.pronotary.com/api/p/v1/clients
<?php
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/clients');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/clients", {
method: "GET",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"clients": [
{
"id": 1072,
"first_name": "John",
"last_name": "Doe"
},
{
"id": 1071,
"first_name": "Jan",
"last_name": "Doe"
}
// ...
],
"total": 559
}
Returns a list of clients.
HTTP Request
GET /clients
Request Query Parameters
Parameter | Required | Default | Description |
---|---|---|---|
page |
false |
1 |
The page number to fetch |
limit |
false |
10 |
The number of clients to return |
Get Client Details
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/clients/{{Client ID}}'
<?php
$clientID = '1072'; // Replace with the actual client ID
// Set up cURL
$ch = curl_init("https://api.pronotary.com/api/p/v1/clients/$clientID");
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const clientID = "1072"; // Replace with the actual client ID
// Make the HTTP request using the fetch API
fetch(`https://api.pronotary.com/api/p/v1/clients/${clientID}`, {
method: "GET",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"client": {
"id": 1072,
"first_name": "John",
"middle_name": null,
"last_name": "Doe",
"full_name": "John Doe",
"suffix": null,
"title": null,
"email": "[email protected]",
"company": null
}
}
Returns the details of a given client.
HTTP Request
GET /clients/{ClientID}
Request URI Parameters
Parameter | Required | Default | Description |
---|---|---|---|
ClientID |
true |
null |
The ID of the client |
Notaries
The notary represents a registered notary on ProNotary. Below you can find endpoints to create a notary, fetch a list of notaries and get the details of an individual notary.
Create a Notary
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--request POST \
--url https://api.pronotary.com/api/p/v1/notaries \
--header 'Content-Type: application/json' \
--data '{
"first_name": "Jan",
"middle_name": "",
"last_name": "Doe",
"suffix": "",
"title": "",
"company": "",
"email": "[email protected]",
"password": "secret*Password1",
"address": "Nowhere",
"zip_code": "12345",
"city": "City",
"state": "TX",
"county": "Dallas",
"country": "US",
"phone": "0123456789"
}'
<?php
$data = [
'first_name' => 'Jan',
'middle_name' => '',
'last_name' => 'Doe',
'suffix' => '',
'title' => '',
'company' => '',
'email' => '[email protected]',
'password' => 'secret*Password1',
'address' => 'Nowhere',
'zip_code' => '12345',
'city' => 'City',
'state' => 'TX',
'county' => 'Dallas',
'country' => 'US',
'phone' => '0123456789',
];
// Encode data as JSON
$dataJson = json_encode($data);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/notaries');
// Set cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY"),
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson);
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const data = {
first_name: "Jan",
middle_name: "",
last_name: "Doe",
suffix: "",
title: "",
company: "",
email: "[email protected]",
password: "secret*Password1",
address: "Nowhere",
zip_code: "12345",
city: "City",
state: "TX",
county: "Dallas",
country: "US",
phone: "0123456789",
};
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/notaries", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "success",
"notary": {
"id": 1065,
"full_name": "Jan Doe",
"first_name": "Jan",
"last_name": "Doe",
"email": "[email protected]"
}
}
Create a new notary with the given details.
HTTP Request
POST /notaries
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
first_name |
true |
null |
First name of the Notary |
middle_name |
false |
null |
Middle name of the Notary |
last_name |
true |
null |
Last name of the Notary |
suffix |
false |
null |
Name suffix of the Notary |
title |
false |
null |
The title of the Notary |
company |
false |
null |
The Notary's company |
email |
true |
null |
The Notary's email |
password |
true |
null |
The Notary's password. |
address |
true |
null |
The Notary's email address |
zip_code |
true |
null |
The Notary's Zip code |
city |
true |
null |
The Notary's city |
state |
true |
null |
The Notary's State |
county |
true |
null |
The Notary's county |
country |
true |
null |
The Notary's Country |
phone |
true |
null |
The Notary's phone number |
List Notaries
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url https://api.pronotary.com/api/p/v1/notaries
<?php
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/notaries');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/notaries", {
method: "GET",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"notaries": [
{
"id": 1065,
"first_name": "Jan",
"last_name": "Doe"
},
{
"id": 1064,
"first_name": "John",
"last_name": "Doe"
}
// ...
],
"total": 579
}
Returns a list of notaries.
HTTP Request
GET /notaries
Request Query Parameters
Parameter | Required | Default | Description |
---|---|---|---|
page |
false |
1 |
The page number to fetch |
limit |
false |
10 |
The number of notaries to return |
Get Notary Details
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/notaries/{{Notary ID}}'
<?php
$notaryID = '1065'; // Replace with the actual notary ID
// Set up cURL
$ch = curl_init("https://api.pronotary.com/api/p/v1/notaries/$notaryID");
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const notaryID = "1065"; // Replace with the actual notary ID
// Make the HTTP request using the fetch API
fetch(`https://api.pronotary.com/api/p/v1/notaries/${notaryID}`, {
method: "GET",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"notary": {
"id": 1065,
"first_name": "Jan",
"middle_name": null,
"last_name": "Doe",
"full_name": "Jan Doe",
"suffix": null,
"title": null,
"email": "[email protected]",
"company": null
}
}
Returns the details of a given notary.
HTTP Request
GET /notaries/{NotaryID}
Request URI Parameters
Parameter | Required | Default | Description |
---|---|---|---|
NotaryID |
true |
null |
The ID of the notary |
Transactions
A transaction encapsulates the details of a notarization action within ProNotary.
Create a Transaction
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions?type=ron' \
--request POST
<?php
// Set up cURL
$ch = curl_init("https://api.pronotary.com/api/p/v1/transactions?type=ron");
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/transactions?type=ron", {
method: "POST",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"transaction": {
"id": 256,
"action": "notarize",
"status": "pending"
}
}
Create a new transaction.
HTTP Request
POST /transactions
Request Query Parameters
Parameter | Required | Default | Description |
---|---|---|---|
type |
true |
null |
The type of transaction you would like to create. |
Create a Template
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/templates' \
--request POST \
--form 'password=YourPassword' \
--form 'file=@/path/to/your/file.pdf'
<?php
// Sample data payload
$data = array(
'password' => 'YourPassword',
'file' => new CURLFile('/path/to/your/file.txt')
);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/templates');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Sample data payload
const formData = new FormData();
formData.append("password", "YourPassword");
formData.append("file", fs.createReadStream("/path/to/your/file.pdf"));
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/templates", {
method: "POST",
headers: {
Authorization: `Basic ${btoa(`YOUR_API_KEY_ID:YOUR_API_KEY`)}`,
},
body: formData,
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": false,
"message": "success",
"template": {
"id": 52,
"file": "file-1xxxxx.pdf"
}
}
Create a new template.
HTTP Request
POST /templates
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
password |
false |
null |
Document password (If the document is encrypted). |
file |
true |
null |
The PDF document to be uploaded as template |
Upload a Document
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions/upload-document' \
--request POST \
--form 'file=@/path/to/your/file.pdf' \
--form 'password=YourPassword' \
--form 'transaction_id=123'
<?php
// Sample data payload
$data = array(
'file' => new CURLFile('/path/to/your/file.pdf'),
'password' => 'YourPassword',
'transaction_id' => 123
);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/transactions/upload-document');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Sample data payload
const formData = new FormData();
formData.append("file", fs.createReadStream("/path/to/your/file.pdf"));
formData.append("password", "YourPassword");
formData.append("transaction_id", 123);
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/transactions/upload-document", {
method: "POST",
headers: {
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
body: formData,
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"document": {
"id": 316,
"status": "draft",
"draft_file": "https://api.pronotary.com/storage/uploads/documents/fole-17xxxx.pdf"
}
}
Upload a document to a transaction
HTTP Request
POST /transactions/upload-document
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
transaction_id |
true |
null |
The ID of the transaction you want to upload documents to. |
password |
false |
null |
Document password (If the document is encrypted). |
file |
true |
null |
The PDF document to upload |
Assign Clients
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions/assign-clients' \
--request POST \
--header 'Content-Type: application/json' \
--data '{"transaction_id": 123, "client_ids": [456, 789]}'
<?php
// Sample data payload
$data = array(
'transaction_id' => 123,
'client_ids' => [456, 789]
);
// Convert the data array to JSON
$jsonData = json_encode($data);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/transactions/assign-clients');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Sample data payload
const data = {
transaction_id: 123,
client_ids: [1072, 1071],
};
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/transactions/assign-clients", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa(`YOUR_API_KEY_ID:YOUR_API_KEY`)}`,
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"transaction": {
"id": 247,
"status": "draft",
"clients": [
{
"id": 1072,
"name": "John Doe"
},
{
"id": 1071,
"name": "Jan Doe"
}
]
}
}
Assign clients to a transaction
HTTP Request
POST /transactions/assign-clients
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
transaction_id |
true |
null |
The ID of the transaction you want to assign clients to. |
client_ids[] |
true |
null |
An array of client IDs to assign to the transaction. |
Update Transaction
curl -X POST \
-H "Content-Type: application/json" \
-d '{"schedule_date":"2023-11-15","start_time":"03:00","end_time":"05:00","reference":"8uadulaj"}' \
-u "YOUR_API_KEY_ID:YOUR_API_KEY" \
'https://api.pronotary.com/api/p/v1/transactions/{{Transaction ID}}'
<?php
$transactionId = 123;
$data = [
'schedule_date' => '2023-11-15',
'start_time' => '03:00',
'end_time' => '05:00',
'reference' => '8uadulaj'
];
$curl = curl_init("https://api.pronotary.com/api/p/v1/transactions/$transactionId");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode('YOUR_API_KEY_ID:YOUR_API_KEY')
]);
$response = curl_exec($curl);
if ($response === false) {
// Handle error
echo "Error occurred: " . curl_error($curl);
} else {
// Process $response
echo $response;
}
curl_close($curl);
?>
const transactionId = 123;
const data = {
schedule_date: "2023-11-15",
start_time: "03:00",
end_time: "05:00",
reference: "8uadulaj",
};
fetch(`https://api.pronotary.com/api/p/v1/transactions/${transactionId}`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa("YOUR_API_KEY_ID:YOUR_API_KEY")}`,
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"transaction": {
"id": 247,
"schedule_date": "2023-11-15",
"start_time": "03:00",
"end_time": "05:00",
"reference": "8uadulaj"
}
}
Update a transaction
HTTP Request
PUT /transactions/{TransactionID}
Request URI Parameters
Parameter | Required | Default | Description |
---|---|---|---|
TransactionID |
true |
null |
The ID of the transaction to update. |
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
schedule_date |
false |
null |
The schedule date of the transaction. Must be a valid date. |
start_time |
false |
null |
Scheduled start time of the transaction. Must be of the formoat xx:xx . |
end_time |
false |
null |
Scheduled end time of the transaction. Must be of the formoat xx:xx . |
reference |
false |
null |
A string to use as reference for the transaction |
Tag a Document
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions/add-tags' \
--request POST \
--header 'Content-Type: application/json' \
--data '{"type": "fullname", "notary_id": 1, "document_id": 306, "page_num": 1, "pos_x": 0, "pos_y": 0, "size_w": 200, "size_h": 1}'
<?php
// Sample data payload
$data = array(
'type' => 'fullname',
'notary_id' => 1,
'document_id' => 306,
'page_num' => 1,
'pos_x' => 0,
'pos_y' => 0,
'size_w' => 200,
'size_h' => 1
);
// Convert the data array to JSON
$jsonData = json_encode($data);
// Set up cURL
$ch = curl_init('https://api.pronotary.com/api/p/v1/transactions/add-tags');
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
// Sample data payload
const data = {
type: "fullname",
notary_id: 1,
document_id: 306,
page_num: 1,
pos_x: 0,
pos_y: 0,
size_w: 200,
size_h: 1,
};
// Make the HTTP request using the fetch API
fetch("https://api.pronotary.com/api/p/v1/transactions/add-tags", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa(`YOUR_API_KEY_ID:YOUR_API_KEY`)}`,
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"tag": {
"type": "fullname",
"font_color": "#000000",
"font_family": "free-serief",
"font_size": 13,
"border_color": "#ffaa00",
"page_num": "1",
"pos_x": "0",
"pos_y": "0",
"size_w": "200",
"size_h": "1",
"notary_id": "1",
"document_id": "306",
"updated_at": "2023-12-01 17:42:08",
"created_at": "2023-12-01 17:42:08",
"id": 747
}
}
Tag a Document
HTTP Request
POST /transactions/add-tags
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
type |
true |
null |
Type of the tag to be added. |
notary_id |
false |
null |
ID of the associated notary. |
client_id |
false |
null |
ID of the associated client. |
document_id |
false |
null |
Document ID where the tag should be placed. |
template_id |
false |
null |
Template ID where the tag should be placed. |
page_num |
true |
null |
Page number on the document for the tag placement. |
pos_x |
true |
null |
X coordinate of the tag (0-800). |
pos_y |
true |
null |
Y coordinate of the tag (0-800). |
size_w |
true |
null |
Width of the tag (10-800). |
size_h |
true |
null |
Height of the tag (1-500). |
Available tag types:
Type | Description |
---|---|
fullname |
Field for the full name of a client or notary. |
shortname |
Field for a short or abbreviated name. |
signature |
Space for capturing a signature. |
initial |
Field for capturing initials. |
text |
General text field. |
checkmark |
Checkbox for marking selections. |
notaryseal |
Space for a notary seal. |
county |
Field for county of the client or notary. |
state |
Field for state of the client or notary. |
company |
Field for the company name of the client or notary. |
title |
Field for the title of a client or notary. |
ron |
Field for capturing the Remote Online Notarization (RON) disclaimer. |
date-only |
Field for capturing date information without the time. |
date |
Field for capturing date and time information. |
date-day |
Field for capturing the day of the date. |
date-month |
Field for capturing the month of the date. |
date-year |
Field for capturing the year of the date. |
date-short-year |
Field for capturing a short-form year in the date. |
date-time |
Field for capturing date and time information. |
white |
Field to white out or hide an area in the document. |
Create Auto Sign-on Link
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions/{TransactionId}/create-auto-link' \
--request POST \
--header 'Content-Type: application/json' \
--data '{"client_id": 1071, "expires_in": 24}'
<?php
$transactionId = 'YOUR_TRANSACTION_ID'; // Replace with actual transaction ID
// Sample data payload
$data = array(
'client_id' => 1071,
'expires_in' => 24
);
// Convert the data array to JSON
$jsonData = json_encode($data);
// Set up cURL
$ch = curl_init("https://api.pronotary.com/api/p/v1/transactions/{$transactionId}/create-auto-link");
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const transactionId = "YOUR_TRANSACTION_ID"; // Replace with actual transaction ID
// Sample data payload
const data = {
client_id: 1071,
expires_in: 24,
};
// Make the HTTP request using the fetch API
fetch(
`https://api.pronotary.com/api/p/v1/transactions/${transactionId}/create-auto-link`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa(`YOUR_API_KEY_ID:YOUR_API_KEY`)}`,
},
body: JSON.stringify(data),
}
)
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"message": "ok",
"link": "https://api.pronotary.com/client/signin-with-link?tid=247&t=0fa0f70e6dab4c26b2097faf810e92d5d287d858c319ecce75ab7903debf028f"
}
Create Auto Sign-on Link
HTTP Request
POST /transactions/{TransactionId}/create-auto-link
Request URI Parameters
Parameter | Required | Default | Description |
---|---|---|---|
TransactionId |
true |
null |
ID of the transaction to create an auto sign-on link for |
Request Body Parameters
Parameter | Required | Default | Description |
---|---|---|---|
client_id |
false |
null |
ID of the client associated with the link. |
expires_in |
false |
null |
Duration of the link's validity in hours (2-48). |
Export Transaction Assets
curl --user 'YOUR_API_KEY_ID:YOUR_API_KEY' \
--url 'https://api.pronotary.com/api/p/v1/transactions/{TransactionId}/export-assets' \
--request GET
<?php
$transactionId = 'YOUR_TRANSACTION_ID'; // Replace with actual transaction ID
// Set up cURL
$ch = curl_init("https://api.pronotary.com/api/p/v1/transactions/{$transactionId}/export-assets");
// Set the cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Basic ' . base64_encode("YOUR_API_KEY_ID:YOUR_API_KEY")
));
// Execute cURL and get the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output the response
echo $response;
?>
const transactionId = "YOUR_TRANSACTION_ID"; // Replace with actual transaction ID
// Make the HTTP request using the fetch API
fetch(
`https://api.pronotary.com/api/p/v1/transactions/${transactionId}/export-assets`,
{
method: "GET",
headers: {
Authorization: `Basic ${btoa(`YOUR_API_KEY_ID:YOUR_API_KEY`)}`,
},
}
)
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
Make sure to replace
YOUR_API_KEY_ID:YOUR_API_KEY
with your API ID and key.The above request will return a response similar to the following:
{
"success": true,
"fileName": "transaction-219-files.zip",
"downloadUrl": "https://api.pronotary.com/storage/zips/transaction-219-files.zip"
}
Export notarized documents, audit logs and video recordings of completed transactions.
HTTP Request
GET /transactions/{TransactionId}/export-assets
Request URI Parameters
Parameter | Required | Default | Description |
---|---|---|---|
TransactionId |
true |
null |
ID of the transaction |
Webhooks
Webhooks can notify your service about events that happen in a notarization transaction. See Types of Events for a description of supported events.
To set up Webhooks, go to Webhooks in the Admin Dashboard.
Only enabled events in a given webhook will be sent to your application. You can use a tool like ngrok to test webhooks in a local or sandbox environment.
Webhook events are sent via POST. Objects in the payload use the same schema as their API resource endpoints.
Example event from webhook:
{
"eventName": "transaction.updated",
"payload": {
"id": 257,
"reference": null,
"notary_id": 1,
"organization_id": 3,
"session_id": null,
"action": "notarize",
"status": "draft",
"screen_recording": null,
"created_at": "2023-12-02 19:23:45",
"updated_at": "2023-12-02 19:23:45",
"country": null,
"unique_digit": "61958370",
"company": null,
"closing_type": null,
"property_address": null,
"address2": null,
"county": null,
"state": null,
"city": null,
"zip_code": null,
"id_verification_method": null,
"schedule_date": null,
"start_time": null,
"end_time": null,
"type": "ron"
}
}
Best Practices
Sample code for checking signatures:
# We currently do not provide sample code for checking
# signatures in shell scripts.
# Please refer to the PHP and JavaScript examples
# to find guidance for those languages.
<?php
$webhookSignature = $request->headers["ProNotary-Signature"];
$sigParams = [];
foreach (explode(",", $webhookSignature) as $pair) {
list($key, $value) = explode("=", $pair);
$sigParams[$key] = $value;
}
if (isset($sigParams['t']) && isset($sigParams['hs'])) {
$webhookSecret = 'YOUR_WEBHOOK_SECRET';
$calculatedHmac = hash_hmac('sha256', $sigParams['t'] . '.' . $request->body, $webhookSecret);
if (hash_equals($calculatedHmac, $sigParams['hs'])) {
// Handle verified webhook event
}
}
?>
const sigParams = {};
request.headers["ProNotary-Signature"].split(",").forEach((pair) => {
const [key, value] = pair.split("=");
sigParams[key] = value;
});
if (sigParams.t && sigParams.hs) {
const hmac = crypto
.createHmac("sha256", "YOUR_WEBHOOK_SECRET")
.update(`${sigParams.t}.${request.body}`)
.digest("hex");
if (crypto.timingSafeEqual(Buffer.from(hmac), Buffer.from(sigParams.hs))) {
// Handle verified webhook event
}
}
Handling duplicate events
Occasionally, your webhook endpoints might receive duplicate events. This is primarily due to the nature of network connectivity. To address this, we strongly recommend implementing idempotent handling for your event processing. One way of doing this involves logging processed events and incorporating logic to skip the processing of already-logged events.
Checking Signatures
Requests from webhooks will contain a ProNotary-Signature
header with an HMAC. You should check that any request is authentic and safe to process by comparing this value with your own digest, computed from the request body and your webhook secret. Your webhook secret can be found in the Webhooks section of the Admin Dashboard.
The ProNotary-Signature
header contains two comma-separated key-value pairs encoding information about the request. The first key-value pair will be in the form t=unix_timestamp
and represents the unix time that the request was sent. The second key-value pair will be in the form hs=signature
, where the signature is computed from your webhook secret and a dot-separated string composed of the unix timestamp joined with the request body.
Types of Events
Events are actions in ProNotary that you can use to trigger Webhooks.
The following is a list of all the events that currently may be emitted by ProNotary.
Events
transaction.created payload
is a Transaction
Occurs whenever a transaction is created.
transaction.updated payload
is a Transaction
Occurs whenever a transaction is updated.
transaction.completed payload
is a Transaction
Occurs whenever a transaction is completed.
document.locked payload
is a Document
Occurs whenever a document is locked.
credential.success payload
is a Client
Occurs whenever a client passes a credential analysis check.
credential.failed payload
is a Client
Occurs whenever a client fails a credential analysis check.
kba.success payload
is a Client
Occurs whenever a client passes a Knowledge-Based Authentication (KBA) check.
kba.failed payload
is a Client
Occurs whenever a client fails a KBA check.