# Models

## The AddScanRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AddScanRequest":{"required":["data","type"],"type":"object","properties":{"data":{"maxLength":2048,"minLength":3,"type":"string","description":"Raw Data of the scan value"},"type":{"$ref":"#/components/schemas/TypeEnum"}},"additionalProperties":false},"TypeEnum":{"enum":["manual","text","qrcode","pdf417","aztec","code128","code39","codabar","ean8","ean13","itf14","upca","datamatrix","nfc"],"type":"string"}}}}
```

## The AddScanResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AddScanResponse":{"required":["passId"],"type":"object","properties":{"passId":{"type":["null","string"],"description":"Identifier of the pass"}},"additionalProperties":false}}}}
```

## The Advisor object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Advisor":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"type":["null","string"]},"displayName":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The ApplyMovementRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ApplyMovementRequest":{"required":["movementValue","oldValue"],"type":"object","properties":{"oldValue":{"type":"number","description":"The expected sum of all movement values before this update.\nUsed for optimistic concurrency control with server-side validation in the handler.\nIf the current value differs, the request is rejected (409 Conflict).","format":"double"},"movementValue":{"type":"number","description":"The movement value to apply. Cannot be zero. Positive for issuance/award, negative for redemption/usage.\nFractional values are supported for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Request model to apply a movement (transaction) to a privilege's value."}}}}
```

## The BarcodeType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"BarcodeType":{"enum":["PDF417","UPCA","UPCE","CODE39","CODE93","CODE128","ITF14","EAN13","EAN8","QRCODE"],"type":"string"}}}}
```

## The ConnectResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ConnectResponse":{"type":"object","properties":{"settings":{"type":"null","oneOf":[{"$ref":"#/components/schemas/CrewCheckSettings"}],"description":"Settings related to the connected device"}},"additionalProperties":false,"description":"Connect result information"},"CrewCheckSettings":{"required":["logoUrl"],"type":"object","allOf":[{"$ref":"#/components/schemas/DeviceSettingsBase"}],"properties":{"logoUrl":{"type":["null","string"],"description":"URL of the logo to display on the CrewCheck device."}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The ConnectionToken object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ConnectionToken":{"type":"object","properties":{"deviceId":{"type":["null","string"],"description":"Device identifier."},"tenantId":{"type":["null","string"],"description":"Tenant identifier."},"apiKey":{"type":["null","string"],"description":"Issued API key for the device."},"environment":{"type":["null","string"],"description":"Environment base URI the device should call.","format":"uri"}},"additionalProperties":false,"description":"Connection token information returned to the device."}}}}
```

## The CreateDevice object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateDevice":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DeviceType"},"name":{"type":["null","string"],"description":"Device name."},"description":{"type":["null","string"],"description":"Optional device description."}},"additionalProperties":false,"description":"Payload to create a new device."},"DeviceType":{"enum":["CrewCheck"],"type":"string"}}}}
```

## The CreateOrUpdateModel object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateOrUpdateModel":{"required":["layout"],"type":"object","properties":{"layout":{"minLength":1,"type":"string","description":"Name of the layout to create a redirection for"},"parameters":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"List of parameters that should be included in the uri"},"options":{"$ref":"#/components/schemas/WebRedirectOptions"}},"additionalProperties":false},"WebRedirectOptions":{"type":"object","properties":{"expirationDate":{"type":["null","string"],"description":"Date when the link will be expired. If a user access an expired link he will obtian a 404","format":"date-time"},"label":{"type":["null","string"],"description":"Optional friendly name of this redirect"},"length":{"type":"integer","description":"Size of the small uri, minLength is 6.","format":"int32"}},"additionalProperties":false}}}}
```

## The CreatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreatePassData":{"type":"object","allOf":[{"$ref":"#/components/schemas/PassData"}],"properties":{"extensions":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Extensibility data related to this pass."}},"additionalProperties":false,"description":"Data payload for pass creation operations."},"PassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."}},"additionalProperties":false}}}}
```

## The CreateTenantUserRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateTenantUserRequest":{"required":["email","role"],"type":"object","properties":{"email":{"minLength":1,"type":"string","description":"User email address."},"name":{"type":["null","string"],"description":"Display name."},"role":{"minLength":1,"type":"string","description":"Tenant role to assign."}},"additionalProperties":false,"description":"Request payload for creating a tenant user."}}}}
```

## The CrewCheckSettings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CrewCheckSettings":{"required":["logoUrl"],"type":"object","allOf":[{"$ref":"#/components/schemas/DeviceSettingsBase"}],"properties":{"logoUrl":{"type":["null","string"],"description":"URL of the logo to display on the CrewCheck device."}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The CustomerPayload object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomerPayload":{"required":["callbackUrl"],"type":"object","properties":{"callbackUrl":{"type":["null","string"]},"customerId":{"type":["null","string"]},"storeId":{"type":["null","string"]}},"additionalProperties":{}}}}}
```

## The Device object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Device":{"type":"object","properties":{"deviceId":{"type":["null","string"],"description":"Unique device identifier."},"name":{"type":["null","string"],"description":"Device name."},"description":{"type":["null","string"],"description":"Optional description."},"isEnabled":{"type":"boolean","description":"Whether the device is currently active."},"type":{"$ref":"#/components/schemas/DeviceType"},"settings":{"type":"null","oneOf":[{"$ref":"#/components/schemas/CrewCheckSettings"}],"description":"Type-specific settings."}},"additionalProperties":false,"description":"Device metadata exposed by the API."},"DeviceType":{"enum":["CrewCheck"],"type":"string"},"CrewCheckSettings":{"required":["logoUrl"],"type":"object","allOf":[{"$ref":"#/components/schemas/DeviceSettingsBase"}],"properties":{"logoUrl":{"type":["null","string"],"description":"URL of the logo to display on the CrewCheck device."}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The DeviceSettingsBase object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The DeviceType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DeviceType":{"enum":["CrewCheck"],"type":"string"}}}}
```

## The EmailVerificationResult object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailVerificationResult":{"type":"object","properties":{"isValid":{"type":"boolean"}},"additionalProperties":false}}}}
```

