# Subscription API {% hint style="warning" %} While FHIR topic-based subscriptions are functional, they will no longer receive active development or new features. For enhanced capabilities and ongoing support, please use [Aidbox topic-based subscriptions](../../../../../modules/topic-based-subscriptions/aidbox-topic-based-subscriptions.md). This newer implementation offers improved performance, flexibility, and will continue to be developed to meet future needs. {% endhint %} ## Create Subscription - `POST /fhir/Subscription` Creates a new subscription. Takes params depending on the current version of FHIR used in Aidbox. {% hint style="info" %} The R4B Subscriptions resource uses FHIR extension fields that should be written according to the [specification](http://hl7.org/fhir/R4B/extensibility.html#extension).\ You should also add the subscription backport profile URL to your resource's `meta.profile` field. {% endhint %} ### Parameters {% tabs %} {% tab title="R4B" %}
| Parameter | Type | Required | Description |
|---|---|---|---|
| meta | object | false | |
| meta.profile | string[] | true | Extension URL: http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-subscription |
| id | string | false | Identifier of the resource. Will be auto-generated if not provided. |
| reason | string | false | Human readable reason for subscription. |
| criteria | string | true | Canonical URL for the topic used to generate events.
|
criteria.extension: | string[] | false | The filters applied to events in the following format:
(
When multiple filters are applied, it evaluates to true if all the conditions applicable to that resource are met; otherwise, it returns false (i.e., logical AND).
|
channel.extension: | integer | false | Interval in seconds to send 'heartbeat' notification.
|
channel.extension: | integer | false | Timeout in seconds to attempt notification delivery.
|
channel.extension: | integer | false | Maximum number of triggering resources included in notification bundles.
|
| channel.type | string | true | The type of channel to send notifications on. Supported values: rest-hook |
| channel.header | string[] | false | Additional headers/information to send as part of the notification. For the rest-hook channel type, this will be HTTP request headers.
|
| channel.endpoint | string | false | The URL that describes the actual end-point to send messages to.
|
| channel.payload | string | false | MIME-type to send, or omit for no payload. Supported values: application/fhir+json |
channel.payload.extension: | string | false |
Default value: empty |
| status | string | false | Status of the subscription. On the creation of this resource, the status is always |
| end | string | false | When to automatically delete the subscription. |
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | false | Identifier of the resource.
|
| topic | string | true | Url reference to subscription topic.
|
| status | string | false | Status of the subscription. On the creation of this resource, the status is always |
| reason | string | false | Human readable reason for Subscription. |
| filterBy | object[] | false | Filters applied to the resources that would be included in the notification. When multiple filters are applied to one resource type, evaluates to true if all the conditions are met. |
| filterBy.resourceType | string | false | Resource for this Subscription filter. Example: Patient |
| filterBy.filterParameter | string | false | Filter label defined in SubscriptionTopic. |
| filterBy.value | string | false | Literal value or resource path. |
| filterBy.comparator | string | false | Comparator applied to this filter parameter. Should be allowed in SubscriptionTopic resource. Supported values: eq, gt, lt, ge, le. |
| filterBy.modifier | string | false | Modifier applied to this filter parameter. Should be allowed in SubscriptionTopic resource. Supported values: temporary not supported. |
| channelType | object | true | The type of channel to send notifications on. |
| channelType.system | string | false | http://terminology.hl7.org/CodeSystem/subscription-channel-type |
| channelType.code | string | false | The type of channel to send notifications on. Supported values: rest-hook |
| endpoint | string | false | The url that describes the actual end-point to send notifications to. |
| heartbeatPeriod | integer | false | Interval in seconds to send 'heartbeat' notification. |
| parameter | object[] | false | Additional headers/information to send as part of the notification. For the rest-hook channel type, this will be HTTP request headers. |
| parameter.name | string | false | Example: "random-header". |
| parameter.value | string | false | Example: "secret123". |
| timeout | integer | false | Timeout in seconds to attempt notification delivery. |
| content | string | false | How much of the resource content to deliver in the notification payload. The choices are an empty payload, only the resource id, or the full resource content. Supported values: empty, id-only, full-resource |
| maxCount | integer | false | Maximum number of events that can be combined in a single notification. |
| end | string | false | When to automatically delete the subscription. |
| Parameter | Type | required | Description |
|---|---|---|---|
| eventsSinceNumber | integer | false | The starting event number, inclusive of this event (lower bound). |
| eventsUntilNumber | integer | false | The ending event number, inclusive of this event (upper bound). |
GET /fhir/Subscription/subscription-patient-test-1/$events
content-type: text/yaml
accept: text/yaml
{% endtab %}
{% tab title="Response" %}
Status: 200
resourceType: Bundle
type: history
timestamp: '2023-09-06T07:40:59.527416959Z'
entry:
- resource:
resourceType: SubscriptionStatus
status: active
type: query-event
eventsSinceSubscriptionStart: 19
subscription:
reference: http://aidbox.app/fhir/Subscription/subscription-patient-test-1
topic: http://aidbox.app/SubscriptionTopic/patient-test-1
notificationEvent:
- eventNumber: 1
timestamp: '2023-09-04 10:38:43.020984+03'
focus:
reference: >-
http://aidbox.app/fhir/Patient/c868fc6f-0631-43cc-940a-c43177fe6567
- eventNumber: 2
timestamp: '2023-09-04 10:38:44.382835+03'
focus:
reference: >-
http://aidbox.app/fhir/Patient/fe174a4e-e3ba-4d75-98b6-17fea275dda1
- eventNumber: 3
timestamp: '2023-09-04 10:38:44.888717+03'
focus:
reference: >-
http://aidbox.app/fhir/Patient/98485698-083d-4659-8869-b4f0d87734ac
- eventNumber: 4
timestamp: '2023-09-04 10:38:45.031019+03'
focus:
reference: >-
http://aidbox.app/fhir/Patient/cc95822b-ed0d-4e6a-ad48-358d029d8c61
- eventNumber: 5
timestamp: '2023-09-04 10:38:45.171641+03'
focus:
reference: >-
http://aidbox.app/fhir/Patient/36df7d8f-1a03-4073-8435-6741cdba90e9
- fullUrl: http://aidbox.app/fhir/Patient/c868fc6f-0631-43cc-940a-c43177fe6567
request:
method: POST
url: Patient/c868fc6f-0631-43cc-940a-c43177fe6567
response:
status: '201'
- fullUrl: http://aidbox.app/fhir/Patient/fe174a4e-e3ba-4d75-98b6-17fea275dda1
request:
method: POST
url: Patient/fe174a4e-e3ba-4d75-98b6-17fea275dda1
response:
status: '201'
- fullUrl: http://aidbox.app/fhir/Patient/98485698-083d-4659-8869-b4f0d87734ac
request:
method: POST
url: Patient/98485698-083d-4659-8869-b4f0d87734ac
response:
status: '201'
- fullUrl: http://aidbox.app/fhir/Patient/cc95822b-ed0d-4e6a-ad48-358d029d8c61
request:
method: POST
url: Patient/cc95822b-ed0d-4e6a-ad48-358d029d8c61
response:
status: '201'
- fullUrl: http://aidbox.app/fhir/Patient/36df7d8f-1a03-4073-8435-6741cdba90e9
request:
method: POST
url: Patient/36df7d8f-1a03-4073-8435-6741cdba90e9
response:
status: '201'
{% endtab %}
{% endtabs %}
## Subscription and events RPC
Returns all data about subscription and its events.
RPC endpoint: `fhir.topic-based-subscription/get-subscription-by-id`
### Parameters
| Parameter | Type | Description |
| ------------ | ------ | ---------------------------------------- |
| id | string | id of subscription |
| events-limit | int | Limit of events to fetch. Default is 10. |
### Example
{% tabs %}
{% tab title="Request" %}
```
POST /rpc
method: fhir.topic-based-subscription/get-subscription-by-id
params:
id: subscription-patient-test-1
```
{% endtab %}
{% tab title="Response" %}
```
result:
resource:
maxCount: 2
service-definition:
# ... definition from zen
content: id-only
events:
- body:
focusResource:
id: >-
pat4
meta:
extension:
- url: ex:createdAt
valueInstant: '2024-10-01T10:42:12.204409Z'
versionId: '164'
lastUpdated: '2024-10-01T10:42:12.204409Z'
gender: male
resourceType: Patient
error: no-response
headers:
values:
first-family-name: null
prev-first-family-name: null
first-family-name-alternative: null
focusId: pat4
timestamp: '2024-10-01T10:42:12.206127Z'
interaction: create
focusResourceType: Patient
lsn: 0/46F6680
seq_num: 4
type: handshake
eventNumber: 0
topic: http://aidbox.app/SubscriptionTopic/patient-test-1
resourceType: Subscription
reason: R4/B Test Topic-Based Subscription for Patient resources
heartbeatPeriod: 60
status: active
id: subscription-patient-test-1
topic-id: c78aab4508bf90b63bcc18b70e61bbf2
contentType: application/fhir+json
timeout: 1
filterBy: []
endpoint: http://localhost:27193/patient-test-1
parameter: []
channelType:
code: rest-hook
```
{% endtab %}
{% endtabs %}
## Delete Subscription - `DELETE /fhir/Subscription/[id]`
Delete Subscription resource.
| Parameter | Type | Description |
|---|---|---|
| resource | object | Deleted Subscription resource. |