shapes
type: ShapeGeneration
shape reference chain limit: 5
omitted shape reference count: 0

JsonApiResourceIdentifierShape
type: NodeShape
target class: JsonApiResourceIdentifier
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1

RelationshipLinksShape
type: NodeShape
target class: RelationshipLinks
property:
  path: self
  name: self
  datatype: anyURI
  min count: 1
  max count: 1
property:
  path: related
  name: related
  datatype: string
  min count: 1
  max count: 1

ObjectLinksShape
type: NodeShape
target class: ObjectLinks
property:
  path: self
  name: self
  datatype: anyURI
  min count: 1
  max count: 1

JsonApiRequiredToOneRelationshipShape
type: NodeShape
target class: JsonApiRequiredToOneRelationship
property:
  path: data
  name: data
  node: JsonApiResourceIdentifierShape
  class: JsonApiResourceIdentifier
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: RelationshipLinksShape
  class: RelationshipLinks
  node kind: BlankNodeOrIRI
  max count: 1

JsonApiToManyRelationshipShape
type: NodeShape
target class: JsonApiToManyRelationship
property:
  path: data
  name: data
  node: JsonApiResourceIdentifierShape
  class: JsonApiResourceIdentifier
  node kind: BlankNodeOrIRI
property:
  path: links
  name: links
  node: RelationshipLinksShape
  class: RelationshipLinks
  node kind: BlankNodeOrIRI
  max count: 1

CollectionLinksShape
type: NodeShape
target class: CollectionLinks
property:
  path: self
  name: self
  datatype: anyURI
  min count: 1
  max count: 1
property:
  path: next
  name: next
  datatype: string
  max count: 1
property:
  path: prev
  name: prev
  datatype: string
  max count: 1

RelativeTimeframeShape
type: NodeShape
target class: RelativeTimeframe
property:
  path: key
  name: key
  datatype: string
  min count: 1
  max count: 1
  in: last_12_months
  in: last_30_days
  in: last_365_days
  in: last_3_months
  in: last_7_days
  in: last_90_days
  in: last_month
  in: last_week
  in: last_year
  in: this_month
  in: this_week
  in: this_year
  in: today
  in: yesterday

CustomTimeframeShape
type: NodeShape
target class: CustomTimeframe
property:
  path: start
  name: start
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: end
  name: end
  datatype: dateTime
  min count: 1
  max count: 1

KlaviyoErrorResponseShape
type: NodeShape
target class: KlaviyoErrorResponse
property:
  path: statusCode
  name: status code
  datatype: integer
  min count: 1
  max count: 1
  in: 400
  in: 401
  in: 403
  in: 404
  in: 409
  in: 429
  in: 500
property:
  path: contentType
  name: content type
  datatype: string
  min count: 1
  max count: 1
  has value: application/vnd.api+json
property:
  path: body
  name: body
  node: KlaviyoErrorDocumentShape
  class: KlaviyoErrorDocument
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

KlaviyoErrorDocumentShape
type: NodeShape
target class: KlaviyoErrorDocument
property:
  path: errors
  name: errors
  node: KlaviyoErrorShape
  class: KlaviyoError
  node kind: BlankNodeOrIRI

KlaviyoErrorShape
type: NodeShape
target class: KlaviyoError
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: code
  name: code
  datatype: string
  min count: 1
  max count: 1
property:
  path: title
  name: title
  datatype: string
  min count: 1
  max count: 1
property:
  path: detail
  name: detail
  datatype: string
  min count: 1
  max count: 1
property:
  path: source
  name: source
  node: KlaviyoErrorSourceShape
  class: KlaviyoErrorSource
  node kind: BlankNodeOrIRI
  max count: 1

KlaviyoErrorSourceShape
type: NodeShape
target class: KlaviyoErrorSource
property:
  path: pointer
  name: pointer
  datatype: string
  max count: 1
property:
  path: parameter
  name: parameter
  datatype: string
  max count: 1

ProfileShape
type: NodeShape
target class: Profile
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: profile
property:
  path: id
  name: id
  datatype: string
  max count: 1
property:
  path: attributes
  name: attributes
  node: ProfileAttributesShape
  class: ProfileAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: ProfileRelationshipsShape
  class: ProfileRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

ProfileAttributesShape
type: NodeShape
target class: ProfileAttributes
property:
  path: email
  name: email
  datatype: string
  max count: 1
property:
  path: phoneNumber
  name: phone number
  datatype: string
  max count: 1
property:
  path: externalId
  name: external id
  datatype: string
  max count: 1
property:
  path: firstName
  name: first name
  datatype: string
  max count: 1
property:
  path: lastName
  name: last name
  datatype: string
  max count: 1
property:
  path: organization
  name: organization
  datatype: string
  max count: 1
property:
  path: locale
  name: locale
  datatype: string
  max count: 1
