---
title: "POST /v1/{+parent}/hl7V2Stores"
method: POST
path: "/v1/{+parent}/hl7V2Stores"
tags: ["projects"]
---

# POST /v1/{+parent}/hl7V2Stores

`POST /v1/{+parent}/hl7V2Stores`

Creates a new HL7v2 store within the parent dataset.

## Path parameters

- `parent` string, required

## Query parameters

- `hl7V2StoreId` string

## Request body

- Hl7V2Store — Represents an HL7v2 store.
  - `notificationConfigs` Hl7V2NotificationConfig[] — Optional. A list of notification configs. Each configuration uses a filter to determine whether to publish a message (both Ingest & Create) on the corresponding notification destination. Only the message name is sent as part of the notification. Supplied by the client.
    - `pubsubTopic` string — The [Pub/Sub](https://cloud.google.com/pubsub/docs/) topic that notifications of changes are published on. Supplied by the client. The notification is a `PubsubMessage` with the following fields: * `PubsubMessage.Data` contains the resource name. * `PubsubMessage.MessageId` is the ID of this notification. It's guaranteed to be unique within the topic. * `PubsubMessage.PublishTime` is the time when the message was published. Note that notifications are only sent if the topic is non-empty. [Topic names](https://cloud.google.com/pubsub/docs/overview#names) must be scoped to a project. The Cloud Healthcare API service account, service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com, must have publisher permissions on the given Pub/Sub topic. Not having adequate permissions causes the calls that send notifications to fail. If a notification cannot be published to Pub/Sub, errors are logged to Cloud Logging. For more information, see [Viewing error logs in Cloud Logging](https://cloud.google.com/healthcare/docs/how-tos/logging)).
    - `filter` string — Optional. Restricts notifications sent for messages matching a filter. If this is empty, all messages are matched. The following syntax is available: * A string field value can be written as text inside quotation marks, for example `"query text"`. The only valid relational operation for text fields is equality (`=`), where text is searched within the field, rather than having the field be equal to the text. For example, `"Comment = great"` returns messages with `great` in the comment field. * A number field value can be written as an integer, a decimal, or an exponential. The valid relational operators for number fields are the equality operator (`=`), along with the less than/greater than operators (`<`, `<=`, `>`, `>=`). Note that there is no inequality (`!=`) operator. You can prepend the `NOT` operator to an expression to negate it. * A date field value must be written in `yyyy-mm-dd` form. Fields with date and time use the RFC3339 time format. Leading zeros are required for one-digit months and days. The valid relational operators for date fields are the equality operator (`=`) , along with the less than/greater than operators (`<`, `<=`, `>`, `>=`). Note that there is no inequality (`!=`) operator. You can prepend the `NOT` operator to an expression to negate it. * Multiple field query expressions can be combined in one query by adding `AND` or `OR` operators between the expressions. If a boolean operator appears within a quoted string, it is not treated as special, it's just another part of the character string to be matched. You can prepend the `NOT` operator to an expression to negate it. The following fields and functions are available for filtering: * `message_type`, from the MSH-9.1 field. For example, `NOT message_type = "ADT"`. * `send_date` or `sendDate`, the YYYY-MM-DD date the message was sent in the dataset's time_zone, from the MSH-7 segment. For example, `send_date < "2017-01-02"`. * `send_time`, the timestamp when the message was sent, using the RFC3339 time format for comparisons, from the MSH-7 segment. For example, `send_time < "2017-01-02T00:00:00-05:00"`. * `create_time`, the timestamp when the message was created in the HL7v2 store. Use the RFC3339 time format for comparisons. For example, `create_time < "2017-01-02T00:00:00-05:00"`. * `send_facility`, the care center that the message came from, from the MSH-4 segment. For example, `send_facility = "ABC"`. * `PatientId(value, type)`, which matches if the message lists a patient having an ID of the given value and type in the PID-2, PID-3, or PID-4 segments. For example, `PatientId("123456", "MRN")`. * `labels.x`, a string value of the label with key `x` as set using the Message.labels map. For example, `labels."priority"="high"`. The operator `:*` can be used to assert the existence of a label. For example, `labels."priority":*`.
  - `parserConfig` ParserConfig — The configuration for the parser. It determines how the server parses the messages.
    - `version` 'PARSER_VERSION_UNSPECIFIED' | 'V1' | 'V2' | 'V3' — Immutable. Determines the version of both the default parser to be used when `schema` is not given, as well as the schematized parser used when `schema` is specified. This field is immutable after HL7v2 store creation.
    - `allowNullHeader` boolean — Optional. Determines whether messages with no header are allowed.
    - `segmentTerminator` string, byte — Optional. Byte(s) to use as the segment terminator. If this is unset, '\r' is used as segment terminator, matching the HL7 version 2 specification.
    - `schema` SchemaPackage — A schema package contains a set of schemas and type definitions.
      - `types` Hl7TypesConfig[] — Optional. Schema type definitions that are layered based on their VersionSources that match the incoming message. Type definitions present in higher indices override those in lower indices with the same type name if their VersionSources all match an incoming message.
        - `version` VersionSource[] — The version selectors that this config applies to. A message must match ALL version sources to apply.
          - `mshField` string — The field to extract from the MSH segment. For example, "3.1" or "18[1].1".
          - `value` string — The value to match with the field. For example, "My Application Name" or "2.3".
        - `type` Type[] — The HL7v2 type definitions.
          - `name` string — The name of this type. This would be the segment or datatype name. For example, "PID" or "XPN".
          - `primitive` 'PRIMITIVE_UNSPECIFIED' | 'STRING' | 'VARIES' | 'UNESCAPED_STRING' — If this is a primitive type then this field is the type of the primitive For example, STRING. Leave unspecified for composite types.
          - `fields` Field[] — The (sub) fields this type has (if not primitive).
            - `table` string — The HL7v2 table this field refers to. For example, PID-15 (Patient's Primary Language) usually refers to table "0296".
            - `minOccurs` integer — The minimum number of times this field must be present/repeated.
            - `name` string — The name of the field. For example, "PID-1" or just "1".
            - `maxOccurs` integer — The maximum number of times this field can be repeated. 0 or -1 means unbounded.
            - `type` string — The type of this field. A Type with this name must be defined in an Hl7TypesConfig.
      - `unexpectedSegmentHandling` 'UNEXPECTED_SEGMENT_HANDLING_MODE_UNSPECIFIED' | 'FAIL' | 'SKIP' | 'PARSE' — Optional. Determines how unexpected segments (segments not matched to the schema) are handled.
      - `schematizedParsingType` 'SCHEMATIZED_PARSING_TYPE_UNSPECIFIED' | 'SOFT_FAIL' | 'HARD_FAIL' — Optional. Determines how messages that fail to parse are handled.
      - `ignoreMinOccurs` boolean — Optional. Flag to ignore all min_occurs restrictions in the schema. This means that incoming messages can omit any group, segment, field, component, or subcomponent.
      - `schemas` Hl7SchemaConfig[] — Optional. Schema configs that are layered based on their VersionSources that match the incoming message. Schema configs present in higher indices override those in lower indices with the same message type and trigger event if their VersionSources all match an incoming message.
        - `version` VersionSource[] — Each VersionSource is tested and only if they all match is the schema used for the message.
          - `mshField` string — The field to extract from the MSH segment. For example, "3.1" or "18[1].1".
          - `value` string — The value to match with the field. For example, "My Application Name" or "2.3".
        - `messageSchemaConfigs` object — Map from each HL7v2 message type and trigger event pair, such as ADT_A04, to its schema configuration root group.
  - `name` string — Identifier. Resource name of the HL7v2 store, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/hl7V2Stores/{hl7v2_store_id}`.
  - `labels` object — User-supplied key-value pairs used to organize HL7v2 stores. Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, and must conform to the following PCRE regular expression: \p{Ll}\p{Lo}{0,62} Label values are optional, must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} No more than 64 labels can be associated with a given store.
  - `rejectDuplicateMessage` boolean — Optional. Determines whether to reject duplicate messages. A duplicate message is a message with the same raw bytes as a message that has already been ingested/created in this HL7v2 store. The default value is false, meaning that the store accepts the duplicate messages and it also returns the same ACK message in the IngestMessageResponse as has been returned previously. Note that only one resource is created in the store. When this field is set to true, CreateMessage/IngestMessage requests with a duplicate message will be rejected by the store, and IngestMessageErrorDetail returns a NACK message upon rejection.

## Response `200`

Successful response

---

[API](https://skmtc.net/google/apis/healthcare.md) · [All operations](https://skmtc.net/google/apis/healthcare/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/google/healthcare/revisions/cdec6fe2315f/schema)