## The Execution object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Execution":{"required":["duration","id","retryIndex","startDate","success"],"type":"object","properties":{"id":{"type":["null","string"]},"startDate":{"type":"string","format":"date-time"},"retryIndex":{"type":"integer","format":"int32"},"success":{"type":["null","boolean"]},"duration":{"type":["null","string"],"format":"date-span"}},"additionalProperties":false}}}}
```

## The ExecutionDetail object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ExecutionDetail":{"required":["logs"],"type":"object","allOf":[{"$ref":"#/components/schemas/Execution"}],"properties":{"logs":{"type":["null","array"],"items":{"$ref":"#/components/schemas/ExecutionLog"}}},"additionalProperties":false},"Execution":{"required":["duration","id","retryIndex","startDate","success"],"type":"object","properties":{"id":{"type":["null","string"]},"startDate":{"type":"string","format":"date-time"},"retryIndex":{"type":"integer","format":"int32"},"success":{"type":["null","boolean"]},"duration":{"type":["null","string"],"format":"date-span"}},"additionalProperties":false},"ExecutionLog":{"required":["data","entryType","eventDate","id"],"type":"object","properties":{"id":{"type":["null","string"]},"eventDate":{"type":"string","format":"date-time"},"entryType":{"type":["null","string"]},"data":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The ExecutionLog object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ExecutionLog":{"required":["data","entryType","eventDate","id"],"type":"object","properties":{"id":{"type":["null","string"]},"eventDate":{"type":"string","format":"date-time"},"entryType":{"type":["null","string"]},"data":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The FilterAction object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FilterAction":{"enum":[0,1],"type":"integer","format":"int32"}}}}
```

## The FilterInformation object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FilterInformation":{"type":"object","properties":{"eventSources":{"type":["null","array"],"items":{"type":"string"}},"userIds":{"type":["null","array"],"items":{"type":"string"}},"action":{"$ref":"#/components/schemas/FilterAction"}},"additionalProperties":false},"FilterAction":{"enum":[0,1],"type":"integer","format":"int32"}}}}
```

## The FilterModel object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FilterModel":{"type":"object","properties":{"field":{"type":["null","string"],"description":"Field to filter by (identifiers.*, metadata.*, passType, installationStatus)."},"value":{"type":["null","string"],"description":"Filter value to match."},"operator":{"$ref":"#/components/schemas/FilterModelOperator"}},"additionalProperties":false,"description":"Filter specification for pass queries."},"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","doesNotEqual"],"type":"string","description":"Filter operators for pass list queries."}}}}
```

## The FilterModelOperator object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","doesNotEqual"],"type":"string","description":"Filter operators for pass list queries."}}}}
```

## The GenericEventData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GenericEventData":{"type":"object","allOf":[{"$ref":"#/components/schemas/JsonElementDataWrapper"}],"additionalProperties":false},"JsonElementDataWrapper":{"type":"object","properties":{"__id":{"type":["null","string"]},"__creationDate":{"type":"string","format":"date-time"},"__eventName":{"type":["null","string"]},"Header":{"$ref":"#/components/schemas/Header"},"Body":{}},"additionalProperties":false},"Header":{"type":"object","properties":{"EventId":{"type":["null","string"]},"EventSource":{"type":["null","string"]},"ContentType":{"type":["null","string"]},"SourceId":{"type":["null","string"]},"UserId":{"type":["null","string"]},"Date":{"type":"string","format":"date-time"}},"additionalProperties":false}}}}
```

## The Header object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Header":{"type":"object","properties":{"EventId":{"type":["null","string"]},"EventSource":{"type":["null","string"]},"ContentType":{"type":["null","string"]},"SourceId":{"type":["null","string"]},"UserId":{"type":["null","string"]},"Date":{"type":"string","format":"date-time"}},"additionalProperties":false}}}}
```

## The HttpValidationProblemDetails object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":["null","object"],"additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}},"ProblemDetails":{"type":"object","properties":{"type":{"type":["null","string"]},"title":{"type":["null","string"]},"status":{"type":["null","integer"],"format":"int32"},"detail":{"type":["null","string"]},"instance":{"type":["null","string"]}},"additionalProperties":{}}}}}
```

