# generated by fastapi-codegen:
# filename: openapi.yaml
# timestamp: 2025-06-29T07:09:55+00:00
from __future__ import annotations
from datetime import datetime
from enum import Enum
from typing import List, Optional, Union
from uuid import UUID
from pydantic import AnyUrl, BaseModel, Field, RootModel
class AuthConfirmIdentifierType(Enum):
MOBILE = 'MOBILE'
class AuthMeta(BaseModel):
expiry: Optional[str] = Field(None, examples=['2019-12-30T12:01:55Z'])
hint: Optional[str] = None
class AuthenticationMode(Enum):
MOBILE_OTP = 'MOBILE_OTP'
DIRECT = 'DIRECT'
DEMOGRAPHICS = 'DEMOGRAPHICS'
AADHAAR_OTP = 'AADHAAR_OTP'
class CareContextDefinition(BaseModel):
careContextReference: str = Field(..., examples=['Episode1'])
patientReference: str = Field(..., examples=['batman@tmh'])
class CertificateOrKeyGetSchema(BaseModel):
alg: Optional[str] = None
e: Optional[str] = None
kid: Optional[str] = None
kty: Optional[str] = None
n: Optional[str] = None
use: Optional[str] = None
x5c: Optional[List[str]] = None
x5t: Optional[str] = None
x5t_S256: Optional[str] = Field(None, alias='x5t#S256')
class Certs(BaseModel):
keys: Optional[List[CertificateOrKeyGetSchema]] = None
class Status(Enum):
OK = 'OK'
UNKNOWN = 'UNKNOWN'
class ConsentAcknowledgement(BaseModel):
consentId: str = Field(..., examples=['<consent-artefact-id>'])
status: Status
class ConsentArtefactReference(BaseModel):
id: str = Field(..., examples=['<consent-artefact-id>'])
class CareContext(BaseModel):
careContextReference: str = Field(..., examples=['Episode1'])
patientReference: str = Field(..., examples=['hinapatel79@hospital'])
class ConsentManagerPatientID(BaseModel):
id: str = Field(..., examples=['hinapatel@ndhm'])
class ConsentRequest1(BaseModel):
id: UUID = Field(
...,
description='id of the consent-request created',
examples=['f29f0e59-8388-4698-9fe6-05db67aeac46'],
)
class ConsentStatus(Enum):
GRANTED = 'GRANTED'
EXPIRED = 'EXPIRED'
DENIED = 'DENIED'
REQUESTED = 'REQUESTED'
REVOKED = 'REVOKED'
class DateRange(BaseModel):
from_: datetime = Field(..., alias='from')
to: datetime
class Media(Enum):
application_fhir_json = 'application/fhir+json'
class EntryContent(BaseModel):
careContextReference: str = Field(
..., description='care context reference number.', examples=['RVH1008']
)
checksum: str = Field(
..., description='Md5 checksum of the content before encryption'
)
content: str = Field(
...,
description='Encrypted content',
examples=['Encrypted content of data packaged in FHIR bundle'],
)
media: Media = Field(..., description='mimetype of the content.')
class EntryLink(BaseModel):
careContextReference: str = Field(
..., description='care context reference number.', examples=['NCC1701']
)
checksum: str = Field(
..., description='Md5 checksum of the content before encryption'
)
link: str = Field(
...,
description='Encrypted content',
examples=['https://data-from.net/sa2321afaf12e13'],
)
media: Media = Field(..., description='mimetype of the content.')
class Code(Enum):
integer_1000 = 1000
integer_10001 = 10001
class Error(BaseModel):
code: Code
message: str
class ErrorResponse(BaseModel):
error: Optional[Error] = None
class HITypeEnum(Enum):
OPConsultation = 'OPConsultation'
Prescription = 'Prescription'
DischargeSummary = 'DischargeSummary'
DiagnosticReport = 'DiagnosticReport'
class Notification(BaseModel):
consentArtefacts: Optional[List[ConsentArtefactReference]] = Field(
None,
description='if the status is GRANTED or REVOKED, then the consentArtefact references (Ids) must be specified.',
)
consentRequestId: str = Field(..., examples=['<consent-request-id>'])
status: ConsentStatus
class ConsentRequest2(BaseModel):
consentArtefacts: List[ConsentArtefactReference]
id: str = Field(..., examples=['<consent-request-id>'])
status: ConsentStatus
class SessionStatus(Enum):
REQUESTED = 'REQUESTED'
ACKNOWLEDGED = 'ACKNOWLEDGED'
class Status1(Enum):
OK = 'OK'
class Acknowledgement(BaseModel):
eventId: str = Field(..., examples=['subscription event Id'])
status: Status1
class Acknowledgement1(BaseModel):
status: Status1
subscriptionRequestId: str = Field(..., examples=['subscription Id'])
class SubscriptionRequest(BaseModel):
id: UUID = Field(
...,
description='id of the consent-request created',
examples=['f29f0e59-8388-4698-9fe6-05db67aeac46'],
)
class Type(Enum):
HIU = 'HIU'
HIP = 'HIP'
class Notifier(BaseModel):
id: str = Field(..., examples=['tmh'])
type: Type
class SessionStatus1(Enum):
TRANSFERRED = 'TRANSFERRED'
FAILED = 'FAILED'
class HiStatus(Enum):
DELIVERED = 'DELIVERED'
OK = 'OK'
ERRORED = 'ERRORED'
class StatusResponse(BaseModel):
careContextReference: str
description: Optional[str] = None
hiStatus: HiStatus = Field(..., examples=['OK'])
class StatusNotification(BaseModel):
hipId: str = Field(..., examples=['max'])
sessionStatus: SessionStatus1
statusResponses: Optional[List[StatusResponse]] = None
class Status3(Enum):
UP = 'UP'
DOWN = 'DOWN'
class IdentifierType(Enum):
MOBILE = 'MOBILE'
MR = 'MR'
NDHM_HEALTH_NUMBER = 'NDHM_HEALTH_NUMBER'
HEALTH_ID = 'HEALTH_ID'
class OpenIdConfiguration(BaseModel):
jwks_uri: Optional[AnyUrl] = Field(None, examples=['https://ncg-gateway/certs'])
class OrganizationRepresentation(BaseModel):
id: str
class PatientAddress(BaseModel):
district: Optional[str] = None
line: Optional[str] = None
pincode: Optional[str] = None
state: Optional[str] = None
class Type1(Enum):
HIP = 'HIP'
HIU = 'HIU'
class Requester1(BaseModel):
id: str = Field(..., examples=[100005])
type: Type1
class Auth1(BaseModel):
meta: Optional[AuthMeta] = None
mode: AuthenticationMode
transactionId: str
class Requester2(BaseModel):
id: str = Field(..., examples=['100005'])
type: Type1
class Status4(Enum):
GRANTED = 'GRANTED'
DENIED = 'DENIED'
class Status5(Enum):
OK = 'OK'
class Acknowledgement2(BaseModel):
status: Status5
class PatientAuthPurpose(Enum):
LINK = 'LINK'
KYC = 'KYC'
KYC_AND_LINK = 'KYC_AND_LINK'
class PatientAuthRequester(BaseModel):
id: str = Field(..., examples=[100005])
type: Type1
class PatientGender(Enum):
M = 'M'
F = 'F'
O = 'O'
U = 'U'
class Patient(BaseModel):
id: str = Field(..., examples=['hinapatel79@ndhm'])
class Type4(Enum):
HIU = 'HIU'
HIP = 'HIP'
class Requester3(BaseModel):
id: str = Field(..., examples=[100005])
type: Type4
class Query2(BaseModel):
patient: Patient
requester: Requester3
class Patient1(BaseModel):
id: str = Field(..., examples=['hinapatel79@ndhm'])
name: str = Field(..., examples=['Hina Patel'])
class AccessMode(Enum):
VIEW = 'VIEW'
STORE = 'STORE'
QUERY = 'QUERY'
STREAM = 'STREAM'
class Unit(Enum):
HOUR = 'HOUR'
WEEK = 'WEEK'
DAY = 'DAY'
MONTH = 'MONTH'
YEAR = 'YEAR'
class Frequency(BaseModel):
repeats: int
unit: Unit
value: int
class Permission(BaseModel):
accessMode: AccessMode
dataEraseAt: datetime
dateRange: DateRange
frequency: Frequency
class RequestReference(BaseModel):
requestId: UUID = Field(..., description='the requestId that was passed')
class Identifier1(BaseModel):
system: Optional[str] = Field(None, examples=['https://www.mciindia.org'])
type: str = Field(..., examples=['REGNO'])
value: str = Field(..., examples=['MH1001'])
class Requester(BaseModel):
identifier: Optional[Identifier1] = None
name: str = Field(..., examples=['Dr. Manju'])
class SessionRequest(BaseModel):
clientId: str
clientSecret: str
class SessionResponse(BaseModel):
accessToken: Optional[str] = Field(
None,
examples=[
'eyJhbGciOiJSUzI1Ni.IsInR5cCIgOiAiSldUIiwia2lkIiA6ICJrVVp.2MXJQMjRyYXN1UW9wU2lWbkdZQUZIVFowYVZGVWpYNXFLMnNibTk0In0'
],
)
expiresIn: Optional[int] = Field(None, description='In Minutes', examples=[1800])
refreshExpiresIn: Optional[int] = Field(
None, description='In Minutes', examples=[1800]
)
refreshToken: Optional[str] = Field(
None,
examples=[
'eyJhbGciOiJSUzI1Ni.IsInR5cCIgOiAiSldUIiwia2lkIiA6ICJrVVp.2MXJQMjRyYXN1UW9wU2lWbkdZQUZIVFowYVZGVWpYNXFLMnNibTk0In0'
],
)
tokenType: Optional[str] = Field(None, examples=['bearer'])
class SubscriptionCategory(Enum):
LINK = 'LINK'
class SubscriptionPeriod(BaseModel):
from_: datetime = Field(..., alias='from')
to: datetime
class SubscriptionStatus(Enum):
GRANTED = 'GRANTED'
DENIED = 'DENIED'
class TimestampSchema(RootModel[datetime]):
root: datetime = Field(
...,
description='Date time format in UTC, includes miliseconds YYYY-MM-DDThh:mm:ss.vZ',
)
class UsePurpose(BaseModel):
code: str = Field(..., description='From the fixed set, documented at refUri')
refUri: Optional[AnyUrl] = None
text: str
class UuidSchema(RootModel[UUID]):
root: UUID = Field(..., examples=['a1s2c932-2f70-3ds3-a3b5-2sfd46b12a18d'])
class Consent(BaseModel):
id: str
class KeyObject(BaseModel):
expiry: datetime
keyValue: str
parameters: str = Field(..., examples=['Curve25519/32byte random key'])
class AccessTokenValidity(BaseModel):
expiry: TimestampSchema
limit: int = Field(
..., description='number of times, the token can be used', examples=['1']
)
purpose: PatientAuthPurpose
requester: PatientAuthRequester
class AuthConfirmIdentifier(BaseModel):
type: AuthConfirmIdentifierType
value: str = Field(..., examples=['+919800083232'])
class ConsentDetail(BaseModel):
careContexts: List[CareContext]
consentId: UUID
consentManager: OrganizationRepresentation
createdAt: datetime
hiTypes: List[HITypeEnum]
hip: OrganizationRepresentation
hiu: OrganizationRepresentation
patient: ConsentManagerPatientID
permission: Permission
purpose: UsePurpose
requester: Requester
schemaVersion: Optional[str] = None
class ConsentModel(BaseModel):
consentDetail: ConsentDetail
signature: str = Field(
..., examples=['Signature of CM as defined in W3C standards; Base64 encoded']
)
status: ConsentStatus
class ConsentArtefactResponse(BaseModel):
consent: Optional[ConsentModel] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class ConsentFetchRequest(BaseModel):
consentId: str
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class Consent1(BaseModel):
careContexts: Optional[List[CareContextDefinition]] = None
hiTypes: List[HITypeEnum]
hip: Optional[OrganizationRepresentation] = None
hiu: OrganizationRepresentation
patient: ConsentManagerPatientID
permission: Permission
purpose: UsePurpose
requester: Requester
class ConsentRequest(BaseModel):
consent: Consent1
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request.',
examples=['499a5a4a-7dda-4f20-9b67-e24589627061'],
)
timestamp: TimestampSchema
class ConsentRequestInitResponse(BaseModel):
consentRequest: Optional[ConsentRequest1] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class ConsentRequestStatusRequest(BaseModel):
consentRequestId: str
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class EventCategoryDetail(BaseModel):
careContext: CareContextDefinition
hiTypes: List[HITypeEnum]
class HIUConsentNotificationEvent(BaseModel):
notification: Notification
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class HIUConsentNotificationResponse(BaseModel):
acknowledgement: Optional[List[ConsentAcknowledgement]] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class HIUConsentRequestStatus(BaseModel):
consentRequest: Optional[ConsentRequest2] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class HiRequest1(BaseModel):
sessionStatus: SessionStatus
transactionId: UuidSchema
class HIUHealthInformationRequestResponse(BaseModel):
error: Optional[Error] = None
hiRequest: Optional[HiRequest1] = None
requestId: UuidSchema
resp: RequestReference
timestamp: TimestampSchema
class HIUSubscriptionContext(BaseModel):
categories: List[SubscriptionCategory]
hip: Optional[OrganizationRepresentation] = None
period: SubscriptionPeriod
class HIUSubscriptionEventContent(BaseModel):
context: List[EventCategoryDetail]
hip: OrganizationRepresentation
patient: ConsentManagerPatientID
class Event(BaseModel):
category: SubscriptionCategory
content: HIUSubscriptionEventContent
id: UuidSchema
published: TimestampSchema
subscriptionId: str = Field(..., examples=['subscription Id'])
class HIUSubscriptionNotification(BaseModel):
event: Event
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class HIUSubscriptionNotificationAcknowledgment(BaseModel):
acknowledgement: Optional[Acknowledgement] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class HIUSubscriptionRequestNotificationAcknowledgement(BaseModel):
acknowledgement: Optional[Acknowledgement1] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class HIUSubscriptionRequestReceipt(BaseModel):
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
subscriptionRequest: Optional[SubscriptionRequest] = None
timestamp: TimestampSchema
class Notification1(BaseModel):
consentId: UuidSchema
doneAt: datetime
notifier: Notifier
statusNotification: StatusNotification
transactionId: UuidSchema
class HealthInformationNotification(BaseModel):
notification: Notification1
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request.',
examples=['499a5a4a-7dda-4f20-9b67-e24589627061'],
)
timestamp: TimestampSchema
class HeartbeatResponse(BaseModel):
error: Optional[Error] = None
status: Status3
timestamp: TimestampSchema
class Identifier(BaseModel):
type: Optional[IdentifierType] = None
value: Optional[str] = Field(None, examples=['+919800083232'])
class KeyMaterial(BaseModel):
cryptoAlg: str = Field(..., examples=['ECDH'])
curve: str = Field(..., examples=['Curve25519'])
dhPublicKey: KeyObject
nonce: str = Field(..., examples=['3fa85f64-5717-4562-b3fc-2c963f66afa6'])
class Query(BaseModel):
authMode: Optional[AuthenticationMode] = None
id: str = Field(
...,
description='id of the patient understood by the CM',
examples=['hinapatel@ndhm'],
)
purpose: PatientAuthPurpose
requester: Requester1 = Field(..., description='identification of requester')
class PatientAuthInitRequest(BaseModel):
query: Query
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class PatientAuthInitResponse(BaseModel):
auth: Optional[Auth1] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class Query1(BaseModel):
id: str = Field(..., examples=['hinapatel79@ndhm'])
purpose: PatientAuthPurpose
requester: Requester2
class PatientAuthModeQueryRequest(BaseModel):
query: Query1
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class Auth2(BaseModel):
modes: List[AuthenticationMode]
purpose: PatientAuthPurpose
class PatientAuthModeQueryResponse(BaseModel):
auth: Optional[Auth2] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class PatientAuthNotificationAcknowledgement(BaseModel):
acknowledgement: Optional[Acknowledgement2] = None
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class PatientDemographic(BaseModel):
dateOfBirth: str = Field(
..., description='date of birth in YYYY-MM-DD format.', examples=['1972-02-29']
)
gender: PatientGender
identifier: Optional[AuthConfirmIdentifier] = None
name: str = Field(..., examples=['janki das'])
class PatientDemographicResponse(BaseModel):
address: Optional[PatientAddress] = None
gender: PatientGender
id: str = Field(
...,
description='PHR Identifier of patient at consent manager',
examples=['<patient-id>@<consent-manager-id>'],
)
identifiers: Optional[List[Identifier]] = None
name: str = Field(..., examples=['Hina Patel'])
yearOfBirth: int = Field(..., examples=[2000])
class PatientIdentificationRequest(BaseModel):
query: Query2
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class PatientIdentificationResponse(BaseModel):
error: Optional[Error] = None
patient: Optional[Patient1] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class Subscription(BaseModel):
categories: List[SubscriptionCategory]
hips: Optional[List[OrganizationRepresentation]] = None
hiu: OrganizationRepresentation
patient: ConsentManagerPatientID
period: SubscriptionPeriod
purpose: UsePurpose
class SubscriptionRequest1(BaseModel):
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request.',
examples=['499a5a4a-7dda-4f20-9b67-e24589627061'],
)
subscription: Subscription
timestamp: TimestampSchema
class DataNotification(BaseModel):
entries: List[Union[EntryContent, EntryLink]]
keyMaterial: KeyMaterial
pageCount: int = Field(..., description='Total number of pages.')
pageNumber: int = Field(..., description='Current page number.')
transactionId: UUID = Field(
..., description='Transaction Id issued when data requested.'
)
class HiRequest(BaseModel):
consent: Consent
dataPushUrl: str
dateRange: DateRange
keyMaterial: KeyMaterial
class HIRequest(BaseModel):
hiRequest: HiRequest
requestId: UuidSchema
timestamp: TimestampSchema
class HIUSubscription(BaseModel):
hiu: OrganizationRepresentation
id: str = Field(..., examples=['subscription Id'])
patient: ConsentManagerPatientID
sources: List[HIUSubscriptionContext]
class Credential(BaseModel):
authCode: Optional[str] = None
demographic: Optional[PatientDemographic] = None
class PatientAuthConfirmRequest(BaseModel):
credential: Credential = Field(
...,
description='note, demographic details are only required for demographic auth at this point.',
)
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
transactionId: str
class Auth(BaseModel):
accessToken: Optional[str] = Field(
None, description='access token for initialization of subsequent action.'
)
patient: Optional[PatientDemographicResponse] = None
validity: Optional[AccessTokenValidity] = None
class PatientAuthConfirmResponse(BaseModel):
auth: Optional[Auth] = Field(
None,
description='depending on the purpose of auth, as specified in /auth/init, the response may include the following \n 1. LINK - only returns **accessToken**\n 2. KYC - only returns **patient**\n 3. KYC_AND_LINK - returns both **accessToken** and **patient**\n',
)
error: Optional[Error] = None
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
resp: RequestReference
timestamp: TimestampSchema
class Auth3(BaseModel):
accessToken: Optional[str] = Field(
None, description='access token for initialization of subsequent action.'
)
patient: Optional[PatientDemographicResponse] = None
status: Status4
transactionId: str = Field(..., description='transaction id for auth session')
validity: Optional[AccessTokenValidity] = None
class PatientAuthNotification(BaseModel):
auth: Optional[Auth3] = Field(
None,
description='depending on the purpose of auth, as specified in /auth/init, the response may include the following \n 1. LINK - only returns **accessToken**\n 2. KYC - only returns **patient**\n 3. KYC_AND_LINK - returns both **accessToken** and **patient**\n',
)
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema
class Notification2(BaseModel):
status: SubscriptionStatus
subscription: Optional[HIUSubscription] = None
subscriptionRequestId: Optional[str] = Field(
None, examples=['request id of the subscription']
)
class SubscriptionApprovalNotification(BaseModel):
notification: Notification2
requestId: UUID = Field(
...,
description='a nonce, unique for each HTTP request',
examples=['5f7a535d-a3fd-416b-b069-c97d021fbacd'],
)
timestamp: TimestampSchema