This
page
is
part
of
the
FHIR
Specification
(v4.3.0:
R4B
-
STU
(v5.0.0-snapshot3:
R5
Snapshot
#3,
to
support
Connectathon
32
).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
of
available
versions,
see
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
FHIR
Infrastructure
Work
Group
|
Maturity
Level
:
|
Trial Use | Security Category : Business | Compartments : Not linked to any defined compartments |
The
subscription
resource
is
used
to
define
a
push-based
subscription
from
describes
a
server
particular
client's
request
to
another
system.
Once
a
subscription
is
registered
with
the
server,
the
server
checks
every
resource
that
is
created
or
updated,
and
if
the
resource
matches
the
given
criteria,
it
sends
be
notified
about
a
message
on
the
defined
"channel"
so
that
another
system
can
take
an
appropriate
action.
SubscriptionTopic.
This
document
contains
information
about
the
Subscription
resource
and
details
specific
to
options
in
it.
See
Subscriptions
for
general
information
about
using
Subscriptions
in
FHIR.
The
Subscription
resource
is
used
to
establish
proactive
event
notifications
from
a
FHIR
server
to
another
system.
Subscribers
request
event
notifications
within
a
predefined
SubscriptionTopic
that
the
server
supports,
and
can
further
refine
their
notifications
by
supplying
filters.
Each
SubscriptionTopic
resource
defines
a
set
of
allowed
filters
(
SubscriptionTopic.canFilterBy
),
which
a
subscriber
refer
to
within
a
Subscription
resource
(
Subscription.filterBy
).
Once
a
subscription
is
created,
any
newly
created
or
updated
resources
event
matching
a
specified
SubscriptionTopic
that
meet
meets
the
filtering
criteria
in
the
resource
will
cause
a
notification
to
be
sent
using
the
provided
channel.
The
criteria
Notifications
are
Search
Bundle
strings
that
have
the
same
interpretation
as
if
they
were
appended
to
the
base
URL
and
submitted
using
the
REST
API.
Note
that
the
search
criteria
are
applied
to
the
new
value
of
the
resource.
The
consequence
resources,
of
this
is
that
there
is
no
notification
when
type
subscription-notification
.
Subscriptions
are
active
resources;
a
resource
is
deleted,
or
when
server
can
only
accept
a
resource
is
updated
so
that
subscription
if
it
will
execute
the
specified
channel
for
any
resources
subsequently
received.
The
subscription
is
no
longer
meets
active
once
it
is
deleted
from
the
criteria.
server.
The
server
is
able
to
send
By
adjusting
Subscription.content
,
subscribers
can
request
event
notifications
without
any
information
about
the
matching
resource,
that
include
full
resource
content;
or
with
just
the
entire
resource.
ID
of
the
triggering
resource;
or
an
empty
notification
body.
Several
different
types
of
channels
are
supported:
defined
in
the
core
specification:
Subscription.endpoint
URL
https://...
)
Subscription.endpoint
email
mailto:...
)
Subscription.endpoint
URI
Additional
channel
types
can
be
defined
by
external
implementation
guides.
See
below
for
further
discussion
of
the
various
channels.
Note
that
sending
the
entire
resource
creates
security
concerns
that
must
be
managed
by
the
server.
Subscriptions
are
active
resources;
a
server
can
only
accept
a
subscription
if
it
will
execute
the
specified
channel
for
any
resources
subsequently
received.
The
subscription
is
no
longer
active
once
it
is
deleted
from
the
server.
As
an
alternative
to
subscriptions,
the
RESTful
API
describes
a
polling-based
subscription
method
using
bundles
and
the
history
operation
.
This
method
of
polling
allows
for
a
much
tighter
relationship
between
the
client
and
the
server
that
doesn't
involve
missing
updates
and/or
deletes.
When
using
the
The
Subscription
resource,
resource
is
used
in
the
FHIR
server
combines
Subscriptions
Framework
.
Information
about
the
roles
of
publisher
Boundaries
and
information
distributer.
Other
arrangements
of
Relationships
both
within
the
publish
Subscriptions
Framework
and
subscribe
pattern
describe
separate
agents
for
the
two
roles.
Implementers
may
implement
the
Subscription
resource
using
an
architecture
with
separate
agents,
or
using
any
to
other
pub/sub
architectire
(e.g.
see
FHIRCast
,
or,
more
generally,
W3C
Pub/Sub
).
areas
of
the
FHIR
specification
can
be
found
here
.
Structure
Name
|
Flags
|
Card.
|
Type
|
Description
&
Constraints
|
|---|---|---|---|---|
|
TU | DomainResource |
Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
| Σ | 0..* | Identifier |
Additional
identifiers
(business
identifier)
|
![]() ![]() | Σ | 0..1 | string |
Human
readable
name
for
this
subscription
|
![]()
|
?! Σ | 1..1 | code |
requested
|
active
|
error
|
off
|
entered-in-error
|
| Σ | 1..1 | canonical ( SubscriptionTopic ) |
Reference
to
the
subscription
topic
being
subscribed
to
|
![]() ![]() |
Σ | 0..* | ContactPoint |
Contact
details
for
source
(e.g.
troubleshooting)
|
|
Σ | 0..1 | instant |
When
to
automatically
delete
the
subscription
|
| Σ | 0..1 | Reference ( CareTeam | HealthcareService | Organization | RelatedPerson | Patient | Practitioner | PractitionerRole ) |
Entity
responsible
for
Subscription
changes
|
|
Σ |
|
string |
Description
of
why
this
subscription
was
created
|
|
Σ |
|
|
|
|
Σ | 0..1 |
|
All FHIR Types ( Extensible ) |
|
Σ | 1..1 |
|
|
|
Σ |
|
code |
|
| Σ | 1..1 | string |
Literal
value
or
resource
path
|
![]() ![]() | Σ | 1..1 | Coding |
Channel
type
for
notifications
Subscription Channel Type ( Extensible ) |
|
Σ | 0..1 | url |
Where
the
channel
points
to
|
| Σ | 0..* | string |
Usage
depends
on
the
channel
type
|
![]() ![]() | Σ | 0..1 | unsignedInt |
Interval
in
seconds
to
send
'heartbeat'
notification
|
|
Σ | 0..1 | unsignedInt |
Timeout
in
seconds
to
attempt
notification
delivery
|
![]() ![]() | Σ | 0..1 | code |
MIME
type
to
send,
or
omit
for
no
payload
|
| Σ | 0..1 | code |
empty
|
id-only
|
full-resource
SubscriptionPayloadContent ( Required ) |
|
Σ |
|
|
|
Documentation
for
this
format
|
||||
See the Extensions for this resource
UML Diagram ( Legend )
XML Template
<<Subscription xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension -->
<<identifier><!-- 0..* Identifier Additional identifiers (business identifier) --></identifier> <name value="[string]"/><!-- 0..1 Human readable name for this subscription --> <status value="[code]"/><!-- 1..1 requested | active | error | off | entered-in-error --> <topic><!-- 1..1 canonical(SubscriptionTopic) Reference to the subscription topic being subscribed to --></topic> <contact><!-- 0..* ContactPoint Contact details for source (e.g. troubleshooting) --></contact> <end value="[instant]"/><!-- 0..1 When to automatically delete the subscription -->< < < < < < < < </channel><managingEntity><!-- 0..1 Reference(CareTeam|HealthcareService|Organization| Patient|Practitioner|PractitionerRole|RelatedPerson) Entity responsible for Subscription changes --></managingEntity> <reason value="[string]"/><!-- 0..1 Description of why this subscription was created --> <filterBy> <!-- 0..* Criteria for narrowing the subscription topic stream --> <resourceType value="[uri]"/><!-- 0..1 Allowed Data type or Resource (reference to definition) for this Subscription --> <filterParameter value="[string]"/><!-- 1..1 Filter label defined in SubscriptionTopic --> <modifier value="[code]"/><!-- 0..1 = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type --> <value value="[string]"/><!-- 1..1 Literal value or resource path --> </filterBy> <channelType><!-- 1..1 Coding Channel type for notifications --></channelType> <endpoint value="[url]"/><!-- 0..1 Where the channel points to --> <header value="[string]"/><!-- 0..* Usage depends on the channel type --> <heartbeatPeriod value="[unsignedInt]"/><!-- 0..1 Interval in seconds to send 'heartbeat' notification --> <timeout value="[unsignedInt]"/><!-- 0..1 Timeout in seconds to attempt notification delivery --> <contentType value="[code]"/><!-- 0..1 MIME type to send, or omit for no payload --> <content value="[code]"/><!-- 0..1 empty | id-only | full-resource --> <maxCount value="[positiveInt]"/><!-- 0..1 Maximum number of triggering resources included in notification bundles --> </Subscription>
JSON Template
{
"resourceType" : "",
"resourceType" : "Subscription",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"identifier" : [{ Identifier }], // Additional identifiers (business identifier)
"name" : "<string>", // Human readable name for this subscription
"status" : "<code>", // R! requested | active | error | off | entered-in-error
"topic" : "<canonical(SubscriptionTopic)>", // R! Reference to the subscription topic being subscribed to
"contact" : [{ ContactPoint }], // Contact details for source (e.g. troubleshooting)
"end" : "<instant>", // When to automatically delete the subscription
"
"
"
"
"
"
"
"
}
"managingEntity" : { Reference(CareTeam|HealthcareService|Organization|
Patient|Practitioner|PractitionerRole|RelatedPerson) }, // Entity responsible for Subscription changes
"reason" : "<string>", // Description of why this subscription was created
"filterBy" : [{ // Criteria for narrowing the subscription topic stream
"resourceType" : "<uri>", // Allowed Data type or Resource (reference to definition) for this Subscription
"filterParameter" : "<string>", // R! Filter label defined in SubscriptionTopic
"modifier" : "<code>", // = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type
"value" : "<string>" // R! Literal value or resource path
}],
"channelType" : { Coding }, // R! Channel type for notifications
"endpoint" : "<url>", // Where the channel points to
"header" : ["<string>"], // Usage depends on the channel type
"heartbeatPeriod" : "<unsignedInt>", // Interval in seconds to send 'heartbeat' notification
"timeout" : "<unsignedInt>", // Timeout in seconds to attempt notification delivery
"contentType" : "<code>", // MIME type to send, or omit for no payload
"content" : "<code>", // empty | id-only | full-resource
"maxCount" : "<positiveInt>" // Maximum number of triggering resources included in notification bundles
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .![]()
[ a fhir:;[ a fhir:Subscription; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtensionfhir:fhir:Subscription.identifier [ Identifier ], ... ; # 0..* Additional identifiers (business identifier) fhir:Subscription.name [ string ]; # 0..1 Human readable name for this subscription fhir:Subscription.status [ code ]; # 1..1 requested | active | error | off | entered-in-error fhir:Subscription.topic [ canonical(SubscriptionTopic) ]; # 1..1 Reference to the subscription topic being subscribed to fhir:Subscription.contact [ ContactPoint ], ... ; # 0..* Contact details for source (e.g. troubleshooting) fhir:Subscription.end [ instant ]; # 0..1 When to automatically delete the subscriptionfhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ];fhir:Subscription.managingEntity [ Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|PractitionerRole| RelatedPerson) ]; # 0..1 Entity responsible for Subscription changes fhir:Subscription.reason [ string ]; # 0..1 Description of why this subscription was created fhir:Subscription.filterBy [ # 0..* Criteria for narrowing the subscription topic stream fhir:Subscription.filterBy.resourceType [ uri ]; # 0..1 Allowed Data type or Resource (reference to definition) for this Subscription fhir:Subscription.filterBy.filterParameter [ string ]; # 1..1 Filter label defined in SubscriptionTopic fhir:Subscription.filterBy.modifier [ code ]; # 0..1 = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type fhir:Subscription.filterBy.value [ string ]; # 1..1 Literal value or resource path ], ...; fhir:Subscription.channelType [ Coding ]; # 1..1 Channel type for notifications fhir:Subscription.endpoint [ url ]; # 0..1 Where the channel points to fhir:Subscription.header [ string ], ... ; # 0..* Usage depends on the channel type fhir:Subscription.heartbeatPeriod [ unsignedInt ]; # 0..1 Interval in seconds to send 'heartbeat' notification fhir:Subscription.timeout [ unsignedInt ]; # 0..1 Timeout in seconds to attempt notification delivery fhir:Subscription.contentType [ code ]; # 0..1 MIME type to send, or omit for no payload fhir:Subscription.content [ code ]; # 0..1 empty | id-only | full-resource fhir:Subscription.maxCount [ positiveInt ]; # 0..1 Maximum number of triggering resources included in notification bundles ]
Changes since R4
| Subscription | |
| Subscription.identifier |
|
| Subscription.name |
|
| Subscription.topic |
|
| Subscription.managingEntity |
|
| Subscription.reason |
|
| Subscription.filterBy |
|
| Subscription.filterBy.resourceType |
|
| Subscription.filterBy.filterParameter |
|
| Subscription.filterBy.modifier |
|
| Subscription.filterBy.value |
|
| Subscription.channelType |
|
| Subscription.endpoint |
|
| Subscription.header |
|
| Subscription.heartbeatPeriod |
|
| Subscription.timeout |
|
| Subscription.contentType |
|
| Subscription.content |
|
| Subscription.maxCount |
|
| Subscription.criteria |
|
| Subscription.error |
|
| Subscription.channel |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
Conversions
between
R3
and
R4
See
R3
<-->
R4
Conversion
Maps
(status
=
2
tests
that
all
execute
ok.
2
fail
round-trip
testing
and
all
r3
resources
are
valid.)
Structure
Name
|
Flags
|
Card.
|
Type
|
Description
&
Constraints
|
|---|---|---|---|---|
|
TU | DomainResource |
Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension |
|
| Σ | 0..* | Identifier |
Additional
identifiers
(business
identifier)
|
![]() ![]() | Σ | 0..1 | string |
Human
readable
name
for
this
subscription
|
![]()
|
?! Σ | 1..1 | code |
requested
|
active
|
error
|
off
|
entered-in-error
|
| Σ | 1..1 | canonical ( SubscriptionTopic ) |
Reference
to
the
subscription
topic
being
subscribed
to
|
![]() ![]() |
Σ | 0..* | ContactPoint |
Contact
details
for
source
(e.g.
troubleshooting)
|
|
Σ | 0..1 | instant |
When
to
automatically
delete
the
subscription
|
| Σ | 0..1 | Reference ( CareTeam | HealthcareService | Organization | RelatedPerson | Patient | Practitioner | PractitionerRole ) |
Entity
responsible
for
Subscription
changes
|
|
Σ |
|
string |
Description
of
why
this
subscription
was
created
|
|
Σ |
|
|
|
|
Σ | 0..1 |
|
All FHIR Types ( Extensible ) |
|
Σ | 1..1 |
|
|
|
Σ |
|
code |
|
| Σ | 1..1 | string |
Literal
value
or
resource
path
|
![]() ![]() | Σ | 1..1 | Coding |
Channel
type
for
notifications
Subscription Channel Type ( Extensible ) |
|
Σ | 0..1 | url |
Where
the
channel
points
to
|
| Σ | 0..* | string |
Usage
depends
on
the
channel
type
|
![]() ![]() | Σ | 0..1 | unsignedInt |
Interval
in
seconds
to
send
'heartbeat'
notification
|
|
Σ | 0..1 | unsignedInt |
Timeout
in
seconds
to
attempt
notification
delivery
|
![]() ![]() | Σ | 0..1 | code |
MIME
type
to
send,
or
omit
for
no
payload
|
| Σ | 0..1 | code |
empty
|
id-only
|
full-resource
SubscriptionPayloadContent ( Required ) |
|
Σ |
|
|
|
Documentation
for
this
format
|
||||
See the Extensions for this resource
XML Template
<<Subscription xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension -->
<<identifier><!-- 0..* Identifier Additional identifiers (business identifier) --></identifier> <name value="[string]"/><!-- 0..1 Human readable name for this subscription --> <status value="[code]"/><!-- 1..1 requested | active | error | off | entered-in-error --> <topic><!-- 1..1 canonical(SubscriptionTopic) Reference to the subscription topic being subscribed to --></topic> <contact><!-- 0..* ContactPoint Contact details for source (e.g. troubleshooting) --></contact> <end value="[instant]"/><!-- 0..1 When to automatically delete the subscription -->< < < < < < < < </channel><managingEntity><!-- 0..1 Reference(CareTeam|HealthcareService|Organization| Patient|Practitioner|PractitionerRole|RelatedPerson) Entity responsible for Subscription changes --></managingEntity> <reason value="[string]"/><!-- 0..1 Description of why this subscription was created --> <filterBy> <!-- 0..* Criteria for narrowing the subscription topic stream --> <resourceType value="[uri]"/><!-- 0..1 Allowed Data type or Resource (reference to definition) for this Subscription --> <filterParameter value="[string]"/><!-- 1..1 Filter label defined in SubscriptionTopic --> <modifier value="[code]"/><!-- 0..1 = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type --> <value value="[string]"/><!-- 1..1 Literal value or resource path --> </filterBy> <channelType><!-- 1..1 Coding Channel type for notifications --></channelType> <endpoint value="[url]"/><!-- 0..1 Where the channel points to --> <header value="[string]"/><!-- 0..* Usage depends on the channel type --> <heartbeatPeriod value="[unsignedInt]"/><!-- 0..1 Interval in seconds to send 'heartbeat' notification --> <timeout value="[unsignedInt]"/><!-- 0..1 Timeout in seconds to attempt notification delivery --> <contentType value="[code]"/><!-- 0..1 MIME type to send, or omit for no payload --> <content value="[code]"/><!-- 0..1 empty | id-only | full-resource --> <maxCount value="[positiveInt]"/><!-- 0..1 Maximum number of triggering resources included in notification bundles --> </Subscription>
JSON Template
{
"resourceType" : "",
"resourceType" : "Subscription",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"
"identifier" : [{ Identifier }], // Additional identifiers (business identifier)
"name" : "<string>", // Human readable name for this subscription
"status" : "<code>", // R! requested | active | error | off | entered-in-error
"topic" : "<canonical(SubscriptionTopic)>", // R! Reference to the subscription topic being subscribed to
"contact" : [{ ContactPoint }], // Contact details for source (e.g. troubleshooting)
"end" : "<instant>", // When to automatically delete the subscription
"
"
"
"
"
"
"
"
}
"managingEntity" : { Reference(CareTeam|HealthcareService|Organization|
Patient|Practitioner|PractitionerRole|RelatedPerson) }, // Entity responsible for Subscription changes
"reason" : "<string>", // Description of why this subscription was created
"filterBy" : [{ // Criteria for narrowing the subscription topic stream
"resourceType" : "<uri>", // Allowed Data type or Resource (reference to definition) for this Subscription
"filterParameter" : "<string>", // R! Filter label defined in SubscriptionTopic
"modifier" : "<code>", // = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type
"value" : "<string>" // R! Literal value or resource path
}],
"channelType" : { Coding }, // R! Channel type for notifications
"endpoint" : "<url>", // Where the channel points to
"header" : ["<string>"], // Usage depends on the channel type
"heartbeatPeriod" : "<unsignedInt>", // Interval in seconds to send 'heartbeat' notification
"timeout" : "<unsignedInt>", // Timeout in seconds to attempt notification delivery
"contentType" : "<code>", // MIME type to send, or omit for no payload
"content" : "<code>", // empty | id-only | full-resource
"maxCount" : "<positiveInt>" // Maximum number of triggering resources included in notification bundles
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .![]()
[ a fhir:;[ a fhir:Subscription; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtensionfhir:fhir:Subscription.identifier [ Identifier ], ... ; # 0..* Additional identifiers (business identifier) fhir:Subscription.name [ string ]; # 0..1 Human readable name for this subscription fhir:Subscription.status [ code ]; # 1..1 requested | active | error | off | entered-in-error fhir:Subscription.topic [ canonical(SubscriptionTopic) ]; # 1..1 Reference to the subscription topic being subscribed to fhir:Subscription.contact [ ContactPoint ], ... ; # 0..* Contact details for source (e.g. troubleshooting) fhir:Subscription.end [ instant ]; # 0..1 When to automatically delete the subscriptionfhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ];fhir:Subscription.managingEntity [ Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|PractitionerRole| RelatedPerson) ]; # 0..1 Entity responsible for Subscription changes fhir:Subscription.reason [ string ]; # 0..1 Description of why this subscription was created fhir:Subscription.filterBy [ # 0..* Criteria for narrowing the subscription topic stream fhir:Subscription.filterBy.resourceType [ uri ]; # 0..1 Allowed Data type or Resource (reference to definition) for this Subscription fhir:Subscription.filterBy.filterParameter [ string ]; # 1..1 Filter label defined in SubscriptionTopic fhir:Subscription.filterBy.modifier [ code ]; # 0..1 = | eq | ne | gt | lt | ge | le | sa | eb | ap | above | below | in | not-in | of-type fhir:Subscription.filterBy.value [ string ]; # 1..1 Literal value or resource path ], ...; fhir:Subscription.channelType [ Coding ]; # 1..1 Channel type for notifications fhir:Subscription.endpoint [ url ]; # 0..1 Where the channel points to fhir:Subscription.header [ string ], ... ; # 0..* Usage depends on the channel type fhir:Subscription.heartbeatPeriod [ unsignedInt ]; # 0..1 Interval in seconds to send 'heartbeat' notification fhir:Subscription.timeout [ unsignedInt ]; # 0..1 Timeout in seconds to attempt notification delivery fhir:Subscription.contentType [ code ]; # 0..1 MIME type to send, or omit for no payload fhir:Subscription.content [ code ]; # 0..1 empty | id-only | full-resource fhir:Subscription.maxCount [ positiveInt ]; # 0..1 Maximum number of triggering resources included in notification bundles ]
Changes since Release 4
| Subscription | |
| Subscription.identifier |
|
| Subscription.name |
|
| Subscription.topic |
|
| Subscription.managingEntity |
|
| Subscription.reason |
|
| Subscription.filterBy |
|
| Subscription.filterBy.resourceType |
|
| Subscription.filterBy.filterParameter |
|
| Subscription.filterBy.modifier |
|
| Subscription.filterBy.value |
|
| Subscription.channelType |
|
| Subscription.endpoint |
|
| Subscription.header |
|
| Subscription.heartbeatPeriod |
|
| Subscription.timeout |
|
| Subscription.contentType |
|
| Subscription.content |
|
| Subscription.maxCount |
|
| Subscription.criteria |
|
| Subscription.error |
|
| Subscription.channel |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
Conversions
between
R3
and
R4
See
R3
<-->
R4
Conversion
Maps
(status
=
2
tests
that
all
execute
ok.
2
fail
round-trip
testing
and
all
r3
resources
are
valid.)
See
the
Profiles
&
Extensions
and
the
alternate
Additional
definitions:
Master
Definition
XML
+
JSON
,
XML
Schema
/
Schematron
+
JSON
Schema
,
ShEx
(for
Turtle
)
+
see
the
extensions
,
the
spreadsheet
version
&
the
dependency
analysis
| Path | Definition | Type | Reference |
|---|---|---|---|
| Subscription.status |
State values for FHIR Subscriptions. |
Required | SubscriptionStatusCodes (a valid code from SubscriptionStatus ) |
| Subscription.filterBy.resourceType | All FHIR types | Extensible | FHIRTypes (a valid code from All FHIR Types ) |
| Subscription.filterBy.modifier | FHIR search modifiers allowed for use in Subscriptions and SubscriptionTopics. |
Required | SubscriptionSearchModifier (a valid code from SubscriptionSearchModifer ) |
| Subscription.channelType | Core-defined FHIR channel types allowed for use in Subscriptions. | Extensible |
SubscriptionChannelType
(a
valid
code
from
SubscriptionChannel
Type
Codes
)
|
| Subscription.contentType |
This value set includes all possible codes from BCP-13 (http://tools.ietf.org/html/bcp13) |
Required |
urn:ietf:bcp:13
)
|
| Subscription.content |
Codes to represent how much resource content to send in the notification payload. |
Required | SubscriptionPayloadContent |
Executing
each
of
Applications
are
responsible
for
following
FHIR
security
guidance
.
Some
recommendations
specific
to
subscriptions
are
provided
on
the
channels
documented
below
involves
Subscriptions
Framework
page.
There
are
three
options
available
when
specifying
the
server
sending
contents
of
a
communication
that
will
reveal
information
about
Notification:
empty
,
id-only
,
and
full-resource
.
These
options
change
the
client
level
of
detail
conveyed
in
the
notification
Bundle
.
When
deciding
which
payload
type
to
request,
systems
SHOULD
consider
both
ease
of
processing
and
server
relationship,
and,
if
security
of
PHI.
To
mitigate
the
entire
resource
is
sent,
administrative
or
clinical
risk
of
information
that
may
be
quite
sensitive
and/or
protected
under
law.
Servers
are
responsible
for
ensuring
appropriate
leakage,
systems
SHOULD
use
the
minimum
level
of
detail
consistent
with
the
use
case.
In
practice,
id-only
provides
a
good
balance
between
security
is
employed
and
performance
for
each
channel.
The
subscription
resource
does
not
address
these
concerns
directly
-
it
is
assumed
that
these
are
administered
by
other
configuration
processes.
For
instance,
many
real-world
scenarios.
If
a
server
might
maintain
cannot
or
will
not
honor
a
whitelist
of
acceptable
servers
for
payload
type
(e.g.,
will
not
send
full-resource
over
HTTP),
it
SHOULD
reject
the
rest-create/rest-update
methods.
Subscription
request.
A
server
MAY
instead
accept
the
subscription
with
modifications
and
return
the
accepted
version
to
the
client.
Emails
should
generally
be
secured
using
some
technique
such
as
Direct
.
When
sending
event
notifications
servers
SHALL
populate
the
SubscriptionStatus.notificationEvent
structure
with
relevant
information,
depending
on
the
payload
type.
A
subscription
is
defined
by
creating
An
example
notification
with
an
empty
payload
can
be
found
here
.
With
the
Subscription
resource
on
content
type
of
empty
,
all
information
about
the
server.
When
resources
involved
in
triggering
the
subscription
notification
is
created
only
available
via
channels
other
than
the
Subscription
itself
(e.g.,
the
REST
API
or
$events
operation).
This
mitigates
many
security
concerns
by
both
removing
most
PHI
from
the
client,
notification
and
allows
servers
to
consolidate
authorization
and
authentication
logic.
When
the
subscriber
receives
a
notification
of
this
type,
it
sets
may
query
the
status
server
to
"requested".
After
POSTing
fetch
all
the
subscription,
relevant
resources
based
on
the
SubscriptionTopic
and
applicable
filters.
The
client
parses
might
include
a
_lastUpdated
query
parameter,
supplying
its
last
query
timestamp
to
retrieve
only
the
Location
header
and
saves
most
recent
resources.
For
example,
if
the
new
Subscription's
logical
id
notification
is
for
use
in
subsequent
operations.
a
topic
about
patient
admission,
the
subscriber
will
generally
query
for
recent
Encounters
for
a
patient
or
group
of
patients,
then
fetch
them
as
needed.
When
populating
the
server
receives
a
subscription,
it
SHOULD
check
that
it
is
prepared
to
accept/process
the
subscription.
If
it
is,
it
sets
the
subscription
to
structure
for
a
active
,
and
then
process
it
like
SubscriptionStatus.notificationEvent
normal
create
.
If
it
isn't,
it
SHOULD
return
an
error
notification
with
an
OperationOutcome
instead
of
processing
the
payload,
a
server
SHALL
NOT
include
references
to
resources
(e.g.,
SubscriptionStatus.notificationEvent.focus
and
SubscriptionStatus.notificationEvent.additionalContext
SHALL
NOT
be
present).
create
.
empty
The
criteria
are
subject
to
the
same
limitations
as
When
the
client
that
created
it,
such
as
access
to
patient
compartments
etc.
Note
that
content
type
is
empty
,
notification
bundles
SHALL
NOT
contain
Bundle.entry
elements
other
than
the
subscription
remains
active
after
SubscriptionStatus
for
the
client
access
tokens
expire.
notification.
Once
An
example
notification
with
an
id-only
payload
can
be
found
here
.
With
the
server
has
activated
content
type
of
id-only
,
the
subscription,
it
sets
resources
involved
in
triggering
the
status
notification
are
only
available
through
other
channels
(e.g.,
REST
API),
but
notifications
include
URLs
which
can
be
used
to
"active"
(note:
access
those
resources.
This
allows
servers
to
consolidate
authorization
and
authentication
logic,
while
removing
the
server
can
do
need
for
expensive
queries
by
subscribers.
When
a
subscriber
receives
a
notification
of
this
as
type,
it
accepts
may
directly
fetch
all
the
relevant
resources
using
the
supplied
resource
ids.
For
example,
if
it
wants).
the
notification
is
for
a
topic
about
patient
admission,
the
subscriber
may
fetch
the
Encounter(s)
for
a
patient
or
group
of
patients.
An
appropriately
authorized
client
can
use
search
and/or
history
operations
to
see
what
subscriptions
are
currently
active
on
the
server.
Once
When
the
subscription
content
type
is
no
longer
desired,
id-only
,
the
client
deletes
SubscriptionStatus.notificationEvent
structure
SHALL
include
references
to
the
subscription
from
appropriate
focus
resources
in
the
server.
SubscriptionStatus.notificationEvent.focus
element.
This
provides
clients
a
fixed
location
to
consolidate
IDs
for
all
notification
types.
The
server
may
retry
Additionally,
notification
bundles
MAY
contain,
in
addition
to
the
SubscriptionStatus
,
at
least
one
Bundle.entry
for
each
resource
relevant
to
the
notification.
For
example,
a
notification
for
a
fixed
number
of
times
and/or
refer
errors
topic
based
on
Encounter
MAY
include
a
reference
to
its
own
alert
logs.
If
the
notification
fails,
Encounter
and
MAY
also
include
additional
resources
deemed
relevant
(e.g.,
the
server
should
set
linked
Patient).
An
example
notification
with
a
full-resource
payload
can
be
found
here
.
With
the
status
to
'error'
and
mark
content
type
of
full-resource
,
the
error
resources
involved
in
triggering
the
resource.
If
notification
are
included
in
the
notification
succeeds,
bundle.
When
a
subscriber
receives
a
notification
of
this
type,
resources
are
already
present
in
the
server
should
update
bundle,
though
the
status
subscriber
may
need
to
"active
again.
If
a
subscription
fails
consistently
fetch
additional
resources
from
the
server.
For
example,
the
if
the
notification
is
for
a
server
topic
about
patient
admission,
the
subscriber
may
choose
set
require
related
Observation
resources.
When
the
subscription
status
content
type
is
full-resource
,
the
SubscriptionStatus.notificationEvent
structure
SHALL
include
references
to
off
and
stop
trying
the
appropriate
focus
resources
in
the
SubscriptionStatus.notificationEvent.focus
element.
This
provides
clients
a
fixed
location
to
send
notifications.
consolidate
IDs
for
all
notification
types.
Notification
bundles
for
full-resource
subscriptions
SHALL
contain,
in
addition
to
the
SubscriptionStatus
,
at
least
one
Bundle.entry
for
each
resource
relevant
to
the
notification.
For
example,
a
notification
for
a
topic
based
on
Encounter
SHALL
include
an
Encounter
and
MAY
include
additional
resources
deemed
relevant
(e.g.,
the
relevant
Patient).
Each
Bundle.entry
for
a
full-resource
notification
SHALL
contain
a
relevant
resource
in
the
entry.resource
element.
If
a
subscription
nominates
server
cannot
include
the
resource
contents
due
to
an
issue
with
a
fixed
end
date,
specific
notification,
the
server
automatically
deletes
it
at
SHALL
populate
the
specified
time.
entry.request
and/or
entry.response
elements.
Applications
that
wish
to
track
whether
notifications
have
been
sent
for
particular
resources
(or
versions
This
specification
defines
a
core
set
of
resources)
can
look
at
channel
types
to
cover
the
AuditEvent
resources.
For
example:
majority
of
common
use
cases.
Servers
MAY
define
additional
channel
types
as
needed.
Below
is
some
guidance
for
implementers
to
consider
when
selecting
a
channel
type.
This
search
will
return
all
The
FHIR
standard
makes
extensive
use
of
the
AuditEvent
resources
that
RESTful
model.
Given
the
popularity
of
REST
and
widespread
adoption,
most
implementers
should
consider
using
REST-hook
channels
whenever
possible.
In
general,
REST-based
systems
are
about
Patient
well-supported
(e.g.,
tooling,
infrastructure,
documentation,
etc.),
and
will
present
the
lowest
bar
for
implementation.
Websockets
are
unique
in
the
subscription
sub-system
pre-defined
channel
types
in
being
the
only
channel
that
actually
handles
notifications.
This
is
planned
does
not
require
the
client
to
have
an
endpoint.
Due
to
be
resolved
in
a
future
version
of
this
specification.
In
property,
the
mean
time,
servers
are
encouraged
to
create
AuditEvent
records
when
performing
notifications
and
document
how
websocket
channel
is
very
useful
for
clients
can
identify
the
relevant
records
when
searching.
where
creating
an
endpoint
would
be
difficult
or
impossible
(e.g.,
mobile
clients,
web-based
clients,
etc.).
The
Email
channel
is
the
notifications
only
channel
that
could
contest
REST
in
non-FHIR
implementations.
That
said,
Email
communication
is
often
high-latency
and
is
typically
used
for
communication
to
individuals
-
not
applications.
Email
channels
are
sent
particularly
useful
in
response
the
context
of
these
non-application
use
cases,
such
as
public
health
notifications.
For
example,
if
a
public
health
agency
does
not
have
the
ability
or
desire
to
build
a
subscription,
such
custom
RESTful
solution
(e.g.,
creating
and
maintaining
an
endpoint
to
receive
notifications,
as
when
sending
emails.
well
as
software
to
consume
those
notifications),
it
is
straightforward
to
map
notifications
to
email
addresses
or
aliases.
This
returns
FHIR
Messaging
is
a
list
of
mechanism
defined
to
allow
for
non-RESTful
communication
between
FHIR
servers
and
clients.
One
common
use
case
is
when
connectivity
is
an
issue
(e.g.,
remote
sites
that
batch
all
communications
sent
by
a
subscription.
TODO:
search
on
payload....
when
connections
are
available).
This
channel
defines
how
to
integrate
topic-based
subscriptions
with
the
FHIR
Messaging
model.
For use cases that are not well-met by any of the predefined channels, the Subscriptions Framework allows for custom channel definitions. Some examples of scenarios where custom channels may be applicable include:
This
uses
an
empty
POST
message
to
alert
the
subscriber
that
new
results
are
available
-
POST
to
[base]/Subscription:
{
"resourceType": "Subscription",
"criteria": "Observation?name=http://loinc.org|1975-2&_format=json",
"channel": {
"type": "rest-hook",
"endpoint": "https://biliwatch.com/customers/mount-auburn-miu/on-result",
"header": ["Authorization: Bearer secret-token-abc-123"]
}
}
When
To
receive
notifications
via
HTTP/S
POST,
a
resource
is
created
or
updated
that
meets
client
requests
a
subscription
with
the
criteria,
channel
type
of
`rest-hook`
(from
the
server
sends
a
POST
request
subscription-channel-type
Code
System)
and
and
an
endpoint
(
Subscription.endpoint
)
with
no
body
to
the
nominated
desired
URL.
Note
that
this
URL
must
be
accessible
by
the
hosting
server.
When
To
convey
an
event
notification,
the
subscriber
receives
server
POSTs
a
POST
to
to
the
https://biliwatch.com/customers/mount-auburn-miu/on-result
,
it
re-issues
the
criteria
as
a
query
notification
Bundle
server,
appending
client's
nominated
endpoint
URL
per
the
format
requests
in
the
Subscription:
&_since=:last
content-type
Since
payload
When
a
subscription
is
missing,
the
data
in
created
for
a
REST
Hook
channel
type,
the
resources
is
only
available
through
server
SHALL
set
initial
status
to
requested
,
pending
verification
of
the
REST
API,
which
helps
consolidate
authorization
nominated
endpoint
URL.
After
a
successful
handshake
notification
has
been
sent
and
authentication
logic.
The
accepted,
the
server
must
append
SHALL
update
the
headers,
if
any
are
given,
status
to
active
.
Any
errors
in
the
POST
request
that
it
makes
to
initial
handshake
SHALL
result
in
the
client.
status
being
changed
to
error
.
Alternatively,
the
server
can
be
asked
to
send
the
entire
resource
to
a
nominated
FHIR
end-point.
This
is
usually
appropriate
An
example
workflow
for
defining
routing
rules
within
a
managed
eco-system
such
as
establishing
a
healthcare
institution.
rest-hook
subscription
is
shown
below.
Subscription
with
the
channelType
set
to
rest-hook
.
requested
.
handshake
notification.
200
).
heartbeat
at
any
time
(SHOULD
at
least
once
per
heartbeatPeriod
).
heartbeat
via
HTTP
POST
and
returns
an
HTTP
success
code
(e.g.,
200
).
event-notification
when
triggered.
event-notification
via
HTTP
POST
and
returns
an
HTTP
code
(e.g.,
200
).
HTTP
is
neither
a
secure
nor
an
encrypted
channel,
nor
does
it
provide
endpoint
verification.
It
is
strongly
recommended
that
implementations
refuse
requests
to
be
able
send
notifications
to
use
URLs
using
the
nominated
server.
HTTP
protocol
(use
HTTPS
instead).
Subscriptions
are
created
exclusively
via
While
the
primary
interface
for
FHIR
servers
is
the
FHIR
REST
API.
But
API,
notifications
need
not
occur
via
REST.
Indeed,
some
subscribers
may
be
unable
to
expose
an
outward-facing
HTTP
server
to
receive
triggered
notifications.
For
example,
a
pure
client-side
Web
app
or
mobile
app
may
want
to
subscribe
to
a
data
feed
without
polling
using
the
/history
operation.
feed.
This
can
be
accomplished
using
a
websocket
notification
channel.
channel
from
the
subscription-channel-type
Code
System.
A
client
can
declare
its
intention
to
listen
To
receive
notifications
via
Web
Sockets:
{
"channel": {
"type": "websocket"
}
}
The
subscriber
would
then
initiate
WebSocket,
a
Web
Socket
connection
to
the
server,
at
client
requests
a
URL
advertised
in
subscription
with
the
FHIR
server's
Capability
statement
(subscriptions/webSocketUrl
(todo)).
A
simple
protocol
channel
type
(
Subscription.channelType
)
of
websocket
(from
the
subscription-channel-type
Code
System).
Note
that
no
endpoint
(
Subscription.endpoint
)
is
used
in
websocket
channels,
since
clients
connect
to
listen
a
server-hosted
websocket
URL.
An
example
workflow
for
notifications:
receiving
notifications
via
websockets
is
shown
below:
Subscription
with
the
channelType
set
to
websocket
.
token
presentation).
,
expiration
,
and
websocket-url
.
websocket-url
(
wss://
preferred).
bind-with-token
message
websocket-url
,
and
serially
for
continued
operation
over
a
single
websocket
connection.
handshake
messages
via
websockets
(one
per
Subscription
included
in
the
token).
Note:
some
servers
may
additionally
send
one
or
more
event-notification
messages
at
this
time
(e.g.,
all
messages
since
last
connected,
last
'n'
messages,
etc.).
Clients
are
expected
to
handle
either
flow.
heartbeat
at
any
time
(SHOULD
at
least
once
per
heartbeatPeriod
).
event-notification
when
triggered.
$get-ws-binding-token
operation
via
REST.
token
,
expiration
,
and
websocket-url
.
Note
that
the
token
and
websocket-url
MAY
be
the
same
or
new
values,
as
determined
by
the
server.
websocket-url
is
different
from
the
existing
connection,
the
Client
establishes
a
new
connection
to
bind-with-token
message
via
websockets,
with
the
token
provided
by
the
server.
Note:
this
operation
can
be
repeated
concurrently
for
multiple
subscriptions
that
return
the
same
websocket-url
,
and
serially
for
continued
operation
over
a
single
websocket
connection.
handshake
messages
via
websockets
(one
per
Subscription
included
in
the
token).
Note:
some
servers
may
additionally
send
one
or
more
event-notification
messages
at
this
time
(e.g.,
all
messages
since
last
connected,
last
'n'
messages,
etc.).
Clients
are
expected
to
Notes:
Note to Implementers: The Websocket channel type needs more testing and feedback to ensure all requirements are met before finalizing the specification.
A
WebSocket
security
poses
several
challenges
specific
to
the
channel.
When
implementing
websockets
for
notifications,
please
keep
in
mind
the
following
list
of
some
areas
of
concern:
does
not
include
the
ability
to
include
them.
While
the
primary
interface
for
its
user
FHIR
servers
is
the
FHIR
REST
API,
notifications
need
not
occur
via
REST.
Indeed,
some
subscribers
may
be
unable
to
maintain
an
outward-facing
HTTP
server
to
receive
triggered
notifications.
For
example,
a
public
health
organization
may
want
to
be
notified
of
outbreaks
of
various
illnesses.
This
can
be
accomplished
using
an
email
notification
channel.
To
receive
notifications
by
email:
via
Email,
a
client
requests
a
subscription
with
the
channel
type
(
Subscription.channelType
)
of
email
(from
the
subscription-channel-type
Code
System)
and
an
endpoint
(
Subscription.endpoint
)
with
the
desired
email
URI
(e.g.,
mailto:public_health_notifications@example.org
).
The
server
would
will
send
a
new
message
for
each
matching
resource.
The
body
of
the
email
may
time
a
notification
should
be
empty,
sent
(e.g.,
per
event
or
it
may
contain
per
batch).
The
server
will
create
a
reference
to
message
based
on
the
search
or
values
present
in
the
matching
resource.
It
is
at
Subscription.contentType
and
Subscription.content
fields.
If
a
server
cannot
honor
the
discretion
of
requested
combination,
the
server
as
to
how
much
information
should
reject
the
Subscription
request
rather
than
send
unexpected
email
messages.
The email channel sets two guidelines about content:
Due
to
provide.
these
guidelines,
the
Subscription.channel.header
Subscription.contentType
sets
refers
to
the
subject
content
of
the
email.
The
email
should
be
secured
appropriately,
such
as
using
Direct,
as
specified
by
the
rules
body
of
the
applicable
jurisdictions.
SMS
works
very
similarly:
message.
Attachment
type
information
can
be
appended
as
a
MIME
parameter,
for
example:
text/plain
:
a
plain-text
body
with
no
attachment
text/html
:
an
HTML
body
with
no
attachment
text/plain;attach=application/fhir+json
:
a
plain-text
body
with
a
FHIR
JSON
bundle
attached
text/html;attach=application/fhir+xml
:
an
HTML
body
with
a
FHIR
XML
bundle
attached
Note:
SMS
messages
are
extremely
limited
in
size,
so
The
channel.payload
Subscription.content
will
usually
field
SHALL
be
omitted
(signifying
that
no
payload
is
applied
to
any
attachments,
and
MAY
be
sent).
The
recipient
may
be
human,
but
this
is
applied
to
body
contents
(depending
on
server
implementation).
However,
a
server
must
not
always
include
a
body
which
exceeds
the
case.
Irrespective
of
size,
most
servers
will
refuse
specified
content
level.
For
example,
a
server
may
choose
to
send
payloads
always
include
a
standard
message
in
SMS
for
security
reasons,
the
body
of
the
message
containing
no
PHI
and
may
refuse
vary
the
attachment,
but
cannot
include
PHI
in
the
body
of
an
email
when
the
content
is
set
to
send
emails
unless
encrypted.
empty
.
A
mime/type
of
text/plain
can
be
useful
An
example
workflow
using
the
email
channel
type
is
included
below.
Subscription
with
channelType
set
to
email
.
active
.
requested
.
250:
OK
).
heartbeat
at
any
time
(SHOULD
at
least
once
per
heartbeatPeriod
).
event-notification
at
any
time.
Email
(SMTP)
is
not
a
secure
channel.
Implementers
must
ensure
that
any
messages
containing
PHI
have
been
secured
according
to
their
policy
requirements
(e.g.,
use
of
a
system
such
as
Direct
).
A
client
can
register
for
its
user
There
are
times
when
it
is
desireable
to
use
Subscriptions
as
a
communication
channel
between
FHIR
servers
that
are
connected
via
Messaging
instead
of
REST.
This
can
be
accomplished
using
a
Subscription
with
the
channel
type
of
message
.
To
receive
notifications
via
messaging,
a
client
should
request
a
subscription
with
the
channel
type
(
Subscription.channelType
)
of
message
and
set
the
endpoint
(
Subscription.endpoint
)
to
the
destination
FHIR
server
base
URL.
Note
that
this
URL
must
be
accessible
by
messaging
:
the
hosting
server.
For
each
matching
resource,
a
The
FHIR
server
hosting
the
subscription
(server)
will
send
FHIR
messages
to
the
destination
FHIR
server
(endpoint)
as
needed.
These
messages
will,
as
the
contents
of
the
message,
have
a
fully-formed
subscription-notification
Bundle.
An
example
message
can
be
found
here
.
An
example
workflow
using
the
message
channel
type
is
included
below.
Subscription
with
the
channelType
set
to
message
.
requested
.
handshake
notification.
heartbeat
at
any
time
(SHOULD
at
least
once
per
heartbeatPeriod
).
event-notification
at
any
time.
Note to Implementers: The Messaging channel type needs more testing and feedback to ensure all requirements are met before finalizing the specification.
Servers MAY require that the end-point is white-listed prior to allowing these kinds of subscriptions. Additionally, servers MAY impose authorization/authentication requirements for server to server communication (e.g., certificate pinning, etc.).
Defining
a
new
channel
type
requires
clear
communication
to
implementers
of
both
clients
and
servers
around
requirements
and
expectations.
Below
are
some
areas
which
should
be
considered
when
creating
a
channel.
Anyone
defining
a
channel
type
is
encouraged
to
publish
their
definition
at
registry.fhir.org
.
STU Note:Note to Implementers: Warning: This section is still in early drafting; feedback from topic authors is welcome to refine the following guidance.
At a minimum, the following items should be defined:
Subscription.channelType
(e.g.,
'secure-mq'
instead
of
'channel0012')
Subscription.endpoint
(e.g.,
URI,
etc.)
Subscription.header
field
values
(e.g.,
REST-hook
defines
as
Auth
headers
included
in
a
POST)
Subscription.contentType
(e.g.,
email
defines
this
as
the
handshake
notifications
are
heartbeat
notifications
are
used,
and
guidance
on
timings
if
they
are
Defining
a
channel
has
security
implications.
While
it
is
not
expected
that
authors
cover
all
aspects
of
security,
guidance
specific
to
the
channel
SHOULD
be
resolved
during
provided.
For
example,
when
discussing
REST-hooks,
this
specification
includes
guidance
about
using
HTTPS
over
HTTP.
If
the
trial
channel
CANNOT
be
secured,
that
should
be
stated
with
a
warning
not
to
transfer
PHI.
If
the
channel
is
or
can
be
secured,
guidance
should
be
given
on
how
configurations
relate
to
PHI
safety,
for
example:
The
subscription
resource
is
authored
by
the
client
with
an
initial
status
of
requested
.
A
new
subscription
is
created
on
the
server
using
the
RESTful
create
or
update
interaction.
After
a
successful
transaction,
the
client
parses
the
Location
header
and
saves
the
new
Subscription's
logical
id
for
use
period.
in
subsequent
operations.
Feedback
When
the
server
receives
a
subscription,
it
SHOULD
check
that
it
is
welcome
here
prepared
to
accept/process
the
subscription.
If
it
is,
it
sets
the
subscription
to
requested
and
process
it
like
a
normal
create
.
If
it
isn't,
it
SHOULD
return
an
error
with
an
OperationOutcome
instead
of
processing
the
create
.
The criteria are subject to the same limitations as the client that created it, such as access to patient compartments etc. Note that the subscription MAY remain active after the client access tokens expire.
Once
the
server
has
activated
the
subscription,
it
sets
the
status
to
active
(note:
the
server
may
do
this
as
it
accepts
the
resource
if
it
wants).
An appropriately authorized client can use search and/or history operations to see what subscriptions are currently active on the server. Once the subscription is no longer desired, the client deletes the subscription from the server.
The
server
may
retry
the
notification
a
fixed
number
of
times
and/or
refer
errors
to
its
own
alert
logs.
If
the
notification
fails,
the
server
SHOULD
set
the
status
to
error
and
mark
the
error
in
the
resource.
If
the
notification
succeeds,
the
server
SHOULD
update
the
status
to
active
and
may
remove
any
error
codes.
If
a
subscription
fails
consistently
a
server
may
choose
set
the
subscription
status
to
off
and
stop
trying
to
send
notifications.
Errors
a
server
wishes
to
make
accessible
to
clients
are
stored
in
Subscription.error
.
Servers
should
provide
a
mechanism
for
clearing
errors
(e.g.,
when
resetting
a
Subscription.status
back
to
requested
after
an
error).
Since
Subscription.error
represents
errors
that
a
server
has
experienced,
a
server
SHOULD
NOT
allow
clients
to
add
errors.
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
| Name | Type | Description | Expression | In Common |
| contact | token | Contact details for the subscription | Subscription.contact | |
|
|
|
|
|
|
| payload | token | The mime-type of the notification payload |
|
|
| status | token | The current state of the subscription | Subscription.status | |
| type | token | The type of channel for the sent notifications |
|
|
| url | uri | The uri that will receive the notifications |
|