## The InsertOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"InsertOptions":{"type":"object","properties":{"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."},"notification":{"$ref":"#/components/schemas/NotifyRequest"}},"additionalProperties":false,"description":"Configuration options for privilege creation, including correlation tracking and notifications."},"NotifyRequest":{"type":"object","properties":{"content":{"type":["null","string"],"description":"Could be null if LocalizedContent is specified"},"localizedContent":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized notification content by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The notification content for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}},"options":{"$ref":"#/components/schemas/NotifyRequestOptions"}},"additionalProperties":false},"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The InsertPrivilegeRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"InsertPrivilegeRequest":{"required":["type"],"type":"object","allOf":[{"$ref":"#/components/schemas/PrivilegeRequestBase"}],"properties":{"type":{"$ref":"#/components/schemas/PrivilegeType"},"options":{"$ref":"#/components/schemas/InsertOptions"}},"additionalProperties":false,"description":"Request model to create a new privilege."},"PrivilegeRequestBase":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier for the privilege in the source system."},"priority":{"type":["null","integer"],"description":"Priority of the privilege. Larger numbers indicate higher importance.","format":"int32"},"origin":{"$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"$ref":"#/components/schemas/PrivilegeLinks"},"data":{"$ref":"#/components/schemas/PrivilegeData"},"deletionDate":{"type":["null","string"],"description":"The timestamp at which this privilege should be removed from the system.","format":"date-time"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."},"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."},"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."},"PrivilegeType":{"enum":["OneTime","Unlimited","MultiUse","Unlockable"],"type":"string","description":"Defines how a privilege behaves from a usage perspective."},"InsertOptions":{"type":"object","properties":{"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."},"notification":{"$ref":"#/components/schemas/NotifyRequest"}},"additionalProperties":false,"description":"Configuration options for privilege creation, including correlation tracking and notifications."},"NotifyRequest":{"type":"object","properties":{"content":{"type":["null","string"],"description":"Could be null if LocalizedContent is specified"},"localizedContent":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized notification content by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The notification content for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}},"options":{"$ref":"#/components/schemas/NotifyRequestOptions"}},"additionalProperties":false},"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The JsonElementDataWrapper object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"JsonElementDataWrapper":{"type":"object","properties":{"__id":{"type":["null","string"]},"__creationDate":{"type":"string","format":"date-time"},"__eventName":{"type":["null","string"]},"Header":{"$ref":"#/components/schemas/Header"},"Body":{}},"additionalProperties":false},"Header":{"type":"object","properties":{"EventId":{"type":["null","string"]},"EventSource":{"type":["null","string"]},"ContentType":{"type":["null","string"]},"SourceId":{"type":["null","string"]},"UserId":{"type":["null","string"]},"Date":{"type":"string","format":"date-time"}},"additionalProperties":false}}}}
```

## The LocalizedString object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."}}}}
```

## The MovementResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"MovementResponse":{"type":"object","properties":{"movementId":{"type":["null","string"]}},"additionalProperties":false,"description":"Response payload after a movement is created."}}}}
```

## The MultipleUpdatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"MultipleUpdatePassData":{"type":"object","allOf":[{"$ref":"#/components/schemas/MultipleUpdatePassDataOptionsUpdatePassData"}],"additionalProperties":false,"description":"Data payload for multi-pass (bulk) update operations."},"MultipleUpdatePassDataOptionsUpdatePassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."},"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"updateMetadata":{"type":"boolean","description":"Specifies if passes metadata should be updated. Updating metadata is time consuming and could be avoided for notification only push update","default":false,"deprecated":true},"options":{"$ref":"#/components/schemas/MultipleUpdatePassDataOptions"}},"additionalProperties":false},"MultipleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"throughput":{"type":"number","description":"Desired throughput (passes per second) when scheduling updates. Default is 12. Throughput is best-effort and can vary. Values below 1 slowly pace updates.","format":"float"}},"additionalProperties":false,"description":"Options for multi-pass (bulk) update operations."},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The MultipleUpdatePassDataOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"MultipleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"throughput":{"type":"number","description":"Desired throughput (passes per second) when scheduling updates. Default is 12. Throughput is best-effort and can vary. Values below 1 slowly pace updates.","format":"float"}},"additionalProperties":false,"description":"Options for multi-pass (bulk) update operations."},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The MultipleUpdatePassDataOptionsUpdatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"MultipleUpdatePassDataOptionsUpdatePassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."},"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"updateMetadata":{"type":"boolean","description":"Specifies if passes metadata should be updated. Updating metadata is time consuming and could be avoided for notification only push update","default":false,"deprecated":true},"options":{"$ref":"#/components/schemas/MultipleUpdatePassDataOptions"}},"additionalProperties":false},"MultipleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"throughput":{"type":"number","description":"Desired throughput (passes per second) when scheduling updates. Default is 12. Throughput is best-effort and can vary. Values below 1 slowly pace updates.","format":"float"}},"additionalProperties":false,"description":"Options for multi-pass (bulk) update operations."},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The NewProfile object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"NewProfile":{"type":"object","properties":{"profileId":{"type":"integer","description":"Numeric profile identifier.","format":"int64"}},"additionalProperties":false,"description":"Minimal profile identifier payload from Actito."}}}}
```

## The NewProfileActitoWrapper object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"NewProfileActitoWrapper":{"type":"object","properties":{"eventType":{"type":["null","string"],"description":"Type of the event emitted by Actito."},"operation":{"type":["null","string"],"description":"Operation name provided by Actito."},"data":{"$ref":"#/components/schemas/NewProfile"}},"additionalProperties":false,"description":"Envelope for Actito webhook payloads."},"NewProfile":{"type":"object","properties":{"profileId":{"type":"integer","description":"Numeric profile identifier.","format":"int64"}},"additionalProperties":false,"description":"Minimal profile identifier payload from Actito."}}}}
```

## The NotifyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"NotifyRequest":{"type":"object","properties":{"content":{"type":["null","string"],"description":"Could be null if LocalizedContent is specified"},"localizedContent":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized notification content by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The notification content for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}},"options":{"$ref":"#/components/schemas/NotifyRequestOptions"}},"additionalProperties":false},"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The NotifyRequestOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The OptionsRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"OptionsRequest":{"type":"object","properties":{"expiresOn":{"type":["null","string"],"description":"After this UTC date/time the secret becomes inaccessible.","format":"date-time"},"notBefore":{"type":["null","string"],"description":"Before this UTC date/time the secret cannot be accessed.","format":"date-time"}},"additionalProperties":false,"description":"Optional validity window for the secret."}}}}
```

