Free payer sandbox
A payer to test your prior authorization against, free and open now
Building the EHR or app side of CMS-0057-F? You need a payer that answers CDS Hooks, hands out questionnaires and decides PAS requests. test.perfuse.health is one: Da Vinci CRD, DTR and PAS on invented data, with published test keys, so you can start in a minute without asking anyone for an account.
In one minute
Order, documentation, request, decision
What it is
A public Perfuse server playing a health plan, the "Perfuse Test Plan". It runs the same code as a real deployment, with test data only: no real plan, member or person.
Why it exists
No live payer lets unknown code near its production endpoints, and you cannot test an EHR's prior authorization without someone on the other side.
How you use it
Sign with the sandbox's published keys, call the endpoints below, or run the example script, which does the whole round and prints what the plan answered.
- Da Vinci CRD 2.2.1, DTR 2.2.0 and PAS 2.2.1, the same server Inferno's suites pass against
(results), and the 2.1.0 of each: send CRD's
davinci-crd.requestedVersionof2.1, or PAS and DTR profiles ending|2.1.0, and the answers come back in 2.1.0 - SMART Backend Services and SMART App Launch, so your client authorizes as it would with a real payer
- Approve, pend, deny and "documentation needed" answers, chosen by the order's code
# Node 18 or newer, nothing to install
curl -O https://perfuse.health/sandbox/try-sandbox.mjs
node try-sandbox.mjs
1. token: ok, scopes system/*.rs system/Claim.c
2. CRD cards:
- Home oxygen equipment: covered, prior authorization required
- system action: update Record the coverage information on the order
3. DTR package: 200 Questionnaire "Home oxygen documentation (test plan)", QuestionnaireResponse
4. PAS $submit: 200 outcome complete, review action A1, authorization PA-9B1579A6
The script is about 100 lines you can read: a token, the CRD order-sign hook for a portable oxygen system, the DTR questionnaire package for the order CRD returned, and the PAS guide's own referral example submitted. Review actions are X12's: A1 approved, A3 denied, A4 pended, A6 modified.
Endpoints
Where to point your client
| What | Address |
|---|---|
| FHIR base (R4) | https://test.perfuse.health/fhir |
| CapabilityStatement | https://test.perfuse.health/fhir/metadata |
| SMART configuration | https://test.perfuse.health/fhir/.well-known/smart-configuration |
| Token endpoint | https://test.perfuse.health/auth/token |
| CRD (CDS Hooks discovery) | https://test.perfuse.health/cds-services: order-sign, order-select,
order-dispatch, appointment-book |
| DTR | POST /fhir/Questionnaire/$questionnaire-package, $next-question (adaptive
forms), $log-questionnaire-errors |
| PAS | POST /fhir/Claim/$submit, Claim/$inquire, subscriptions for pended
answers |
| CDex attachments | POST /fhir/Claim/$submit-attachment |
Signing in
Published test keys, so there is nothing to ask for
The sandbox has a client whose private keys are public on purpose, as Inferno publishes its own. Everything they reach is invented, and the client may read everything but write only what CRD, DTR and PAS send.
- Backend Services token: client id
sandbox, aclient_credentialsrequest with a JWT assertion signed by one of the keys (ES384 or RS384), audience the token endpoint - CRD hook calls: a CDS Hooks JWT with issuer
https://perfuse.health/sandboxand audience the service's URL, for examplehttps://test.perfuse.health/cds-services/crd-order-sign - Public keys: /sandbox/jwks.json. Private keys: /sandbox/private-jwks.json
- Your own client (your JWKS URL, or redirect URIs for an app launch): open an issue and we add it
The test plan's member
Amy Shaw, born 1987-02-20, subscriber id 123, Coverage cmember, Patient
pmember. Send her coverage in the hook's prefetch and the plan recognises her.
What the plan answers
| Order | Answer |
|---|---|
| Home oxygen, HCPCS E0424, E0431, E1390 | Covered, approval needed, a questionnaire (Amy already holds an approval for E0424) |
| Physical therapy evaluation, CPT 97161-97163 | Covered, no approval, keep notes on file |
| Office visit, CPT 99213, 99214 | Covered, no approval |
| Cosmetic procedure, CPT 15830 | Not covered |
| PAS: consultation (X12 service type 3) | Approved (A1) |
| PAS: physical therapy (PT) | Approved (A1), up to six visits |
| PAS: MRI (62) | Modified (A6): an X-ray (4) approved instead |
| PAS: surgery (2) | Pended (A4) for a clinician, documents asked for |
| PAS: dialysis (76) | Denied (A3): not a benefit |
The full rules are in the repository.
Plainly
What the sandbox is not
- Not a real health plan, and not a place for real patient data: anything sent is visible to other testers. Use invented people only.
- Not a guarantee about any real payer. Each plan has its own rules and its own documentation; passing here means your client speaks the standards, not that a given plan will approve.
- Not certification. Perfuse is tested with Inferno in public; nothing here is an ONC certification or a CAQH CORE certification.
- Shared and limited: writes are capped at 300 a minute from one address, and what testers send may be cleared when the server is upgraded.
- Want the same thing on your own computer or network? Download Perfuse, free under Apache 2.0,
and load the same rules with
deploy/test-instancefrom the repository.