One API.
Every connected hospital.

Integrating with TMP means implementing two things: a webhook endpoint that receives session requests, and calls to TMP Hub API to manage session state and post results back to the EHR.

What you will build

The integration is built on two pillars: receiving structured session context from TMP, and returning results back through TMP to the EHR.

📨

Session webhook

TMP calls your HTTPS endpoint when a healthcare professional starts a session. You receive structured patient context and respond with accept, redirect, or reject.

🔄

Session lifecycle API

Your solution owns the session state. Use TMP Hub API to push status updates (Accepted, In-Progress, Completed) as the care episode progresses.

📄

Result posting

Post results at any point during or after a session. TMP routes them directly into the patient's EHR record. Supported types: PDF report, structured data, dashboard link.

🔐

OAuth2 authentication

All calls to TMP Hub API use an OAuth2 Bearer token obtained with your client credentials. One token request covers all Hub API operations.

How to go live on TMP

Five steps from first contact to a live, billable integration in production.

01

Request TMP partner credentials

Contact support@transmuralplatform.eu to receive your sandbox credentials: a client_id, client_secret, and access to the TMP sandbox environment. Sandbox sessions are never billed and allow you to run the full lifecycle before any live patient is involved.

02

Implement the session webhook

TMP Portal calls your configured HTTPS endpoint whenever a healthcare professional initiates a session with your solution. The POST body contains structured patient context: patient identifier, prescribing professional, organisation, requested care path, and any supplementary fields you have configured.

Based on the response your endpoint returns, TMP decides how to proceed with the session using one of the three options below.

Accept

Return HTTP 200 with an empty body. TMP confirms the session and marks it as Accepted. No further HCP interaction is needed.

Ask for more information

Return HTTP 200 with {"url": "https://..."}. TMP routes the HCP to your flow where the missing information is collected before the session continues.

Once you have collected everything you need, the session is not accepted automatically. You must explicitly accept it yourself with a PUT /prescription call that sets status to accepted.

Reject

Return a non-200 status such as 401 or 404. Optionally include {"message": "..."} to explain why the request was not accepted.

The full request shape is documented in the provider request OpenAPI spec.

03

Manage session state via TMP Hub API

Your solution owns the session state throughout the care episode. Authenticate once using your client credentials to obtain a Bearer token, then use that token on all TMP Hub API calls.

Action Method & path Notes
Obtain access token POST /auth/providers Basic auth (base64 client_id:client_secret); returns a Bearer token
Update session status PUT /prescription Body contains telemonitoringId, status, and optional attachments and carepath

All status updates and result postings use the same PUT /prescription endpoint. Include the desired status, any attachments, and an optional carepath in the body. The telemonitoringId in the body identifies the session; there is no path parameter.

04

Post results to TMP

Results are included as attachments on any PUT /prescription call. You can post interim results mid-session and a final result when you set status to completed. TMP routes each result directly into the patient's EHR record.

📄

PDF report

Human-readable session summary. TMP shares only the metadata and URI; the EHR downloads the PDF directly from your storage. Include MD5 and content-length to prevent corruption.

{
  "telemonitoringId": "tm-8f3ac2",
  "status": "completed",
  "attachments": [
    {
      "id": "pdf",
      "name": "Telemonitoring Report",
      "contentMD5": "f2fd2ddd34eebc9d039f5e693b95a61c",
      "contentLength": 184320,
      "uri": "https://your-storage.example.com/reports/8f3ac2.pdf?token=0ba1b31c"
    }
  ]
}
🧬

Structured data

Structured attachment for carepath data and observations. Required for care paths so EHRs can parse, visualise, and re-use the information beyond a static document.

{
  "telemonitoringId": "tm-8f3ac2",
  "status": "in-progress",
  "carepath": "diabetes-followup",
  "attachments": [
    {
      "id": "summary",
      "name": "Patient Observation",
      "contentType": "application/fhir+json",
      "contentMD5": "9b3f1a7c2e6d4408b1c6a2f9d0e5b3aa",
      "contentLength": 4096,
      "uri": "https://your-storage.example.com/fhir/8f3ac2/observation-1"
    }
  ]
}
📊

Dashboard link

A provider-managed URI that the EHR can embed or open for a richer, live view of the patient data. Useful when static reports are insufficient.

{
  "telemonitoringId": "tm-8f3ac2",
  "status": "in-progress",
  "attachments": [
    {
      "id": "dashboard",
      "name": "Patient dashboard",
      "contentType": "x-tm-dashboard",
      "uri": "https://your-storage.example.com/dashboard/8f3ac2?token=9c21ffa0"
    }
  ]
}
Securing your data
  • Use signed URIs or time-limited tokens on attachment links
  • TMP adds its own unique token to each attachment link shared with the EHR and provides an API for providers to validate the token when the attachment is fetched
  • Limit access by time or number of reads where appropriate
  • Provide storage DNS hostnames to TMP so EHRs can whitelist them
05

Configure your provider profile and go live

Once the webhook and Hub API flows are validated in sandbox, TMP activates your provider based on a compact configuration set. After activation, your solution appears in TMP Marketplace across all connected hospitals.

Configuration field What TMP needs from you
Name & description Application name and short description shown to HCPs in TMP Marketplace
Care paths Supported HL7-defined care paths your solution covers
Context fields Which patient and prescriber fields your webhook needs to receive
Webhook URI Your HTTPS endpoint that TMP calls when a session is started
Fixed headers Any static authorization or routing headers TMP should include on webhook calls
Action URI (optional) Endpoint for TMP to send stop or cancel actions, if supported
Patient authentication (optional) Whether TMP should generate a patient token and whether you support a deep-link

Session lifecycle

Every session moves through a defined set of states. Your solution drives the transitions; TMP makes the current state visible to the healthcare professional in real time.

Requested
TMP sets on session creation
Accepted
Set by your webhook response (HTTP 200)
In-Progress
PUT /prescription · status: in-progress
Completed
PUT /prescription · status: completed
Cancelled

Initiated by the HCP from TMP Portal. TMP can forward the action to your action URI if configured.

Stopped

Initiated by the HCP from TMP Portal. Same action forwarding as cancel, if you support it.

Optional capabilities

Beyond the core request and results flow, TMP supports deeper integration patterns for providers that need them.

🔑

Patient authentication token

TMP can generate a unique patient token linked to a session. Your solution verifies that token with TMP via the patient authentication API, avoiding SSIN-based login while staying GDPR-compliant.

📱

Patient deep-link

Configure a deep-link template that includes the telemonitoringId and patient auth token. TMP Portal can display it as a QR code so the patient continues directly into your app or onboarding flow.

🖥️

Dashboard launch endpoint

Expose an endpoint that TMP calls to retrieve an authenticated dashboard URL for the HCP. TMP opens that URL in context so the clinician gets a live, provider-managed view without leaving the EHR workflow. See the dashboard URL spec.

⏹️

Stop and cancel actions

When an HCP cancels or stops a session, TMP can forward that action to a configured action URI on your side. You apply your business rules and push the resulting new state back via TMP Hub API.

Ready to start your integration?

Request sandbox credentials and we will guide you through the webhook and Hub API setup.