## The OrderChangeRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"OrderChangeRequest":{"required":["lastUpdate","orderSecretToken","state"],"type":"object","properties":{"ticketId":{"type":["null","integer"],"description":"Ticket identifier from Secutix, when available.","format":"int64"},"saleMovementId":{"type":["null","integer"],"description":"Sale movement identifier from Secutix, when available.","format":"int64"},"orderSecretToken":{"type":["null","string"],"description":"Secret token identifying the order."},"state":{"type":["null","string"],"description":"Current state reported by Secutix (PAID, CANCELLED, VALIDATED, etc.)."},"lastUpdate":{"type":["null","string"],"description":"Last update timestamp provided by Secutix."}},"additionalProperties":false}}}}
```

## The OrderConfirmedData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"OrderConfirmedData":{"type":"object","properties":{"identifier":{"type":["null","string"]},"tickets":{"type":["null","array"],"items":{"$ref":"#/components/schemas/TicketData"}}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The OrderConfirmedDataWebhookRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"OrderConfirmedDataWebhookRequest":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OrderConfirmedData"}},"additionalProperties":false},"OrderConfirmedData":{"type":"object","properties":{"identifier":{"type":["null","string"]},"tickets":{"type":["null","array"],"items":{"$ref":"#/components/schemas/TicketData"}}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The Pass object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Pass":{"type":"object","properties":{"id":{"type":["null","string"],"description":"Unique identifier of this pass"},"secret":{"type":["null","string"],"description":"Secret of the Pass"},"creationDate":{"type":"string","description":"Date of pass creation","format":"date-time"},"lastUpdateDate":{"type":"string","description":"Date of last update or pass creation when no update is present","format":"date-time"},"passType":{"type":["null","string"],"description":"Type of pass"},"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers"},"metadata":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Metadata"},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Additional data"},"providers":{"type":["null","object"],"additionalProperties":{},"description":"Installation date per provider"}},"additionalProperties":false,"description":"Represents a pass returned by the API."}}}}
```

## The PassConnectResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassConnectResponse":{"type":"object","properties":{"url":{"type":["null","string"],"description":"WebSocket URL to connect for pass notifications."}},"additionalProperties":false,"description":"Represents a Web PubSub connection response for a pass."}}}}
```

## The PassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."}},"additionalProperties":false}}}}
```

## The PassStatistic object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassStatistic":{"type":"object","properties":{"count":{"$ref":"#/components/schemas/PassStatisticCount"}},"additionalProperties":false,"description":"Get statistics about pass usage"},"PassStatisticCount":{"type":"object","properties":{"total":{"type":"integer","description":"Total number of passes","format":"int32"},"active":{"type":"integer","description":"Total number of installed pass","format":"int32"},"apple":{"type":"integer","description":"Total number of active pass for apple","format":"int32"},"google":{"type":"integer","description":"Total number of active pass for google","format":"int32"}},"additionalProperties":false,"description":"Get number of active passes per device"}}}}
```

## The PassStatisticCount object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassStatisticCount":{"type":"object","properties":{"total":{"type":"integer","description":"Total number of passes","format":"int32"},"active":{"type":"integer","description":"Total number of installed pass","format":"int32"},"apple":{"type":"integer","description":"Total number of active pass for apple","format":"int32"},"google":{"type":"integer","description":"Total number of active pass for google","format":"int32"}},"additionalProperties":false,"description":"Get number of active passes per device"}}}}
```

## The PatchOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PatchOptions":{"type":"object","properties":{"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."},"notification":{"$ref":"#/components/schemas/NotifyRequest"}},"additionalProperties":false,"description":"Configuration options for privilege patching, including correlation tracking and notifications."},"NotifyRequest":{"type":"object","properties":{"content":{"type":["null","string"],"description":"Could be null if LocalizedContent is specified"},"localizedContent":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized notification content by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The notification content for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}},"options":{"$ref":"#/components/schemas/NotifyRequestOptions"}},"additionalProperties":false},"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The PatchPrivilegeRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PatchPrivilegeRequest":{"type":"object","allOf":[{"$ref":"#/components/schemas/PrivilegeRequestBase"}],"properties":{"type":{"$ref":"#/components/schemas/PrivilegeType"},"options":{"$ref":"#/components/schemas/PatchOptions"}},"additionalProperties":false,"description":"Request model to patch an existing privilege."},"PrivilegeRequestBase":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier for the privilege in the source system."},"priority":{"type":["null","integer"],"description":"Priority of the privilege. Larger numbers indicate higher importance.","format":"int32"},"origin":{"$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"$ref":"#/components/schemas/PrivilegeLinks"},"data":{"$ref":"#/components/schemas/PrivilegeData"},"deletionDate":{"type":["null","string"],"description":"The timestamp at which this privilege should be removed from the system.","format":"date-time"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."},"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."},"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."},"PrivilegeType":{"enum":["OneTime","Unlimited","MultiUse","Unlockable"],"type":"string","description":"Defines how a privilege behaves from a usage perspective."},"PatchOptions":{"type":"object","properties":{"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."},"notification":{"$ref":"#/components/schemas/NotifyRequest"}},"additionalProperties":false,"description":"Configuration options for privilege patching, including correlation tracking and notifications."},"NotifyRequest":{"type":"object","properties":{"content":{"type":["null","string"],"description":"Could be null if LocalizedContent is specified"},"localizedContent":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized notification content by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The notification content for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}},"options":{"$ref":"#/components/schemas/NotifyRequestOptions"}},"additionalProperties":false},"NotifyRequestOptions":{"type":"object","properties":{"updateData":{"type":"boolean","description":"Indicate if pass data should also be updated when the notification is sent.","default":false},"correlationId":{"maxLength":100,"minLength":10,"type":["null","string"],"description":"Correlation identifier to group and trace related API calls."}},"additionalProperties":false}}}}
```

## The PermissionAreaWeb object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PermissionAreaWeb":{"required":["code","scopes"],"type":"object","properties":{"code":{"type":["null","string"],"description":"Area code grouping related scopes."},"description":{"type":["null","string"],"description":"Human-friendly description of the area."},"scopes":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PermissionScopeWeb"},"description":"Scopes exposed by this permission area."}},"additionalProperties":false,"description":"Web response for a permission area (category of scopes)"},"PermissionScopeWeb":{"required":["code"],"type":"object","properties":{"code":{"type":["null","string"],"description":"Scope code used for access checks."},"description":{"type":["null","string"],"description":"Human-friendly description of the scope."}},"additionalProperties":false,"description":"Web response for an available permission scope"}}}}
```