property:
  path: title
  name: title
  datatype: string
  max count: 1
property:
  path: image
  name: image
  datatype: anyURI
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1
property:
  path: lastEventDate
  name: last event date
  datatype: dateTime
  max count: 1
property:
  path: properties
  name: properties
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: location
  name: location
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: subscriptions
  name: subscriptions
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: predictiveAnalytics
  name: predictive analytics
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

ProfileRelationshipsShape
type: NodeShape
target class: ProfileRelationships
property:
  path: lists
  name: lists
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: segments
  name: segments
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: pushTokens
  name: push tokens
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

ConversationShape
type: NodeShape
target class: Conversation
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: conversation
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: ConversationRelationshipsShape
  class: ConversationRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

ConversationRelationshipsShape
type: NodeShape
target class: ConversationRelationships
property:
  path: profile
  name: profile
  node: JsonApiRequiredToOneRelationshipShape
  class: JsonApiRequiredToOneRelationship
  node kind: BlankNodeOrIRI
  max count: 1

PushTokenShape
type: NodeShape
target class: PushToken
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: push-token
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: PushTokenAttributesShape
  class: PushTokenAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: PushTokenRelationshipsShape
  class: PushTokenRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

PushTokenAttributesShape
type: NodeShape
target class: PushTokenAttributes
property:
  path: created
  name: created
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: token
  name: token
  datatype: string
  min count: 1
  max count: 1
property:
  path: enablementStatus
  name: enablement status
  datatype: string
  min count: 1
  max count: 1
  in: AUTHORIZED
  in: DENIED
  in: NOT_DETERMINED
  in: PROVISIONAL
  in: UNAUTHORIZED
property:
  path: platform
  name: platform
  datatype: string
  min count: 1
  max count: 1
  in: android
  in: ios
property:
  path: vendor
  name: vendor
  datatype: string
  min count: 1
  max count: 1
property:
  path: background
  name: background
  datatype: string
  min count: 1
  max count: 1
property:
  path: recordedDate
  name: recorded date
  datatype: string
  min count: 1
  max count: 1
property:
  path: metadata
  name: metadata
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

PushTokenRelationshipsShape
type: NodeShape
target class: PushTokenRelationships
property:
  path: profile
  name: profile
  node: JsonApiRequiredToOneRelationshipShape
  class: JsonApiRequiredToOneRelationship
  node kind: BlankNodeOrIRI
  max count: 1

MetricAttributesShape
type: NodeShape
target class: MetricAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: created
  name: created
  datatype: string
  max count: 1
property:
  path: updated
  name: updated
  datatype: string
  max count: 1
property:
  path: integration
  name: integration
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

MetricRelationshipsShape
type: NodeShape
target class: MetricRelationships
property:
  path: flowTriggers
  name: flow triggers
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

MetricShape
type: NodeShape
target class: Metric
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: MetricAttributesShape
  class: MetricAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: MetricRelationshipsShape
  class: MetricRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: metric

FlowAttributesShape
type: NodeShape
target class: FlowAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: status
  name: status
  datatype: string
  max count: 1
property:
  path: archived
  name: archived
  datatype: boolean
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1
property:
  path: triggerType
  name: trigger type
  datatype: string
  max count: 1

FlowRelationshipsShape
type: NodeShape
target class: FlowRelationships
property:
  path: flowActions
  name: flow actions
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: tags
  name: tags
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

FlowShape
type: NodeShape
target class: Flow
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: FlowAttributesShape
  class: FlowAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: FlowRelationshipsShape
  class: FlowRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow

ListAttributesShape
type: NodeShape
target class: ListAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1
property:
  path: optInProcess
  name: opt in process
  datatype: string
  max count: 1

ListRelationshipsShape
type: NodeShape
target class: ListRelationships
property:
  path: profiles
  name: profiles
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: tags
  name: tags
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: flowTriggers
  name: flow triggers
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

ListShape
type: NodeShape
target class: List
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: ListAttributesShape
  class: ListAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: ListRelationshipsShape
  class: ListRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: list

TagAttributesShape
type: NodeShape
target class: TagAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1

TagRelationshipsShape
type: NodeShape
target class: TagRelationships
property:
  path: tagGroup
  name: tag group
  node: JsonApiRequiredToOneRelationshipShape
  class: JsonApiRequiredToOneRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: lists
  name: lists
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: segments
  name: segments
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: campaigns
  name: campaigns
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: flows
  name: flows
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

TagShape
type: NodeShape
target class: Tag
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: TagAttributesShape
  class: TagAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: TagRelationshipsShape
  class: TagRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: tag

SegmentAttributesShape
type: NodeShape
target class: SegmentAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: definition
  name: definition
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1
property:
  path: isActive
  name: is active
  datatype: boolean
  max count: 1
