# 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":{"description":"Type of data","$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":"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":"string"},"displayName":{"type":"string"}},"additionalProperties":false}}}}
```

## The ApiKeyCreatedResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ApiKeyCreatedResponse":{"required":["token"],"type":"object","allOf":[{"$ref":"#/components/schemas/ApiKeyDefinition"}],"properties":{"token":{"type":"string","description":"Plaintext API key. Copy and store it immediately — it will not be shown again."}},"additionalProperties":false,"description":"Returned once after a successful key creation.\nThe `Token` field contains the plaintext API key and will never be retrievable again."},"ApiKeyDefinition":{"required":["enabled","name","permissions"],"type":"object","properties":{"name":{"type":"string","description":"Key name identifier."},"enabled":{"type":"boolean","description":"Whether this key is currently active."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission scopes granted to this key. Use `[\"*\"]` for full tenant-admin access."}},"additionalProperties":false,"description":"API key definition returned by list and get endpoints.\nThe key hash is never exposed."}}}}
```

## The ApiKeyDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ApiKeyDefinition":{"required":["enabled","name","permissions"],"type":"object","properties":{"name":{"type":"string","description":"Key name identifier."},"enabled":{"type":"boolean","description":"Whether this key is currently active."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission scopes granted to this key. Use `[\"*\"]` for full tenant-admin access."}},"additionalProperties":false,"description":"API key definition returned by list and get endpoints.\nThe key hash is never exposed."}}}}
```

## 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":{"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":"string","description":"URL of the logo to display on the CrewCheck device."}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The ConnectResult object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ConnectResult":{"type":"object","properties":{"websocketUri":{"type":"string","format":"uri"},"sessionId":{"type":"string"}},"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":"string","description":"Device identifier."},"tenantId":{"type":"string","description":"Tenant identifier."},"apiKey":{"type":"string","description":"Issued API key for the device."},"environment":{"type":"string","description":"Environment base URI the device should call.","format":"uri"}},"additionalProperties":false,"description":"Connection token information returned to the device."}}}}
```

## The CreateApiKeyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateApiKeyRequest":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Key name. Only alphanumeric characters, hyphens, underscores and dots are allowed."},"enabled":{"type":"boolean","description":"Whether this key is active. Defaults to `true`."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission scopes granted to this key. Use `[\"*\"]` for full access."}},"additionalProperties":false,"description":"Request body to create an API key."}}}}
```

## The CreateDevice object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateDevice":{"type":"object","properties":{"type":{"description":"Device type to create.","$ref":"#/components/schemas/DeviceType"},"name":{"type":"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":"object","additionalProperties":{"type":"string"},"description":"List of parameters that should be included in the uri"},"options":{"description":"Additional options for this redirect","$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":"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 CreateRoleRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateRoleRequest":{"required":["name","permissions"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Role name. Only alphanumeric characters, hyphens, underscores and dots are allowed.\nCannot be \"administrator\"."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission scopes granted to this role. Use [\"*\"] for full access."}},"additionalProperties":false,"description":"Request body to create a role."}}}}
```

## 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":"string","description":"URL of the logo to display on the CrewCheck device."}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false}}}}
```

## The CurrentTenantUser object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CurrentTenantUser":{"required":["email","permissions","userId"],"type":"object","properties":{"userId":{"minLength":1,"type":"string","description":"User identifier."},"email":{"minLength":1,"type":"string","description":"User email address."},"displayName":{"type":["null","string"],"description":"User display name."},"role":{"type":["null","string"],"description":"Tenant role assigned to the user.\nCan be globalAdministrator for global admins not assigned to a tenant role."},"permissions":{"type":"array","items":{"type":"string"},"description":"Expanded permissions for the current user."}},"additionalProperties":false,"description":"Current authenticated tenant user representation."}}}}
```

## 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":"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":"string","description":"Unique device identifier."},"name":{"type":"string","description":"Device name."},"description":{"type":["null","string"],"description":"Optional description."},"isEnabled":{"type":"boolean","description":"Whether the device is currently active."},"type":{"description":"Device type (CrewCheck, etc.).","$ref":"#/components/schemas/DeviceType"},"settings":{"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":"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":"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":"array","items":{"$ref":"#/components/schemas/ExecutionLog"}}},"additionalProperties":false},"Execution":{"required":["duration","id","retryIndex","startDate","success"],"type":"object","properties":{"id":{"type":"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":"string"},"eventDate":{"type":"string","format":"date-time"},"entryType":{"type":"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":"string"},"eventDate":{"type":"string","format":"date-time"},"entryType":{"type":"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":"array","items":{"type":"string"}},"userIds":{"type":"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":"string","description":"Field to filter by (identifiers.*, metadata.*, passType, installationStatus)."},"value":{"type":["null","string"],"description":"Filter value to match."},"operator":{"description":"Comparison operator to apply.","$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":"string"},"__creationDate":{"type":"string","format":"date-time"},"__eventName":{"type":"string"},"Header":{"$ref":"#/components/schemas/Header"},"Body":{}},"additionalProperties":false},"Header":{"type":"object","properties":{"EventId":{"type":"string"},"EventSource":{"type":"string"},"ContentType":{"type":"string"},"SourceId":{"type":"string"},"UserId":{"type":"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":"string"},"EventSource":{"type":"string"},"ContentType":{"type":"string"},"SourceId":{"type":"string"},"UserId":{"type":"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":"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":{"description":"Optional notification to send to the pass when the privilege is applied.\nMirrors the payload accepted by the notification endpoints.","$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":[{"description":"Base request model for privilege operations.","$ref":"#/components/schemas/PrivilegeRequestBase"}],"properties":{"type":{"description":"The functional type of the privilege (required for new privileges).","$ref":"#/components/schemas/PrivilegeType"},"options":{"description":"Additional processing options for privilege creation.","$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":{"description":"Information about the external system that produced this privilege.","$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":"array","items":{"description":"High-level classification of privileges for organization and filtering.","$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"description":"Localized content such as title and description.","$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"description":"Visual appearance settings (images and colors).","$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"description":"Links relevant to the privilege (e.g., legal terms, call to action).","$ref":"#/components/schemas/PrivilegeLinks"},"data":{"description":"Current state and payload of the privilege.","$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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":{"description":"Optional notification to send to the pass when the privilege is applied.\nMirrors the payload accepted by the notification endpoints.","$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":"string"},"__creationDate":{"type":"string","format":"date-time"},"__eventName":{"type":"string"},"Header":{"$ref":"#/components/schemas/Header"},"Body":{}},"additionalProperties":false},"Header":{"type":"object","properties":{"EventId":{"type":"string"},"EventSource":{"type":"string"},"ContentType":{"type":"string"},"SourceId":{"type":"string"},"UserId":{"type":"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":"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":"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":{"description":"Options for multi-pass (bulk) update operations.","$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":"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":{"description":"Options for multi-pass (bulk) update operations.","$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":"string","description":"Type of the event emitted by Actito."},"operation":{"type":"string","description":"Operation name provided by Actito."},"data":{"description":"Event-specific payload.","$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":"string","description":"Secret token identifying the order."},"state":{"type":"string","description":"Current state reported by Secutix (PAID, CANCELLED, VALIDATED, etc.)."},"lastUpdate":{"type":"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":"string"},"tickets":{"type":"array","items":{"$ref":"#/components/schemas/TicketData"}}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":"string"},"identifier":{"type":"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":"string"},"tickets":{"type":"array","items":{"$ref":"#/components/schemas/TicketData"}}},"additionalProperties":false},"TicketData":{"type":"object","properties":{"token":{"type":"string"},"identifier":{"type":"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":"string","description":"Unique identifier of this pass"},"secret":{"type":"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":"string","description":"Type of pass"},"identifiers":{"type":"object","additionalProperties":{"type":"string"},"description":"External identifiers"},"metadata":{"type":"object","additionalProperties":{"type":"null"},"description":"Metadata"},"additionalData":{"type":"object","additionalProperties":{"type":"null"},"description":"Additional data"},"providers":{"type":"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":"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":"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":{"description":"Number of active pass","$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":{"description":"Optional notification to send to the pass when the privilege is updated.\nMirrors the payload accepted by the notification endpoints.","$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":{"description":"The functional type of the privilege (optional for patches).","$ref":"#/components/schemas/PrivilegeType"},"options":{"description":"Additional processing options for privilege patching.","$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":{"description":"Information about the external system that produced this privilege.","$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":"array","items":{"description":"High-level classification of privileges for organization and filtering.","$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"description":"Localized content such as title and description.","$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"description":"Visual appearance settings (images and colors).","$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"description":"Links relevant to the privilege (e.g., legal terms, call to action).","$ref":"#/components/schemas/PrivilegeLinks"},"data":{"description":"Current state and payload of the privilege.","$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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":{"description":"Optional notification to send to the pass when the privilege is updated.\nMirrors the payload accepted by the notification endpoints.","$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":["category","code","scopes"],"type":"object","properties":{"code":{"type":"string","description":"Area code grouping related scopes."},"category":{"type":"string","description":"Top-level category code used to group permission areas in the UI."},"description":{"type":["null","string"],"description":"Human-friendly description of the area."},"scopes":{"type":"array","items":{"description":"Web response for an available permission scope","$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":"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":"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":[{"description":"Base model for privilege definitions, including classification, visuals, links, and state.","$ref":"#/components/schemas/PrivilegeBase"}],"properties":{"privilegeId":{"type":"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":{"description":"Information about the external system that produced this privilege.","$ref":"#/components/schemas/PrivilegeOrigin"},"type":{"description":"The functional type of the privilege.","$ref":"#/components/schemas/PrivilegeType"},"categories":{"type":"array","items":{"description":"High-level classification of privileges for organization and filtering.","$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"description":"Localized content such as title, description, and activation notifications.","$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"description":"Visual appearance settings (images and colors).","$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"description":"Links relevant to the privilege (e.g., legal terms, call to action).","$ref":"#/components/schemas/PrivilegeLinks"},"data":{"description":"Current state and payload of the privilege (e.g., whether it is available or already used).","$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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Information about the external system that produced this privilege.","$ref":"#/components/schemas/PrivilegeOrigin"},"type":{"description":"The functional type of the privilege.","$ref":"#/components/schemas/PrivilegeType"},"categories":{"type":"array","items":{"description":"High-level classification of privileges for organization and filtering.","$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"description":"Localized content such as title, description, and activation notifications.","$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"description":"Visual appearance settings (images and colors).","$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"description":"Links relevant to the privilege (e.g., legal terms, call to action).","$ref":"#/components/schemas/PrivilegeLinks"},"data":{"description":"Current state and payload of the privilege (e.g., whether it is available or already used).","$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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"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":{"description":"Information about the external system that produced this privilege.","$ref":"#/components/schemas/PrivilegeOrigin"},"categories":{"type":"array","items":{"description":"High-level classification of privileges for organization and filtering.","$ref":"#/components/schemas/PrivilegeCategory"},"description":"Categories used to classify and filter the privilege."},"content":{"description":"Localized content such as title and description.","$ref":"#/components/schemas/PrivilegeContent"},"appearance":{"description":"Visual appearance settings (images and colors).","$ref":"#/components/schemas/PrivilegeAppearance"},"links":{"description":"Links relevant to the privilege (e.g., legal terms, call to action).","$ref":"#/components/schemas/PrivilegeLinks"},"data":{"description":"Current state and payload of the privilege.","$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":{"description":"The privilege title, localized for multiple languages.","$ref":"#/components/schemas/LocalizedString"},"description":{"description":"A detailed description of the privilege, localized for multiple languages.","$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":{"description":"URL of the main image representing the privilege.","$ref":"#/components/schemas/LocalizedString"},"thumbnailUrl":{"description":"URL of the thumbnail image for the privilege.","$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":{"description":"Link to legal or terms-of-service information for the privilege.","$ref":"#/components/schemas/PrivilegeLink"},"callToAction":{"description":"Call-to-action link (e.g., redeem, learn more).","$ref":"#/components/schemas/PrivilegeLink"}},"additionalProperties":false,"description":"A set of related links associated with a privilege."},"PrivilegeLink":{"required":["link"],"type":"object","properties":{"title":{"description":"Localized title to display for the link.","$ref":"#/components/schemas/LocalizedString"},"link":{"type":"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":"array","items":{"description":"Represents a single movement or transaction affecting a privilege's value.","$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":"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":"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":"string","description":"Unique operation identifier."},"operationName":{"type":"string","description":"Operation name/category."},"operationData":{"type":"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":"string"},"parameters":{"type":"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":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array","items":{}}}},"additionalProperties":false}}}}
```

## The RenderTemplateRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"RenderTemplateRequest":{"required":["templates"],"type":"object","properties":{"templates":{"type":"array","items":{"type":"string"},"description":"One or more Liquid template strings to render."},"context":{"type":["null","object"],"additionalProperties":{},"description":"Key/value pairs made available to every template during rendering."}},"additionalProperties":false,"description":"Request body for rendering Liquid templates."}}}}
```

## The RenderTemplateResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"RenderTemplateResponse":{"required":["results"],"type":"object","properties":{"results":{"type":"array","items":{"type":"string"},"description":"Index-aligned rendered outputs. `Results[i]` corresponds to `Templates[i]`.\nThe value is `null` when the template at that index failed to render (see Neo.Web.Api.Template.Controllers.TemplatesController.RenderTemplateResponse.Errors)."},"errors":{"type":["null","array"],"items":{"type":"string"},"description":"Index-aligned Liquid error messages. Only present when at least one template failed.\n`Errors[i]` is `null` when `Results[i]` rendered successfully."}},"additionalProperties":false,"description":"Response body returned by M:Neo.Web.Api.Template.Controllers.TemplatesController.Render(Neo.Web.Api.Template.Controllers.TemplatesController.RenderTemplateRequest,System.Threading.CancellationToken)."}}}}
```

## 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":"string"},"permissions":{"type":"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":"string","description":"Secret value to store."},"options":{"description":"Optional validity window for the secret.","$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 SetTurnstileRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetTurnstileRequest":{"required":["proofCookieValidityDurationSeconds","siteKey"],"type":"object","properties":{"siteKey":{"minLength":1,"type":"string","description":"Public site key used by the web client to render the Turnstile widget."},"secretKey":{"type":["null","string"],"description":"Secret key used by the server to verify Turnstile tokens.\nStored in the secret repository under `CLOUDFLARE-TURNSTILE-SECRETKEY`.\nWhen omitted, the existing secret is preserved."},"proofCookieValidityDurationSeconds":{"type":"integer","description":"Duration in seconds the proof cookie remains valid after a successful challenge.\nSet to 0 to disable the proof cookie bypass.","format":"int32"}},"additionalProperties":false,"description":"Request body for setting Turnstile configuration."}}}}
```