## The PermissionScopeWeb object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PermissionScopeWeb":{"required":["code"],"type":"object","properties":{"code":{"type":["null","string"],"description":"Scope code used for access checks."},"description":{"type":["null","string"],"description":"Human-friendly description of the scope."}},"additionalProperties":false,"description":"Web response for an available permission scope"}}}}
```

## The Privilege object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Privilege":{"required":["privilegeId"],"type":"object","allOf":[{"$ref":"#/components/schemas/PrivilegeBase"}],"properties":{"privilegeId":{"type":["null","string"],"description":"Unique identifier of the privilege (unique across all passes within the tenant)."}},"additionalProperties":false,"description":"Represents a persisted privilege with a required unique identifier."},"PrivilegeBase":{"required":["type"],"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier for the privilege in the source system."},"priority":{"type":["null","integer"],"description":"Priority of the privilege. Larger numbers indicate higher importance (e.g., 100 > 10).","format":"int32"},"origin":{"$ref":"#/components/schemas/PrivilegeOrigin"},"type":{"$ref":"#/components/schemas/PrivilegeType"},"categories":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"$ref":"#/components/schemas/PrivilegeLinks"},"data":{"$ref":"#/components/schemas/PrivilegeData"},"deletionDate":{"type":["null","string"],"description":"The timestamp at which this privilege should be removed from the system.","format":"date-time"}},"additionalProperties":false,"description":"Base model for privilege definitions, including classification, visuals, links, and state."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"PrivilegeType":{"enum":["OneTime","Unlimited","MultiUse","Unlockable"],"type":"string","description":"Defines how a privilege behaves from a usage perspective."},"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."},"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."},"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."}}}}
```

## The PrivilegeAppearance object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."}}}}
```

## The PrivilegeBase object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeBase":{"required":["type"],"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier for the privilege in the source system."},"priority":{"type":["null","integer"],"description":"Priority of the privilege. Larger numbers indicate higher importance (e.g., 100 > 10).","format":"int32"},"origin":{"$ref":"#/components/schemas/PrivilegeOrigin"},"type":{"$ref":"#/components/schemas/PrivilegeType"},"categories":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"$ref":"#/components/schemas/PrivilegeLinks"},"data":{"$ref":"#/components/schemas/PrivilegeData"},"deletionDate":{"type":["null","string"],"description":"The timestamp at which this privilege should be removed from the system.","format":"date-time"}},"additionalProperties":false,"description":"Base model for privilege definitions, including classification, visuals, links, and state."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"PrivilegeType":{"enum":["OneTime","Unlimited","MultiUse","Unlockable"],"type":"string","description":"Defines how a privilege behaves from a usage perspective."},"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."},"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."},"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."}}}}
```

## The PrivilegeCategory object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."}}}}
```

## The PrivilegeContent object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."}}}}
```

## The PrivilegeData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."}}}}
```

## The PrivilegeLink object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."}}}}
```

## The PrivilegeLinks object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."}}}}
```

## The PrivilegeMovement object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."}}}}
```

## The PrivilegeOrigin object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."}}}}
```

## The PrivilegeRequestBase object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeRequestBase":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier for the privilege in the source system."},"priority":{"type":["null","integer"],"description":"Priority of the privilege. Larger numbers indicate higher importance.","format":"int32"},"origin":{"$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"$ref":"#/components/schemas/PrivilegeLinks"},"data":{"$ref":"#/components/schemas/PrivilegeData"},"deletionDate":{"type":["null","string"],"description":"The timestamp at which this privilege should be removed from the system.","format":"date-time"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"External identifier of this privilege in the partner system."},"generator":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Name of the partner or upstream system that generated the privilege."},"processId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Identifier of the upstream process or job that created this privilege."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"PrivilegeCategory":{"enum":["Other","Gift","Access","AudioGuide"],"type":"string","description":"High-level classification of privileges for organization and filtering."},"PrivilegeContent":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"}},"additionalProperties":false,"description":"Localized content for a privilege (title, description, notifications)."},"LocalizedString":{"type":"object","properties":{"value":{"type":["null","string"],"description":"The default text in the primary language."},"values":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Localized translations by language code.\nKey: ISO 639-1 code or \"iso2-region\" (e.g., \"en\", \"en-US\").\nValue: The translated string for that language.","propertyNames":{"pattern":"^[a-z]{2}(-[A-Z]{2})?$"}}},"additionalProperties":false,"description":"Represents a localized string with a default value and optional per-language translations."},"PrivilegeAppearance":{"type":"object","properties":{"mainImageUrl":{"$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"$ref":"#/components/schemas/LocalizedString"},"backgroundColor":{"type":["null","string"],"description":"Background color (e.g., HEX code)."},"foregroundColor":{"type":["null","string"],"description":"Foreground color for text or icons (e.g., HEX code)."}},"additionalProperties":false,"description":"Visual appearance settings for a privilege."},"PrivilegeLinks":{"type":"object","properties":{"legalInformation":{"$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"$ref":"#/components/schemas/LocalizedString"},"link":{"type":["null","string"],"description":"Target URI of the link.","format":"uri"}},"additionalProperties":false,"description":"A single link with a localized title and a target URI."},"PrivilegeData":{"type":"object","properties":{"value":{"type":["null","number"],"description":"Current numeric value of the privilege (e.g., loyalty points, punch count).\nThis is computed as the sum of all movement values. Can be negative if partially redeemed or adjusted. \nCan be fractional for progress-based privileges.","format":"double"},"movements":{"type":["null","array"],"items":{"$ref":"#/components/schemas/PrivilegeMovement"},"description":"History of all movements (transactions) affecting this privilege's data.\nThe current value is computed as the sum of all movement values."},"content":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional provider-specific payload or metadata for the privilege data."}},"additionalProperties":false,"description":"Runtime state and payload associated with a privilege."},"PrivilegeMovement":{"required":["date","movementId","value"],"type":"object","properties":{"movementId":{"type":["null","string"],"description":"Unique identifier for this movement."},"date":{"type":"string","description":"Timestamp when this movement occurred.","format":"date-time"},"value":{"type":"number","description":"Change in value. Negative when the privilege is used/redeemed.\nFractional for progress-based privileges (e.g., 0.5 for half a stamp).","format":"double"},"remarks":{"maxLength":500,"minLength":1,"type":["null","string"],"description":"Optional remarks or debug information about this movement."}},"additionalProperties":false,"description":"Represents a single movement or transaction affecting a privilege's value."}}}}
```

