{"info":{"_postman_id":"f6ad0eb6-3128-4ef6-8181-10083546b446","name":"NOVAMED APIS","description":"<html><head></head><body><h2 id=\"intro\">Intro</h2>\n<p>The Novamed Integrations API is a set of HTTP endpoints that help your app integrate with Novamed.</p>\n<p><strong>Base URL</strong></p>\n<ul>\n<li><p>Development - <a href=\"https://novamed-feapidev.stackmod.info/\">https://novamed-feapidev.stackmod.info</a></p>\n</li>\n<li><p>Production - <a href=\"https://feapi.novamed.care/\">https://feapi.novamed.care</a></p>\n</li>\n</ul>\n<h2 id=\"request-and-response-formats\">Request and Response Formats</h2>\n<p>All API access is over HTTPS. All data is sent and received as JSON.</p>\n<h2 id=\"headers\">Headers</h2>\n<p>Please note that all requests require at least these two headers:</p>\n<p>Content-Type: application/json</p>\n<p>Accept: application/json</p>\n<h2 id=\"api-errors\">API Errors</h2>\n<h4 id=\"error-codes\">Error Codes</h4>\n<p>The following table describes all the possible HTTP error codes.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>400</td>\n<td>Bad request</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Unauthorized. This can happen if the access token is invalid, expired or has been revoked</td>\n</tr>\n<tr>\n<td>404</td>\n<td>Resource not found</td>\n</tr>\n<tr>\n<td>5XX</td>\n<td>An error occurred on the NovaMed API Integration</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"error-response-structure\">Error Response Structure</h4>\n<p>json</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"string\",\n    \"details\": {}\n  }\n}\n\n</code></pre>\n<h2 id=\"authentication\">Authentication</h2>\n<p>We will provide an <code>API Key</code> and <code>Clinic Id</code>. All requests needs to pass a header <code>x-api-key</code> with the provided value. <code>Clinic Id</code> needs to pass the body / request if it is required by the endpoint.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"49178248","collectionId":"f6ad0eb6-3128-4ef6-8181-10083546b446","publishedId":"2sB3QML9Jg","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-10-13T09:10:26.000Z"},"item":[{"name":"Practitioners","item":[{"name":"Create new practitioner","id":"7ab40d51-3c4f-4904-8734-be07d836ef78","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"first_name\": \"John\",\n  \"last_name\": \"Doe\",\n  \"email\": \"john.doe@example.com\",\n  \"npi\": \"1234567890\",\n  \"is_veterinarian\": true,\n  \"assigned_clinic\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"phone\": \"1234567890\",\n  \"address_line_1\": \"123 Main St\",\n  \"address_line_2\": \"Apt 1\",\n  \"city\": \"San Antonio\",\n  \"state_code\": \"TX\",\n  \"zip_code\": \"78201\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/practitioner","description":"<p>Creates a new practitioner (doctor or veterinarian) in the system. This endpoint is used to onboard practitioners by collecting their personal, professional, and contact information. All required fields must be provided and must pass validation.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>/api/external/practitioner</code></p>\n</li>\n</ul>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>Send a JSON object with the following fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Validation &amp; Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>first_name</td>\n<td>string</td>\n<td>Yes</td>\n<td>1-100 chars. Required.</td>\n</tr>\n<tr>\n<td>last_name</td>\n<td>string</td>\n<td>Yes</td>\n<td>1-100 chars. Required.</td>\n</tr>\n<tr>\n<td>email</td>\n<td>string</td>\n<td>Yes</td>\n<td>Must be a valid email address. Required.</td>\n</tr>\n<tr>\n<td>npi</td>\n<td>string</td>\n<td>Yes</td>\n<td>Exactly 10 digits, numbers only. Required.</td>\n</tr>\n<tr>\n<td>assigned_clinic</td>\n<td>string</td>\n<td>Yes</td>\n<td>Must be a valid UUID. Required.</td>\n</tr>\n<tr>\n<td>is_veterinarian</td>\n<td>boolean</td>\n<td>Yes</td>\n<td>Required.</td>\n</tr>\n<tr>\n<td>phone</td>\n<td>string</td>\n<td>No</td>\n<td>Max 20 chars.</td>\n</tr>\n<tr>\n<td>address_line_1</td>\n<td>string</td>\n<td>Yes</td>\n<td>Max 100 chars. Required.</td>\n</tr>\n<tr>\n<td>address_line_2</td>\n<td>string</td>\n<td>No</td>\n<td>Max 100 chars.</td>\n</tr>\n<tr>\n<td>city</td>\n<td>string</td>\n<td>Yes</td>\n<td>Max 100 chars. Required.</td>\n</tr>\n<tr>\n<td>state_code</td>\n<td>string</td>\n<td>Yes</td>\n<td>Must be a valid US state/territory code. Required.</td>\n</tr>\n<tr>\n<td>zip_code</td>\n<td>string</td>\n<td>Yes</td>\n<td>Max 10 chars. Required.</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>All required fields must be provided and valid.</p>\n</li>\n<li><p><code>assigned_clinic</code> must reference an existing clinic UUID.</p>\n</li>\n<li><p>Validation errors will return descriptive messages for each field.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","external","practitioner"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"be83039f-9095-478f-8686-e28f2d2d1f6d","name":"Create new practitioner","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"first_name\": \"John\",\n  \"last_name\": \"Doe\",\n  \"email\": \"john.doe@example.com\",\n  \"npi\": \"1234567890\",\n  \"is_veterinarian\": true,\n  \"assigned_clinic\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"phone\": \"1234567890\",\n  \"address_line_1\": \"123 Main St\",\n  \"address_line_2\": \"Apt 1\",\n  \"city\": \"San Antonio\",\n  \"state_code\": \"TX\",\n  \"zip_code\": \"78201\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/practitioner"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 10:08:32 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"56"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Practitioner created successfully\",\n    \"data\": {\n        \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\"\n    }\n}"}],"_postman_id":"7ab40d51-3c4f-4904-8734-be07d836ef78"}],"id":"e24d7abe-31b6-48de-a9b3-d26b0000dfa9","_postman_id":"e24d7abe-31b6-48de-a9b3-d26b0000dfa9","description":""},{"name":"Patients","item":[{"name":"Create new patient","id":"aaa61d5a-3307-449c-a417-0001c6af49fc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"first_name\": \"John\",\n  \"middle_name\": \"Michael\",\n  \"last_name\": \"Doe\",\n  \"gender\": \"male\",\n  \"dob\": \"2025-07-13T18:30:00.000Z\",\n  \"species\": \"human\",\n  \"animal_owner_name\": \"Jane Smith\",\n  \"weight\": \"70.5\",\n  \"weight_recorded_date\": \"2024-01-15\",\n  \"status\": \"active\",\n  \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"assigned_clinic\": \"550e8400-e29b-41d4-a716-446655440002\",\n  \"contacts\": [\n    {\n      \"key\": \"email\",\n      \"value\": \"john.doe@example.com\"\n    },\n    {\n      \"key\": \"phone\",\n      \"value\": \"5551234567\"\n    },\n    {\n      \"key\": \"url\",\n      \"value\": \"https://example.com\"\n    }\n  ],\n  \"addresses\": [\n    {\n      \"addressLine1\": \"123 Main Street\",\n      \"addressLine2\": \"Apt 4B\",\n      \"city\": \"New York\",\n      \"state\": \"NY\",\n      \"postalCode\": \"10001\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/patient","description":"<p>Create a new patient record in the system. This endpoint is used to register a human or animal patient, along with their contact and address details. The request body must conform to the schema and validation rules described below.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>/api/external/patient</code></p>\n</li>\n</ul>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>Send a JSON object with the following fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>first_name</td>\n<td>string</td>\n<td>Yes</td>\n<td>Patient's first name. Minimum 2 characters.</td>\n</tr>\n<tr>\n<td>middle_name</td>\n<td>string</td>\n<td>No</td>\n<td>Patient's middle name. Can be empty or null.</td>\n</tr>\n<tr>\n<td>last_name</td>\n<td>string</td>\n<td>Yes</td>\n<td>Patient's last name.</td>\n</tr>\n<tr>\n<td>gender</td>\n<td>string</td>\n<td>No</td>\n<td>Patient's gender. Can be empty or null.</td>\n</tr>\n<tr>\n<td>dob</td>\n<td>string</td>\n<td>Yes</td>\n<td>Date of birth (ISO 8601 string).</td>\n</tr>\n<tr>\n<td>species</td>\n<td>string</td>\n<td>No</td>\n<td>Species (e.g., human, canine). Can be empty or null.</td>\n</tr>\n<tr>\n<td>animal_owner_name</td>\n<td>string</td>\n<td>No</td>\n<td>Owner's name (for animals). Can be empty or null.</td>\n</tr>\n<tr>\n<td>weight</td>\n<td>string</td>\n<td>No</td>\n<td>Patient's weight. Can be empty or null.</td>\n</tr>\n<tr>\n<td>weight_recorded_date</td>\n<td>string</td>\n<td>No</td>\n<td>Date when weight was recorded. Can be empty or null.</td>\n</tr>\n<tr>\n<td>status</td>\n<td>string</td>\n<td>No</td>\n<td>Patient's status (e.g., active, inactive).</td>\n</tr>\n<tr>\n<td>practitioner_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>Unique ID of the assigned practitioner.</td>\n</tr>\n<tr>\n<td>assigned_clinic</td>\n<td>string</td>\n<td>Yes</td>\n<td>UUID of the assigned clinic.</td>\n</tr>\n<tr>\n<td>contacts</td>\n<td>array</td>\n<td>No</td>\n<td>List of contact objects. Each must have a <code>key</code> (email, phone, url) and a <code>value</code>.</td>\n</tr>\n<tr>\n<td>addresses</td>\n<td>array</td>\n<td>Yes</td>\n<td>Array of exactly one address object. See below.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"address-object\">Address Object</h4>\n<ul>\n<li><p><code>addressLine1</code> <em>(string, required)</em>: First line of address.</p>\n</li>\n<li><p><code>addressLine2</code> <em>(string, required)</em>: Second line of address.</p>\n</li>\n<li><p><code>addressLine3</code> <em>(string, optional)</em>: Third line of address.</p>\n</li>\n<li><p><code>city</code> <em>(string, required)</em>: City name.</p>\n</li>\n<li><p><code>state</code> <em>(string, required)</em>: State code (Eg: NY, TX).</p>\n</li>\n<li><p><code>postalCode</code> <em>(string, required)</em>: Postal code.</p>\n</li>\n</ul>\n<h4 id=\"contacts-validation\">Contacts Validation</h4>\n<ul>\n<li><p><strong>phone</strong>: Must be a valid US phone number (<code>+1XXXXXXXXXX</code>, <code>1XXXXXXXXXX</code>, or <code>XXXXXXXXXX</code>).</p>\n</li>\n<li><p><strong>email</strong>: Must be a valid email address.</p>\n</li>\n<li><p><strong>url</strong>: Must be a valid URL.</p>\n</li>\n</ul>\n<hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>All required fields must be present and valid.</p>\n</li>\n<li><p>Only one address object is allowed in the <code>addresses</code> array.</p>\n</li>\n<li><p>For detailed validation rules, refer to the schema.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","external","patient"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"d2261950-a9a5-4628-bf9a-27969340e6bf","name":"Create new patient","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"first_name\": \"John\",\n  \"middle_name\": \"Michael\",\n  \"last_name\": \"Doe\",\n  \"gender\": \"male\",\n  \"dob\": \"2025-07-13T18:30:00.000Z\",\n  \"species\": \"human\",\n  \"animal_owner_name\": \"Jane Smith\",\n  \"weight\": \"70.5\",\n  \"weight_recorded_date\": \"2024-01-15\",\n  \"status\": \"active\",\n  \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"assigned_clinic\": \"550e8400-e29b-41d4-a716-446655440002\",\n  \"contacts\": [\n    {\n      \"key\": \"email\",\n      \"value\": \"john.doe@example.com\"\n    },\n    {\n      \"key\": \"phone\",\n      \"value\": \"5551234567\"\n    },\n    {\n      \"key\": \"url\",\n      \"value\": \"https://example.com\"\n    }\n  ],\n  \"addresses\": [\n    {\n      \"addressLine1\": \"123 Main Street\",\n      \"addressLine2\": \"Apt 4B\",\n      \"city\": \"New York\",\n      \"state\": \"NY\",\n      \"postalCode\": \"10001\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/patient"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 09:40:44 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"56"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n  \"success\": true,\n  \"data\": {\n    \"patient\": {\n      \"id\": \"550e8400-e29b-41d4-a716-446655440001\",\n      \"first_name\": \"John\",\n      \"middle_name\": \"Michael\",\n      \"last_name\": \"Doe\",\n      \"dob\": \"1990-01-15\",\n      \"gender\": \"male\",\n      \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n      \"assignedClinic\": \"550e8400-e29b-41d4-a716-446655440002\",\n      \"createdAt\": \"2024-01-15T10:30:00Z\"\n    }\n  },\n  \"message\": \"Patient saved successfully\"\n}"}],"_postman_id":"aaa61d5a-3307-449c-a417-0001c6af49fc"}],"id":"861fa11b-bc11-48fe-aee9-9cceb96ed0ba","_postman_id":"861fa11b-bc11-48fe-aee9-9cceb96ed0ba","description":""},{"name":"Medication Requests","item":[{"name":"Create new medication request","id":"cdab7e55-d656-40c1-ad18-bfe688130be8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"patient_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"clinic_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"delivery_speed\": \"next-day\",\n  \"is_refrigerated\": true,\n  \"shipment_group_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"medication_requests\": [\n    {\n      \"medication\": \"Aspirin\",\n      \"dose\": \"100mg\",\n      \"quantity\": 100,\n      \"refills\": \"3\",\n      \"direction\": \"Take 1 tablet by mouth daily\",\n      \"days_supply\": 30,\n      \"flavor\": \"Orange\",\n      \"notes\": \"Patient has a history of allergies\",\n      \"do_not_refill\": true,\n      \"do_not_fill\": true,\n      \"patient_contact_requested\": true,\n      \"reason_for_compounding\": \"Patient has a history of allergies\",\n      \"reason_for_compounding_additional_context\": \"Patient has a history of allergies\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/medication-order","description":"<p>This endpoint allows you to create a new medication order for a patient. It is used by clinics or practitioners to initiate a prescription and shipment workflow for compounded or standard medications.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>/api/external/medication-order</code></p>\n</li>\n</ul>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>The request body must be a JSON object with the following structure:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>patient_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>Unique identifier of the patient.</td>\n</tr>\n<tr>\n<td>practitioner_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>Unique identifier of the practitioner authorizing the order.</td>\n</tr>\n<tr>\n<td>clinic_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>Unique identifier of the clinic submitting the order.</td>\n</tr>\n<tr>\n<td>delivery_speed</td>\n<td>string</td>\n<td>Yes</td>\n<td>Delivery speed: must be either <code>next-day</code> or <code>business-day</code>.</td>\n</tr>\n<tr>\n<td>is_refrigerated</td>\n<td>boolean</td>\n<td>No</td>\n<td>Indicates if the medication requires refrigeration during shipment.</td>\n</tr>\n<tr>\n<td>shipment_group_id</td>\n<td>string</td>\n<td>No</td>\n<td>Identifier for grouping multiple shipments together.</td>\n</tr>\n<tr>\n<td>medication_requests</td>\n<td>array</td>\n<td>Yes</td>\n<td>Array of medication request objects (see below).</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"medication_requests-array-of-objects\">medication_requests (array of objects):</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>medication</td>\n<td>string</td>\n<td>Yes</td>\n<td>Name of the medication (e.g., 'Aspirin').</td>\n</tr>\n<tr>\n<td>dose</td>\n<td>string</td>\n<td>Yes</td>\n<td>Dosage information (e.g., '100mg').</td>\n</tr>\n<tr>\n<td>quantity</td>\n<td>string/integer</td>\n<td>Yes</td>\n<td>Number of units/tablets to dispense.</td>\n</tr>\n<tr>\n<td>refills</td>\n<td>string</td>\n<td>No</td>\n<td>Number of refills allowed.</td>\n</tr>\n<tr>\n<td>direction</td>\n<td>string</td>\n<td>Yes</td>\n<td>Instructions for the patient (e.g., 'Take 1 tablet by mouth daily').</td>\n</tr>\n<tr>\n<td>days_supply</td>\n<td>integer</td>\n<td>No</td>\n<td>Number of days the supply should last.</td>\n</tr>\n<tr>\n<td>flavor</td>\n<td>string</td>\n<td>No</td>\n<td>Flavoring for the medication, if applicable.</td>\n</tr>\n<tr>\n<td>notes</td>\n<td>string</td>\n<td>No</td>\n<td>Additional notes or special instructions (e.g., allergy history).</td>\n</tr>\n<tr>\n<td>do_not_refill</td>\n<td>boolean</td>\n<td>No</td>\n<td>If true, prevents refills for this medication.</td>\n</tr>\n<tr>\n<td>do_not_fill</td>\n<td>boolean</td>\n<td>No</td>\n<td>If true, prevents the medication from being filled.</td>\n</tr>\n<tr>\n<td>patient_contact_requested</td>\n<td>boolean</td>\n<td>No</td>\n<td>If true, requests that the pharmacy contact the patient before filling.</td>\n</tr>\n<tr>\n<td>reason_for_compounding</td>\n<td>string</td>\n<td>No</td>\n<td>Reason for compounding the medication.</td>\n</tr>\n<tr>\n<td>reason_for_compounding_additional_context</td>\n<td>string</td>\n<td>No</td>\n<td>Additional context for compounding.</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>Use the <code>notes</code> field to communicate important information such as allergies or special handling instructions.</p>\n</li>\n<li><p>Set <code>is_refrigerated</code> to true if the medication requires cold storage during shipping.</p>\n</li>\n<li><p>Ensure all referenced IDs (patient, practitioner, clinic) exist in the system before submitting the request.</p>\n</li>\n<li><p>All required fields must be provided. If a required field is missing, a descriptive error message will be returned (e.g., <code>Patient Id is required</code>).</p>\n</li>\n<li><p><code>delivery_speed</code> must be either <code>next-day</code> or <code>business-day</code>.</p>\n</li>\n<li><p><code>quantity</code> can be a string or integer.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","external","medication-order"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"f104a2fa-bc22-4215-9b29-784257673e02","name":"New Request","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"patient_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"practitioner_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"clinic_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"delivery_speed\": \"next-day\",\n  \"is_refrigerated\": true,\n  \"shipment_group_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"medication_requests\": [\n    {\n      \"medication\": \"Aspirin\",\n      \"dose\": \"100mg\",\n      \"quantity\": 100,\n      \"refills\": \"3\",\n      \"direction\": \"Take 1 tablet by mouth daily\",\n      \"days_supply\": 30,\n      \"flavor\": \"Orange\",\n      \"notes\": \"Patient has a history of allergies\",\n      \"do_not_refill\": true,\n      \"do_not_fill\": true,\n      \"patient_contact_requested\": true,\n      \"reason_for_compounding\": \"Patient has a history of allergies\",\n      \"reason_for_compounding_additional_context\": \"Patient has a history of allergies\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/medication-order"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 10:25:16 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"57"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Medication order created successfully\",\n  \"data\": {\n    \"medication_order_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n    \"medications\": [\n      {\n        \"id\": \"550e8400-e29b-41d4-a716-446655440001\",\n        \"medication\": \"Aspirin\",\n        \"dose\": \"100mg\",\n        \"quantity_authorized\": \"100\",\n        \"days_supply\": \"30\",\n        \"unit_of_measure\": \"mg\",\n        \"refills_authorized\": \"3\",\n        \"sig\": \"Take 1 tablet by mouth daily\",\n        \"reason_for_compounding\": \"Patient has a history of allergies\",\n        \"date_issued\": \"2021-01-01\",\n        \"do_not_refill\": true,\n        \"do_not_fill\": true,\n        \"patient_contact_requested\": true,\n        \"reason_for_compounding_context\": \"Patient has a history of allergies\",\n        \"flavor\": \"Orange\",\n        \"notes\": \"Patient has a history of allergies\"\n      }\n    ]\n  }\n}"}],"_postman_id":"cdab7e55-d656-40c1-ad18-bfe688130be8"}],"id":"e1da245d-f830-416e-a208-908d4b6d8c89","_postman_id":"e1da245d-f830-416e-a208-908d4b6d8c89","description":""},{"name":"Refills","item":[{"name":"Create a refill","id":"f5af3f84-4794-44cd-b111-60022c7b4958","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"medication_request_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"shipment_group_id\": \"Shipment Group 1\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/refill-request","description":"<p>Creates a new refill request for an existing medication request.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>/api/external/refill-request</code></p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Name</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>medication_request_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>The unique identifier (UUID) of the medication request to refill.</td>\n</tr>\n<tr>\n<td>shipment_group_id</td>\n<td>string</td>\n<td>No</td>\n<td>Identifier for the shipment group (optional).</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p><code>medication_request_id</code> is required and must be a valid UUID.</p>\n</li>\n<li><p><code>shipment_group_id</code> is optional.</p>\n</li>\n<li><p>All error messages are returned in the response body as JSON.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","external","refill-request"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"8f336fbb-928e-4583-bbc2-0b5bbea03ff6","name":"New Request","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"medication_request_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"shipment_group_id\": \"Shipment Group 1\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/refill-request"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 10:45:50 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"68"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Refill request created successfully\",\n    \"data\": {\n        \"refill_request_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n        \"medication_order_id\": \"550e8400-e29b-41d4-a716-446655440001\"\n    }\n}"}],"_postman_id":"f5af3f84-4794-44cd-b111-60022c7b4958"}],"id":"84f89d0d-248e-4d26-8d2d-7a475ef19a3e","_postman_id":"84f89d0d-248e-4d26-8d2d-7a475ef19a3e","description":""},{"name":"Webhooks","item":[{"name":"Create new webhook","id":"c9ba58f6-f14b-4a73-8488-7c461876fcc8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"clinic_id\": \"d1c328b8-68d2-43c6-935e-3a449995d41d\",\n  \"webhook_url\": \"https://webhook.site/123e4567-e89b-12d3-a456-426614174000\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/webhook","description":"<p>This endpoint allows you to register a new webhook for clinic which was assigned to you. Once registered, the system will send event notifications to the provided webhook URL whenever relevant events occur for the specified clinic.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>{{baseUrl}}/api/external/webhook</code></p>\n</li>\n</ul>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>Send a JSON object in the request body with the following fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>clinic_id</td>\n<td>string</td>\n<td>Yes</td>\n<td>The unique identifier of the clinic for which to create the webhook.</td>\n</tr>\n<tr>\n<td>webhook_url</td>\n<td>string</td>\n<td>Yes</td>\n<td>The URL where webhook events should be delivered. Must be HTTPS.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["api","external","webhook"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"4fb6a58c-9445-434f-a745-414dc68ec7bb","name":"Create new webhook","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"clinic_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n  \"webhook_url\": \"https://webhook.site/123e4567-e89b-12d3-a456-426614174000\"\n}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/api/external/webhook"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 09:19:20 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"118"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"success\": true,\n    \"data\": {\n        \"webhook_id\": \"550e8400-e29b-41d4-a716-446655440001\"\n    },\n    \"message\": \"Webhook created successfully\"\n}"}],"_postman_id":"c9ba58f6-f14b-4a73-8488-7c461876fcc8"},{"name":"Delete a webhook","id":"8dfe7bb8-5e1a-49fc-8ad0-f649b5dfeee2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"x-api-key"},{"key":"value","value":"{{APIKey}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{baseUrl}}/api/external/webhook/:id","description":"<p>Deletes an existing webhook by its unique ID. Use this endpoint to remove a webhook from the system so it no longer receives event notifications. The id path variable must be set to the webhook's identifier.</p>\n<hr />\n<h3 id=\"http-request\">HTTP Request</h3>\n<ul>\n<li><p><strong>Method:</strong> DELETE</p>\n</li>\n<li><p><strong>URL:</strong> <code>/api/external/webhook/:id</code></p>\n</li>\n<li><p><strong>Path Variables:</strong></p>\n<ul>\n<li><code>id</code> (string, required): The unique identifier of the webhook to delete.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>None</p>\n","urlObject":{"path":["api","external","webhook",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"type":"any","value":"550e8400-e29b-41d4-a716-446655440001","key":"id"}]}},"response":[{"id":"53b9fe90-d5e3-43b8-bccd-075c33d1ac69","name":"Delete a webhook","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"{{baseUrl}}/api/external/webhook/:id","host":["{{baseUrl}}"],"path":["api","external","webhook",":id"],"variable":[{"key":"id","value":"550e8400-e29b-41d4-a716-446655440001"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 13 Oct 2025 09:23:15 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Content-Length","value":"57"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Webhook deleted successfully\"\n}"}],"_postman_id":"8dfe7bb8-5e1a-49fc-8ad0-f649b5dfeee2"}],"id":"ef6fcd0b-ef68-4d61-8cb1-62bdf9f79d28","_postman_id":"ef6fcd0b-ef68-4d61-8cb1-62bdf9f79d28","description":""}]}