Python SDK for HealthCloud APIs.
Project description
HealthCloud SDK for Python
Typed Python SDK for HealthCloud services and the HealthCloud Connectors gateway.
Installation
pip install healthcloud-sdk
For local development:
pip install -e ./packages/pip
Python 3.9 or newer is required.
Create and authenticate a client
The current API uses typed request objects. Authentication returns typed response
objects; after registration or login, explicitly share the access token with the
whole SDK by calling set_access_token.
from healthcloud import HCSDK, LoginRequest, RegisterPatientRequest
sdk = HCSDK(environment="dev", tenant_id="your-tenant-id")
registration = sdk.auth.register(RegisterPatientRequest(
first_name="Jane",
last_name="Doe",
email="patient@example.com",
password="SecurePassword123!",
date_of_birth="1990-06-15",
sex_at_birth="female",
))
token = registration.access_token
if not token:
login = sdk.auth.login(LoginRequest(
email="patient@example.com",
password="SecurePassword123!",
))
token = login.access_token
sdk.set_access_token(token)
In UAT and production, complete email verification before login when the register response reports that verification is required.
from healthcloud import VerifyOtpRequest
sdk.auth.verify_email(VerifyOtpRequest(
user_id=registration.cognito_sub,
otp="123456",
))
Service clients
One HCSDK instance exposes these clients:
sdk.auth
sdk.patient
sdk.vitals
sdk.diagnostics
sdk.assistant
sdk.communications
sdk.fieldagent
sdk.mcp
sdk.connectivity
# Service clients whose public SDK surface is currently connect-only:
sdk.appointments
sdk.ehr
sdk.provider
sdk.rppg
sdk.session
sdk.telehealth
All typed methods accept the request model shown in their signature and return a typed response model. Examples:
from healthcloud import SubmitVitalsRequest, UpdatePhoneRequest
patient = sdk.patient.get_patient("patient-id")
phone = sdk.patient.set_phone(
"patient-id",
UpdatePhoneRequest(phone="+15550001234"),
)
vitals = sdk.vitals.submit(
"patient-id",
SubmitVitalsRequest(
heart_rate=72,
systolic=120,
diastolic=80,
),
)
history = sdk.vitals.get_vitals("patient-id")
tools = sdk.mcp.list_tools("patient")
Use sdk.set_access_token(new_token) whenever a token changes. This updates every
authenticated service client and every connector client on the SDK instance.
Connectors
Connector methods are called through sdk.connectors; they are not raw HTTP helpers.
The package contains 33 connector clients.
Architecture
Connector clients are created in three explicit steps:
- Configure HealthCloud once through
HCSDK(environment, tenant, access token). - Create an isolated connector client with that connector's vendor credentials via
sdk.connectors.<name>.create_client(...). - Call typed operation methods with operation-specific parameters only.
The connector gateway URL is resolved internally from the HealthCloud environment;
applications never pass connector base URLs or the HealthCloud bearer token again
when creating a connector client. Each client holds its vendor credentials only on
that instance and forwards them to the HealthCloud Connectors gateway
(POST /connectors/<slug>/<operation>) with every request. Connector-scoped
secrets cannot be overridden by operation input, and gateway errors are redacted
before being raised.
Create a credential-scoped connector client explicitly. The SDK never reads connector
credentials implicitly; applications can load them from their own secret manager or
the local .env used by integration tests. Do not hardcode credentials in source
code and do not create connector clients in client-side code.
Usage
import os
from healthcloud import HCSDK
sdk = HCSDK(
environment="dev",
tenant_id="your-tenant-id",
access_token="cognito-access-token",
)
athena = sdk.connectors.athena_health.create_client(
secret_key=os.environ["HC_ATHENA_SECRET_KEY"],
practice_id=os.environ["HC_ATHENA_PRACTICE_ID"],
department_id=os.environ["HC_ATHENA_DEPARTMENT_ID"],
provider_id=os.environ["HC_ATHENA_PROVIDER_ID"],
)
patients = athena.search_patients(
last_name="Smith",
limit=5,
)
stripe = sdk.connectors.stripe.create_client(api_key=os.environ["HC_STRIPE_API_KEY"])
stripe_status = stripe.verify_connection()
# Public connector — no vendor credentials required
nppes = sdk.connectors.nppes.create_client()
provider = nppes.verify_provider(npi="1234567890")
# OAuth-style connector
whoop = sdk.connectors.whoop.create_client(
client_id=os.environ["HC_WHOOP_CLIENT_ID"],
client_secret=os.environ["HC_WHOOP_CLIENT_SECRET"],
)
Pass mode="live" only when required; mode="sandbox" is the default for
mode-aware connectors. Calling sdk.set_access_token(...) propagates the new
HealthCloud token to every connector client already created.
Available connectors
The table lists each connector's required credential keyword arguments and the
conventional HC_* environment variable names used by the live test suite
(names only — never commit values). Parameters marked mode? accept
"sandbox" (default) or "live".
| Connector | Purpose | create_client credentials |
Suggested env vars | Called via |
|---|---|---|---|---|
anthropic |
Anthropic (Claude) LLM completions | api_key, mode? |
HC_ANTHROPIC_API_KEY |
sdk.connectors.anthropic.create_client(...) |
apple_auth |
Sign in with Apple token exchange | team_id, client_id, key_id, redirect_uri, private_key |
HC_APPLE_AUTH_TEAM_ID, HC_APPLE_AUTH_CLIENT_ID, HC_APPLE_AUTH_KEY_ID, HC_APPLE_AUTH_REDIRECT_URI, HC_APPLE_AUTH_PRIVATE_KEY |
sdk.connectors.apple_auth.create_client(...) |
athena_health |
athenahealth EHR (patients, appointments) | secret_key, practice_id, department_id, provider_id, mode? |
HC_ATHENA_SECRET_KEY, HC_ATHENA_PRACTICE_ID, HC_ATHENA_DEPARTMENT_ID, HC_ATHENA_PROVIDER_ID |
sdk.connectors.athena_health.create_client(...) |
cal |
Cal.com scheduling and bookings | api_key |
HC_CAL_API_KEY |
sdk.connectors.cal.create_client(...) |
carequality |
Carequality health information exchange | api_key, initiator_url |
HC_CAREQUALITY_API_KEY, HC_CAREQUALITY_INITIATOR_URL |
sdk.connectors.carequality.create_client(...) |
cms |
CMS (Centers for Medicare & Medicaid) data | api_key |
HC_CMS_API_KEY |
sdk.connectors.cms.create_client(...) |
connecture |
ConnectureDRX Medicare plan shopping | basic_token, client_key, client_secret |
HC_CONNECTURE_BASIC_TOKEN, HC_CONNECTURE_CLIENT_KEY, HC_CONNECTURE_CLIENT_SECRET |
sdk.connectors.connecture.create_client(...) |
elevenlabs |
ElevenLabs text-to-speech | api_key |
HC_ELEVENLABS_API_KEY |
sdk.connectors.elevenlabs.create_client(...) |
fedex |
FedEx shipping and tracking | client_id, client_secret, account_number, mode? |
HC_FEDEX_CLIENT_ID, HC_FEDEX_CLIENT_SECRET, HC_FEDEX_ACCOUNT_NUMBER |
sdk.connectors.fedex.create_client(...) |
google_ai |
Google AI (Gemini) LLM | api_key |
HC_GOOGLE_AI_API_KEY |
sdk.connectors.google_ai.create_client(...) |
google_places |
Google Places search/geocoding | api_key, mode? |
HC_GOOGLE_PLACES_API_KEY |
sdk.connectors.google_places.create_client(...) |
grok |
xAI Grok LLM | api_key |
HC_GROK_API_KEY |
sdk.connectors.grok.create_client(...) |
healthie |
Healthie EHR / practice management | secret_key, mode?, shard_id? |
HC_HEALTHIE_SECRET_KEY, HC_HEALTHIE_AUTHORIZATION_SHARD |
sdk.connectors.healthie.create_client(...) |
impilo |
Impilo remote patient monitoring logistics | api_key |
HC_IMPILO_API_KEY |
sdk.connectors.impilo.create_client(...) |
junction |
Junction (Vital) lab testing and wearables | api_key |
HC_JUNCTION_API_KEY |
sdk.connectors.junction.create_client(...) |
nppes |
NPPES NPI registry lookup (public, no credentials) | — | — | sdk.connectors.nppes.create_client() |
openai |
OpenAI LLM completions | api_key |
HC_OPENAI_API_KEY |
sdk.connectors.openai.create_client(...) |
oura |
Oura ring wearable data (OAuth) | client_id, client_secret, mode? |
HC_OURA_CLIENT_ID, HC_OURA_CLIENT_SECRET |
sdk.connectors.oura.create_client(...) |
plaid |
Plaid identity / financial verification | client_id, secret, template_id, mode? |
HC_PLAID_CLIENT_ID, HC_PLAID_SECRET, HC_PLAID_TEMPLATE_ID |
sdk.connectors.plaid.create_client(...) |
quest |
Quest Diagnostics — REST-style orders/results/catalog and HL7 orders, results, compendium | client_id, client_secret, mode? |
HC_QUEST_CLIENT_ID, HC_QUEST_CLIENT_SECRET |
sdk.connectors.quest.create_client(...) |
salesforce |
Salesforce CRM records and queries | client_id, client_secret, username, password, mode? |
HC_SALESFORCE_CLIENT_ID, HC_SALESFORCE_CLIENT_SECRET, HC_SALESFORCE_USERNAME, HC_SALESFORCE_PASSWORD |
sdk.connectors.salesforce.create_client(...) |
scrapfly |
Scrapfly web scraping | api_key |
HC_SCRAPFLY_API_KEY |
sdk.connectors.scrapfly.create_client(...) |
senaite |
SENAITE LIMS (lab information management) | base_url, username, password |
HC_SENAITE_BASE_URL, HC_SENAITE_USERNAME, HC_SENAITE_PASSWORD |
sdk.connectors.senaite.create_client(...) |
sendgrid |
SendGrid transactional email | api_key, mode? |
HC_SENDGRID_API_KEY |
sdk.connectors.sendgrid.create_client(...) |
steadymd |
SteadyMD telehealth clinician network | api_key or token (exactly one), mode?, api_url? |
HC_STEADYMD_API_KEY or HC_STEADYMD_TOKEN, HC_STEADYMD_API_URL |
sdk.connectors.steadymd.create_client(...) |
stedi |
Stedi insurance eligibility (X12/EDI) | api_key |
HC_STEDI_API_KEY |
sdk.connectors.stedi.create_client(...) |
stripe |
Stripe payments and subscriptions | api_key |
HC_STRIPE_API_KEY |
sdk.connectors.stripe.create_client(...) |
twilio |
Twilio SMS / voice messaging | account_sid, auth_token, from_number, mode? |
HC_TWILIO_ACCOUNT_SID, HC_TWILIO_AUTH_TOKEN, HC_TWILIO_FROM_NUMBER |
sdk.connectors.twilio.create_client(...) |
uber |
Uber Direct / Health rides and deliveries | client_id, client_secret, customer_id, mode? |
HC_UBER_CLIENT_ID, HC_UBER_CLIENT_SECRET, HC_UBER_CUSTOMER_ID |
sdk.connectors.uber.create_client(...) |
whoop |
WHOOP wearable data (OAuth) | client_id, client_secret, mode? |
HC_WHOOP_CLIENT_ID, HC_WHOOP_CLIENT_SECRET |
sdk.connectors.whoop.create_client(...) |
zocdoc |
Zocdoc provider search and booking | api_key |
HC_ZOCDOC_API_KEY |
sdk.connectors.zocdoc.create_client(...) |
zus |
Zus Health aggregated patient data | client_id, client_secret, mode? |
HC_ZUS_CLIENT_ID, HC_ZUS_CLIENT_SECRET |
sdk.connectors.zus.create_client(...) |
Note: the single
questconnector covers both the REST-style order/results/catalog operations and the HL7 message-based operations, all routing to the gateway'squestslug with the same credentials.
Errors and cleanup
from healthcloud import HealthCloudHTTPError, HealthCloudNetworkError
try:
stripe.verify_connection()
except HealthCloudHTTPError as exc:
print(exc.status_code, str(exc))
except HealthCloudNetworkError as exc:
print(str(exc))
finally:
sdk.close()
Verification
From packages/pip:
.\.venv\Scripts\python.exe -m pytest -q -m "not live"
Live integration tests are opt-in and use package methods:
$env:HC_RUN_INTEGRATION="true"
$env:HC_ALLOW_REGISTER="true"
.\.venv\Scripts\python.exe -m pytest -q -m live
Do not commit .env files or connector credentials.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file healthcloud_sdk-0.7.1.tar.gz.
File metadata
- Download URL: healthcloud_sdk-0.7.1.tar.gz
- Upload date:
- Size: 28.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
974c6b113d368df0e4c737e763c2bb05c9a2cc23dc2184799649dcd90fbe72e2
|
|
| MD5 |
bbb7f7ebbff374bdababedff8b0cfe2e
|
|
| BLAKE2b-256 |
58e670ef2f16aa5e17b743c261e826a3d14295b9fe2fe9b47184f6a77daba4a5
|
File details
Details for the file healthcloud_sdk-0.7.1-py3-none-any.whl.
File metadata
- Download URL: healthcloud_sdk-0.7.1-py3-none-any.whl
- Upload date:
- Size: 210.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b282c97bfd2a3670d1d19a49ac622676a56c33519503c360f3a0fe996d20302
|
|
| MD5 |
248faee1ae180c160d92ac69848737e3
|
|
| BLAKE2b-256 |
a0c0e18a6bba4d58fba61ec88bd1de4df4cc500da64f1bb666b63bc2400515d2
|