## The PrivilegeType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeType":{"enum":["OneTime","Unlimited","MultiUse","Unlockable"],"type":"string","description":"Defines how a privilege behaves from a usage perspective."}}}}
```

## The ProblemDetails object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ProblemDetails":{"type":"object","properties":{"type":{"type":["null","string"]},"title":{"type":["null","string"]},"status":{"type":["null","integer"],"format":"int32"},"detail":{"type":["null","string"]},"instance":{"type":["null","string"]}},"additionalProperties":{}}}}}
```

## The Profile object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Profile":{"type":"object","properties":{"email":{"type":["null","string"],"description":"Customer email address used for synchronization."},"phone_number":{"type":["null","string"],"description":"Customer phone number used for synchronization."}},"additionalProperties":false}}}}
```

## The ProfileEventType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ProfileEventType":{"enum":["Create","Update"],"type":"string"}}}}
```

## The PushUpdateData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PushUpdateData":{"required":["identifiers"],"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Identifiers used to locate the target pass (email, phone, customerId, etc.)."},"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Custom data applied to the pass payload."},"updateMetadata":{"type":"boolean","description":"When true, recomputes pass metadata and visuals.","default":false}},"additionalProperties":false}}}}
```

## The PushUpdateResult object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PushUpdateResult":{"type":"object","properties":{"passCount":{"type":"integer","description":"Count of passes scheduled for update.","format":"int32"}},"additionalProperties":false}}}}
```

## The PushUpdateStatistics object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PushUpdateStatistics":{"type":"object","properties":{"id":{"type":["null","string"],"description":"Unique operation identifier."},"operationName":{"type":["null","string"],"description":"Operation name/category."},"operationData":{"type":["null","string"],"description":"Correlation ID for tracking related updates."},"startDate":{"type":"string","description":"Operation start timestamp.","format":"date-time"},"lastActivity":{"type":["null","string"],"description":"Last activity timestamp.","format":"date-time"},"passCount":{"type":"integer","description":"Total passes scheduled for update.","format":"int32"},"completed":{"type":"integer","description":"Number of passes successfully updated.","format":"int32"},"errors":{"type":"integer","description":"Number of passes with update errors.","format":"int32"},"apple":{"type":"integer","description":"Number of Apple Pass updates deployed.","format":"int32"},"google":{"type":"integer","description":"Number of Google Pass updates deployed.","format":"int32"},"isCanceled":{"type":"boolean","description":"Whether the operation was cancelled."}},"additionalProperties":false,"description":"Aggregated status of a push update operation."}}}}
```

## The QueryOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"QueryOptions":{"type":"object","additionalProperties":false}}}}
```

## The QueryRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"QueryRequest":{"required":["query"],"type":"object","properties":{"query":{"type":["null","string"]},"parameters":{"type":["null","object"],"additionalProperties":{"type":"string"}},"options":{"$ref":"#/components/schemas/QueryOptions"}},"additionalProperties":false},"QueryOptions":{"type":"object","additionalProperties":false}}}}
```

## The QueryResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"QueryResponse":{"type":"object","properties":{"columns":{"type":["null","array"],"items":{"type":"string"}},"rows":{"type":["null","array"],"items":{"type":"array","items":{}}}},"additionalProperties":false}}}}
```

