Notary Everyday API Documentation

This page will help you get started with Notary Everyday's API.


Order Creation API Documentation

This documentation covers the API endpoints for creating orders and uploading documents in the Notary Everyday platform. Please request access from an admin team member to retrieve your api key(s).

Base URL

https://api.notaryeveryday.com

Authentication

All API requests require authentication. Include your API key in the request headers:

Authorization: Bearer YOUR_API_KEY

Order Creation Endpoints

1. Create Order (Without Documents)

Create a new notarial order without uploading documents.

Endpoint: POST /api/order/create

Content-Type: application/json

Request Body:

{
  "signingContactsFormData": {
    "orderContactEmail": "[email protected]",
    "clientCompanyId": 123,
    "observer": "[email protected]",
    "inHouseContact": {
      "contact_name": "John Smith",
      "contact_phone": "+1-555-0123",
      "contact_email": "[email protected]"
    },
    "inHouseContact2": {
      "contact_name": "Jane Doe",
      "contact_phone": "+1-555-0124",
      "contact_email": "[email protected]"
    }
  },
  "signingDetailsFormData": {
    "fileNumber": "REF-2024-001",
    "signingDate": "2024-02-15",
    "signingTimeType": "at",
    "specificTime": "14:30",
    "timeZoneId": "America/New_York",
    "propertyAddress": "123 Main St, Anytown, NY 12345",
    "signingType": "Refinance",
    "signerName": "Michael Johnson",
    "signerPhone": "+1-555-0125",
    "signerEmail": "[email protected]",
    "city": "Anytown",
    "state": "NY",
    "zipcode": "12345",
    "language": "en",
    "spouseName": "Sarah Johnson",
    "coSignerName": "Robert Brown",
    "coSignerSpouseName": "Lisa Brown",
    "coSignerPhone": "+1-555-0126",
    "coSignerEmail": "[email protected]",
    "signingAddress": "456 Oak Ave, Anytown, NY 12345",
    "signingCity": "Anytown",
    "signingState": "NY",
    "signingZipcode": "12345",
    "isPropertyAddressSame": false,
    "esigningPlatform": "DocuSign",
    "scanbacksRequired": true,
    "ronSigning": false,
    "documentDelivery": "Email",
    "lender": "First National Bank",
    "specialInstructions": "Please bring two forms of ID",
    "loanOfficer": {
      "contact_name": "Tom Wilson",
      "contact_email": "[email protected]",
      "contact_phone": "+1-555-0127"
    },
    "invoiceOrderTo": {
      "company_name": "ABC Title Company",
      "invoice_address": "789 Business Blvd",
      "city": "Anytown",
      "state": "NY",
      "zipcode": "12345"
    },
    "invoiceName": "ABC Title Company",
    "invoicePhone": "+1-555-0128",
    "invoiceEmail": "[email protected]",
    "startTime": "14:00",
    "endTime": "16:00",
    "invoiceFee": 150.00,
    "notaryPay": 100.00
  },
  "signingServiceId": 456,
  "utcTimeDate": "2024-02-15T19:30:00.000Z",
  "utcStartTimeDate": "2024-02-15T19:00:00.000Z",
  "utcEndTimeDate": "2024-02-15T21:00:00.000Z",
}

Field Descriptions:

signingContactsFormData (required)

  • orderContactEmail (string, required): Primary contact email for the order
  • clientCompanyId (integer, optional): ID of the client company
  • observer (string, optional): Observer email address
  • inHouseContact (object, optional): Primary in-house contact
    • contact_name (string): Contact person's full name
    • contact_phone (string): Phone number with country code
    • contact_email (string): Email address
  • inHouseContact2 (object, optional): Secondary in-house contact (same structure as above)

