Logo

Partner Portal Login

Please enter your API Key or Admin Secret to continue.

Invalid access key
Beta Version: Report issues to support@naturaesoft.com.

Introduction

Welcome to the EMR API documentation. This API allows partners to integrate with our Electronic Medical Record system to manage prospects, tags, and view provider availability.

Base URL: /v1/{PPass}

Authentication

Our API uses API Keys to generate temporary JWT Bearer tokens.

POST /v1/{PPass}/auth/token

Exchange your API key for an access token.

Request Body
{
  "apiKey": "your_api_key_here"
}
Response
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "tokenType": "Bearer",
  "expiresIn": "24h"
}

Include the token in all subsequent requests:

Authorization: Bearer YOUR_TOKEN

Prospects

GET /v1/{PPass}/prospects

List and search prospects.

Query params: search, page, limit, prospect=true

POST /v1/{PPass}/prospects

Create a new prospect.

Example Body
{
  "FirstName": "John",
  "LastName": "Doe",
  "EMail": "john@example.com",
  "Phone": "555-0123"
}
PUT /v1/{PPass}/prospects/{id}

Update an existing prospect. Fields: FirstName, MI, LastName, FullName, NickName, Gender (m,f,o,u), DOB, LifeStage (Infant,Toddler,Child,Adolescent,EarlyAdult,Adult,AllAdults,Senior), Pronouns, SexualIdentity, PrimaryLanguage, Type (Patient,Child,Cash,Insurance,Guarantor) , Phone, CellPhone, SMSPhone, EMail, Address, Unit, City, State, Zip, Country, ProviderID, Prospect (1,0), Sh_Name, Sh_Address, Sh_Unit, Sh_City, Sh_State, Sh_Zip, Sh_Country, PtImg, Notes

Tags

GET /v1/{PPass}/tags

Get all available tags.

POST /v1/{PPass}/tags/prospects/{id}

Assign a tag to a prospect.

{
  "tagId": 123
}
DELETE /v1/{PPass}/tags/prospects/{id}/{tagId}

Remove a specific tag from a prospect.

DELETE /v1/{PPass}/tags/prospects/{id}

Remove all tags from a prospect.

Providers

Requires Providers scope.

GET /v1/{PPass}/availability/providers

List all active providers.

GET /v1/{PPass}/availability/providers/{id}

Get specific provider details.

GET /v1/{PPass}/availability/providers/{id}/schedule

Get scheduled visits for a provider within a date range.

Query params: startDate, endDate, visitType

Example Request
GET /v1/DemoOffice/availability/providers/1/schedule?startDate=2026-03-09&endDate=2026-03-15
Example Response
{
    "data": {
        "provider": {
            "id": 1,
            "name": "Jane Smith",
            "title": "PA-C",
            "specialty": "Aesthetics"
        },
        "startDate": "2026-03-09",
        "endDate": "2026-03-15",
        "schedule": {
            "2026-03-09": [
                { "VisitID": 101, "time": "09:00:00", "duration": 30, "type": "FOLLOWUP", "booked": true }
            ]
        },
        "totalVisits": 1
    }
}
GET /v1/{PPass}/availability/providers/{id}/check

Check whether a specific date/time/duration slot is available.

Query params: date, time, duration

Example Request
GET /v1/DemoOffice/availability/providers/1/check?date=2026-03-09&time=10:15:00&duration=30
Example Response
{
    "data": {
        "ProviderID": 1,
        "Date": "2026-03-09",
        "Time": "10:15:00",
        "Duration": 30,
        "Available": true
    }
}
GET /v1/{PPass}/availability/providers/{id}/slots

Get all available slots for a provider on a specific date.

Query params: date, duration

Example Request
GET /v1/DemoOffice/availability/providers/1/slots?date=2026-03-09&duration=30
Example Response
{
    "data": {
        "ProviderID": 1,
        "Date": "2026-03-09",
        "Duration": 30,
        "Slots": ["09:00:00", "11:30:00", "14:00:00"],
        "Count": 3
    }
}
GET /v1/{PPass}/availability/providers/{id}/next-slot

Get the next available slot for a provider.

Query params: duration, maxDays (optional, default 365)

Example Request
GET /v1/DemoOffice/availability/providers/1/next-slot?duration=30&maxDays=30
Example Response
{
    "data": {
        "ProviderID": 1,
        "Duration": 30,
        "SearchWindowDays": 30,
        "TheNextSlot": {
            "ProviderID": "1",
            "Date": "2026-03-10",
            "Time": "09:00:00"
        }
    }
}

Visit Scheduling

Requires Scheduling scope.

GET /v1/{PPass}/visit-types

List visit types configured for the tenant, including allowed providers and resources.

Query params: includeInactive (optional, default false)

Example Request
GET /v1/DemoOffice/visit-types
Example Response
{
    "data": [
        {
            "VisitType": "Consult",
            "Active": true,
            "Providers": [1, 2],
            "Resources": [101, 102]
        }
    ],
    "count": 1
}
POST /v1/{PPass}/visits/book