## The RoleDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"RoleDefinition":{"required":["name","permissions"],"type":"object","properties":{"name":{"type":["null","string"]},"permissions":{"type":["null","array"],"items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The SetRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetRequest":{"required":["value"],"type":"object","properties":{"value":{"type":["null","string"],"description":"Secret value to store."},"options":{"$ref":"#/components/schemas/OptionsRequest"}},"additionalProperties":false},"OptionsRequest":{"type":"object","properties":{"expiresOn":{"type":["null","string"],"description":"After this UTC date/time the secret becomes inaccessible.","format":"date-time"},"notBefore":{"type":["null","string"],"description":"Before this UTC date/time the secret cannot be accessed.","format":"date-time"}},"additionalProperties":false,"description":"Optional validity window for the secret."}}}}
```

## The SingleUpdatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SingleUpdatePassData":{"type":"object","allOf":[{"$ref":"#/components/schemas/SingleUpdatePassDataOptionsUpdatePassData"}],"properties":{"bypassQueue":{"type":"boolean","description":"Indicates whether the push update should bypass the queue and run immediately. Queuing helps protect the system load and should only be bypassed when required.","default":false,"deprecated":true}},"additionalProperties":false},"SingleUpdatePassDataOptionsUpdatePassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."},"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"updateMetadata":{"type":"boolean","description":"Specifies if passes metadata should be updated. Updating metadata is time consuming and could be avoided for notification only push update","default":false,"deprecated":true},"options":{"$ref":"#/components/schemas/SingleUpdatePassDataOptions"}},"additionalProperties":false},"SingleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"bypassQueue":{"type":"boolean","description":"Indicates whether the push update should bypass the queue and run immediately. Queuing helps protect the system load and should only be bypassed when required.","default":false}},"additionalProperties":false},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The SingleUpdatePassDataOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SingleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"bypassQueue":{"type":"boolean","description":"Indicates whether the push update should bypass the queue and run immediately. Queuing helps protect the system load and should only be bypassed when required.","default":false}},"additionalProperties":false},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The SingleUpdatePassDataOptionsUpdatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SingleUpdatePassDataOptionsUpdatePassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."},"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"updateMetadata":{"type":"boolean","description":"Specifies if passes metadata should be updated. Updating metadata is time consuming and could be avoided for notification only push update","default":false,"deprecated":true},"options":{"$ref":"#/components/schemas/SingleUpdatePassDataOptions"}},"additionalProperties":false},"SingleUpdatePassDataOptions":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassDataOptions"}],"properties":{"bypassQueue":{"type":"boolean","description":"Indicates whether the push update should bypass the queue and run immediately. Queuing helps protect the system load and should only be bypassed when required.","default":false}},"additionalProperties":false},"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The SortModel object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SortModel":{"type":"object","properties":{"field":{"type":["null","string"],"description":"Field to sort by."},"direction":{"$ref":"#/components/schemas/SortModelDirection"}},"additionalProperties":false,"description":"Sort specification for pass queries."},"SortModelDirection":{"enum":[0,1],"type":"integer","description":"Sort direction for pass list queries.","format":"int32"}}}}
```

## The SortModelDirection object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SortModelDirection":{"enum":[0,1],"type":"integer","description":"Sort direction for pass list queries.","format":"int32"}}}}
```

## The Store object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Store":{"required":["displayName","storeId"],"type":"object","properties":{"storeId":{"type":["null","string"]},"displayName":{"type":["null","string"]},"availableLanguages":{"type":["null","array"],"items":{"type":"string"}},"additionalResources":{"type":["null","object"],"additionalProperties":{}},"additionalProperties":{"type":["null","object"],"additionalProperties":{}}},"additionalProperties":false}}}}
```

## The SubscriptionInformation object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SubscriptionInformation":{"type":"object","properties":{"enabled":{"type":"boolean"},"id":{"type":["null","string"]},"name":{"type":["null","string"]},"url":{"type":["null","string"]},"headers":{"type":["null","object"],"additionalProperties":{"type":"string"}},"user":{"$ref":"#/components/schemas/UserInformation"},"filters":{"type":["null","array"],"items":{"$ref":"#/components/schemas/FilterInformation"}}},"additionalProperties":false},"UserInformation":{"type":"object","properties":{"userName":{"type":["null","string"]},"password":{"type":["null","string"]}},"additionalProperties":false},"FilterInformation":{"type":"object","properties":{"eventSources":{"type":["null","array"],"items":{"type":"string"}},"userIds":{"type":["null","array"],"items":{"type":"string"}},"action":{"$ref":"#/components/schemas/FilterAction"}},"additionalProperties":false},"FilterAction":{"enum":[0,1],"type":"integer","format":"int32"}}}}
```

## The TOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false}}}}
```

## The TenantConfigurationVersionInformation object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigurationVersionInformation":{"type":"object","properties":{"version":{"type":["null","string"],"description":"Version of the configuration","readOnly":true},"files":{"type":["null","object"],"additionalProperties":{"type":"integer","format":"int64"},"description":"Returns version of each files of the configuration"},"appliedMigrations":{"type":["null","array"],"items":{"type":"string"}}},"additionalProperties":false,"description":"Version information related to a tenant configuration"}}}}
```

## The TenantUser object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantUser":{"required":["email","id"],"type":"object","properties":{"id":{"minLength":1,"type":"string","description":"User identifier."},"email":{"minLength":1,"type":"string","description":"User email address."},"name":{"type":["null","string"],"description":"Display name."},"blocked":{"type":"boolean","description":"True when the account is blocked."},"lastLogin":{"type":["null","string"],"description":"Last login timestamp.","format":"date-time"},"tenantRole":{"type":["null","string"],"description":"Tenant role assigned to the user."}},"additionalProperties":false,"description":"Tenant-scoped user representation."}}}}
```

## The TicketCanceledData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TicketCanceledData":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/TicketData"}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TicketCanceledDataWebhookRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TicketCanceledDataWebhookRequest":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TicketCanceledData"}},"additionalProperties":false},"TicketCanceledData":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/TicketData"}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TicketCheckedData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TicketCheckedData":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/TicketData"}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TicketCheckedDataWebhookRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TicketCheckedDataWebhookRequest":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TicketCheckedData"}},"additionalProperties":false},"TicketCheckedData":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/TicketData"}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TicketData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TicketData":{"type":"object","properties":{"token":{"type":["null","string"]},"identifier":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TypeEnum object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TypeEnum":{"enum":["manual","text","qrcode","pdf417","aztec","code128","code39","codabar","ean8","ean13","itf14","upca","datamatrix","nfc"],"type":"string"}}}}
```

## The UpdateDevice object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateDevice":{"type":"object","properties":{"name":{"type":["null","string"],"description":"Device name."},"description":{"type":["null","string"],"description":"Optional description."},"isEnabled":{"type":"boolean","description":"Whether the device should be enabled."}},"additionalProperties":false,"description":"Payload to update a device."}}}}
```