signingDetailsFormData (required)

  • fileNumber (string, required): Unique file/loan number
  • signingDate (string, required): Signing date in YYYY-MM-DD format
  • signingTimeType (string, required): Time type - "at", "between", or "anytime"
  • specificTime (string, conditional): Required if signingTimeType is "at" - format HH:MM (24-hour)
  • startTime (string, conditional): Required if signingTimeType is "between" - format HH:MM
  • endTime (string, conditional): Required if signingTimeType is "between" - format HH:MM
  • timeZoneId (string, required): IANA timezone identifier (e.g., "America/New_York")
  • propertyAddress (string, required): Full property address
  • signingType (string, required): Type of signing (e.g., "Refinance", "Purchase", "HELOC")
  • signerName (string, required): Primary signer's full name
  • signerPhone (string, required): Primary signer's phone number
  • signerEmail (string, required): Primary signer's email address
  • city (string, required): Property city
  • state (string, required): Property state (2-letter code)
  • zipcode (string, required): Property ZIP code (5 digits)
  • language (string, optional): Language preference (default: "en")
  • spouseName (string, optional): Spouse's full name
  • coSignerName (string, optional): Co-signer's full name
  • coSignerSpouseName (string, optional): Co-signer's spouse name
  • coSignerPhone (string, optional): Co-signer's phone number
  • coSignerEmail (string, optional): Co-signer's email address
  • signingAddress (string, optional): Signing location address (uses propertyAddress if not provided)
  • signingCity (string, optional): Signing location city
  • signingState (string, optional): Signing location state
  • signingZipcode (string, optional): Signing location ZIP code
  • isPropertyAddressSame (boolean, optional): Whether signing location is same as property (default: true)
  • esigningPlatform (string, optional): E-signing platform name
  • scanbacksRequired (boolean, optional): Whether scanbacks are required (default: false)
  • ronSigning (boolean, optional): Whether this is a remote online notarization (default: false)
  • documentDelivery (string, optional): Document delivery method
  • lender (string, optional): Lender name
  • specialInstructions (string, optional): Special instructions for the notary
  • loanOfficer (object, optional): Loan officer information
    • contact_name (string): Loan officer's name
    • contact_email (string): Loan officer's email
    • contact_phone (string): Loan officer's phone
  • invoiceOrderTo (object, optional): Invoice recipient information
    • company_name (string): Company name for invoicing
    • invoice_address (string): Billing address
    • city (string): Billing city
    • state (string): Billing state
    • zipcode (string): Billing ZIP code
  • invoiceName (string, optional): Invoice contact name
  • invoicePhone (string, optional): Invoice contact phone
  • invoiceEmail (string, optional): Invoice contact email
  • invoiceFee (number, optional): Invoice amount
  • notaryPay (number, optional): Notary payment amount

Additional Fields

  • signingServiceId (integer, required): ID of the signing service
  • utcTimeDate (string, optional): UTC datetime for specific time appointments
  • utcStartTimeDate (string, optional): UTC start datetime for time range appointments
  • utcEndTimeDate (string, optional): UTC end datetime for time range appointments
  • requestedBy (object, required): Information about who is creating the order
    • userId (integer): User ID
    • userRole (string): User role
    • signingServiceId (integer): Signing service ID

Success Response (201 Created):

{
  "order_id": 12345,
  "file_number": "REF-2024-001",
  "order_status": "NEW",
  "signer_name": "Michael Johnson",
  "signing_date": "2024-02-15",
  "property_address": "123 Main St, Anytown, NY 12345",
  "signing_service_id": 456,
  "client_company_id": 123,
  "notary_id": null,
  "invoice_fee": 150.00,
  "notary_pay": 100.00,
  "created_at": "2024-01-15T10:30:00.000Z",
  "updated_at": "2024-01-15T10:30:00.000Z"
}

Error Responses:

  • 400 Bad Request: Invalid request data or missing required fields
  • 409 Conflict: Duplicate order detected (same file number created within 1 minute)
  • 500 Internal Server Error: Server error

2. Create Order with Documents

Create a new notarial order and upload documents simultaneously.

Endpoint: POST /api/order/create-with-documents

Content-Type: multipart/form-data

Form Data Fields:

  • signingContactsFormData (string, required): JSON string with the same structure as above
  • signingDetailsFormData (string, required): JSON string with the same structure as above
  • signingServiceId (string, required): Signing service ID
  • utcTimeDate (string, optional): UTC datetime for specific time appointments
  • utcStartTimeDate (string, optional): UTC start datetime for time range appointments
  • utcEndTimeDate (string, optional): UTC end datetime for time range appointments
  • requestedBy (string, required): JSON string with requestedBy information
  • documents (file array, required): Document files to upload

Document Requirements:

  • Supported formats: PDF, DOC, DOCX, JPG, JPEG, PNG
  • Maximum file size: 10MB per file
  • Maximum files: 20 files per request
  • File naming: Files will be sanitized (special characters replaced with underscores)

