REST API · v1

Online Notary Center API

Integrate remote online notarization and electronic signatures directly into your application. Create sessions, manage signers, send documents from templates and download completed files — all over a simple JSON REST API secured with OAuth 2.0.

Introduction

The Online Notary Center API lets you create and manage remote online notarization (RON) and eSign sessions programmatically. All endpoints accept and return JSON unless noted otherwise (file uploads use multipart/form-data, downloads return binary content).

Base URL
https://app.onlinenotarycenter.com
All /api/* endpoints require a valid OAuth 2.0 Bearer access token in the Authorization header. See Authentication below.
Example request
curl https://app.onlinenotarycenter.com/api/check-session-status/abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Use it in your API client

Every endpoint on this page is available as a ready-to-run collection. Import the two files below into the API client of your choice — they use the widely supported v2.1 collection format, which every common desktop and CLI client can read.

Getting started

  1. Import both files, then select the Online Notary Center environment.
  2. Fill in client_id and client_secret.
  3. Run Authentication → Get Access Token. The token is saved to access_token automatically and every other request inherits it.
  4. Run a folder top to bottom — each request stores the ids the next one needs (notary_id, esign_id, template_id).
Requests that upload documents leave the file field empty — pick a PDF in the form-data body of the request before sending.
Build Template Session emails every signer you list, and Delete Template Session is permanent. Both are excluded from the normal top-to-bottom flow — run them deliberately.

Authentication

The API uses the OAuth 2.0 Authorization Code flow. You will need API client credentials (client_id / client_secret) issued for your Online Notary Center account.

1. Request an authorization code

GET /oauth/authorize?response_type=code&client_id={client_id}&state={state}

Sign in with your account and authorize the client. An authorization code will be generated for the next step.

ParameterTypeDescription
response_type requiredstringMust be code.
client_id requiredstringYour API client ID.
state optionalstringOpaque value echoed back to prevent CSRF.

2. Exchange the code for an access token

POST /oauth/token

Authenticate with HTTP Basic auth using your client credentials.

Request
curl -u CLIENT_ID:CLIENT_SECRET https://app.onlinenotarycenter.com/oauth/token \
  -d "grant_type=authorization_code&code=AUTHORIZATION_CODE"
Response
{
  "access_token": "1c50f0b46c6ad86a4a54a1b0a0f74f18e69a2a90",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": null,
  "refresh_token": "6ab18483809c970f4aacb72cca31d03eb2a110bd"
}

3. Refresh an expired token

POST /oauth/token
Request
curl -u CLIENT_ID:CLIENT_SECRET https://app.onlinenotarycenter.com/oauth/token \
  -d "grant_type=refresh_token&refresh_token=YOUR_REFRESH_TOKEN"

Long-Lived Token

Extend your access token lifetime

POST /api/request-long-live-token

Extends the lifetime of your current access token to 365 days, so server-to-server integrations don't need to refresh every hour.

Request
curl -X POST https://app.onlinenotarycenter.com/api/request-long-live-token \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "msg": "Your token lifetime has been extended till 2027-08-03 10:00:00"
}

Errors

Failed requests return a JSON object with an error key describing the problem. Successful requests generally include "success": "true" or a msg field.

Example error
{
  "error": "Main Signer email address is required"
}
Requests with a missing or expired access token are rejected by the OAuth layer with an HTTP 401 Unauthorized response.

Notary Sessions

A notary session walks a signer through document upload, identity verification and a live audio/video notarization meeting. The typical API flow is: create → update signers → prepare, then share the returned session_link and passcode with your signer.

Create Notary Session

POST /api/create-notary-session

Creates a new notary session and uploads one or more PDF documents to it. Send the request as multipart/form-data.

FieldTypeDescription
files[] requiredfileOne or more PDF documents to be notarized.
Request
curl -X POST https://app.onlinenotarycenter.com/api/create-notary-session \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "files[]=@/path/to/document.pdf" \
  -F "files[]=@/path/to/second-document.pdf"
Response
{
  "title": "Customer Notary",
  "notary_id": "63f4a1b2c3d4e",
  "status": "active"
}
Keep the returned notary_id — it identifies the session in every subsequent call.

Update Notary Signers

POST /api/update-notary-signers

Replaces the signer list of a session. The main signer is described by the top-level fields; additional signers go in other_signers. Send the body as JSON.

FieldTypeDescription
notary_id requiredstringSession ID from Create Notary Session.
contact_type requiredstringMain signer type, e.g. self.
first_name requiredstringMain signer first name.
last_name requiredstringMain signer last name.
email requiredstringMain signer email address.
phone optionalstringMain signer phone number.
other_signers optionalarrayAdditional signers, each with contact_type, first_name, last_name, email, active, share_room.
Request
curl -X POST https://app.onlinenotarycenter.com/api/update-notary-signers \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "notary_id": "63f4a1b2c3d4e",
    "contact_type": "self",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john.doe@example.com",
    "phone": "5551234567",
    "other_signers": [
      {
        "contact_type": "signer",
        "first_name": "Jane",
        "last_name": "Doe",
        "email": "jane.doe@example.com",
        "active": 1,
        "share_room": 1
      }
    ]
  }'
Response
{
  "notary_id": "63f4a1b2c3d4e",
  "status": "active",
  "contacts": [ ... ]
}

Prepare Notary Session

POST /api/prepare-notary-session

Finalizes the session, sends the invitations and returns the signer join link and passcode.

FieldTypeDescription
notary_id requiredstringSession ID.
business_pay optionalbooleanSet true to bill the session to your business account instead of the signer.
redirect_uri optionalstringURL the signer is redirected to when the session completes.
Request
curl -X POST https://app.onlinenotarycenter.com/api/prepare-notary-session \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "notary_id": "63f4a1b2c3d4e",
    "business_pay": true,
    "redirect_uri": "https://yourapp.example.com/notary/complete"
  }'
Response
{
  "success": "true",
  "session_link": "https://app.onlinenotarycenter.com/notary/client-join/63f4a1b2c3d4e",
  "passcode": "482913"
}

Check Session Status

GET /api/check-session-status/{notary_id}

Returns the current room state of a session (e.g. pending, live, completed).

Request
curl https://app.onlinenotarycenter.com/api/check-session-status/63f4a1b2c3d4e \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "success": "true",
  "status": "completed"
}
Error
{
  "success": "false",
  "error": "Please make sure you are supplying a valid session id"
}

Download Notarized Files

GET /api/download-notarized-files/{notary_id}

Downloads all notarized documents of a completed session as a ZIP archive (binary response).

Request
curl -L https://app.onlinenotarycenter.com/api/download-notarized-files/63f4a1b2c3d4e \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -o notarized-files.zip

Send New Room Push

POST /api/send-new-room-push

Broadcasts a real-time new room push notification over the platform's websocket service, alerting online notaries that a session is waiting.

FieldTypeDescription
notary_id requiredstringSession ID.
notarized_by optionalstringUser ID of the assigned notary.
file_title optionalstringTitle shown in the notification.
file_id optionalstringFile ID related to the room.
schedule_id optionalstringSchedule ID if the session was booked.
session_state optionalstringCurrent session state.
display_ringer optionalstringWhether to ring online notaries.
recipients optionalstringRestrict the push to specific recipients.
Request
curl -X POST https://app.onlinenotarycenter.com/api/send-new-room-push \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -d "notary_id=63f4a1b2c3d4e" \
  -d "file_title=Power of Attorney" \
  -d "display_ringer=1"
Response
{
  "success": "true",
  "msg": "Push notification sent successfully"
}

eSign Sessions

eSign sessions collect legally binding electronic signatures without a notary meeting. The flow mirrors notary sessions — create → update signers → prepare — or can be started in a single call from a saved template.

Create eSign Session

POST /api/create-esign-session

Creates a new eSign session and uploads one or more PDF documents. Send the request as multipart/form-data.

FieldTypeDescription
files[] requiredfileOne or more PDF documents to sign.
Request
curl -X POST https://app.onlinenotarycenter.com/api/create-esign-session \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "files[]=@/path/to/contract.pdf"
Response
{
  "title": "Customer Notary",
  "notary_id": "64a9b8c7d6e5f",
  "status": "active"
}

Update eSign Signers

POST /api/update-esign-signers

Replaces the signer list of an eSign session. Same shape as Update Notary Signers, with additional address and role fields per signer.

FieldTypeDescription
notary_id requiredstringSession ID.
contact_type requiredstringMain signer type, e.g. self.
first_name requiredstringMain signer first name.
last_name requiredstringMain signer last name.
email requiredstringMain signer email address.
other_signers optionalarrayAdditional signers with contact_type, first_name, last_name, email, phone, address, city, state, zipcode, role_id, active, share_room.
Request
curl -X POST https://app.onlinenotarycenter.com/api/update-esign-signers \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "notary_id": "64a9b8c7d6e5f",
    "contact_type": "self",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john.doe@example.com",
    "other_signers": [
      {
        "contact_type": "signer",
        "first_name": "Jane",
        "last_name": "Doe",
        "email": "jane.doe@example.com",
        "phone": "5559876543",
        "address": "123 Main St",
        "city": "Houston",
        "state": "TX",
        "zipcode": "77001",
        "role_id": 0,
        "active": 1,
        "share_room": 1
      }
    ]
  }'

Prepare eSign Session

POST /api/prepare-esign-session

Activates the session files and returns a one-time preparation link plus a direct signing link for every signer.

FieldTypeDescription
notary_id requiredstringSession ID.
business_pay optionalbooleanBill the session to your business account.
redirect_uri optionalstringURL signers are redirected to on completion.
Request
curl -X POST https://app.onlinenotarycenter.com/api/prepare-esign-session \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "notary_id": "64a9b8c7d6e5f",
    "business_pay": true,
    "redirect_uri": "https://yourapp.example.com/esign/complete"
  }'
Response
{
  "success": "true",
  "notary_id": "64a9b8c7d6e5f",
  "session_ot_link": "https://app.onlinenotarycenter.com/esign/api-prepare/64a9b8c7d6e5f/8f3a2c",
  "contacts": {
    "john.doe@example.com": {
      "session_ot_link": "https://app.onlinenotarycenter.com/esign/validate-pass-code-direct/64a9b8c7d6e5f/1041/482913"
    },
    "jane.doe@example.com": {
      "session_ot_link": "https://app.onlinenotarycenter.com/esign/validate-pass-code-direct/64a9b8c7d6e5f/1042/482913"
    }
  }
}
session_ot_link (top level) opens the drag-and-drop field editor so you can place signature fields before sending. Each contact's session_ot_link takes that signer straight into the signing room.

Create eSign Session from Template

POST /api/create-esign-template-session

Starts a ready-to-sign eSign session in a single call from a saved template: the template document, its signature fields and roles are copied, invitations are sent, and signing links are returned immediately.

FieldTypeDescription
file_id requiredintegerID of a saved document-library template. Note this is not a notary_id from List Templates — it identifies a document in your library.
signers requiredarraySigners in template-role order. Index 0 is the main signer. Each entry: first_name, last_name, email, and optional phone, address, city, state, zipcode, role_id.
var_data optionalobjectKey/value pairs used to fill the template's custom fields.
business_pay optionalbooleanBill the session to your business account.
redirect_uri optionalstringURL signers are redirected to on completion.
Request
curl -X POST https://app.onlinenotarycenter.com/api/create-esign-template-session \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": "9821",
    "signers": [
      { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" },
      { "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@example.com", "role_id": 2 }
    ],
    "var_data": {
      "company_name": "Acme LLC",
      "effective_date": "2026-08-03"
    },
    "business_pay": true
  }'
Response
{
  "success": "true",
  "notary_id": "64b1c2d3e4f5a",
  "session_ot_link": "https://app.onlinenotarycenter.com/esign/api-prepare/64b1c2d3e4f5a/1d9e4b",
  "contacts": {
    "john.doe@example.com": {
      "session_ot_link": "https://app.onlinenotarycenter.com/esign/validate-pass-code-direct/64b1c2d3e4f5a/1101/731658"
    },
    "jane.doe@example.com": {
      "session_ot_link": "https://app.onlinenotarycenter.com/esign/validate-pass-code-direct/64b1c2d3e4f5a/1102/731658"
    }
  }
}

Templates & Partner Sessions

Templates are reusable documents with predefined signature fields, roles and custom fields. Partner endpoints let an integration list a user's templates, send them out for signature and track the resulting sessions.

List Templates

GET /api/templates/{user_id}

Returns all active templates created by the given user, keyed by notary_id.

Request
curl https://app.onlinenotarycenter.com/api/templates/1024 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "templates": {
    "63e0f1a2b3c4d": {
      "notary_id": "63e0f1a2b3c4d",
      "type": "template",
      "title": "Customer Notary",
      "status": "pending",
      "created_by": "1024",
      "date_created": "2026-07-14 09:12:03",
      "active": "1"
    }
  }
}

Template Contacts

GET /api/template-contacts/{notary_id}

Returns the signer roles (placeholder contacts) defined on a template. Use the returned contact IDs as keys when calling Build Template Session.

Request
curl https://app.onlinenotarycenter.com/api/template-contacts/63e0f1a2b3c4d \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "notary_id": "63e0f1a2b3c4d",
  "contacts": [
    {
      "contact_id": "501",
      "first_name": "Signer",
      "last_name": "One",
      "contact_type": "signer"
    }
  ],
  "self": []
}

Template Items (Custom Fields)

GET /api/template-items/{notary_id}

Returns the custom fields defined on a template, so you know which keys to supply in custom_fields / var_data.

Request
curl https://app.onlinenotarycenter.com/api/template-items/63e0f1a2b3c4d \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "custom_fields": {
    "company_name": "value",
    "effective_date": "value"
  }
}

Partner Sessions

GET /api/partner-sessions/{user_id}

Lists all template sessions of a user, newest first. Each session includes its signer contacts and a session_status of Pending or Completed.

Request
curl https://app.onlinenotarycenter.com/api/partner-sessions/1024 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "sessions": [
    {
      "notary_id": "63e0f1a2b3c4d",
      "session_id": "64c0ffee12345",
      "file_id": "9821",
      "session_status": "Pending",
      "last_sent": "2026-07-30 16:04:11",
      "contacts": [ ... ]
    }
  ]
}

Build Template Session

POST /api/build-template-session/{notary_id}

Sends a template out for signature: creates the session contacts, fills the custom fields and emails every signer a join link with their passcode.

FieldTypeDescription
contact_info requiredobjectMap of template contact ID → { first_name, last_name, email }. Get IDs from Template Contacts.
custom_fields optionalobjectValues for the template's custom fields (see Template Items).
company_name requiredstringSender name shown in the invitation email.
fromAddress requiredstringFrom email address for the invitation.
Request
curl -X POST https://app.onlinenotarycenter.com/api/build-template-session/63e0f1a2b3c4d \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_info": {
      "501": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" },
      "502": { "first_name": "Jane", "last_name": "Doe", "email": "jane.doe@example.com" }
    },
    "custom_fields": {
      "company_name": "Acme LLC",
      "effective_date": "2026-08-03"
    },
    "company_name": "Acme LLC",
    "fromAddress": "docs@acme.example.com"
  }'
Response
{
  "msg": "File sent successfully"
}

Download Session File

GET /api/download-session-file/{file_id}/{session_id}

Downloads the signed document of a completed template session (binary response).

Request
curl -L https://app.onlinenotarycenter.com/api/download-session-file/9821/64c0ffee12345 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -o signed-document.pdf

Delete Template Session

POST /api/delete-template-session/{session_id}

Removes a template session and its contacts.

Request
curl -X POST https://app.onlinenotarycenter.com/api/delete-template-session/64c0ffee12345 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
  "msg": "Session has been removed successfully"
}