## The UpdatePassDataOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdatePassDataOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false,"description":"Options used when updating passes."}}}}
```

## The UpdatePassData\`1 object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdatePassData`1":{"type":"object","allOf":[{"$ref":"#/components/schemas/PassData"}],"properties":{"passType":{"type":["null","string"],"description":"Optional pass type to convert the pass to."},"updateMetadata":{"type":"boolean","description":"Specifies if passes metadata should be updated. Updating metadata is time consuming and could be avoided for notification only push update","default":false,"deprecated":true},"options":{"$ref":"#/components/schemas/TOptions"}},"additionalProperties":false},"PassData":{"type":"object","properties":{"identifiers":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"External identifiers of the customer for this pass. Keys must not start with `id.`; common examples are `y2.customerId` or `shopify.customerId`.\nUse an empty value to remove an identifier. Leave the collection empty to keep existing identifiers unchanged."},"additionalData":{"type":["null","object"],"additionalProperties":{"type":"null"},"description":"Arbitrary data to persist with the pass (for example, loyalty tier, store code, or campaign flags)."}},"additionalProperties":false},"TOptions":{"type":"object","properties":{"updateMetadata":{"type":"boolean","description":"When true, recompute and persist pass metadata. Updating metadata is slower and is usually unnecessary for notification-only updates."},"correlationId":{"type":["null","string"],"description":"Groups related updates under the same correlationId. Useful for batch updates (for example nightly jobs) to make retries and logs traceable."}},"additionalProperties":false}}}}
```

## The UpdateTenantUserRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateTenantUserRequest":{"required":["role"],"type":"object","properties":{"name":{"type":["null","string"],"description":"Updated display name."},"role":{"type":["null","string"],"description":"Updated tenant role."}},"additionalProperties":false,"description":"Request payload for updating a tenant user."}}}}
```

## The UserInformation object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UserInformation":{"type":"object","properties":{"userName":{"type":["null","string"]},"password":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The WebClaim object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebClaim":{"type":"object","properties":{"type":{"type":["null","string"],"description":"claim type"},"value":{"type":["null","string"],"description":"Value"},"valueType":{"type":["null","string"],"description":"optional value type"}},"additionalProperties":false,"description":"Claim to generate JWT token for"}}}}
```

## The WebHook object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebHook":{"required":["endpoint","events"],"type":"object","properties":{"description":{"type":["null","string"],"description":"Description of the webhook"},"events":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Events to listen. Can ends with * to listen to more than one event"},"endpoint":{"type":"string","description":"Uri where a POST request will be made when the coresponding event happens.","format":"uri"},"enabled":{"type":"boolean","description":"Determine if the webhook is enabled","default":false}},"additionalProperties":false}}}}
```

## The WebHookWithId object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebHookWithId":{"required":["id","signatureSecret"],"type":"object","allOf":[{"$ref":"#/components/schemas/WebHook"}],"properties":{"id":{"minLength":1,"type":"string","description":"Unique identifier of this webhook"},"signatureSecret":{"minLength":1,"type":"string","description":"Key used to sign the request.\nWhen The Wallet Crew platform sends a request it will add a X-NEOSTORE-SIGNATURE header with a hmacsha256 computed from the body content and this secret"}},"additionalProperties":false},"WebHook":{"required":["endpoint","events"],"type":"object","properties":{"description":{"type":["null","string"],"description":"Description of the webhook"},"events":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Events to listen. Can ends with * to listen to more than one event"},"endpoint":{"type":"string","description":"Uri where a POST request will be made when the coresponding event happens.","format":"uri"},"enabled":{"type":"boolean","description":"Determine if the webhook is enabled","default":false}},"additionalProperties":false}}}}
```

## The WebRedirectEntity object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebRedirectEntity":{"required":["id","layout","uri"],"type":"object","properties":{"id":{"type":["null","string"],"description":"Identifier of the redirect"},"layout":{"type":["null","string"],"description":"Layout associated to this redirect"},"creationDate":{"type":"string","description":"Creation date of this redirect","format":"date-time"},"parameters":{"type":["null","object"],"additionalProperties":{"type":"string"},"description":"Optional parameters to add to the layout url"},"options":{"$ref":"#/components/schemas/WebRedirectOptions"},"uri":{"type":["null","string"],"description":"Short uri of the redirection uri"}},"additionalProperties":false},"WebRedirectOptions":{"type":"object","properties":{"expirationDate":{"type":["null","string"],"description":"Date when the link will be expired. If a user access an expired link he will obtian a 404","format":"date-time"},"label":{"type":["null","string"],"description":"Optional friendly name of this redirect"},"length":{"type":"integer","description":"Size of the small uri, minLength is 6.","format":"int32"}},"additionalProperties":false}}}}
```

## The WebRedirectOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebRedirectOptions":{"type":"object","properties":{"expirationDate":{"type":["null","string"],"description":"Date when the link will be expired. If a user access an expired link he will obtian a 404","format":"date-time"},"label":{"type":["null","string"],"description":"Optional friendly name of this redirect"},"length":{"type":"integer","description":"Size of the small uri, minLength is 6.","format":"int32"}},"additionalProperties":false}}}}
```
