MEDPLUM_BASE_URL, MEDPLUM_CLIENT_ID, MEDPLUM_CLIENT_SECRET) in ConfigView when setup is complete.
Medplum holds protected health information (PHI). ConfigView does not read it. The integration collects project-administration records only: the project itself, its members, client applications, bots, access policies and subscriptions. It never searches or reads a clinical resource (Patient, Observation, Encounter, Condition, MedicationRequest, DiagnosticReport, Claim or any other). Patient-portal memberships (Patient and RelatedPerson profiles) are not listed at all: ConfigView stores only a count of them by profile type, with no name, email or identifier. You should also give the ConfigView client an access policy that cannot read clinical data (Step 2), so the guarantee does not rest on ConfigView alone. ConfigView only reads. It never creates, changes or deletes anything in Medplum.
What you need
- A Medplum project (hosted at
api.medplum.com, or self-hosted) and a project admin to create a client application and an access policy - Nothing else to enable. If the client’s access policy leaves a resource type out, that collector skips itself and its table stays empty. That does not count as a failure.
Step 1: Open the Medplum page in ConfigView
Open ConfigView in a second browser tab and leave it open:https://{companyname}.configview.com/admin/integrations/medplum
Step 2: Create a read-only access policy
In the Medplum app, open Project → Admin → Access Policies and create a policy namedConfigView read-only with one rule for each of these resource types, each limited to read and search (no create, update or delete):
Do not add
Patient, Observation, Encounter or any other clinical resource type. ConfigView never needs them. Medplum then refuses any request for clinical data from this client, whatever ConfigView does.
Step 3: Create the client application
- In Medplum open Project → Admin → Clients and click New
- Name it
ConfigViewand save - Copy the Client ID and Client secret
- Open Project → Admin → Users (or Members), open the ConfigView client’s membership and set its Access Policy to
ConfigView read-only. Do not make the client a project admin - Switch to the ConfigView tab and paste the ID and secret into
MEDPLUM_CLIENT_IDandMEDPLUM_CLIENT_SECRETunder Credentials, then click the save icon for each - In
MEDPLUM_BASE_URLenterhttps://api.medplum.comfor the hosted service, or the base URL of your self-hosted server (the address that serves/oauth2/tokenand/fhir/R4). Leave off/fhir/R4
Step 4: Connect and verify
- Back on
https://{companyname}.configview.com/admin/integrations/medplum, confirm the credentials show as saved - Click Connect. ConfigView creates its tables and schedules every collector at your default run time. Stop any you don’t want under Collectors:
- Click Verify now. The health check reads all three secrets, gets a token, reads your project, and tries one record from each of the other areas. It only searches administration resource types.
- Token fails with 400, 401 or 403. The client ID or secret is wrong, the secret was rotated, or the client application is disabled. Check
MEDPLUM_BASE_URLtoo: a self-hosted server must answer at<base>/oauth2/token. - Project fails with 403. The client’s access policy does not allow reading
Project. Add it to the policy from Step 2. - An area shows as skipped. Medplum answered “forbidden” for that resource type. Add it to the access policy if you want that area, otherwise there is nothing to fix.
Data Tables
Once the scripts run, these tables are created in your database. Each table has arun_at column and a raw_json column, which holds a trimmed copy of the record (see What isn’t collected). Each table keeps only the newest run.
Things worth knowing
Patients are counted, never listed. A Medplum project can have many thousands of patient-portal memberships. ConfigView asks Medplum only for the total (and how many are inactive), so no patient name, email or ID is ever requested. Staff, bot and client memberships are listed because they are the people and systems that administer and integrate with the project. Bots and client applications can be admins. An admin flag on a bot or client application’s membership lets code manage members, policies and clients.medplum_project_users shows the profile type next to the admin flag so you can see them.
Subscriptions show where data can leave. Each webhook or email subscription is a place records from Medplum are sent. ConfigView stores the host, the resource type that triggers it and whether it includes the record, so you can check each destination has the agreements you need.
An access policy with a wildcard gives the whole record. A policy with a * resource type, or one that lets holders create, change or delete, is listed with how many memberships hold it.
No audit log or login history. ConfigView does not collect Medplum audit events: they are high volume, they point at patients, and they cannot be limited to administrative actions. Sign-in history is not exposed to project admins either. Use Medplum’s own audit features for those.
Rate limit. Medplum’s hosted service allows 6,000 requests a minute per IP (60,000 on paid plans) and gives each user a FHIR point budget in which a search costs 20 points. Each ConfigView collector paces itself at 30 requests a minute, follows pagination links, and waits as long as Medplum’s RateLimit header asks after a 429. Self-hosted servers set their own limits.
What isn’t collected
- Any clinical resource, and the name, email, identifier or profile of any Patient or RelatedPerson membership (only counts are kept)
- Client application secrets (including a retiring secret and an identity provider client secret), project secrets and setting values, and Google and reCAPTCHA site secrets. Only whether a secret is set, and the names of project secrets, are stored
- Bot source code and compiled code
- Subscription headers (which often carry an auth token), the full endpoint URL (only its host is stored) and the filter text of the subscription criteria (only the triggering resource type)
- Access policy criteria strings, and external IDs on memberships
- Audit events, login history and user configurations