Patient Package Subscriptions API
Overview
The Patient Package Subscriptions API provides endpoints for managing patient subscriptions to care packages. This allows patients to subscribe to service packages that include multiple healthcare services at discounted rates.
Base URL: /api
Authentication: Bearer token required
Headers:
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}Endpoints
1. List All Subscriptions
List all patient package subscriptions across the tenant with optional filters.
Endpoint: GET /identity/patient_package_subscriptions
Query Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
patient_facility_id | string | No | - | Filter by patient facility ID |
patient_id | string | No | - | Filter by patient ID |
service_package_id | string | No | - | Filter by service package ID |
facility_id | string | No | - | Filter by facility ID |
status | string | No | - | Filter by status (active, expired, cancelled, pending, on_hold) |
include_expired | boolean | No | false | Include expired subscriptions in results |
currently_active | boolean | No | false | Only show currently active subscriptions |
page | integer | No | 1 | Page number |
per_page | integer | No | 25 | Items per page (max 100) |
sort_by | string | No | created_at | Sort column (created_at, start_ts, expiry_ts, status, name) |
sort_order | string | No | desc | Sort order (asc, desc) |
Response: 200 OK
{
"data": [
{
"id": "019c89f1-7a31-7637-ab47-16a0c98c4e45",
"status": "active",
"start_ts": "2025-01-15T10:30:00Z",
"expiry_ts": "2026-01-15T10:30:00Z",
"patient_id": "019c79c4-eae6-7889-a3e2-588b9a02f112",
"patient_facility_id": "019c79c4-eb06-7157-9a0f-7a7f5146b2db",
"service_package_id": "019c89ef-5c6b-774b-8409-a589be298ed1",
"facility_id": "01900002-0000-7000-8000-000000000001",
"name": "Annual Health Checkup Package",
"duration_unit": "days",
"duration_frequency": 365,
"benefits_consumed": 2,
"active": true,
"expired": false
}
],
"meta": {
"request_id": "uuid",
"pagination": {
"total_entries": 50,
"total_pages": 2,
"current_page": 1,
"per_page": 25
}
}
}2. Show Subscription Details
Get detailed information about a specific subscription including service package details.
Endpoint: GET /identity/patient_package_subscriptions/:id
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Subscription ID |
Query Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
view | string | No | detailed | Response view (normal, detailed) |
Response: 200 OK
{
"data": {
"id": "019c89f1-7a31-7637-ab47-16a0c98c4e45",
"status": "active",
"start_ts": "2025-01-15T10:30:00Z",
"expiry_ts": "2026-01-15T10:30:00Z",
"patient_id": "019c79c4-eae6-7889-a3e2-588b9a02f112",
"patient_facility_id": "019c79c4-eb06-7157-9a0f-7a7f5146b2db",
"service_package_id": "019c89ef-5c6b-774b-8409-a589be298ed1",
"facility_id": "01900002-0000-7000-8000-000000000001",
"name": "Annual Health Checkup Package",
"duration_unit": "days",
"duration_frequency": 365,
"benefits_consumed": 2,
"remaining_benefits": 8,
"active": true,
"expired": false,
"service_package": {
"id": "019c89ef-5c6b-774b-8409-a589be298ed1",
"name": "Annual Health Checkup Package",
"display_name": "Complete Health Package",
"package_type": "health_checkup",
"category": "wellness",
"is_active": true,
"total_price": 15000,
"currency": "INR",
"display": "Complete Health Package",
"available": true,
"formatted_price": "₹15,000"
}
},
"meta": {
"request_id": "uuid"
}
}3. List Subscriptions by Patient Facility
List all subscriptions for a specific patient facility.
Endpoint: GET /clinical/patient_facilities/:patient_facility_id/package_subscriptions
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
patient_facility_id | string | Yes | Patient Facility ID |
Query Parameters: Same as List All Subscriptions
Response: 200 OK
Same response format as List All Subscriptions.
4. List Subscriptions by Patient
List all subscriptions for a specific patient across all facilities.
Endpoint: GET /clinical/patients/:patient_id/package_subscriptions
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
patient_id | string | Yes | Patient ID |
Query Parameters: Same as List All Subscriptions
Response: 200 OK
Same response format as List All Subscriptions.
5. List Subscriptions by Service Package
List all subscriptions for a specific service package.
Endpoint: GET /identity/service_packages/:service_package_id/subscriptions
Path Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service_package_id | string | Yes | Service Package ID |
Query Parameters: Same as List All Subscriptions
Response: 200 OK
Same response format as List All Subscriptions.
Data Models
Subscription Status
| Status | Description |
|---|---|
pending | Subscription created but not yet active |
active | Subscription is currently active |
expired | Subscription has passed expiry date |
cancelled | Subscription was cancelled |
on_hold | Subscription is temporarily suspended |
Subscription Object Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique subscription identifier |
status | string | Current subscription status |
start_ts | datetime | Subscription start timestamp |
expiry_ts | datetime | Subscription expiry timestamp (null if no expiry) |
patient_id | string | Associated patient ID |
patient_facility_id | string | Associated patient facility ID |
service_package_id | string | Associated service package ID |
facility_id | string | Facility where subscription was created |
name | string | Subscription/package name |
duration_unit | string | Duration unit (days, months, years) |
duration_frequency | integer | Duration value |
benefits_consumed | integer | Number of benefits/services used |
active | boolean | Whether subscription is currently active |
expired | boolean | Whether subscription has expired |
Pagination Response
| Field | Type | Description |
|---|---|---|
total_entries | integer | Total number of records |
total_pages | integer | Total number of pages |
current_page | integer | Current page number |
per_page | integer | Records per page |
Common Use Cases
Get Active Subscriptions for a Patient
GET /clinical/patients/{patient_id}/package_subscriptions?status=active¤tly_active=trueGet Expired Subscriptions
GET /identity/patient_package_subscriptions?status=expired&include_expired=true&sort_by=expiry_ts&sort_order=descGet Subscriptions Near Expiry
GET /identity/patient_package_subscriptions?status=active&sort_by=expiry_ts&sort_order=ascGet All Subscriptions for a Facility
GET /identity/patient_package_subscriptions?facility_id={facility_id}&include_expired=trueError Responses
Validation Error (422)
{
"success": false,
"errors": [
{
"detail": "Patient facility not found"
}
]
}Not Found (404)
{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Unauthorized (401)
{
"error": "Unauthorized"
}Notes
-
Default Filtering: By default, the API excludes expired subscriptions unless
include_expired=trueis explicitly set. -
Active Status: The
activefield in the response considers both the status field and the expiry timestamp. A subscription is active only if:statusisactiveexpiry_tsis null OR in the future
-
Patient Reference: The
patient_idfield contains a UUID reference to the patient in theclinical.patientstable, but patient details are not included in the subscription response. -
Pagination: All list endpoints support pagination. Use
pageandper_pageparameters to navigate through results. -
Sorting: Results can be sorted by any field in the
sort_bylist. Default iscreated_atin descending order (newest first).
Related Endpoints
- Service Packages API:
/api/identity/service_packages- Manage care package definitions - Patient Facilities API:
/api/clinical/patient_facilities- Manage patient-facility associations - Patients API:
/api/clinical/patients- Manage patient records