Get started
Introduction
The Protearc Platform API lets your platform order Protearc blood-protein panels for the people you serve, read their released reports, and see what changed against each person's own baseline. It does not give diagnoses: Protearc reports findings, and the diagnosis stays with the clinician.
What you can do
Place orders
POST /v1/orders creates an order for a member, identified by your own reference. A name or birth date is never accepted.
Retrieve reports
GET /v1/members/{member_ref}/reports returns released results as JSON, or as a FHIR R4 bundle with ?format=fhir.
Receive webhooks
POST /v1/webhooks registers an endpoint. Protearc sends signed events, such as result.released, to it.
Embed the member view
POST /v1/embeds issues a short-lived token for the branded, read-only member view.
Base URL
Every route is under the path /v1 on the API host. The examples on these pages use http://localhost:8000, where the local demo serves the API. Send JSON, and send your service token as a bearer token on every request (see Authentication).
The order body takes exactly four fields besides your reference: sex (F or M), age_band (40-49, 50-59 or 60-69) and panel (brain or inflammation). Ordering again with the same platform_ref adds a requisition to the same member.
curl -X POST http://localhost:8000/v1/orders \
-H "Authorization: Bearer ptk_sandbox_meridian_demo" \
-H "Content-Type: application/json" \
-d '{"platform_ref": "meridian-user-1", "sex": "F", "age_band": "50-59", "panel": "brain"}'import requests
r = requests.post(
"http://localhost:8000/v1/orders",
headers={"Authorization": "Bearer ptk_sandbox_meridian_demo"},
json={"platform_ref": "meridian-user-1", "sex": "F", "age_band": "50-59", "panel": "brain"},
)
print(r.status_code, r.json())const r = await fetch("http://localhost:8000/v1/orders", {
method: "POST",
headers: {
Authorization: "Bearer ptk_sandbox_meridian_demo",
"Content-Type": "application/json",
},
body: JSON.stringify({ platform_ref: "meridian-user-1", sex: "F", age_band: "50-59", panel: "brain" }),
});
console.log(r.status, await r.json());{
"member_id": "PA-482913",
"requisition_code": "RQ-3F9A1C20"
}Sandbox
You can try every call above without real data. The Sandbox page has a ready-made token that reaches only synthetic members.