API for the Exchange of Medicinal Product Information (APIX)
0.1.0 - ci-build
API for the Exchange of Medicinal Product Information (APIX), published by Gravitate Health Project. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cander2/apix-ig/ and changes regularly. See the Directory of published versions
The APIX workflow facilitates the exchange and orchestration of regulatory content, such as electronic Product Information (ePI) and Product Quality Information (PQI), between submitters (e.g., pharmaceutical companies) and regulators. The process leverages FHIR resources, primarily Task
, DocumentReference
, Observation
, and Provenance
, to manage submissions, processing, updates, and notifications. This guide outlines the workflow, sender/recipient identification, security considerations, and implementation details.
Transaction Bundle
containing:
Task
resource with status
set to requested
, specifying the regulatory action (e.g., submission of ePI or PQI).DocumentReference
resource (for ePI or PDF content) or an Observation
resource (for PQI data).Provenance
resource to document the submission’s origin and sender.Composition
for structured ePI or Organization
for sender/recipient details.POST
to [base]
.Bundle
with the created resources’ IDs and a 201 Created
status or an OperationOutcome
for errors.Task
and associated resources using a search query:
GET [base]/Task?status=requested&_include=Task:focus
_include=Task:focus
parameter retrieves the referenced DocumentReference
or Observation
.Task.owner
can access the task, enforced via OAuth 2.0 or SMART-on-FHIR.Task
resource to reflect the processing outcome (e.g., accepted
, rejected
, or completed
) and adds outputs to Task.output
.Transaction Bundle
is submitted via POST
to [base]
with:
Task
resource.OperationOutcome
for comments or DocumentReference
for revised ePI.Task
update adheres to APIX profiles and state transitions.Task
updates through:
GET [base]/Task?status=completed&_id=task-123
requests.Subscription
resource for real-time notifications (if supported by the server).Task
and its output
(e.g., OperationOutcome
or revised DocumentReference
).CapabilityStatement
.To ensure proper routing and auditability, APIX transaction bundles must clearly identify the sender (submitter) and recipient (regulator) of the submission. This is achieved through FHIR resources and security mechanisms:
Organization
or Practitioner
submitting the request (e.g., a pharmaceutical company).Provenance
resource documents the submission’s origin, with Provenance.agent.who
(type author
) linking to the sender.client_id
) mapping to the Task.requester
.Organization
or PractitionerRole
responsible for processing the task (e.g., a regulatory authority).agent
with type performer
for the recipient.Task.owner
or server-specific logic.Provenance
resource in the Transaction Bundle
to document both sender and recipient for auditability.Organization.identifier
to avoid ambiguity.Task.requester
and that only the Task.owner
can process the task.For detailed resource constraints, see the APIX Task Profile, APIX Provenance Profile, and APIX Organization Profile.
DocumentReference
or Observation
resources should be encrypted or access-controlled.Provenance
or audit events) for regulatory compliance.OperationOutcome
resources for validation errors, unauthorized access, or processing failures.400 Bad Request
).Task.requester
(403 Forbidden
).404 Not Found
or 403 Forbidden
).CapabilityStatement
detailing supported operations, search parameters, and subscription channels.Composition
for structured ePI) and custom Task.output
types.MessageHeader
for complex message exchanges.The following UML sequence diagram illustrates the APIX workflow:
```mermaid sequenceDiagram participant S as Submitter participant R as Regulator participant F as FHIR Server
S->>F: POST Transaction Bundle (Task, DocumentReference/Observation, Provenance)
F-->>S: 201 Created or OperationOutcome
R->>F: GET Task?status=requested&_include=Task:focus
F-->>R: Task + Referenced Resources
R->>F: POST Transaction Bundle (Updated Task, Task.output)
F-->>R: 200 OK or OperationOutcome
S->>F: GET Task?status=completed&_id=task-123 (Polling)
alt Subscription Enabled
F-->>S: Notify (Task Update via Subscription)
end
F-->>S: Updated Task + Output