Example cURL Request:

curl -X POST "https://api.notaryeveryday.com/api/order/create-with-documents" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "signingContactsFormData={\"orderContactEmail\":\"[email protected]\",\"clientCompanyId\":123}" \
  -F "signingDetailsFormData={\"fileNumber\":\"REF-2024-001\",\"signingDate\":\"2024-02-15\",\"signingTimeType\":\"at\",\"specificTime\":\"14:30\",\"timeZoneId\":\"America/New_York\",\"propertyAddress\":\"123 Main St\",\"signingType\":\"Refinance\",\"signerName\":\"Michael Johnson\",\"signerPhone\":\"+1-555-0125\",\"signerEmail\":\"[email protected]\",\"city\":\"Anytown\",\"state\":\"NY\",\"zipcode\":\"12345\"}" \
  -F "signingServiceId=456" \
  -F "requestedBy={\"userId\":789,\"userRole\":\"admin\",\"signingServiceId\":456}" \
  -F "documents=@/path/to/document1.pdf" \
  -F "documents=@/path/to/document2.pdf"

Success Response (201 Created):

{
  "order_id": 12345,
  "file_number": "REF-2024-001",
  "order_status": "NEW",
  "signer_name": "Michael Johnson",
  "signing_date": "2024-02-15",
  "property_address": "123 Main St, Anytown, NY 12345",
  "signing_service_id": 456,
  "client_company_id": 123,
  "notary_id": null,
  "invoice_fee": 150.00,
  "notary_pay": 100.00,
  "documents_uploaded": 2,
  "created_at": "2024-01-15T10:30:00.000Z",
  "updated_at": "2024-01-15T10:30:00.000Z"
}

Error Responses:

  • 400 Bad Request: Invalid request data, missing required fields, or invalid file format
  • 409 Conflict: Duplicate order detected
  • 413 Payload Too Large: File size exceeds limit
  • 500 Internal Server Error: Server error

Example Code Implementations

JavaScript/Node.js (without documents)

const axios = require('axios');

const createOrder = async () => {
  const orderData = {
    signingContactsFormData: {
      orderContactEmail: "[email protected]",
      clientCompanyId: 123
    },
    signingDetailsFormData: {
      fileNumber: "REF-2024-001",
      signingDate: "2024-02-15",
      signingTimeType: "at",
      specificTime: "14:30",
      timeZoneId: "America/New_York",
      propertyAddress: "123 Main St, Anytown, NY 12345",
      signingType: "Refinance",
      signerName: "Michael Johnson",
      signerPhone: "+1-555-0125",
      signerEmail: "[email protected]",
      city: "Anytown",
      state: "NY",
      zipcode: "12345"
    },
    signingServiceId: 456,
    requestedBy: {
      userId: 789,
      userRole: "admin",
      signingServiceId: 456
    }
  };

  try {
    const response = await axios.post('https://api.notaryeveryday.com/api/order/create', orderData, {
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      }
    });
    
    console.log('Order created:', response.data);
    return response.data;
  } catch (error) {
    console.error('Error creating order:', error.response?.data || error.message);
    throw error;
  }
};

JavaScript/Node.js (with documents)

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const createOrderWithDocuments = async () => {
  const formData = new FormData();
  
  // Add form fields as JSON strings
  formData.append('signingContactsFormData', JSON.stringify({
    orderContactEmail: "[email protected]",
    clientCompanyId: 123
  }));
  
  formData.append('signingDetailsFormData', JSON.stringify({
    fileNumber: "REF-2024-001",
    signingDate: "2024-02-15",
    signingTimeType: "at",
    specificTime: "14:30",
    timeZoneId: "America/New_York",
    propertyAddress: "123 Main St, Anytown, NY 12345",
    signingType: "Refinance",
    signerName: "Michael Johnson",
    signerPhone: "+1-555-0125",
    signerEmail: "[email protected]",
    city: "Anytown",
    state: "NY",
    zipcode: "12345"
  }));
  
  formData.append('signingServiceId', '456');
  
  formData.append('requestedBy', JSON.stringify({
    userId: 789,
    userRole: "admin",
    signingServiceId: 456
  }));
  
  // Add document files
  formData.append('documents', fs.createReadStream('/path/to/document1.pdf'));
  formData.append('documents', fs.createReadStream('/path/to/document2.pdf'));

  try {
    const response = await axios.post(
      'https://api.notaryeveryday.com/api/order/create-with-documents',
      formData,
      {
        headers: {
          'Authorization': 'Bearer YOUR_API_KEY',
          ...formData.getHeaders()
        }
      }
    );
    
    console.log('Order with documents created:', response.data);
    return response.data;
  } catch (error) {
    console.error('Error creating order with documents:', error.response?.data || error.message);
    throw error;
  }
};

Python Example

import requests
import json

def create_order():
    url = "https://api.notaryeveryday.com/api/order/create"
    
    headers = {
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    }
    
    data = {
        "signingContactsFormData": {
            "orderContactEmail": "[email protected]",
            "clientCompanyId": 123
        },
        "signingDetailsFormData": {
            "fileNumber": "REF-2024-001",
            "signingDate": "2024-02-15",
            "signingTimeType": "at",
            "specificTime": "14:30",
            "timeZoneId": "America/New_York",
            "propertyAddress": "123 Main St, Anytown, NY 12345",
            "signingType": "Refinance",
            "signerName": "Michael Johnson",
            "signerPhone": "+1-555-0125",
            "signerEmail": "[email protected]",
            "city": "Anytown",
            "state": "NY",
            "zipcode": "12345"
        },
        "signingServiceId": 456,
        "requestedBy": {
            "userId": 789,
            "userRole": "admin",
            "signingServiceId": 456
        }
    }
    
    try:
        response = requests.post(url, headers=headers, json=data)
        response.raise_for_status()
        
        print("Order created:", response.json())
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Error creating order: {e}")
        raise

def create_order_with_documents():
    url = "https://api.notaryeveryday.com/api/order/create-with-documents"
    
    headers = {
        "Authorization": "Bearer YOUR_API_KEY"
    }
    
    # Prepare form data
    data = {
        'signingContactsFormData': json.dumps({
            "orderContactEmail": "[email protected]",
            "clientCompanyId": 123
        }),
        'signingDetailsFormData': json.dumps({
            "fileNumber": "REF-2024-001",
            "signingDate": "2024-02-15",
            "signingTimeType": "at",
            "specificTime": "14:30",
            "timeZoneId": "America/New_York",
            "propertyAddress": "123 Main St, Anytown, NY 12345",
            "signingType": "Refinance",
            "signerName": "Michael Johnson",
            "signerPhone": "+1-555-0125",
            "signerEmail": "[email protected]",
            "city": "Anytown",
            "state": "NY",
            "zipcode": "12345"
        }),
        'signingServiceId': '456',
        'requestedBy': json.dumps({
            "userId": 789,
            "userRole": "admin",
            "signingServiceId": 456
        })
    }
    
    # Prepare files
    files = [
        ('documents', ('document1.pdf', open('/path/to/document1.pdf', 'rb'), 'application/pdf')),
        ('documents', ('document2.pdf', open('/path/to/document2.pdf', 'rb'), 'application/pdf'))
    ]
    
    try:
        response = requests.post(url, headers=headers, data=data, files=files)
        response.raise_for_status()
        
        print("Order with documents created:", response.json())
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Error creating order with documents: {e}")
        raise
    finally:
        # Close file handles
        for _, file_tuple in files:
            if len(file_tuple) > 2:
                file_tuple[1].close()

Important Notes

  1. File Number Uniqueness: The system prevents duplicate orders with the same file number created within a 1-minute window.

  2. Time Zone Handling: Always provide timeZoneId using IANA timezone identifiers (e.g., "America/New_York", "America/Los_Angeles").

  3. UTC Timestamps: When providing specific times, the system will automatically convert to UTC based on the timezone provided.

  4. Document Processing: Uploaded documents are automatically processed, stored in AWS S3, and associated with the order.

  5. Async Processing: Some post-creation tasks (like sending notification emails) happen asynchronously after the order is created.

  6. Error Handling: Always implement proper error handling to catch validation errors, network issues, and server errors.

  7. Rate Limiting: API requests may be rate-limited. Implement exponential backoff for retry logic.

  8. File Security: All uploaded documents are stored securely and are only accessible to authorized users.


Support

For API support, please contact: