# SHACL Shapes generated by @inferal-relay/rdf-emitter

@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tsps: <https://relay.inferal.com/ontology/typespec/shapes/> .
@prefix tspv: <https://relay.inferal.com/ontology/typespec/versioning/> .
@prefix schema: <https://schema.org/> .
@prefix klaviyo: <https://relay.inferal.com/ontology/klaviyo/> .

# Class hierarchy
klaviyo:RelationshipLinks rdfs:subClassOf schema:Thing .
klaviyo:ObjectLinks rdfs:subClassOf schema:Thing .
klaviyo:JsonApiRequiredToOneRelationship rdfs:subClassOf schema:Thing .
klaviyo:CollectionLinks rdfs:subClassOf schema:Thing .
klaviyo:Profile rdfs:subClassOf schema:Person .
klaviyo:Conversation rdfs:subClassOf schema:Conversation .
klaviyo:PushToken rdfs:subClassOf schema:Thing .
klaviyo:Metric rdfs:subClassOf schema:Thing .
klaviyo:Flow rdfs:subClassOf schema:CreativeWorkSeries .
klaviyo:List rdfs:subClassOf schema:ItemList .
klaviyo:Tag rdfs:subClassOf schema:Thing .
klaviyo:Segment rdfs:subClassOf schema:Audience .
klaviyo:TagGroup rdfs:subClassOf schema:Thing .
klaviyo:Template rdfs:subClassOf schema:CreativeWork .
klaviyo:Image rdfs:subClassOf schema:ImageObject .
klaviyo:FlowAction rdfs:subClassOf schema:Action .
klaviyo:CatalogItem rdfs:subClassOf schema:Product .
klaviyo:CatalogVariant rdfs:subClassOf schema:Product .
klaviyo:Campaign rdfs:subClassOf schema:CreativeWork .
klaviyo:CampaignMessage rdfs:subClassOf schema:Message .
klaviyo:CampaignMetricRow rdfs:subClassOf schema:Observation .
klaviyo:FlowMetricRow rdfs:subClassOf schema:Observation .
klaviyo:FlowSeriesMetricRow rdfs:subClassOf schema:Observation .
klaviyo:CampaignValuesReport rdfs:subClassOf schema:Dataset .
klaviyo:FlowValuesReport rdfs:subClassOf schema:Dataset .
klaviyo:FlowSeriesReport rdfs:subClassOf schema:Dataset .

<https://relay.inferal.com/ontology/klaviyo/shapes> a tsps:ShapeGeneration ;
  tsps:shapeReferenceChainLimit 5 ;
  tsps:omittedShapeReferenceCount 0 .

# Shape for Json Api Resource Identifier
klaviyo:JsonApiResourceIdentifierShape a sh:NodeShape ;
  sh:targetClass klaviyo:JsonApiResourceIdentifier ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiResourceIdentifier/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiResourceIdentifier/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Relationship Links
klaviyo:RelationshipLinksShape a sh:NodeShape ;
  sh:targetClass klaviyo:RelationshipLinks ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.RelationshipLinks/self> ;
    sh:name "self" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.RelationshipLinks/related> ;
    sh:name "related" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Object Links
klaviyo:ObjectLinksShape a sh:NodeShape ;
  sh:targetClass klaviyo:ObjectLinks ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ObjectLinks/self> ;
    sh:name "self" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Json Api Required To One Relationship
klaviyo:JsonApiRequiredToOneRelationshipShape a sh:NodeShape ;
  sh:targetClass klaviyo:JsonApiRequiredToOneRelationship ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiRequiredToOneRelationship/data> ;
    sh:name "data" ;
    sh:node klaviyo:JsonApiResourceIdentifierShape ;
    sh:class klaviyo:JsonApiResourceIdentifier ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiRequiredToOneRelationship/links> ;
    sh:name "links" ;
    sh:node klaviyo:RelationshipLinksShape ;
    sh:class klaviyo:RelationshipLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Json Api To Many Relationship
klaviyo:JsonApiToManyRelationshipShape a sh:NodeShape ;
  sh:targetClass klaviyo:JsonApiToManyRelationship ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiToManyRelationship/data> ;
    sh:name "data" ;
    sh:node klaviyo:JsonApiResourceIdentifierShape ;
    sh:class klaviyo:JsonApiResourceIdentifier ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.JsonApiToManyRelationship/links> ;
    sh:name "links" ;
    sh:node klaviyo:RelationshipLinksShape ;
    sh:class klaviyo:RelationshipLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Collection Links
klaviyo:CollectionLinksShape a sh:NodeShape ;
  sh:targetClass klaviyo:CollectionLinks ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CollectionLinks/self> ;
    sh:name "self" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CollectionLinks/next> ;
    sh:name "next" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CollectionLinks/prev> ;
    sh:name "prev" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Relative Timeframe
klaviyo:RelativeTimeframeShape a sh:NodeShape ;
  sh:targetClass klaviyo:RelativeTimeframe ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.RelativeTimeframe/key> ;
    sh:name "key" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "last_12_months" "last_30_days" "last_365_days" "last_3_months" "last_7_days" "last_90_days" "last_month" "last_week" "last_year" "this_month" "this_week" "this_year" "today" "yesterday" ) ;
  ] .

# Shape for Custom Timeframe
klaviyo:CustomTimeframeShape a sh:NodeShape ;
  sh:targetClass klaviyo:CustomTimeframe ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CustomTimeframe/start> ;
    sh:name "start" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CustomTimeframe/end> ;
    sh:name "end" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Klaviyo Error Response
klaviyo:KlaviyoErrorResponseShape a sh:NodeShape ;
  sh:targetClass klaviyo:KlaviyoErrorResponse ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorResponse/statusCode> ;
    sh:name "status code" ;
    sh:datatype xsd:integer ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "400"^^xsd:integer "401"^^xsd:integer "403"^^xsd:integer "404"^^xsd:integer "409"^^xsd:integer "429"^^xsd:integer "500"^^xsd:integer ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorResponse/contentType> ;
    sh:name "content type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "application/vnd.api+json" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorResponse/body> ;
    sh:name "body" ;
    sh:node klaviyo:KlaviyoErrorDocumentShape ;
    sh:class klaviyo:KlaviyoErrorDocument ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Klaviyo Error Document
klaviyo:KlaviyoErrorDocumentShape a sh:NodeShape ;
  sh:targetClass klaviyo:KlaviyoErrorDocument ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorDocument/errors> ;
    sh:name "errors" ;
    sh:node klaviyo:KlaviyoErrorShape ;
    sh:class klaviyo:KlaviyoError ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Klaviyo Error
klaviyo:KlaviyoErrorShape a sh:NodeShape ;
  sh:targetClass klaviyo:KlaviyoError ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoError/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoError/code> ;
    sh:name "code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoError/title> ;
    sh:name "title" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoError/detail> ;
    sh:name "detail" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoError/source> ;
    sh:name "source" ;
    sh:node klaviyo:KlaviyoErrorSourceShape ;
    sh:class klaviyo:KlaviyoErrorSource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Klaviyo Error Source
klaviyo:KlaviyoErrorSourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:KlaviyoErrorSource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorSource/pointer> ;
    sh:name "pointer" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.KlaviyoErrorSource/parameter> ;
    sh:name "parameter" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Profile
klaviyo:ProfileShape a sh:NodeShape ;
  sh:targetClass klaviyo:Profile ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Profile/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "profile" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Profile/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Profile/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:ProfileAttributesShape ;
    sh:class klaviyo:ProfileAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Profile/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:ProfileRelationshipsShape ;
    sh:class klaviyo:ProfileRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Profile/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Profile Attributes
klaviyo:ProfileAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:ProfileAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/email> ;
    sh:name "email" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/phoneNumber> ;
    sh:name "phone number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/externalId> ;
    sh:name "external id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/firstName> ;
    sh:name "first name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/lastName> ;
    sh:name "last name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/organization> ;
    sh:name "organization" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/locale> ;
    sh:name "locale" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/title> ;
    sh:name "title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/image> ;
    sh:name "image" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/lastEventDate> ;
    sh:name "last event date" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/properties> ;
    sh:name "properties" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/location> ;
    sh:name "location" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/subscriptions> ;
    sh:name "subscriptions" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/predictiveAnalytics> ;
    sh:name "predictive analytics" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Profile Relationships
klaviyo:ProfileRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:ProfileRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileRelationships/lists> ;
    sh:name "lists" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileRelationships/segments> ;
    sh:name "segments" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileRelationships/pushTokens> ;
    sh:name "push tokens" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Conversation
klaviyo:ConversationShape a sh:NodeShape ;
  sh:targetClass klaviyo:Conversation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Conversation/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "conversation" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Conversation/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Conversation/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:ConversationRelationshipsShape ;
    sh:class klaviyo:ConversationRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Conversation/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Conversation Relationships
klaviyo:ConversationRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:ConversationRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ConversationRelationships/profile> ;
    sh:name "profile" ;
    sh:node klaviyo:JsonApiRequiredToOneRelationshipShape ;
    sh:class klaviyo:JsonApiRequiredToOneRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Push Token
klaviyo:PushTokenShape a sh:NodeShape ;
  sh:targetClass klaviyo:PushToken ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushToken/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "push-token" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushToken/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushToken/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:PushTokenAttributesShape ;
    sh:class klaviyo:PushTokenAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushToken/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:PushTokenRelationshipsShape ;
    sh:class klaviyo:PushTokenRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushToken/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Push Token Attributes
klaviyo:PushTokenAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:PushTokenAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/token> ;
    sh:name "token" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/enablementStatus> ;
    sh:name "enablement status" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "AUTHORIZED" "DENIED" "NOT_DETERMINED" "PROVISIONAL" "UNAUTHORIZED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/platform> ;
    sh:name "platform" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "android" "ios" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/vendor> ;
    sh:name "vendor" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/background> ;
    sh:name "background" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/recordedDate> ;
    sh:name "recorded date" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/metadata> ;
    sh:name "metadata" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Push Token Relationships
klaviyo:PushTokenRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:PushTokenRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenRelationships/profile> ;
    sh:name "profile" ;
    sh:node klaviyo:JsonApiRequiredToOneRelationshipShape ;
    sh:class klaviyo:JsonApiRequiredToOneRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Metric Attributes
klaviyo:MetricAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:MetricAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricAttributes/integration> ;
    sh:name "integration" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Metric Relationships
klaviyo:MetricRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:MetricRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricRelationships/flowTriggers> ;
    sh:name "flow triggers" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Metric
klaviyo:MetricShape a sh:NodeShape ;
  sh:targetClass klaviyo:Metric ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Metric/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Metric/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:MetricAttributesShape ;
    sh:class klaviyo:MetricAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Metric/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:MetricRelationshipsShape ;
    sh:class klaviyo:MetricRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Metric/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Metric/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "metric" ;
  ] .

# Shape for Flow Attributes
klaviyo:FlowAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/status> ;
    sh:name "status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/archived> ;
    sh:name "archived" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAttributes/triggerType> ;
    sh:name "trigger type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Relationships
klaviyo:FlowRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowRelationships/flowActions> ;
    sh:name "flow actions" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowRelationships/tags> ;
    sh:name "tags" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow
klaviyo:FlowShape a sh:NodeShape ;
  sh:targetClass klaviyo:Flow ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Flow/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Flow/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:FlowAttributesShape ;
    sh:class klaviyo:FlowAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Flow/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:FlowRelationshipsShape ;
    sh:class klaviyo:FlowRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Flow/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Flow/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow" ;
  ] .

# Shape for List Attributes
klaviyo:ListAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:ListAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListAttributes/optInProcess> ;
    sh:name "opt in process" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for List Relationships
klaviyo:ListRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:ListRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListRelationships/profiles> ;
    sh:name "profiles" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListRelationships/tags> ;
    sh:name "tags" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ListRelationships/flowTriggers> ;
    sh:name "flow triggers" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for List
klaviyo:ListShape a sh:NodeShape ;
  sh:targetClass klaviyo:List ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.List/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.List/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:ListAttributesShape ;
    sh:class klaviyo:ListAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.List/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:ListRelationshipsShape ;
    sh:class klaviyo:ListRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.List/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.List/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "list" ;
  ] .

# Shape for Tag Attributes
klaviyo:TagAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:TagAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Tag Relationships
klaviyo:TagRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:TagRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagRelationships/tagGroup> ;
    sh:name "tag group" ;
    sh:node klaviyo:JsonApiRequiredToOneRelationshipShape ;
    sh:class klaviyo:JsonApiRequiredToOneRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagRelationships/lists> ;
    sh:name "lists" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagRelationships/segments> ;
    sh:name "segments" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagRelationships/campaigns> ;
    sh:name "campaigns" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagRelationships/flows> ;
    sh:name "flows" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Tag
klaviyo:TagShape a sh:NodeShape ;
  sh:targetClass klaviyo:Tag ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Tag/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Tag/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:TagAttributesShape ;
    sh:class klaviyo:TagAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Tag/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:TagRelationshipsShape ;
    sh:class klaviyo:TagRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Tag/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Tag/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "tag" ;
  ] .

# Shape for Segment Attributes
klaviyo:SegmentAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:SegmentAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/definition> ;
    sh:name "definition" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/isActive> ;
    sh:name "is active" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/isProcessing> ;
    sh:name "is processing" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/isStarred> ;
    sh:name "is starred" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Segment Relationships
klaviyo:SegmentRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:SegmentRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentRelationships/profiles> ;
    sh:name "profiles" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentRelationships/tags> ;
    sh:name "tags" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentRelationships/flowTriggers> ;
    sh:name "flow triggers" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Segment
klaviyo:SegmentShape a sh:NodeShape ;
  sh:targetClass klaviyo:Segment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Segment/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Segment/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:SegmentAttributesShape ;
    sh:class klaviyo:SegmentAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Segment/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:SegmentRelationshipsShape ;
    sh:class klaviyo:SegmentRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Segment/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Segment/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "segment" ;
  ] .

# Shape for Tag Group
klaviyo:TagGroupShape a sh:NodeShape ;
  sh:targetClass klaviyo:TagGroup ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroup/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "tag-group" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroup/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroup/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:TagGroupAttributesShape ;
    sh:class klaviyo:TagGroupAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroup/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:TagGroupRelationshipsShape ;
    sh:class klaviyo:TagGroupRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroup/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Tag Group Attributes
klaviyo:TagGroupAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:TagGroupAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroupAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroupAttributes/default> ;
    sh:name "default" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroupAttributes/exclusive> ;
    sh:name "exclusive" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Tag Group Relationships
klaviyo:TagGroupRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:TagGroupRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TagGroupRelationships/tags> ;
    sh:name "tags" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Template Attributes
klaviyo:TemplateAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:TemplateAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/editorType> ;
    sh:name "editor type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/html> ;
    sh:name "html" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/text> ;
    sh:name "text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/amp> ;
    sh:name "amp" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/definition> ;
    sh:name "definition" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Empty Relationships
klaviyo:EmptyRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:EmptyRelationships .

# Shape for Template
klaviyo:TemplateShape a sh:NodeShape ;
  sh:targetClass klaviyo:Template ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Template/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Template/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:TemplateAttributesShape ;
    sh:class klaviyo:TemplateAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Template/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:EmptyRelationshipsShape ;
    sh:class klaviyo:EmptyRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Template/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Template/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "template" ;
  ] .

# Shape for Image Attributes
klaviyo:ImageAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:ImageAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/imageUrl> ;
    sh:name "image url" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/format> ;
    sh:name "format" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/size> ;
    sh:name "size" ;
    sh:datatype xsd:integer ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/hidden> ;
    sh:name "hidden" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImageAttributes/updatedAt> ;
    sh:name "updated at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Image
klaviyo:ImageShape a sh:NodeShape ;
  sh:targetClass klaviyo:Image ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Image/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Image/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:ImageAttributesShape ;
    sh:class klaviyo:ImageAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Image/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:EmptyRelationshipsShape ;
    sh:class klaviyo:EmptyRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Image/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Image/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "image" ;
  ] .

# Shape for Flow Action
klaviyo:FlowActionShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowAction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow-action" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/attributes> ;
    sh:name "attributes" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/relationships> ;
    sh:name "relationships" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Catalog Item Attributes
klaviyo:CatalogItemAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogItemAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/externalId> ;
    sh:name "external id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/title> ;
    sh:name "title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/description> ;
    sh:name "description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/price> ;
    sh:name "price" ;
    sh:datatype xsd:decimal ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/url> ;
    sh:name "url" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/imageFullUrl> ;
    sh:name "image full url" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/imageThumbnailUrl> ;
    sh:name "image thumbnail url" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/images> ;
    sh:name "images" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/customMetadata> ;
    sh:name "custom metadata" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/published> ;
    sh:name "published" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Catalog Item Relationships
klaviyo:CatalogItemRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogItemRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemRelationships/variants> ;
    sh:name "variants" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Catalog Item
klaviyo:CatalogItemShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogItem ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItem/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItem/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:CatalogItemAttributesShape ;
    sh:class klaviyo:CatalogItemAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItem/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:CatalogItemRelationshipsShape ;
    sh:class klaviyo:CatalogItemRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItem/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItem/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "catalog-item" ;
  ] .

# Shape for Catalog Variant Attributes
klaviyo:CatalogVariantAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogVariantAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/externalId> ;
    sh:name "external id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/title> ;
    sh:name "title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/description> ;
    sh:name "description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/sku> ;
    sh:name "sku" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/inventoryPolicy> ;
    sh:name "inventory policy" ;
    sh:datatype xsd:integer ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/inventoryQuantity> ;
    sh:name "inventory quantity" ;
    sh:datatype xsd:decimal ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/price> ;
    sh:name "price" ;
    sh:datatype xsd:decimal ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/url> ;
    sh:name "url" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/imageFullUrl> ;
    sh:name "image full url" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/imageThumbnailUrl> ;
    sh:name "image thumbnail url" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/images> ;
    sh:name "images" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/customMetadata> ;
    sh:name "custom metadata" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/published> ;
    sh:name "published" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/created> ;
    sh:name "created" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/updated> ;
    sh:name "updated" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Catalog Variant Relationships
klaviyo:CatalogVariantRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogVariantRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantRelationships/item> ;
    sh:name "item" ;
    sh:node klaviyo:JsonApiRequiredToOneRelationshipShape ;
    sh:class klaviyo:JsonApiRequiredToOneRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Catalog Variant
klaviyo:CatalogVariantShape a sh:NodeShape ;
  sh:targetClass klaviyo:CatalogVariant ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariant/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariant/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:CatalogVariantAttributesShape ;
    sh:class klaviyo:CatalogVariantAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariant/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:CatalogVariantRelationshipsShape ;
    sh:class klaviyo:CatalogVariantRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariant/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariant/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "catalog-variant" ;
  ] .

# Shape for Campaign Attributes
klaviyo:CampaignAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/status> ;
    sh:name "status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/archived> ;
    sh:name "archived" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/audiences> ;
    sh:name "audiences" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/sendOptions> ;
    sh:name "send options" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:EmailSendOptionsShape ; sh:class klaviyo:EmailSendOptions ]
      [ sh:node klaviyo:SmsSendOptionsShape ; sh:class klaviyo:SmsSendOptions ]
      [ sh:node klaviyo:PushSendOptionsShape ; sh:class klaviyo:PushSendOptions ]
    ) ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/trackingOptions> ;
    sh:name "tracking options" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:CampaignsEmailTrackingOptionsShape ; sh:class klaviyo:CampaignsEmailTrackingOptions ]
      [ sh:node klaviyo:CampaignsSmsTrackingOptionsShape ; sh:class klaviyo:CampaignsSmsTrackingOptions ]
    ) ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/sendStrategy> ;
    sh:name "send strategy" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:StaticSendStrategyShape ; sh:class klaviyo:StaticSendStrategy ]
      [ sh:node klaviyo:SmartSendTimeStrategyShape ; sh:class klaviyo:SmartSendTimeStrategy ]
      [ sh:node klaviyo:ThrottledSendStrategyShape ; sh:class klaviyo:ThrottledSendStrategy ]
      [ sh:node klaviyo:ImmediateSendStrategyShape ; sh:class klaviyo:ImmediateSendStrategy ]
      [ sh:node klaviyo:ABTestSendStrategyShape ; sh:class klaviyo:ABTestSendStrategy ]
      [ sh:node klaviyo:UnsupportedSendStrategyShape ; sh:class klaviyo:UnsupportedSendStrategy ]
    ) ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/createdAt> ;
    sh:name "created at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/scheduledAt> ;
    sh:name "scheduled at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/updatedAt> ;
    sh:name "updated at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/sendTime> ;
    sh:name "send time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Email Send Options
klaviyo:EmailSendOptionsShape a sh:NodeShape ;
  sh:targetClass klaviyo:EmailSendOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.EmailSendOptions/useSmartSending> ;
    sh:name "use smart sending" ;
    sh:description "Use smart sending." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Sms Send Options
klaviyo:SmsSendOptionsShape a sh:NodeShape ;
  sh:targetClass klaviyo:SmsSendOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SmsSendOptions/useSmartSending> ;
    sh:name "use smart sending" ;
    sh:description "Use smart sending." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Push Send Options
klaviyo:PushSendOptionsShape a sh:NodeShape ;
  sh:targetClass klaviyo:PushSendOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushSendOptions/useSmartSending> ;
    sh:name "use smart sending" ;
    sh:description "Use smart sending." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaigns Email Tracking Options
klaviyo:CampaignsEmailTrackingOptionsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignsEmailTrackingOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsEmailTrackingOptions/addTrackingParams> ;
    sh:name "add tracking params" ;
    sh:description "Whether the campaign needs custom tracking parameters. If set to False, tracking params will not be used." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsEmailTrackingOptions/customTrackingParams> ;
    sh:name "custom tracking params" ;
    sh:description "A list of custom tracking parameters. If an empty list is given and add_tracking_params is True, uses company defaults." ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:DynamicTrackingParamShape ; sh:class klaviyo:DynamicTrackingParam ]
      [ sh:node klaviyo:StaticTrackingParamShape ; sh:class klaviyo:StaticTrackingParam ]
    ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsEmailTrackingOptions/isTrackingClicks> ;
    sh:name "is tracking clicks" ;
    sh:description "Whether the campaign is tracking click events. If not specified, uses company defaults." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsEmailTrackingOptions/isTrackingOpens> ;
    sh:name "is tracking opens" ;
    sh:description "Whether the campaign is tracking open events. If not specified, uses company defaults." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Dynamic Tracking Param
klaviyo:DynamicTrackingParamShape a sh:NodeShape ;
  sh:targetClass klaviyo:DynamicTrackingParam ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.DynamicTrackingParam/type> ;
    sh:name "type" ;
    sh:description "The type of the tracking parameter" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "dynamic" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.DynamicTrackingParam/value> ;
    sh:name "value" ;
    sh:description "The value of the tracking parameter" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "campaign_id" "campaign_name" "campaign_name_id" "campaign_name_send_day" "email_subject" "group_id" "group_name" "group_name_id" "link_alt_text" "message_type" "profile_external_id" "profile_id" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.DynamicTrackingParam/name> ;
    sh:name "name" ;
    sh:description "Name of the tracking param" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Static Tracking Param
klaviyo:StaticTrackingParamShape a sh:NodeShape ;
  sh:targetClass klaviyo:StaticTrackingParam ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticTrackingParam/type> ;
    sh:name "type" ;
    sh:description "The type of the tracking parameter" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "static" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticTrackingParam/value> ;
    sh:name "value" ;
    sh:description "The value of the tracking parameter" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticTrackingParam/name> ;
    sh:name "name" ;
    sh:description "Name of the tracking param" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaigns Sms Tracking Options
klaviyo:CampaignsSmsTrackingOptionsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignsSmsTrackingOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsSmsTrackingOptions/addTrackingParams> ;
    sh:name "add tracking params" ;
    sh:description "Whether the campaign needs custom tracking parameters. If set to False, tracking params will not be used." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignsSmsTrackingOptions/customTrackingParams> ;
    sh:name "custom tracking params" ;
    sh:description "A list of custom tracking parameters. If an empty list is given and add_tracking_params is True, uses company defaults." ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:DynamicTrackingParamShape ; sh:class klaviyo:DynamicTrackingParam ]
      [ sh:node klaviyo:StaticTrackingParamShape ; sh:class klaviyo:StaticTrackingParam ]
    ) ;
  ] .

# Shape for Static Send Strategy
klaviyo:StaticSendStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:StaticSendStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticSendStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "static" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticSendStrategy/datetime> ;
    sh:name "datetime" ;
    sh:description "The time to send at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.StaticSendStrategy/options> ;
    sh:name "options" ;
    sh:description "If the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time." ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:LocalStaticSendShape ; sh:class klaviyo:LocalStaticSend ]
      [ sh:node klaviyo:NonLocalStaticSendShape ; sh:class klaviyo:NonLocalStaticSend ]
    ) ;
    sh:maxCount 1 ;
  ] .

# Shape for Local Static Send
klaviyo:LocalStaticSendShape a sh:NodeShape ;
  sh:targetClass klaviyo:LocalStaticSend ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.LocalStaticSend/isLocal> ;
    sh:name "is local" ;
    sh:description "Whether the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time." ;
    sh:datatype xsd:boolean ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue true ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.LocalStaticSend/sendPastRecipientsImmediately> ;
    sh:name "send past recipients immediately" ;
    sh:description "Determines if we should send to local recipient timezone if the given time has passed. Only applicable to local sends." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Non Local Static Send
klaviyo:NonLocalStaticSendShape a sh:NodeShape ;
  sh:targetClass klaviyo:NonLocalStaticSend ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.NonLocalStaticSend/isLocal> ;
    sh:name "is local" ;
    sh:description "Whether the campaign should be sent with local recipient timezone send (requires UTC time) or statically sent at the given time." ;
    sh:datatype xsd:boolean ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue false ;
  ] .

# Shape for Smart Send Time Strategy
klaviyo:SmartSendTimeStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:SmartSendTimeStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SmartSendTimeStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "smart_send_time" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SmartSendTimeStrategy/date> ;
    sh:name "date" ;
    sh:description "The day to send on" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] .

# Shape for Throttled Send Strategy
klaviyo:ThrottledSendStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:ThrottledSendStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ThrottledSendStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "throttled" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ThrottledSendStrategy/datetime> ;
    sh:name "datetime" ;
    sh:description "The time to send at" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ThrottledSendStrategy/throttlePercentage> ;
    sh:name "throttle percentage" ;
    sh:description "The percentage of recipients per hour to send to." ;
    sh:datatype xsd:integer ;
    sh:maxCount 1 ;
    sh:in ( "10"^^xsd:integer "11"^^xsd:integer "13"^^xsd:integer "14"^^xsd:integer "17"^^xsd:integer "20"^^xsd:integer "25"^^xsd:integer "33"^^xsd:integer "50"^^xsd:integer ) ;
  ] .

# Shape for Immediate Send Strategy
klaviyo:ImmediateSendStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:ImmediateSendStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ImmediateSendStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "immediate" ) ;
  ] .

# Shape for ABTest Send Strategy
klaviyo:ABTestSendStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:ABTestSendStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ABTestSendStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ab_test_campaign" ) ;
  ] .

# Shape for Unsupported Send Strategy
klaviyo:UnsupportedSendStrategyShape a sh:NodeShape ;
  sh:targetClass klaviyo:UnsupportedSendStrategy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.UnsupportedSendStrategy/method> ;
    sh:name "method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "unsupported" ) ;
  ] .

# Shape for Campaign Relationships
klaviyo:CampaignRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignRelationships/campaignMessages> ;
    sh:name "campaign messages" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignRelationships/tags> ;
    sh:name "tags" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign
klaviyo:CampaignShape a sh:NodeShape ;
  sh:targetClass klaviyo:Campaign ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Campaign/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Campaign/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:CampaignAttributesShape ;
    sh:class klaviyo:CampaignAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Campaign/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:CampaignRelationshipsShape ;
    sh:class klaviyo:CampaignRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Campaign/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.Campaign/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "campaign" ;
  ] .

# Shape for Campaign Message
klaviyo:CampaignMessageShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignMessage ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "campaign-message" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/id> ;
    sh:name "id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/attributes> ;
    sh:name "attributes" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/relationships> ;
    sh:name "relationships" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Metric Row
klaviyo:CampaignMetricRowShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignMetricRow ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/campaignId> ;
    sh:name "campaign id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/flowId> ;
    sh:name "flow id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/campaignMessageId> ;
    sh:name "campaign message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/flowMessageId> ;
    sh:name "flow message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/metricId> ;
    sh:name "metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/profileId> ;
    sh:name "profile id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/listId> ;
    sh:name "list id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/segmentId> ;
    sh:name "segment id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/catalogItemId> ;
    sh:name "catalog item id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/catalogVariantId> ;
    sh:name "catalog variant id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/windowStart> ;
    sh:name "window start" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/windowEnd> ;
    sh:name "window end" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/groupings> ;
    sh:name "groupings" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/statistics> ;
    sh:name "statistics" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Metric Row
klaviyo:FlowMetricRowShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowMetricRow ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/campaignId> ;
    sh:name "campaign id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/flowId> ;
    sh:name "flow id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/campaignMessageId> ;
    sh:name "campaign message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/flowMessageId> ;
    sh:name "flow message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/metricId> ;
    sh:name "metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/profileId> ;
    sh:name "profile id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/listId> ;
    sh:name "list id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/segmentId> ;
    sh:name "segment id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/catalogItemId> ;
    sh:name "catalog item id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/catalogVariantId> ;
    sh:name "catalog variant id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/windowStart> ;
    sh:name "window start" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/windowEnd> ;
    sh:name "window end" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/groupings> ;
    sh:name "groupings" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/statistics> ;
    sh:name "statistics" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Metric Row
klaviyo:FlowSeriesMetricRowShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesMetricRow ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/campaignId> ;
    sh:name "campaign id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/flowId> ;
    sh:name "flow id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/campaignMessageId> ;
    sh:name "campaign message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/flowMessageId> ;
    sh:name "flow message id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/metricId> ;
    sh:name "metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/profileId> ;
    sh:name "profile id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/listId> ;
    sh:name "list id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/segmentId> ;
    sh:name "segment id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/catalogItemId> ;
    sh:name "catalog item id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/catalogVariantId> ;
    sh:name "catalog variant id" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/windowStart> ;
    sh:name "window start" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/windowEnd> ;
    sh:name "window end" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/interval> ;
    sh:name "interval" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "hourly" "daily" "weekly" "monthly" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/dateTimes> ;
    sh:name "date times" ;
    sh:datatype xsd:dateTime ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/groupings> ;
    sh:name "groupings" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/statistics> ;
    sh:name "statistics" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Report Result
klaviyo:ReportResultShape a sh:NodeShape ;
  sh:targetClass klaviyo:ReportResult ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ReportResult/groupings> ;
    sh:name "groupings" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ReportResult/statistics> ;
    sh:name "statistics" ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report
klaviyo:CampaignValuesReportShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReport ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReport/data> ;
    sh:name "data" ;
    sh:node klaviyo:CampaignValuesReportResourceShape ;
    sh:class klaviyo:CampaignValuesReportResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReport/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report Resource
klaviyo:CampaignValuesReportResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "campaign-values-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:CampaignValuesReportAttributesShape ;
    sh:class klaviyo:CampaignValuesReportAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportResource/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:CampaignValuesReportRelationshipsShape ;
    sh:class klaviyo:CampaignValuesReportRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportResource/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report Attributes
klaviyo:CampaignValuesReportAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportAttributes/results> ;
    sh:name "results" ;
    sh:node klaviyo:ReportResultShape ;
    sh:class klaviyo:ReportResult ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Campaign Values Report Relationships
klaviyo:CampaignValuesReportRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRelationships/campaigns> ;
    sh:name "campaigns" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report
klaviyo:FlowValuesReportShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReport ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReport/data> ;
    sh:name "data" ;
    sh:node klaviyo:FlowValuesReportResourceShape ;
    sh:class klaviyo:FlowValuesReportResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReport/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report Resource
klaviyo:FlowValuesReportResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow-values-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:FlowValuesReportAttributesShape ;
    sh:class klaviyo:FlowValuesReportAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportResource/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:FlowValuesReportRelationshipsShape ;
    sh:class klaviyo:FlowValuesReportRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportResource/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report Attributes
klaviyo:FlowValuesReportAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportAttributes/results> ;
    sh:name "results" ;
    sh:node klaviyo:ReportResultShape ;
    sh:class klaviyo:ReportResult ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Flow Values Report Relationships
klaviyo:FlowValuesReportRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRelationships/flows> ;
    sh:name "flows" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRelationships/flowMessages> ;
    sh:name "flow messages" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report
klaviyo:FlowSeriesReportShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReport ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReport/data> ;
    sh:name "data" ;
    sh:node klaviyo:FlowSeriesReportResourceShape ;
    sh:class klaviyo:FlowSeriesReportResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReport/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report Resource
klaviyo:FlowSeriesReportResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow-series-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:FlowSeriesReportAttributesShape ;
    sh:class klaviyo:FlowSeriesReportAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportResource/relationships> ;
    sh:name "relationships" ;
    sh:node klaviyo:FlowSeriesReportRelationshipsShape ;
    sh:class klaviyo:FlowSeriesReportRelationships ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportResource/links> ;
    sh:name "links" ;
    sh:node klaviyo:ObjectLinksShape ;
    sh:class klaviyo:ObjectLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report Attributes
klaviyo:FlowSeriesReportAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportAttributes/results> ;
    sh:name "results" ;
    sh:node klaviyo:ReportResultShape ;
    sh:class klaviyo:ReportResult ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportAttributes/dateTimes> ;
    sh:name "date times" ;
    sh:datatype xsd:dateTime ;
  ] .

# Shape for Flow Series Report Relationships
klaviyo:FlowSeriesReportRelationshipsShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportRelationships ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRelationships/flows> ;
    sh:name "flows" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRelationships/flowMessages> ;
    sh:name "flow messages" ;
    sh:node klaviyo:JsonApiToManyRelationshipShape ;
    sh:class klaviyo:JsonApiToManyRelationship ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report Request Attributes
klaviyo:CampaignValuesReportRequestAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportRequestAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestAttributes/statistics> ;
    sh:name "statistics" ;
    sh:datatype xsd:string ;
    sh:in ( "average_order_value" "bounce_rate" "bounced" "bounced_or_failed" "bounced_or_failed_rate" "click_rate" "click_to_open_rate" "clicks" "clicks_unique" "conversion_rate" "conversion_uniques" "conversion_value" "conversions" "delivered" "delivery_rate" "failed" "failed_rate" "message_segment_count_sum" "open_rate" "opens" "opens_unique" "recipients" "revenue_per_recipient" "spam_complaint_rate" "spam_complaints" "text_message_credit_usage_amount" "text_message_roi" "text_message_spend" "unsubscribe_rate" "unsubscribe_uniques" "unsubscribes" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestAttributes/timeframe> ;
    sh:name "timeframe" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:RelativeTimeframeShape ; sh:class klaviyo:RelativeTimeframe ]
      [ sh:node klaviyo:CustomTimeframeShape ; sh:class klaviyo:CustomTimeframe ]
    ) ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestAttributes/conversionMetricId> ;
    sh:name "conversion metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestAttributes/groupBy> ;
    sh:name "group by" ;
    sh:datatype xsd:string ;
    sh:in ( "campaign_id" "campaign_message_id" "campaign_message_name" "group" "group_name" "send_channel" "tag_id" "tag_name" "text_message_format" "variation" "variation_name" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestAttributes/filter> ;
    sh:name "filter" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report Request Resource
klaviyo:CampaignValuesReportRequestResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportRequestResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "campaign-values-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequestResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:CampaignValuesReportRequestAttributesShape ;
    sh:class klaviyo:CampaignValuesReportRequestAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Campaign Values Report Request
klaviyo:CampaignValuesReportRequestShape a sh:NodeShape ;
  sh:targetClass klaviyo:CampaignValuesReportRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignValuesReportRequest/data> ;
    sh:name "data" ;
    sh:node klaviyo:CampaignValuesReportRequestResourceShape ;
    sh:class klaviyo:CampaignValuesReportRequestResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report Request Attributes
klaviyo:FlowValuesReportRequestAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportRequestAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestAttributes/statistics> ;
    sh:name "statistics" ;
    sh:datatype xsd:string ;
    sh:in ( "average_order_value" "bounce_rate" "bounced" "bounced_or_failed" "bounced_or_failed_rate" "click_rate" "click_to_open_rate" "clicks" "clicks_unique" "conversion_rate" "conversion_uniques" "conversion_value" "conversions" "delivered" "delivery_rate" "failed" "failed_rate" "message_segment_count_sum" "open_rate" "opens" "opens_unique" "recipients" "revenue_per_recipient" "spam_complaint_rate" "spam_complaints" "text_message_credit_usage_amount" "text_message_roi" "text_message_spend" "unsubscribe_rate" "unsubscribe_uniques" "unsubscribes" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestAttributes/timeframe> ;
    sh:name "timeframe" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:RelativeTimeframeShape ; sh:class klaviyo:RelativeTimeframe ]
      [ sh:node klaviyo:CustomTimeframeShape ; sh:class klaviyo:CustomTimeframe ]
    ) ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestAttributes/conversionMetricId> ;
    sh:name "conversion metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestAttributes/groupBy> ;
    sh:name "group by" ;
    sh:datatype xsd:string ;
    sh:in ( "flow_id" "flow_message_id" "flow_message_name" "flow_name" "send_channel" "tag_id" "tag_name" "text_message_format" "variation" "variation_name" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestAttributes/filter> ;
    sh:name "filter" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report Request Resource
klaviyo:FlowValuesReportRequestResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportRequestResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow-values-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequestResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:FlowValuesReportRequestAttributesShape ;
    sh:class klaviyo:FlowValuesReportRequestAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Values Report Request
klaviyo:FlowValuesReportRequestShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowValuesReportRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowValuesReportRequest/data> ;
    sh:name "data" ;
    sh:node klaviyo:FlowValuesReportRequestResourceShape ;
    sh:class klaviyo:FlowValuesReportRequestResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report Request Attributes
klaviyo:FlowSeriesReportRequestAttributesShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportRequestAttributes ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/statistics> ;
    sh:name "statistics" ;
    sh:datatype xsd:string ;
    sh:in ( "average_order_value" "bounce_rate" "bounced" "bounced_or_failed" "bounced_or_failed_rate" "click_rate" "click_to_open_rate" "clicks" "clicks_unique" "conversion_rate" "conversion_uniques" "conversion_value" "conversions" "delivered" "delivery_rate" "failed" "failed_rate" "message_segment_count_sum" "open_rate" "opens" "opens_unique" "recipients" "revenue_per_recipient" "spam_complaint_rate" "spam_complaints" "text_message_credit_usage_amount" "text_message_roi" "text_message_spend" "unsubscribe_rate" "unsubscribe_uniques" "unsubscribes" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/timeframe> ;
    sh:name "timeframe" ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node klaviyo:RelativeTimeframeShape ; sh:class klaviyo:RelativeTimeframe ]
      [ sh:node klaviyo:CustomTimeframeShape ; sh:class klaviyo:CustomTimeframe ]
    ) ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/interval> ;
    sh:name "interval" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "hourly" "daily" "weekly" "monthly" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/conversionMetricId> ;
    sh:name "conversion metric id" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/groupBy> ;
    sh:name "group by" ;
    sh:datatype xsd:string ;
    sh:in ( "flow_id" "flow_message_id" "flow_message_name" "flow_name" "send_channel" "tag_id" "tag_name" "text_message_format" "variation" "variation_name" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestAttributes/filter> ;
    sh:name "filter" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report Request Resource
klaviyo:FlowSeriesReportRequestResourceShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportRequestResource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestResource/type> ;
    sh:name "type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flow-series-report" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequestResource/attributes> ;
    sh:name "attributes" ;
    sh:node klaviyo:FlowSeriesReportRequestAttributesShape ;
    sh:class klaviyo:FlowSeriesReportRequestAttributes ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flow Series Report Request
klaviyo:FlowSeriesReportRequestShape a sh:NodeShape ;
  sh:targetClass klaviyo:FlowSeriesReportRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesReportRequest/data> ;
    sh:name "data" ;
    sh:node klaviyo:FlowSeriesReportRequestResourceShape ;
    sh:class klaviyo:FlowSeriesReportRequestResource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Generated Record container shape for Klaviyo.CampaignAttributes.audiences
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignAttributes/audiences> ] ;
    sh:class klaviyo:CampaignAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CampaignAttributes.audiences
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignAttributes/audiences/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CampaignMessage.attributes
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/attributes> ] ;
    sh:class klaviyo:CampaignMessage ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CampaignMessage.attributes
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/attributes/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CampaignMessage.relationships
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMessage/relationships> ] ;
    sh:class klaviyo:CampaignMessage ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CampaignMessage.relationships
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMessage/relationships/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CampaignMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/groupings> ] ;
    sh:class klaviyo:CampaignMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CampaignMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/groupings/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CampaignMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CampaignMetricRow/statistics> ] ;
    sh:class klaviyo:CampaignMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CampaignMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CampaignMetricRow/statistics/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CatalogItemAttributes.customMetadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogItemAttributes/customMetadata> ] ;
    sh:class klaviyo:CatalogItemAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CatalogItemAttributes.customMetadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogItemAttributes/customMetadata/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.CatalogVariantAttributes.customMetadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.CatalogVariantAttributes/customMetadata> ] ;
    sh:class klaviyo:CatalogVariantAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.CatalogVariantAttributes.customMetadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.CatalogVariantAttributes/customMetadata/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowAction.attributes
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/attributes> ] ;
    sh:class klaviyo:FlowAction ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowAction.attributes
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/attributes/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowAction.relationships
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowAction/relationships> ] ;
    sh:class klaviyo:FlowAction ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowAction.relationships
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowAction/relationships/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/groupings> ] ;
    sh:class klaviyo:FlowMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/groupings/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowMetricRow/statistics> ] ;
    sh:class klaviyo:FlowMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowMetricRow/statistics/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowSeriesMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/groupings> ] ;
    sh:class klaviyo:FlowSeriesMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowSeriesMetricRow.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/groupings/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.FlowSeriesMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.FlowSeriesMetricRow/statistics> ] ;
    sh:class klaviyo:FlowSeriesMetricRow ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.FlowSeriesMetricRow.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.FlowSeriesMetricRow/statistics/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.MetricAttributes.integration
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.MetricAttributes/integration> ] ;
    sh:class klaviyo:MetricAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.MetricAttributes.integration
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.MetricAttributes/integration/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ProfileAttributes.location
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/location> ] ;
    sh:class klaviyo:ProfileAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ProfileAttributes.location
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/location/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ProfileAttributes.predictiveAnalytics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/predictiveAnalytics> ] ;
    sh:class klaviyo:ProfileAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ProfileAttributes.predictiveAnalytics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/predictiveAnalytics/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ProfileAttributes.properties
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/properties> ] ;
    sh:class klaviyo:ProfileAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ProfileAttributes.properties
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/properties/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ProfileAttributes.subscriptions
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ProfileAttributes/subscriptions> ] ;
    sh:class klaviyo:ProfileAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ProfileAttributes.subscriptions
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ProfileAttributes/subscriptions/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.PushTokenAttributes.metadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.PushTokenAttributes/metadata> ] ;
    sh:class klaviyo:PushTokenAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.PushTokenAttributes.metadata
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.PushTokenAttributes/metadata/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ReportResult.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ReportResult/groupings> ] ;
    sh:class klaviyo:ReportResult ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ReportResult.groupings
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/groupings/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.ReportResult.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.ReportResult/statistics> ] ;
    sh:class klaviyo:ReportResult ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.ReportResult.statistics
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.ReportResult/statistics/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.SegmentAttributes.definition
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.SegmentAttributes/definition> ] ;
    sh:class klaviyo:SegmentAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.SegmentAttributes.definition
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.SegmentAttributes/definition/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Klaviyo.TemplateAttributes.definition
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/property/Klaviyo.TemplateAttributes/definition> ] ;
    sh:class klaviyo:TemplateAttributes ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/entry> ;
    sh:node <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh: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 . }"""
  ] .

# Generated Record entry shape for Klaviyo.TemplateAttributes.definition
<https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/klaviyo/record/Klaviyo.TemplateAttributes/definition/value> ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .
