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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ExecutionSummary":{"required":["taskId","taskType"],"type":"object","allOf":[{"$ref":"#/components/schemas/Execution"}],"properties":{"taskId":{"type":"string","description":"Identifier of the scheduled task (as declared in scheduler.yml), extracted from the CorrelationId."},"taskType":{"type":["null","string"],"description":"Task type (handler) reported by the scheduler telemetry."}},"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}}}}
```

## 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)."},"operator":{"description":"Comparison operator to apply.","$ref":"#/components/schemas/FilterModelOperator"},"value":{"type":["null","array"],"items":{"type":"string"},"description":"Filter values. Single-element for most operators; multiple elements for `in` and `notIn`.\nThe query parameter name is `value` (repeated for multiple values).\n<example>\nSingle value (equals, contains, startsWith, …):\n```\nGET /passes?filter[0].field=passType&filter[0].operator=equals&filter[0].value=boarding\n```\nMultiple values (in / notIn):\n```\nGET /passes?filter[0].field=passType&filter[0].operator=in&filter[0].value=boarding&filter[0].value=loyalty\n```\nMultiple filters combined:\n```\nGET /passes?filter[0].field=passType&filter[0].operator=equals&filter[0].value=boarding\n           &filter[1].field=identifiers.customerId&filter[1].operator=startsWith&filter[1].value=CUST-\n```</example>"}},"additionalProperties":false,"description":"Filter specification for pass queries."},"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","NotEquals","In","NotIn"],"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","NotEquals","In","NotIn"],"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"__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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"The timestamp at which this privilege should be removed from the system. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"__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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"After this UTC date/time the secret becomes inaccessible. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"notBefore":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Before this UTC date/time the secret cannot be accessed. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":"Platform-assigned unique pass identifier. This is a random alphanumeric string generated at creation time and cannot be set by callers (e.g., `xK9mP2nQr7sT`)."},"secret":{"type":"string","description":"Platform-generated opaque token used internally to authenticate pass delivery. Read-only; treat as confidential."},"creationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when the pass was created by the platform. Read-only. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"lastUpdateDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp of the most recent update. Equals `CreationDate` when no update has occurred. Read-only. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"passType":{"type":"string","description":"Type of pass, matching a file in the tenant `server/passes/` configuration."},"identifiers":{"type":"object","additionalProperties":{"type":"string"},"description":"External identifiers keyed by system name (e.g., `shopify.customerId`)."},"metadata":{"type":"object","additionalProperties":{"type":"null"},"description":"Computed metadata fields managed by the platform."},"additionalData":{"type":"object","additionalProperties":{"type":"null"},"description":"Arbitrary key/value data persisted with the pass."},"providers":{"type":"object","additionalProperties":{},"description":"Installation details keyed by provider name (e.g., `apple`, `google`). Populated by the platform. Read-only."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"The timestamp at which this privilege should be removed from the system. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"The timestamp at which this privilege should be removed from the system. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"The timestamp at which this privilege should be removed from the system. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"The timestamp at which this privilege should be removed from the system. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this movement occurred. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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,"description":"Result returned after scheduling a bulk push update operation."}}}}
```

## 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":{"culture":{"type":["null","string"],"description":"Optional BCP 47 culture tag (e.g. \"en\", \"fr-FR\"). Defaults to the server's current culture when omitted."},"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 SchedulerSortModel object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SchedulerSortModel":{"type":"object","properties":{"field":{"type":"string","description":"Field to sort by (startDate, taskId, taskType, duration, retryIndex)."},"direction":{"description":"Sort direction (ASC or DESC).","$ref":"#/components/schemas/SchedulerSortModelDirection"}},"additionalProperties":false,"description":"Sort specification for scheduler execution queries."},"SchedulerSortModelDirection":{"enum":[0,1],"type":"integer","description":"Sort direction for scheduler execution list queries.","format":"int32"}}}}
```

## The SchedulerSortModelDirection object

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

## 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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"After this UTC date/time the secret becomes inaccessible. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"notBefore":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Before this UTC date/time the secret cannot be accessed. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."}},"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,"description":"Data payload for single pass update operations."},"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":{"description":"Options for single pass update operations. Metadata recomputation is enabled by default.\nUse Neo.Web.Api.Controllers.PassController.SingleUpdatePassDataOptions.BypassQueue to apply the update synchronously instead of queueing.","$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,"description":"Options for single pass update operations. Metadata recomputation is enabled by default.\nUse Neo.Web.Api.Controllers.PassController.SingleUpdatePassDataOptions.BypassQueue to apply the update synchronously instead of queueing."},"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,"description":"Options for single pass update operations. Metadata recomputation is enabled by default.\nUse Neo.Web.Api.Controllers.PassController.SingleUpdatePassDataOptions.BypassQueue to apply the update synchronously instead of queueing."},"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":{"description":"Options for single pass update operations. Metadata recomputation is enabled by default.\nUse Neo.Web.Api.Controllers.PassController.SingleUpdatePassDataOptions.BypassQueue to apply the update synchronously instead of queueing.","$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,"description":"Options for single pass update operations. Metadata recomputation is enabled by default.\nUse Neo.Web.Api.Controllers.PassController.SingleUpdatePassDataOptions.BypassQueue to apply the update synchronously instead of queueing."},"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 TenantConfigFaviconsWeb object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigFaviconsWeb":{"required":["rawFaviconUrl"],"type":"object","properties":{"faviconUrl":{"type":["null","string"],"description":"Resolved 192x192 favicon URL. Can be a full URL or fallback data URL."},"rawFaviconUrl":{"minLength":1,"type":"string","description":"Raw 48x48 favicon URL from `config.yml`."},"rawLargeFaviconUrl":{"type":["null","string"],"description":"Raw 192x192 favicon URL from `config.yml`."},"rawAppleFaviconUrl":{"type":["null","string"],"description":"Raw Apple touch icon URL from `config.yml`."}},"additionalProperties":false,"description":"Favicon URLs for tenant configuration response."}}}}
```

## The TenantConfigWeb object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantConfigWeb":{"required":["availableLanguages","defaultLanguage","extensions","favicons","name","publicUri"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Name of the tenant."},"favicons":{"description":"Favicon URLs returned for the tenant.","$ref":"#/components/schemas/TenantConfigFaviconsWeb"},"logoUrl":{"type":["null","string"],"description":"Optional logo URL."},"appTitle":{"type":["null","string"],"description":"Optional browser/application title override."},"status":{"description":"Tenant operational status.","$ref":"#/components/schemas/TenantStatus"},"purpose":{"description":"Tenant usage purpose.","$ref":"#/components/schemas/TenantPurpose"},"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"},"TenantConfigFaviconsWeb":{"required":["rawFaviconUrl"],"type":"object","properties":{"faviconUrl":{"type":["null","string"],"description":"Resolved 192x192 favicon URL. Can be a full URL or fallback data URL."},"rawFaviconUrl":{"minLength":1,"type":"string","description":"Raw 48x48 favicon URL from `config.yml`."},"rawLargeFaviconUrl":{"type":["null","string"],"description":"Raw 192x192 favicon URL from `config.yml`."},"rawAppleFaviconUrl":{"type":["null","string"],"description":"Raw Apple touch icon URL from `config.yml`."}},"additionalProperties":false,"description":"Favicon URLs for tenant configuration response."},"TenantStatus":{"enum":[1,2,3],"type":"integer","description":"Operational status of the tenant.","format":"int32"},"TenantPurpose":{"enum":[1,2,3],"type":"integer","description":"Intended usage context of the tenant.","format":"int32"}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantDirectoryEntry":{"required":["tenantId"],"type":"object","properties":{"tenantId":{"type":"string"},"status":{"$ref":"#/components/schemas/TenantDirectoryStatus"},"purpose":{"$ref":"#/components/schemas/TenantDirectoryPurpose"}},"additionalProperties":false},"TenantDirectoryStatus":{"enum":["onboarding","active","disabled"],"type":"string"},"TenantDirectoryPurpose":{"enum":["demo","test","production"],"type":"string"}}}}
```

## The TenantDirectoryPurpose object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantDirectoryPurpose":{"enum":["demo","test","production"],"type":"string"}}}}
```

## The TenantDirectoryStatus object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantDirectoryStatus":{"enum":["onboarding","active","disabled"],"type":"string"}}}}
```

## The TenantPurpose object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantPurpose":{"enum":[1,2,3],"type":"integer","description":"Intended usage context of the tenant.","format":"int32"}}}}
```

## The TenantStatus object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantStatus":{"enum":[1,2,3],"type":"integer","description":"Operational status of the tenant.","format":"int32"}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateTenantConfigWebRequest":{"type":"object","properties":{"logoUrl":{"type":["null","string"],"description":"Optional logo URL."},"faviconUrl":{"type":["null","string"],"description":"Optional 48x48 favicon URL."},"largeFaviconUrl":{"type":["null","string"],"description":"Optional 192x192 favicon URL. Set empty string to clear."},"appleFaviconUrl":{"type":["null","string"],"description":"Optional Apple touch icon URL. Set empty string to clear."},"appTitle":{"type":["null","string"],"description":"Optional application title override. Set empty string to clear."},"defaultLanguage":{"type":["null","string"],"description":"Optional default language."},"availableLanguages":{"type":["null","array"],"items":{"type":"string"},"description":"Optional available languages."},"status":{"description":"Optional tenant status (global administrators only).","$ref":"#/components/schemas/TenantStatus"},"purpose":{"description":"Optional tenant purpose (global administrators only).","$ref":"#/components/schemas/TenantPurpose"}},"additionalProperties":false,"description":"Tenant core configuration patch request."},"TenantStatus":{"enum":[1,2,3],"type":"integer","description":"Operational status of the tenant.","format":"int32"},"TenantPurpose":{"enum":[1,2,3],"type":"integer","description":"Intended usage context of the tenant.","format":"int32"}}}}
```

## 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":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Creation date of this redirect Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"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}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.thewalletcrew.io/develop/api-reference/models.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
