# Medplum
URL: https://docs.awellhealth.com/docs/marketplace/medplum

> For the complete documentation index, see [llms.txt](https://docs.awellhealth.com/llms.txt).



<img src="/marketplace/medplum.svg" width="48" height="48" />

Medplum is the open source healthcare developer platform that helps you build, test, and deliver any healthcare product or service.

Category: EHR Integrations. Adds 13 actions and 2 webhooks to a care flow.

## What to configure [#what-to-configure]

Set these once, on the extension in Awell Studio. An action fails at run time if a
required setting is missing.

| Setting       | Required | Notes                                                                                                                                 |
| ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Base URL      | No       | Optional custom base URL for Medplum server (e.g., [https://api.medplum.com/](https://api.medplum.com/)). Leave empty to use default. |
| Client ID     | Yes      | Used to authenticate with Medplum Stored as a secret.                                                                                 |
| Client secret | Yes      | Used to authenticate with Medplum Stored as a secret.                                                                                 |

## Actions [#actions]

Medplum adds these 13 actions to a care flow. Add one to a step, then fill in its inputs.

### Add side effect [#add-side-effect]

Add side effect to Medication Request

| Input                                                               | Type     | Required | Description |
| ------------------------------------------------------------------- | -------- | -------- | ----------- |
| The ID of the medication request you want to link the side effec to | `string` | Yes      | —           |
| Side effect                                                         | `string` | Yes      | —           |

### Create calculation observation [#create-calculation-observation]

Create a calculation observation in Medplum

| Input                     | Type     | Required | Description                                                                             |
| ------------------------- | -------- | -------- | --------------------------------------------------------------------------------------- |
| Patient ID                | `string` | Yes      | The identifier of the patient in Medplum to assign the response to                      |
| Questionnaire response ID | `string` | No       | The identifier of the questionnaire response you want to link the calculation result to |

Returns:

| Data point      | Type     |
| --------------- | -------- |
| `observationId` | `string` |

### Create patient [#create-patient]

Create a patient in Medplum

| Input        | Type     | Required | Description                                           |
| ------------ | -------- | -------- | ----------------------------------------------------- |
| First name   | `string` | No       | —                                                     |
| Last name    | `string` | No       | —                                                     |
| Mobile phone | `string` | No       | —                                                     |
| Email        | `string` | No       | —                                                     |
| Birth date   | `date`   | No       | —                                                     |
| Gender       | `string` | No       | Valid values are "male", "female", "other", "unknown" |
| Address      | `string` | No       | —                                                     |
| City         | `string` | No       | —                                                     |
| State        | `string` | No       | —                                                     |
| Country      | `string` | No       | —                                                     |
| Postal code  | `string` | No       | —                                                     |

Returns:

| Data point  | Type     |
| ----------- | -------- |
| `patientId` | `string` |

### Find or create resource [#find-or-create-resource]

Find or create any FHIR resource in Medplum. Optionally search for existing resources by type and identifier before creating. Supports single resources or FHIR Bundles (transaction/batch) for creating multiple resources atomically.

| Input                | Type     | Required | Description                                                                                                                                                                                           |
| -------------------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Resource JSON        | `json`   | Yes      | FHIR resource or Bundle as JSON. Supports single resources (e.g., Patient, Observation) or FHIR Bundles (transaction/batch) for creating multiple resources.                                          |
| Search Resource Type | `string` | No       | Optional: FHIR resource type to search for (e.g., Patient, Observation). If provided along with Search Identifier, the action will search for existing resources before creating a new one.           |
| Search Identifier    | `string` | No       | Optional: Identifier value to search for (e.g., MRN, SSN). If provided along with Search Resource Type, the action will search for existing resources with this identifier before creating a new one. |

Returns:

| Data point         | Type      |
| ------------------ | --------- |
| `bundleId`         | `string`  |
| `bundleType`       | `string`  |
| `resourceId`       | `string`  |
| `resourceIds`      | `string`  |
| `resourcesCreated` | `json`    |
| `resourceType`     | `string`  |
| `wasResourceFound` | `boolean` |

### Create service request [#create-service-request]

Create a service request in Medplum

| Input        | Type     | Required | Description                                                                                                                                                                                 |
| ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Patient ID   | `string` | Yes      | ID of the patient in Medplum                                                                                                                                                                |
| Status       | `string` | Yes      | The status of the order One of: draft, active, on-hold, revoked, completed, entered-in-error, unknown.                                                                                      |
| Mobile phone | `string` | Yes      | Whether the request is a proposal, plan, an original order or a reflex order. One of: proposal, plan, directive, order, original-order, reflex-order, filler-order, instance-order, option. |
| Priority     | `string` | No       | The priority of the order One of: routine, urgent, asap, stat.                                                                                                                              |

Returns:

| Data point         | Type     |
| ------------------ | -------- |
| `serviceRequestId` | `string` |

### Create task [#create-task]

Create a Task in Medplum

| Input            | Type     | Required | Description                                                                                                                                                                  |
| ---------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Patient ID       | `string` | Yes      | ID of the patient in Medplum the task is for                                                                                                                                 |
| Task name        | `string` | Yes      | Briefly describes what the task involves                                                                                                                                     |
| Description name | `text`   | No       | Human-readable explanation of task                                                                                                                                           |
| Status           | `string` | Yes      | The status of the task One of: draft, requested, received, accepted, rejected, ready, cancelled, in-progress, on-hold, failed, completed, entered-in-error.                  |
| Intent           | `string` | Yes      | Indicates the "level" of actionability associated with the Task. One of: unknown, proposal, plan, order, original-order, reflex-order, filler-order, instance-order, option. |
| Priority         | `string` | No       | The priority of the task One of: routine, urgent, asap, stat.                                                                                                                |
| Due date         | `date`   | No       | —                                                                                                                                                                            |
| Performer type   | `string` | No       | Indicate which role can/should perform this task                                                                                                                             |

Returns:

| Data point | Type     |
| ---------- | -------- |
| `taskId`   | `string` |

### Execute Bot [#execute-bot]

Execute a Medplum Bot

| Input  | Type     | Required | Description                                                                                           |
| ------ | -------- | -------- | ----------------------------------------------------------------------------------------------------- |
| Bot ID | `string` | Yes      | You can find the id of your Bot by clicking on the Details tab of the Bot resource in the Medplum app |
| Body   | `json`   | No       | Data in JSON format you would like to pass to the Bot                                                 |

Returns:

| Data point | Type     |
| ---------- | -------- |
| `data`     | `string` |
| `jsonData` | `json`   |

### Get appointment [#get-appointment]

Retrieve appointment details from Medplum

This action can be previewed in Studio before you publish.

| Input          | Type     | Required | Description                                  |
| -------------- | -------- | -------- | -------------------------------------------- |
| Appointment ID | `string` | Yes      | The identifier of the appointment in Medplum |

Returns:

| Data point        | Type   |
| ----------------- | ------ |
| `appointmentData` | `json` |

### Get medication request [#get-medication-request]

Retrieve medication request details from Medplum

This action can be previewed in Studio before you publish.

| Input       | Type     | Required | Description                                         |
| ----------- | -------- | -------- | --------------------------------------------------- |
| Resource ID | `string` | Yes      | The resource ID of the MedicationRequest in Medplum |

Returns:

| Data point           | Type     |
| -------------------- | -------- |
| `dosageInstructions` | `string` |
| `intent`             | `string` |
| `medicationDisplay`  | `string` |
| `medicationRequest`  | `json`   |
| `patientId`          | `string` |
| `priority`           | `string` |
| `status`             | `string` |

### Get patient [#get-patient]

Retrieve patient details from Medplum

This action can be previewed in Studio before you publish.

| Input      | Type     | Required | Description                              |
| ---------- | -------- | -------- | ---------------------------------------- |
| Patient ID | `string` | Yes      | The identifier of the patient in Medplum |

Returns:

| Data point         | Type     |
| ------------------ | -------- |
| `patientData`      | `json`   |
| `patientDob`       | `date`   |
| `patientFirstName` | `string` |
| `patientGender`    | `string` |
| `patientLastName`  | `string` |

### Get service request [#get-service-request]

Retrieve service request details from Medplum

This action can be previewed in Studio before you publish.

| Input       | Type     | Required | Description                                      |
| ----------- | -------- | -------- | ------------------------------------------------ |
| Resource ID | `string` | Yes      | The resource ID of the ServiceRequest in Medplum |

Returns:

| Data point               | Type     |
| ------------------------ | -------- |
| `intent`                 | `string` |
| `patientId`              | `string` |
| `priority`               | `string` |
| `serviceRequestResource` | `json`   |
| `status`                 | `string` |

### Search patient [#search-patient]

Search for patients in Medplum using parameters

This action can be previewed in Studio before you publish.

| Input            | Type     | Required | Description                                                     |
| ---------------- | -------- | -------- | --------------------------------------------------------------- |
| Search Parameter | `string` | Yes      | FHIR search parameter (e.g., "identifier", "name", "birthdate") |
| Search Value     | `string` | Yes      | Value to search for (e.g., "12345" for identifier)              |

Returns:

| Data point      | Type   |
| --------------- | ------ |
| `patientData`   | `json` |
| `searchResults` | `json` |

### Submit questionnaire response [#submit-questionnaire-response]

Creates a questionnaire response in Medplum for the latest submitted form in the current step

| Input      | Type     | Required | Description                                                        |
| ---------- | -------- | -------- | ------------------------------------------------------------------ |
| Patient ID | `string` | Yes      | The identifier of the patient in Medplum to assign the response to |

Returns:

| Data point                 | Type     |
| -------------------------- | -------- |
| `questionnnaireResponseId` | `string` |

## Webhooks [#webhooks]

Medplum can send these 2 events into Awell, where each one can start a care flow or move a patient along. Point the webhook at the URL Studio shows you when you enable it.

### `observationCreated` [#observationcreated]

Payload:

| Data point      | Type     |
| --------------- | -------- |
| `observation`   | `json`   |
| `observationId` | `string` |

### `patientCreated` [#patientcreated]

Payload:

| Data point  | Type     |
| ----------- | -------- |
| `patientId` | `string` |

## Setup and notes [#setup-and-notes]

Medplum is the open source healthcare developer platform that helps you build, test, and deliver any healthcare product or service.

### Extension settings [#extension-settings]

The following settings are required to configure the Medplum extension:

* \*\*Client ID: Used to authenticate with Medplum's API (required)
* Client Secret: Used to authenticate with Medplum's API (required)
* Base URL\*\*: Optional custom base URL for your Medplum server (e.g., `https://api.medplum.com/`). Leave empty to use the default Medplum server.

## Where this page comes from [#where-this-page-comes-from]

The settings, actions, inputs, outputs and webhooks above are generated from the
extension's own code, at `@awell-health/awell-extensions` v2.1.159. They match what the
platform actually does rather than a description of it.

Field-level detail also appears in Awell Studio when you configure the action.
Something wrong or missing? Email [support@awellhealth.com](mailto:support@awellhealth.com).