## 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":"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":[{"description":"Options used when updating passes.","$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":[{"description":"Options used when updating passes.","$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":"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":[{"description":"Options used when updating passes.","$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":"string","description":"Field to sort by."},"direction":{"description":"Sort direction (ASC or DESC).","$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":"string"},"displayName":{"type":"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":"string"},"name":{"type":"string"},"url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"user":{"$ref":"#/components/schemas/UserInformation"},"filters":{"type":"array","items":{"$ref":"#/components/schemas/FilterInformation"}}},"additionalProperties":false},"UserInformation":{"type":"object","properties":{"userName":{"type":"string"},"password":{"type":"string"}},"additionalProperties":false},"FilterInformation":{"type":"object","properties":{"eventSources":{"type":"array","items":{"type":"string"}},"userIds":{"type":"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 TenantConfigWeb object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigWeb":{"required":["availableLanguages","defaultLanguage","extensions","name","publicUri"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Name of the tenant."},"faviconUrl":{"type":["null","string"],"description":"Large favicon URL (192x192px). Can be a relative path or a full URL."},"publicUri":{"minLength":1,"type":"string","description":"Effective public base URI used for end-user links."},"defaultLanguage":{"minLength":1,"type":"string","description":"Default language configured for the tenant."},"availableLanguages":{"type":"array","items":{"type":"string"},"description":"List of languages available for the tenant."},"extensions":{"type":"array","items":{"type":"string"},"description":"List of enabled extensions for this tenant."}},"additionalProperties":false,"description":"Tenant core configuration response"}}}}
```

## The TenantConfigurationHistoryEntry object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigurationHistoryEntry":{"type":"object","properties":{"id":{"type":"string"},"date":{"type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/TenantConfigurationHistoryUser"},"files":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"TenantConfigurationHistoryUser":{"type":"object","properties":{"userName":{"type":["null","string"]},"name":{"type":["null","string"]},"email":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TenantConfigurationHistoryPage object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigurationHistoryPage":{"type":"object","properties":{"offset":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int32"},"items":{"type":"array","items":{"$ref":"#/components/schemas/TenantConfigurationHistoryEntry"}}},"additionalProperties":false},"TenantConfigurationHistoryEntry":{"type":"object","properties":{"id":{"type":"string"},"date":{"type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/TenantConfigurationHistoryUser"},"files":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"TenantConfigurationHistoryUser":{"type":"object","properties":{"userName":{"type":["null","string"]},"name":{"type":["null","string"]},"email":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The TenantConfigurationHistoryUser object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigurationHistoryUser":{"type":"object","properties":{"userName":{"type":["null","string"]},"name":{"type":["null","string"]},"email":{"type":["null","string"]}},"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":"string","description":"Version of the configuration","readOnly":true},"files":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"description":"Returns version of each files of the configuration"},"appliedMigrations":{"type":"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":"string"},"identifier":{"type":"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":"string"},"identifier":{"type":"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":"string"},"identifier":{"type":"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":"string"},"identifier":{"type":"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":"string"},"identifier":{"type":"string"}},"additionalProperties":false}}}}
```