property:
  path: isProcessing
  name: is processing
  datatype: boolean
  max count: 1
property:
  path: isStarred
  name: is starred
  datatype: boolean
  max count: 1

SegmentRelationshipsShape
type: NodeShape
target class: SegmentRelationships
property:
  path: profiles
  name: profiles
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: tags
  name: tags
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: flowTriggers
  name: flow triggers
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

SegmentShape
type: NodeShape
target class: Segment
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: SegmentAttributesShape
  class: SegmentAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: SegmentRelationshipsShape
  class: SegmentRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: segment

TagGroupShape
type: NodeShape
target class: TagGroup
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: tag-group
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: TagGroupAttributesShape
  class: TagGroupAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: TagGroupRelationshipsShape
  class: TagGroupRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

TagGroupAttributesShape
type: NodeShape
target class: TagGroupAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: default
  name: default
  datatype: boolean
  max count: 1
property:
  path: exclusive
  name: exclusive
  datatype: boolean
  max count: 1

TagGroupRelationshipsShape
type: NodeShape
target class: TagGroupRelationships
property:
  path: tags
  name: tags
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

TemplateAttributesShape
type: NodeShape
target class: TemplateAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: editorType
  name: editor type
  datatype: string
  max count: 1
property:
  path: https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/html
  name: html
  datatype: string
  max count: 1
property:
  path: text
  name: text
  datatype: string
  max count: 1
property:
  path: amp
  name: amp
  datatype: string
  max count: 1
property:
  path: definition
  name: definition
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1

TemplateShape
type: NodeShape
target class: Template
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: TemplateAttributesShape
  class: TemplateAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: EmptyRelationshipsShape
  class: EmptyRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: template

ImageAttributesShape
type: NodeShape
target class: ImageAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: imageUrl
  name: image url
  datatype: anyURI
  max count: 1
property:
  path: format
  name: format
  datatype: string
  max count: 1
property:
  path: size
  name: size
  datatype: integer
  max count: 1
property:
  path: hidden
  name: hidden
  datatype: boolean
  max count: 1
property:
  path: updatedAt
  name: updated at
  datatype: dateTime
  max count: 1

ImageShape
type: NodeShape
target class: Image
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: ImageAttributesShape
  class: ImageAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: EmptyRelationshipsShape
  class: EmptyRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: image

FlowActionShape
type: NodeShape
target class: FlowAction
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow-action
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

CatalogItemAttributesShape
type: NodeShape
target class: CatalogItemAttributes
property:
  path: externalId
  name: external id
  datatype: string
  max count: 1
property:
  path: title
  name: title
  datatype: string
  max count: 1
property:
  path: description
  name: description
  datatype: string
  max count: 1
property:
  path: price
  name: price
  datatype: decimal
  max count: 1
property:
  path: url
  name: url
  datatype: anyURI
  max count: 1
property:
  path: imageFullUrl
  name: image full url
  datatype: anyURI
  max count: 1
property:
  path: imageThumbnailUrl
  name: image thumbnail url
  datatype: string
  max count: 1
property:
  path: images
  name: images
  datatype: string
property:
  path: customMetadata
  name: custom metadata
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: published
  name: published
  datatype: boolean
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1

CatalogItemRelationshipsShape
type: NodeShape
target class: CatalogItemRelationships
property:
  path: variants
  name: variants
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

CatalogItemShape
type: NodeShape
target class: CatalogItem
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: CatalogItemAttributesShape
  class: CatalogItemAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: CatalogItemRelationshipsShape
  class: CatalogItemRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: catalog-item

CatalogVariantAttributesShape
type: NodeShape
target class: CatalogVariantAttributes
property:
  path: externalId
  name: external id
  datatype: string
  max count: 1
property:
  path: title
  name: title
  datatype: string
  max count: 1
property:
  path: description
  name: description
  datatype: string
  max count: 1
property:
  path: sku
  name: sku
  datatype: string
  max count: 1
property:
  path: inventoryPolicy
  name: inventory policy
  datatype: integer
  max count: 1
property:
  path: inventoryQuantity
  name: inventory quantity
  datatype: decimal
  max count: 1
property:
  path: price
  name: price
  datatype: decimal
  max count: 1
property:
  path: url
  name: url
  datatype: anyURI
  max count: 1
property:
  path: imageFullUrl
  name: image full url
  datatype: anyURI
  max count: 1
property:
  path: imageThumbnailUrl
  name: image thumbnail url
  datatype: string
  max count: 1
property:
  path: images
  name: images
  datatype: string
property:
  path: customMetadata
  name: custom metadata
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: published
  name: published
  datatype: boolean
  max count: 1
property:
  path: created
  name: created
  datatype: dateTime
  max count: 1
property:
  path: updated
  name: updated
  datatype: dateTime
  max count: 1

CatalogVariantRelationshipsShape
type: NodeShape
target class: CatalogVariantRelationships
property:
  path: item
  name: item
  node: JsonApiRequiredToOneRelationshipShape
  class: JsonApiRequiredToOneRelationship
  node kind: BlankNodeOrIRI
  max count: 1

CatalogVariantShape
type: NodeShape
target class: CatalogVariant
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: CatalogVariantAttributesShape
  class: CatalogVariantAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: CatalogVariantRelationshipsShape
  class: CatalogVariantRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: catalog-variant

CampaignAttributesShape
type: NodeShape
target class: CampaignAttributes
property:
  path: name
  name: name
  datatype: string
  max count: 1
property:
  path: status
  name: status
  datatype: string
  max count: 1
property:
  path: archived
  name: archived
  datatype: boolean
  max count: 1
property:
  path: audiences
  name: audiences
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: sendOptions
  name: send options
  node kind: BlankNodeOrIRI
  or:
    node: EmailSendOptionsShape
    class: EmailSendOptions
  or:
    node: SmsSendOptionsShape
    class: SmsSendOptions
  or:
    node: PushSendOptionsShape
    class: PushSendOptions
  max count: 1
property:
  path: trackingOptions
  name: tracking options
  node kind: BlankNodeOrIRI
  or:
    node: CampaignsEmailTrackingOptionsShape
    class: CampaignsEmailTrackingOptions
  or:
    node: CampaignsSmsTrackingOptionsShape
    class: CampaignsSmsTrackingOptions
  max count: 1
property:
  path: sendStrategy
  name: send strategy
  node kind: BlankNodeOrIRI
  or:
    node: StaticSendStrategyShape
    class: StaticSendStrategy
  or:
    node: SmartSendTimeStrategyShape
    class: SmartSendTimeStrategy
  or:
    node: ThrottledSendStrategyShape
    class: ThrottledSendStrategy
  or:
    node: ImmediateSendStrategyShape
    class: ImmediateSendStrategy
  or:
    node: ABTestSendStrategyShape
    class: ABTestSendStrategy
  or:
    node: UnsupportedSendStrategyShape
    class: UnsupportedSendStrategy
  max count: 1
property:
  path: createdAt
  name: created at
  datatype: dateTime
  max count: 1
property:
  path: scheduledAt
  name: scheduled at
  datatype: dateTime
  max count: 1
property:
  path: updatedAt
  name: updated at
  datatype: dateTime
  max count: 1
property:
  path: sendTime
  name: send time
  datatype: dateTime
  max count: 1

EmailSendOptionsShape
type: NodeShape
target class: EmailSendOptions
property:
  path: useSmartSending
  name: use smart sending
  description: Use smart sending.
  datatype: boolean
  max count: 1

SmsSendOptionsShape
type: NodeShape
target class: SmsSendOptions
property:
  path: useSmartSending
  name: use smart sending
  description: Use smart sending.
  datatype: boolean
  max count: 1

PushSendOptionsShape
type: NodeShape
target class: PushSendOptions
property:
  path: useSmartSending
  name: use smart sending
  description: Use smart sending.
  datatype: boolean
  max count: 1

CampaignsEmailTrackingOptionsShape
type: NodeShape
target class: CampaignsEmailTrackingOptions
property:
  path: addTrackingParams
  name: add tracking params
  description: Whether the campaign needs custom tracking parameters. If set to False, tracking params will not be used.
  datatype: boolean
  max count: 1
property:
  path: customTrackingParams
  name: custom tracking params
  description: A list of custom tracking parameters. If an empty list is given and add_tracking_params is True, uses company defaults.
  node kind: BlankNodeOrIRI
  or:
    node: DynamicTrackingParamShape
    class: DynamicTrackingParam
  or:
    node: StaticTrackingParamShape
    class: StaticTrackingParam
property:
  path: isTrackingClicks
  name: is tracking clicks
  description: Whether the campaign is tracking click events. If not specified, uses company defaults.
  datatype: boolean
  max count: 1
property:
  path: isTrackingOpens
  name: is tracking opens
  description: Whether the campaign is tracking open events. If not specified, uses company defaults.
  datatype: boolean
  max count: 1

DynamicTrackingParamShape
type: NodeShape
target class: DynamicTrackingParam
property:
  path: type
  name: type
  description: The type of the tracking parameter
  datatype: string
  min count: 1
  max count: 1
  has value: dynamic
property:
  path: value
  name: value
  description: The value of the tracking parameter
  datatype: string
  min count: 1
  max count: 1
  in: campaign_id
  in: campaign_name
  in: campaign_name_id
  in: campaign_name_send_day
  in: email_subject
  in: group_id
  in: group_name
  in: group_name_id
  in: link_alt_text
  in: message_type
  in: profile_external_id
  in: profile_id
property:
  path: name
  name: name
  description: Name of the tracking param
  datatype: string
  min count: 1
  max count: 1

StaticTrackingParamShape
type: NodeShape
target class: StaticTrackingParam
property:
  path: type
  name: type
  description: The type of the tracking parameter
  datatype: string
  min count: 1
  max count: 1
  has value: static
property:
  path: value
  name: value
  description: The value of the tracking parameter
  datatype: string
  min count: 1
  max count: 1
property:
  path: name
  name: name
  description: Name of the tracking param
  datatype: string
  min count: 1
  max count: 1

CampaignsSmsTrackingOptionsShape
type: NodeShape
target class: CampaignsSmsTrackingOptions
property:
  path: addTrackingParams
  name: add tracking params
  description: Whether the campaign needs custom tracking parameters. If set to False, tracking params will not be used.
  datatype: boolean
  max count: 1
property:
  path: customTrackingParams
  name: custom tracking params
  description: A list of custom tracking parameters. If an empty list is given and add_tracking_params is True, uses company defaults.
  node kind: BlankNodeOrIRI
  or:
    node: DynamicTrackingParamShape
    class: DynamicTrackingParam
  or:
    node: StaticTrackingParamShape
    class: StaticTrackingParam

StaticSendStrategyShape
type: NodeShape
target class: StaticSendStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: static
property:
  path: datetime
  name: datetime
  description: The time to send at
  datatype: dateTime
  max count: 1
property:
  path: options
  name: options
  description: If the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time.
  node kind: BlankNodeOrIRI
  or:
    node: LocalStaticSendShape
    class: LocalStaticSend
  or:
    node: NonLocalStaticSendShape
    class: NonLocalStaticSend
  max count: 1

LocalStaticSendShape
type: NodeShape
target class: LocalStaticSend
property:
  path: isLocal
  name: is local
  description: Whether the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time.
  datatype: boolean
  min count: 1
  max count: 1
  has value: true
property:
  path: sendPastRecipientsImmediately
  name: send past recipients immediately
  description: Determines if we should send to local recipient timezone if the given time has passed. Only applicable to local sends.
  datatype: boolean
  max count: 1

NonLocalStaticSendShape
type: NodeShape
target class: NonLocalStaticSend
property:
  path: isLocal
  name: is local
  description: Whether the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time.
  datatype: boolean
  min count: 1
  max count: 1
  has value: false

SmartSendTimeStrategyShape
type: NodeShape
target class: SmartSendTimeStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: smart_send_time
property:
  path: date
  name: date
  description: The day to send on
  datatype: date
  max count: 1

ThrottledSendStrategyShape
type: NodeShape
target class: ThrottledSendStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: throttled
property:
  path: datetime
  name: datetime
  description: The time to send at
  datatype: dateTime
  max count: 1
property:
  path: throttlePercentage
  name: throttle percentage
  description: The percentage of recipients per hour to send to.
  datatype: integer
  max count: 1
  in: 10
  in: 11
  in: 13
  in: 14
  in: 17
  in: 20
  in: 25
  in: 33
  in: 50

ImmediateSendStrategyShape
type: NodeShape
target class: ImmediateSendStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: immediate

ABTestSendStrategyShape
type: NodeShape
target class: ABTestSendStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: ab_test_campaign

UnsupportedSendStrategyShape
type: NodeShape
target class: UnsupportedSendStrategy
property:
  path: method
  name: method
  datatype: string
  max count: 1
  in: unsupported

CampaignRelationshipsShape
type: NodeShape
target class: CampaignRelationships
property:
  path: campaignMessages
  name: campaign messages
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: tags
  name: tags
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

CampaignShape
type: NodeShape
target class: Campaign
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: CampaignAttributesShape
  class: CampaignAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: CampaignRelationshipsShape
  class: CampaignRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: campaign

CampaignMessageShape
type: NodeShape
target class: CampaignMessage
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: campaign-message
property:
  path: id
  name: id
  datatype: string
  min count: 1
  max count: 1
property:
  path: attributes
  name: attributes
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

CampaignMetricRowShape
type: NodeShape
target class: CampaignMetricRow
property:
  path: campaignId
  name: campaign id
  datatype: string
  max count: 1
property:
  path: flowId
  name: flow id
  datatype: string
  max count: 1
property:
  path: campaignMessageId
  name: campaign message id
  datatype: string
  max count: 1
property:
  path: flowMessageId
  name: flow message id
  datatype: string
  max count: 1
property:
  path: metricId
  name: metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: profileId
  name: profile id
  datatype: string
  max count: 1
property:
  path: listId
  name: list id
  datatype: string
  max count: 1
property:
  path: segmentId
  name: segment id
  datatype: string
  max count: 1
property:
  path: catalogItemId
  name: catalog item id
  datatype: string
  max count: 1
property:
  path: catalogVariantId
  name: catalog variant id
  datatype: string
  max count: 1
property:
  path: windowStart
  name: window start
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: windowEnd
  name: window end
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: groupings
  name: groupings
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: statistics
  name: statistics
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

FlowMetricRowShape
type: NodeShape
target class: FlowMetricRow
property:
  path: campaignId
  name: campaign id
  datatype: string
  max count: 1
property:
  path: flowId
  name: flow id
  datatype: string
  max count: 1
property:
  path: campaignMessageId
  name: campaign message id
  datatype: string
  max count: 1
property:
  path: flowMessageId
  name: flow message id
  datatype: string
  max count: 1
property:
  path: metricId
  name: metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: profileId
  name: profile id
  datatype: string
  max count: 1
property:
  path: listId
  name: list id
  datatype: string
  max count: 1
property:
  path: segmentId
  name: segment id
  datatype: string
  max count: 1
property:
  path: catalogItemId
  name: catalog item id
  datatype: string
  max count: 1
property:
  path: catalogVariantId
  name: catalog variant id
  datatype: string
  max count: 1
property:
  path: windowStart
  name: window start
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: windowEnd
  name: window end
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: groupings
  name: groupings
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: statistics
  name: statistics
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

FlowSeriesMetricRowShape
type: NodeShape
target class: FlowSeriesMetricRow
property:
  path: campaignId
  name: campaign id
  datatype: string
  max count: 1
property:
  path: flowId
  name: flow id
  datatype: string
  max count: 1
property:
  path: campaignMessageId
  name: campaign message id
  datatype: string
  max count: 1
property:
  path: flowMessageId
  name: flow message id
  datatype: string
  max count: 1
property:
  path: metricId
  name: metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: profileId
  name: profile id
  datatype: string
  max count: 1
property:
  path: listId
  name: list id
  datatype: string
  max count: 1
property:
  path: segmentId
  name: segment id
  datatype: string
  max count: 1
property:
  path: catalogItemId
  name: catalog item id
  datatype: string
  max count: 1
property:
  path: catalogVariantId
  name: catalog variant id
  datatype: string
  max count: 1
property:
  path: windowStart
  name: window start
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: windowEnd
  name: window end
  datatype: dateTime
  min count: 1
  max count: 1
property:
  path: interval
  name: interval
  datatype: string
  max count: 1
  in: hourly
  in: daily
  in: weekly
  in: monthly
property:
  path: dateTimes
  name: date times
  datatype: dateTime
property:
  path: groupings
  name: groupings
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: statistics
  name: statistics
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  max count: 1

ReportResultShape
type: NodeShape
target class: ReportResult
property:
  path: groupings
  name: groupings
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: statistics
  name: statistics
  node: ContainerShape
  class: Container
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

CampaignValuesReportShape
type: NodeShape
target class: CampaignValuesReport
property:
  path: data
  name: data
  node: CampaignValuesReportResourceShape
  class: CampaignValuesReportResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

CampaignValuesReportResourceShape
type: NodeShape
target class: CampaignValuesReportResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: campaign-values-report
property:
  path: attributes
  name: attributes
  node: CampaignValuesReportAttributesShape
  class: CampaignValuesReportAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: CampaignValuesReportRelationshipsShape
  class: CampaignValuesReportRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

CampaignValuesReportAttributesShape
type: NodeShape
target class: CampaignValuesReportAttributes
property:
  path: results
  name: results
  node: ReportResultShape
  class: ReportResult
  node kind: BlankNodeOrIRI

CampaignValuesReportRelationshipsShape
type: NodeShape
target class: CampaignValuesReportRelationships
property:
  path: campaigns
  name: campaigns
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

FlowValuesReportShape
type: NodeShape
target class: FlowValuesReport
property:
  path: data
  name: data
  node: FlowValuesReportResourceShape
  class: FlowValuesReportResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

FlowValuesReportResourceShape
type: NodeShape
target class: FlowValuesReportResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow-values-report
property:
  path: attributes
  name: attributes
  node: FlowValuesReportAttributesShape
  class: FlowValuesReportAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: FlowValuesReportRelationshipsShape
  class: FlowValuesReportRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

FlowValuesReportAttributesShape
type: NodeShape
target class: FlowValuesReportAttributes
property:
  path: results
  name: results
  node: ReportResultShape
  class: ReportResult
  node kind: BlankNodeOrIRI

FlowValuesReportRelationshipsShape
type: NodeShape
target class: FlowValuesReportRelationships
property:
  path: flows
  name: flows
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: flowMessages
  name: flow messages
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

FlowSeriesReportShape
type: NodeShape
target class: FlowSeriesReport
property:
  path: data
  name: data
  node: FlowSeriesReportResourceShape
  class: FlowSeriesReportResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

FlowSeriesReportResourceShape
type: NodeShape
target class: FlowSeriesReportResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow-series-report
property:
  path: attributes
  name: attributes
  node: FlowSeriesReportAttributesShape
  class: FlowSeriesReportAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1
property:
  path: relationships
  name: relationships
  node: FlowSeriesReportRelationshipsShape
  class: FlowSeriesReportRelationships
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: links
  name: links
  node: ObjectLinksShape
  class: ObjectLinks
  node kind: BlankNodeOrIRI
  max count: 1

FlowSeriesReportAttributesShape
type: NodeShape
target class: FlowSeriesReportAttributes
property:
  path: results
  name: results
  node: ReportResultShape
  class: ReportResult
  node kind: BlankNodeOrIRI
property:
  path: dateTimes
  name: date times
  datatype: dateTime

FlowSeriesReportRelationshipsShape
type: NodeShape
target class: FlowSeriesReportRelationships
property:
  path: flows
  name: flows
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1
property:
  path: flowMessages
  name: flow messages
  node: JsonApiToManyRelationshipShape
  class: JsonApiToManyRelationship
  node kind: BlankNodeOrIRI
  max count: 1

CampaignValuesReportRequestAttributesShape
type: NodeShape
target class: CampaignValuesReportRequestAttributes
property:
  path: statistics
  name: statistics
  datatype: string
  in: average_order_value
  in: bounce_rate
  in: bounced
  in: bounced_or_failed
  in: bounced_or_failed_rate
  in: click_rate
  in: click_to_open_rate
  in: clicks
  in: clicks_unique
  in: conversion_rate
  in: conversion_uniques
  in: conversion_value
  in: conversions
  in: delivered
  in: delivery_rate
  in: failed
  in: failed_rate
  in: message_segment_count_sum
  in: open_rate
  in: opens
  in: opens_unique
  in: recipients
  in: revenue_per_recipient
  in: spam_complaint_rate
  in: spam_complaints
  in: text_message_credit_usage_amount
  in: text_message_roi
  in: text_message_spend
  in: unsubscribe_rate
  in: unsubscribe_uniques
  in: unsubscribes
property:
  path: timeframe
  name: timeframe
  node kind: BlankNodeOrIRI
  or:
    node: RelativeTimeframeShape
    class: RelativeTimeframe
  or:
    node: CustomTimeframeShape
    class: CustomTimeframe
  min count: 1
  max count: 1
property:
  path: conversionMetricId
  name: conversion metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: groupBy
  name: group by
  datatype: string
  in: campaign_id
  in: campaign_message_id
  in: campaign_message_name
  in: group
  in: group_name
  in: send_channel
  in: tag_id
  in: tag_name
  in: text_message_format
  in: variation
  in: variation_name
property:
  path: filter
  name: filter
  datatype: string
  max count: 1

CampaignValuesReportRequestResourceShape
type: NodeShape
target class: CampaignValuesReportRequestResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: campaign-values-report
property:
  path: attributes
  name: attributes
  node: CampaignValuesReportRequestAttributesShape
  class: CampaignValuesReportRequestAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

CampaignValuesReportRequestShape
type: NodeShape
target class: CampaignValuesReportRequest
property:
  path: data
  name: data
  node: CampaignValuesReportRequestResourceShape
  class: CampaignValuesReportRequestResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

FlowValuesReportRequestAttributesShape
type: NodeShape
target class: FlowValuesReportRequestAttributes
property:
  path: statistics
  name: statistics
  datatype: string
  in: average_order_value
  in: bounce_rate
  in: bounced
  in: bounced_or_failed
  in: bounced_or_failed_rate
  in: click_rate
  in: click_to_open_rate
  in: clicks
  in: clicks_unique
  in: conversion_rate
  in: conversion_uniques
  in: conversion_value
  in: conversions
  in: delivered
  in: delivery_rate
  in: failed
  in: failed_rate
  in: message_segment_count_sum
  in: open_rate
  in: opens
  in: opens_unique
  in: recipients
  in: revenue_per_recipient
  in: spam_complaint_rate
  in: spam_complaints
  in: text_message_credit_usage_amount
  in: text_message_roi
  in: text_message_spend
  in: unsubscribe_rate
  in: unsubscribe_uniques
  in: unsubscribes
property:
  path: timeframe
  name: timeframe
  node kind: BlankNodeOrIRI
  or:
    node: RelativeTimeframeShape
    class: RelativeTimeframe
  or:
    node: CustomTimeframeShape
    class: CustomTimeframe
  min count: 1
  max count: 1
property:
  path: conversionMetricId
  name: conversion metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: groupBy
  name: group by
  datatype: string
  in: flow_id
  in: flow_message_id
  in: flow_message_name
  in: flow_name
  in: send_channel
  in: tag_id
  in: tag_name
  in: text_message_format
  in: variation
  in: variation_name
property:
  path: filter
  name: filter
  datatype: string
  max count: 1

FlowValuesReportRequestResourceShape
type: NodeShape
target class: FlowValuesReportRequestResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow-values-report
property:
  path: attributes
  name: attributes
  node: FlowValuesReportRequestAttributesShape
  class: FlowValuesReportRequestAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

FlowValuesReportRequestShape
type: NodeShape
target class: FlowValuesReportRequest
property:
  path: data
  name: data
  node: FlowValuesReportRequestResourceShape
  class: FlowValuesReportRequestResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

FlowSeriesReportRequestAttributesShape
type: NodeShape
target class: FlowSeriesReportRequestAttributes
property:
  path: statistics
  name: statistics
  datatype: string
  in: average_order_value
  in: bounce_rate
  in: bounced
  in: bounced_or_failed
  in: bounced_or_failed_rate
  in: click_rate
  in: click_to_open_rate
  in: clicks
  in: clicks_unique
  in: conversion_rate
  in: conversion_uniques
  in: conversion_value
  in: conversions
  in: delivered
  in: delivery_rate
  in: failed
  in: failed_rate
  in: message_segment_count_sum
  in: open_rate
  in: opens
  in: opens_unique
  in: recipients
  in: revenue_per_recipient
  in: spam_complaint_rate
  in: spam_complaints
  in: text_message_credit_usage_amount
  in: text_message_roi
  in: text_message_spend
  in: unsubscribe_rate
  in: unsubscribe_uniques
  in: unsubscribes
property:
  path: timeframe
  name: timeframe
  node kind: BlankNodeOrIRI
  or:
    node: RelativeTimeframeShape
    class: RelativeTimeframe
  or:
    node: CustomTimeframeShape
    class: CustomTimeframe
  min count: 1
  max count: 1
property:
  path: interval
  name: interval
  datatype: string
  min count: 1
  max count: 1
  in: hourly
  in: daily
  in: weekly
  in: monthly
property:
  path: conversionMetricId
  name: conversion metric id
  datatype: string
  min count: 1
  max count: 1
property:
  path: groupBy
  name: group by
  datatype: string
  in: flow_id
  in: flow_message_id
  in: flow_message_name
  in: flow_name
  in: send_channel
  in: tag_id
  in: tag_name
  in: text_message_format
  in: variation
  in: variation_name
property:
  path: filter
  name: filter
  datatype: string
  max count: 1

FlowSeriesReportRequestResourceShape
type: NodeShape
target class: FlowSeriesReportRequestResource
property:
  path: type
  name: type
  datatype: string
  min count: 1
  max count: 1
  has value: flow-series-report
property:
  path: attributes
  name: attributes
  node: FlowSeriesReportRequestAttributesShape
  class: FlowSeriesReportRequestAttributes
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

FlowSeriesReportRequestShape
type: NodeShape
target class: FlowSeriesReportRequest
property:
  path: data
  name: data
  node: FlowSeriesReportRequestResourceShape
  class: FlowSeriesReportRequestResource
  node kind: BlankNodeOrIRI
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: audiences
  class: CampaignAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: attributes
  class: CampaignMessage
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: relationships
  class: CampaignMessage
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: groupings
  class: CampaignMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: statistics
  class: CampaignMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: customMetadata
  class: CatalogItemAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: customMetadata
  class: CatalogVariantAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: attributes
  class: FlowAction
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: relationships
  class: FlowAction
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: groupings
  class: FlowMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: statistics
  class: FlowMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: groupings
  class: FlowSeriesMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: statistics
  class: FlowSeriesMetricRow
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: integration
  class: MetricAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: location
  class: ProfileAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: predictiveAnalytics
  class: ProfileAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: properties
  class: ProfileAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: subscriptions
  class: ProfileAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: metadata
  class: PushTokenAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: groupings
  class: ReportResult
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: statistics
  class: ReportResult
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: definition
  class: SegmentAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1

ContainerShape
type: NodeShape
target class: Container
property:
  path:
    inverse path: definition
  class: TemplateAttributes
  min count: 1
  max count: 1
property:
  path: entry
  node: EntryShape
  class: Entry
  node kind: BlankNodeOrIRI
sparql: SPARQLConstraint
  message: Record entry keys must be unique
  select: SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/key> ?key . ?right <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/key> ?key . }

EntryShape
type: NodeShape
target class: Entry
property:
  path:
    inverse path: entry
  class: Container
  min count: 1
  max count: 1
property:
  path: key
  datatype: string
  min count: 1
  max count: 1
property:
  path: value
  datatype: JSON
  min count: 1
  max count: 1