Book a visit in the tenant Visits table with provider and resource availability checks.

Required: PatientID, ProviderID, VisitType, VisitDate, VisitTime, VisitDuration

Optional: VisitComplaint, ProviderTime, ProviderDuration, VisitNotes

Example Body
{
    "PatientID": 1001,
    "ProviderID": 2,
    "VisitType": "Consult",
    "VisitDate": "2026-03-12",
    "VisitTime": "10:00:00",
    "VisitDuration": 30,
    "VisitComplaint": "Follow-up",
    "ProviderTime": "10:00:00",
    "ProviderDuration": 30,
    "VisitNotes": "Booked via API"
}
Example Response
{
    "message": "Visit booked successfully",
    "data": {
        "VisitID": 555,
        "PatientID": 1001,
        "ProviderID": 2,
        "VisitType": "Consult",
        "VisitDate": "2026-03-12",
        "VisitTime": "10:00:00",
        "VisitDuration": 30,
        "ProviderTime": "10:00:00",
        "ProviderDuration": 30,
        "RoomID": 102
    }
}

Products (ProductPro)

Requires ProductPro.Products scope. These endpoints are global (no {PPass} required).

GET /v1/products

List available products. Searchable via search and vendorCode query params.

POST /v1/products

Bulk update or create products.

{
  "products": [
    {
      "VendorCode": "V001",
      "ProductCode": "P001",
      "Product": "Example Product",
      "RetailPrice": 99.99
    }
  ]
}

Knowledge Base

Requires KB scope. These endpoints are global.

GET /v1/kb

List KB articles. Searchable via search, category, and type query params.

GET /v1/kb/{id}

Get details for a specific KB article.

Example Request
GET /v1/kb/12
Example Response
{
  "data": {
    "KBID": 12,
    "Title": "Insurance Verification Workflow",
    "Article": "Step-by-step process...",
    "Category": "Billing",
    "Type": "HowTo",
    "Tags": "insurance, verification",
    "Active": true
  }
}
PUT /v1/kb/{id}

Update a specific KB article.

Webhooks

Register a webhook endpoint for OfficePro events sourced from the log table.

POST /v1/webhooks/signup

Creates or updates the authenticated client webhook subscription.

Allowed scopes: Patients, Encounters, Claims, Payments, Documents

Delivery uses incremental log_id polling and includes headers X-OfficePro-Event and X-OfficePro-Event-Id.

Example Request
{
    "hookUrl": "https://partner.example.com/officepro/webhooks",
    "scopes": ["Patients", "Claims"]
}
Example Response
{
    "message": "Webhook subscription created successfully",
    "data": {
        "id": 1,
        "hookUrl": "https://partner.example.com/officepro/webhooks",
        "scopes": ["Patients", "Claims"],
        "status": "active"
    }
}
GET /v1/admin/webhooks/monitor

Admin monitoring endpoint for webhook health and delivery activity.

Requires X-Admin-Secret. Optional query params: practicepass, success, limit, offset.

Example Request
GET /v1/admin/webhooks/monitor?practicepass=DemoOffice&success=false&limit=50&offset=0
Example Response
{
    "summary": {
        "totalSubscriptions": 3,
        "activeSubscriptions": 2,
        "totalDeliveries": 150,
        "failedDeliveries": 4,
        "successRate": 97.33
    },
    "dispatchStates": [
        { "practicepass": "DemoOffice", "lastLogId": 14656636 }
    ],
    "recentDeliveries": [ ... ]
}

Tickets

Requires Tickets scope. These endpoints are tenant-specific.

GET /v1/{PPass}/tickets

List all tickets for the practice.

GET /v1/{PPass}/ticket/{id}

Get specific ticket details including comments.

PUT /v1/{PPass}/ticket/{id}

Update ticket status or other details.

POST /v1/{PPass}/tickets/{id}/comment

Add a comment to a ticket.

{
  "Comment": "This is a new comment",
  "Author": "Support Agent"
}
POST /v1/admin/webhooks/retry/{id}

Admin endpoint to retry a specific webhook delivery record.

Requires X-Admin-Secret.

Example Request
POST /v1/admin/webhooks/retry/10
Example Response
{
    "message": "Webhook delivery retried successfully",
    "data": {
        "sourceDeliveryId": 10,
        "retryDeliveryId": 11,
        "success": true,
        "statusCode": 200,
        "attempts": 1,
        "errorMessage": null
    }
}

My Information

Read and update your own partner information. Global endpoint.

GET /v1/me

Get your partner profile details.

PATCH /v1/me

Update your partner profile.

Dashboard Overview

Multi-Tenant Enabled
Total Calls

0

Success Rate

0%

Avg Duration

0ms

Error Count

0

API Usage (Last 7 Days)
Partners
  • Loading partners...
API Keys
Name Partner PPass Scopes Last Used Status
Loading keys...
API Access Requests
Time Company Practice Contact Requested Scopes Status Action
Loading requests...
Recent Activity
Time Method Endpoint Status Duration Partner IP
Loading logs...