## The TurnstileConfigurationResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TurnstileConfigurationResponse":{"required":["siteKey"],"type":"object","properties":{"siteKey":{"minLength":1,"type":"string","description":"Public site key configured for this tenant."},"proofCookieValidityDurationSeconds":{"type":"integer","description":"Duration in seconds the proof cookie remains valid. 0 means disabled.","format":"int32"}},"additionalProperties":false,"description":"Response body for Turnstile configuration."}}}}
```

## 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 UpdateApiKeyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateApiKeyRequest":{"required":["enabled"],"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether this key is active."},"permissions":{"type":"array","items":{"type":"string"},"description":"New list of permission scopes. Use `[\"*\"]` for full access."}},"additionalProperties":false,"description":"Request body to update an API key."}}}}
```

## The UpdateDevice object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateDevice":{"type":"object","properties":{"name":{"type":"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":"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 UpdateRoleRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateRoleRequest":{"required":["permissions"],"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string"},"description":"New list of permission scopes granted to this role. Use [\"*\"] for full access."}},"additionalProperties":false,"description":"Request body to update a role's permissions."}}}}
```

## 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":{"minLength":1,"type":"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":"string"},"password":{"type":"string"}},"additionalProperties":false}}}}
```

## The WatchRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WatchRequest":{"type":"object","properties":{"sessionId":{"type":"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":"string","description":"claim type"},"value":{"type":"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":"string","description":"Identifier of the redirect"},"layout":{"type":"string","description":"Layout associated to this redirect"},"creationDate":{"type":"string","description":"Creation date of this redirect","format":"date-time"},"parameters":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional parameters to add to the layout url"},"options":{"description":"Additional options for this redirect","$ref":"#/components/schemas/WebRedirectOptions"},"uri":{"type":"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}}}}
```
