> For the complete documentation index, see [llms.txt](https://docs.thewalletcrew.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thewalletcrew.io/api-reference/models.md).

# Models

## The APNKeyDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"APNKeyDefinition":{"required":["hasValue","id"],"type":"object","properties":{"id":{"type":"string","description":"Identifier of the key. In most cases a 10 digit number embedded in the file name of the key generated by Apple."},"hasValue":{"type":"boolean","description":"Whether the P8 key value is currently set."}},"additionalProperties":false,"description":"Apple Push Notifications key, with the private key material redacted."}}}}
```

## The APNKeyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"APNKeyRequest":{"required":["id"],"type":"object","properties":{"id":{"minLength":1,"type":"string","description":"Identifier of the key. In most cases a 10 digit number embedded in the file name of the key generated by Apple."},"value":{"type":["null","string"],"description":"Base64 value of the P8 key. Omit or leave empty to keep the currently configured value unchanged;\nrequired the first time Apple Wallet is configured."}},"additionalProperties":false,"description":"Request body to configure the Apple Push Notifications key."}}}}
```

## The ActitoWrapper\_NewProfile object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ActitoWrapper_NewProfile":{"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 AddCustomDomainRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AddCustomDomainRequest":{"required":["hostname"],"type":"object","properties":{"hostname":{"minLength":1,"type":"string","description":"Hostname to claim, for example `registration.brand.com`. Lowercased server-side."}},"additionalProperties":false,"description":"Request body to claim a domain."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AparteConfigurationResponse":{"required":["baseUrl","defaultPassType","hasApiKey","tenant","timeZoneId"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Aparte WalletCrew API.","format":"uri"},"tenant":{"minLength":1,"type":"string","description":"Tenant identifier sent as the `X-Tenant` header."},"defaultPassType":{"minLength":1,"type":"string","description":"Default pass type assigned to passes created from Aparte tickets."},"invalidPassType":{"type":["null","string"],"description":"Pass type assigned when the Aparte ticket is invalid or no longer found."},"hasApiKey":{"type":"boolean","description":"Whether an API key is currently stored in the secret repository."},"timeZoneId":{"minLength":1,"type":"string","description":"IANA timezone identifier for the venue (e.g. \"Europe/Paris\")."},"rateLimit":{"description":"Client-side rate limiting settings.","$ref":"#/components/schemas/AparteRateLimitSettings"}},"additionalProperties":false},"AparteRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per minute. Default 500.","format":"int32","default":500}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Aparte request and response bodies."}}}}
```

## The AparteRateLimitSettings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AparteRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per minute. Default 500.","format":"int32","default":500}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Aparte request and response bodies."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AppleNfcSettings":{"type":"object","properties":{"publicKey":{"type":"string","description":"Apple public key used for NFC tap authentication."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier associated with the Apple Wallet pass."}},"additionalProperties":false}}}}
```

## The AppleSignInDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AppleSignInDefinition":{"required":["serviceIdentifier"],"type":"object","properties":{"serviceIdentifier":{"type":"string","description":"Identifier for the service ID where \"Sign in with Apple\" is configured."}},"additionalProperties":false,"description":"Sign in with Apple settings."}}}}
```

## The AppleWalletProviderDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"AppleWalletProviderDefinition":{"required":["apnKey","pass","teamIdentifier"],"type":"object","properties":{"teamIdentifier":{"type":"string","description":"Team identifier of the organization that originated and signed the pass, as issued by Apple."},"apnKey":{"description":"Information about the key generated by Apple for the Apple Push Notifications service.","$ref":"#/components/schemas/APNKeyDefinition"},"pass":{"description":"Information related to the Apple certificate used to generate passes.","$ref":"#/components/schemas/PassDefinition"},"webServiceUrl":{"type":["null","string"],"description":"WebServiceUrl used by Apple Wallet to migrate passes from neostore to another pass provider.","format":"uri"}},"additionalProperties":false,"description":"Apple Wallet provider settings."},"APNKeyDefinition":{"required":["hasValue","id"],"type":"object","properties":{"id":{"type":"string","description":"Identifier of the key. In most cases a 10 digit number embedded in the file name of the key generated by Apple."},"hasValue":{"type":"boolean","description":"Whether the P8 key value is currently set."}},"additionalProperties":false,"description":"Apple Push Notifications key, with the private key material redacted."},"PassDefinition":{"required":["certificate","passTypeIdentifier"],"type":"object","properties":{"passTypeIdentifier":{"type":"string","description":"Pass type identifier, as issued by Apple."},"certificate":{"description":"Certificate used to sign the pass.","$ref":"#/components/schemas/PassCertificateDefinition"},"certificateRequest":{"description":"Current certificate request, if any.","$ref":"#/components/schemas/PassCertificateSigningRequestDefinition"}},"additionalProperties":false,"description":"Pass configuration, with private key material redacted."},"PassCertificateDefinition":{"required":["certificate","hasKey"],"type":"object","properties":{"certificate":{"type":"string","description":"PEM encoded (Base64) Certificate."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Apple Wallet pass signing certificate, with private key material redacted."},"PassCertificateSigningRequestDefinition":{"required":["hasKey","passTypeIdentifier"],"type":"object","properties":{"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier, as issued by Apple."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Current certificate signing request (CSR), with private key material redacted."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"BloomreachCacheResponse":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"Cache duration for customer lookups.","format":"date-span"}},"additionalProperties":false,"description":"Cache section of the Bloomreach GET response body."}}}}
```

## The BloomreachConfigurationResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"BloomreachConfigurationResponse":{"required":["apiKeyId","baseUrl","hasApiKeySecret","projectToken"],"type":"object","properties":{"projectToken":{"minLength":1,"type":"string","description":"Bloomreach project token."},"baseUrl":{"type":"string","description":"Bloomreach API base URL.","format":"uri"},"apiKeyId":{"minLength":1,"type":"string","description":"API key ID used for Basic authentication."},"hasApiKeySecret":{"type":"boolean","description":"Whether an API key secret is currently stored in the secret repository."},"cache":{"description":"Cache duration settings.","$ref":"#/components/schemas/BloomreachCacheResponse"}},"additionalProperties":false,"description":"Response body for Bloomreach configuration."},"BloomreachCacheResponse":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"Cache duration for customer lookups.","format":"date-span"}},"additionalProperties":false,"description":"Cache section of the Bloomreach GET response body."}}}}
```

## The CheckinPolicyDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CheckinPolicyDefinition":{"required":["mode"],"type":"object","properties":{"mode":{"description":"Policy stored in `security.yml`. `full` when the file does not carry one, which is what\nthe runtime applies in that case.","$ref":"#/components/schemas/CheckinPolicyMode"}},"additionalProperties":false,"description":"Check-in policy currently applied by this tenant."},"CheckinPolicyMode":{"enum":["noIdentification","none","partial","full"],"type":"string","description":"Identification required from a customer collecting a pass."}}}}
```

## The CheckinPolicyMode object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CheckinPolicyMode":{"enum":["noIdentification","none","partial","full"],"type":"string","description":"Identification required from a customer collecting a pass."}}}}
```

## The ComarchConfigurationResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchConfigurationResponse":{"required":["connection","providers","rateLimit"],"type":"object","properties":{"connection":{"description":"Connection settings.","$ref":"#/components/schemas/ComarchConnectionResponse"},"providers":{"description":"Provider-specific settings.","$ref":"#/components/schemas/ComarchProvidersConfiguration"},"kafkaConnection":{"description":"Optional Kafka connection settings.","$ref":"#/components/schemas/ComarchKafkaConnectionResponse"},"rateLimit":{"description":"Client-side rate limiting settings.","$ref":"#/components/schemas/ComarchRateLimitSettings"}},"additionalProperties":false,"description":"Response body for Comarch configuration."},"ComarchConnectionResponse":{"required":["baseUrl","clientId","hasClientSecret","partnerCode","programCode"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Comarch CLM B2B Gateway API.","format":"uri"},"clientId":{"minLength":1,"type":"string","description":"OAuth2 client credentials – client ID."},"programCode":{"minLength":1,"type":"string","description":"Program code used to identify the loyalty program in Comarch CLM."},"partnerCode":{"minLength":1,"type":"string","description":"Code of the Comarch partner."},"hasClientSecret":{"type":"boolean","description":"Whether a client secret is currently stored in the secret repository."}},"additionalProperties":false,"description":"Connection settings section of the Comarch GET response body."},"ComarchProvidersConfiguration":{"required":["customer"],"type":"object","properties":{"customer":{"description":"Customer provider settings.","$ref":"#/components/schemas/ComarchCustomerConfiguration"}},"additionalProperties":false,"description":"Providers section shared between the Comarch request and response bodies."},"ComarchCustomerConfiguration":{"type":"object","properties":{"retrieveCustomerTransactionBalance":{"type":"boolean","description":"Whether to fetch customer transaction balance.","default":false},"updateOnPassInstallationChange":{"type":"boolean","description":"Whether to sync a customer's Comarch attributes when a pass's combined active install count\ncrosses zero (first install on any platform, or last device removed).","default":false}},"additionalProperties":false,"description":"Customer provider settings shared between the Comarch request and response bodies."},"ComarchKafkaConnectionResponse":{"required":["bootstrapServers","hasPassword","topic","username"],"type":"object","properties":{"bootstrapServers":{"minLength":1,"type":"string","description":"Comma-separated list of Kafka bootstrap servers."},"username":{"minLength":1,"type":"string","description":"Username used for Kafka authentication."},"topic":{"minLength":1,"type":"string","description":"Kafka topic name where Comarch events are published."},"hasPassword":{"type":"boolean","description":"Whether a Kafka password is currently stored in the secret repository."}},"additionalProperties":false,"description":"Kafka connection settings section of the Comarch GET response body."},"ComarchRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per second. Default 80.","format":"int32","default":80}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Comarch request and response bodies."}}}}
```

## The ComarchConnectionRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchConnectionRequest":{"required":["baseUrl","clientId","partnerCode","programCode"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Comarch CLM B2B Gateway API.","format":"uri"},"clientId":{"minLength":1,"type":"string","description":"OAuth2 client credentials – client ID."},"programCode":{"minLength":1,"type":"string","description":"Program code used to identify the loyalty program in Comarch CLM."},"partnerCode":{"minLength":1,"type":"string","description":"Code of the Comarch partner."},"clientSecret":{"type":["null","string"],"description":"OAuth2 client secret.\nStored in the secret repository under `COMARCH-CLIENTSECRET`.\nWhen omitted, the existing secret is preserved."}},"additionalProperties":false,"description":"Connection settings section of the Comarch PUT request body."}}}}
```

## The ComarchConnectionResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchConnectionResponse":{"required":["baseUrl","clientId","hasClientSecret","partnerCode","programCode"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Comarch CLM B2B Gateway API.","format":"uri"},"clientId":{"minLength":1,"type":"string","description":"OAuth2 client credentials – client ID."},"programCode":{"minLength":1,"type":"string","description":"Program code used to identify the loyalty program in Comarch CLM."},"partnerCode":{"minLength":1,"type":"string","description":"Code of the Comarch partner."},"hasClientSecret":{"type":"boolean","description":"Whether a client secret is currently stored in the secret repository."}},"additionalProperties":false,"description":"Connection settings section of the Comarch GET response body."}}}}
```

## The ComarchCustomerConfiguration object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchCustomerConfiguration":{"type":"object","properties":{"retrieveCustomerTransactionBalance":{"type":"boolean","description":"Whether to fetch customer transaction balance.","default":false},"updateOnPassInstallationChange":{"type":"boolean","description":"Whether to sync a customer's Comarch attributes when a pass's combined active install count\ncrosses zero (first install on any platform, or last device removed).","default":false}},"additionalProperties":false,"description":"Customer provider settings shared between the Comarch request and response bodies."}}}}
```

## The ComarchKafkaConnectionRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchKafkaConnectionRequest":{"required":["bootstrapServers","topic","username"],"type":"object","properties":{"bootstrapServers":{"minLength":1,"type":"string","description":"Comma-separated list of Kafka bootstrap servers."},"username":{"minLength":1,"type":"string","description":"Username used for Kafka authentication."},"topic":{"minLength":1,"type":"string","description":"Kafka topic name where Comarch events are published."},"password":{"type":["null","string"],"description":"Password used for Kafka authentication.\nStored in the secret repository under `COMARCH-KAFKAPASSWORD`.\nWhen omitted, the existing secret is preserved."}},"additionalProperties":false,"description":"Kafka connection settings section of the Comarch PUT request body."}}}}
```

## The ComarchKafkaConnectionResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchKafkaConnectionResponse":{"required":["bootstrapServers","hasPassword","topic","username"],"type":"object","properties":{"bootstrapServers":{"minLength":1,"type":"string","description":"Comma-separated list of Kafka bootstrap servers."},"username":{"minLength":1,"type":"string","description":"Username used for Kafka authentication."},"topic":{"minLength":1,"type":"string","description":"Kafka topic name where Comarch events are published."},"hasPassword":{"type":"boolean","description":"Whether a Kafka password is currently stored in the secret repository."}},"additionalProperties":false,"description":"Kafka connection settings section of the Comarch GET response body."}}}}
```

## The ComarchProvidersConfiguration object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchProvidersConfiguration":{"required":["customer"],"type":"object","properties":{"customer":{"description":"Customer provider settings.","$ref":"#/components/schemas/ComarchCustomerConfiguration"}},"additionalProperties":false,"description":"Providers section shared between the Comarch request and response bodies."},"ComarchCustomerConfiguration":{"type":"object","properties":{"retrieveCustomerTransactionBalance":{"type":"boolean","description":"Whether to fetch customer transaction balance.","default":false},"updateOnPassInstallationChange":{"type":"boolean","description":"Whether to sync a customer's Comarch attributes when a pass's combined active install count\ncrosses zero (first install on any platform, or last device removed).","default":false}},"additionalProperties":false,"description":"Customer provider settings shared between the Comarch request and response bodies."}}}}
```

## The ComarchRateLimitSettings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ComarchRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per second. Default 80.","format":"int32","default":80}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Comarch request and response bodies."}}}}
```

## The ConfigSchemaCatalog object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ConfigSchemaCatalog":{"type":"object","properties":{"definitions":{"type":"object","additionalProperties":{},"description":"Every schema by title. References between them are written `#/definitions/{title}`, so\nthe object is a JSON Schema definitions map and can be used as one without rewriting."},"associations":{"type":"array","items":{"description":"The rule binding one schema to the files it validates.\n            \nThis is the single definition of that binding. Save-time validation resolves a file's schema\nthrough M:Neo.Configuration.Tenants.Documentation.SchemaAssociation.Matches(System.String,System.Text.Json.JsonElement), and the same rules are published so that the administration UI\nand MCP callers reach the same conclusion instead of reimplementing them and drifting.","$ref":"#/components/schemas/SchemaAssociation"},"description":"Which files each schema validates. A file matched by no association has no schema, which is a\nreal answer: web hooks, scripts and unknown files are not validated."}},"additionalProperties":false,"description":"The tenant configuration schemas, and which file each of them validates."},"SchemaAssociation":{"type":"object","properties":{"schema":{"type":"string","description":"Title of the schema this rule selects."},"kind":{"description":"Which of the rules below applies.","$ref":"#/components/schemas/SchemaAssociationKind"},"path":{"type":"string","description":"The exact file for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.File, otherwise the folder prefix."},"extension":{"type":["null","string"],"description":"Optional extension filter, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Prefix."},"property":{"type":["null","string"],"description":"Property carrying the discriminating value, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Discriminator."},"value":{"type":["null","string"],"description":"Value that property must hold, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Discriminator."}},"additionalProperties":false,"description":"The rule binding one schema to the files it validates.\n            \nThis is the single definition of that binding. Save-time validation resolves a file's schema\nthrough M:Neo.Configuration.Tenants.Documentation.SchemaAssociation.Matches(System.String,System.Text.Json.JsonElement), and the same rules are published so that the administration UI\nand MCP callers reach the same conclusion instead of reimplementing them and drifting."},"SchemaAssociationKind":{"enum":["File","Prefix","Discriminator"],"type":"string","description":"How a schema decides which configuration files it validates."}}}}
```

## 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."},"nfc":{"$ref":"#/components/schemas/NfcSettings"}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false},"NfcSettings":{"type":"object","properties":{"apple":{"$ref":"#/components/schemas/AppleNfcSettings"},"google":{"$ref":"#/components/schemas/GoogleNfcSettings"}},"additionalProperties":false},"AppleNfcSettings":{"type":"object","properties":{"publicKey":{"type":"string","description":"Apple public key used for NFC tap authentication."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier associated with the Apple Wallet pass."}},"additionalProperties":false},"GoogleNfcSettings":{"type":"object","properties":{"collectorId":{"type":"string","description":"Google collector identifier used for NFC tap authentication."}},"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 CreateDownloadPageRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateDownloadPageRequest":{"required":["name","type"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Name of the page. Must contain only letters, digits, hyphens or underscores, from 1 to 50\ncharacters, because it becomes a file name and a public URL segment."},"type":{"description":"Kind of page. Cannot be changed afterwards.","$ref":"#/components/schemas/DownloadPageType"},"headerImage":{"type":["null","string"],"description":"Image shown in the header, as a URL."},"requireValidRedirectId":{"type":["null","boolean"],"description":"Whether the page refuses traffic that does not come through a valid short link."},"autoDownloadPass":{"type":["null","boolean"],"description":"Whether the pass is downloaded without the customer acting. `pass` pages only."},"passCreationFlow":{"type":["null","string"],"description":"Flow executed when the page has to create the pass it shows. `pass` pages only. Omitted\nmeans the page does not create passes."},"allowDownloadAllPasses":{"type":["null","boolean"],"description":"Whether a download-everything button is offered. `passList` pages only."},"showInactivePasses":{"type":["null","boolean"],"description":"Whether inactive passes are listed, undownloadable. `passList` pages only."},"localization":{"description":"Localization wiring. Omitting `resources` gives the page a directory of its own, named after\nit — which is what makes its translations safe to delete with it.","$ref":"#/components/schemas/SaveDownloadPageLocalization"},"yaml":{"type":["null","string"],"description":"Complete layout file to store, verbatim. Mutually exclusive with the typed fields. Translations\ncan still be sent alongside it, because they live in different files."}},"additionalProperties":false,"description":"Request body to create a download page."},"DownloadPageType":{"enum":["pass","passList"],"type":"string","description":"Kind of download page."},"SaveDownloadPageLocalization":{"type":"object","properties":{"resources":{"type":["null","array"],"items":{"type":"string"},"description":"Locale resource directories. Omitted keeps the stored directories; provided replaces them, so an\nempty list clears them. Changing them does not move the files already stored."},"translations":{"type":["null","object"],"additionalProperties":{"description":"Translated strings of one culture.","$ref":"#/components/schemas/DownloadPageTranslations"},"description":"Translated strings to store, keyed by culture. Cultures left out are not touched. Omitted\nentirely writes no resource file at all."}},"additionalProperties":false,"description":"Localization wiring to write."},"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The CreateEmailTemplateRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateEmailTemplateRequest":{"required":["cultures","id"],"type":"object","properties":{"id":{"minLength":1,"type":"string","description":"Template identifier. Only alphanumeric characters, hyphens, underscores, dots and spaces are\nallowed, up to 50 characters."},"cultures":{"type":"object","additionalProperties":{"description":"Design source and compiled content of a single template culture.","$ref":"#/components/schemas/EmailTemplateCultureContent"},"description":"Content for one or more cultures, keyed by culture code."}},"additionalProperties":false,"description":"Request body to create a new email template."},"EmailTemplateCultureContent":{"required":["css","html"],"type":"object","properties":{"html":{"type":"string","description":"Stripo-designed HTML source."},"css":{"type":"string","description":"Stripo-designed CSS source."},"subject":{"type":["null","string"],"description":"Compiled email subject actually used to send mail. Null when the template has never been\nsaved from the Stripo editor for this culture (design source exists but is not yet compiled)."},"body":{"type":["null","string"],"description":"Compiled email body (HTML, with DotLiquid placeholders) actually used to send mail. Null when the\ntemplate has never been saved from the Stripo editor for this culture."}},"additionalProperties":false,"description":"Design source and compiled content of a single template culture."}}}}
```

## The CreateEnrolmentFormRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateEnrolmentFormRequest":{"required":["name"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Name of the form. Must contain only letters, digits, hyphens or underscores, from 1 to 50\ncharacters, because it becomes a file name and a public URL segment."},"flow":{"type":["null","string"],"description":"Flow executed when a customer registers through this form. Required unless `yaml` is used,\nin which case the flow is read from it."},"localization":{"description":"Localization wiring. Omitted means the form pulls no locale resources.","$ref":"#/components/schemas/EnrolmentFormLocalization"},"yaml":{"type":["null","string"],"description":"Complete file to store, verbatim. Mutually exclusive with `flow` and `localization`."}},"additionalProperties":false,"description":"Request body to create an enrolment form."},"EnrolmentFormLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/fields/`. Order matters: when the same key is\ndefined in more than one directory, the last one wins. Each directory holds one file per culture,\nmanaged through the enrolment locale endpoints."}},"additionalProperties":false,"description":"Localization wiring of an enrolment form."}}}}
```

## The CreateFlowRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateFlowRequest":{"required":["name","steps"],"type":"object","properties":{"name":{"minLength":1,"type":"string","description":"Name of the flow. Must start with a lowercase letter and contain only letters, digits, hyphens or\nunderscores, from 2 to 50 characters."},"type":{"type":["null","string"],"description":"Type of the flow. Defaults to `userRegistration` when omitted."},"steps":{"type":"array","items":{"description":"One step of a flow.","$ref":"#/components/schemas/FlowStepDefinition"},"description":"Steps executed by the flow, in order. May be empty."}},"additionalProperties":false,"description":"Request body to create a flow."},"FlowStepDefinition":{"required":["type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the step, e.g. `mail`, `sms`, `pass` or `script`."}},"additionalProperties":{},"description":"One step of a flow."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CreateStoreRequest":{"required":["latitude","longitude","storeId"],"type":"object","properties":{"storeId":{"minLength":1,"type":"string","description":"Unique identifier of the store. Only alphanumeric characters, hyphens, underscores and dots are allowed."},"displayName":{"type":["null","string"],"description":"Display name of the store."},"address":{"type":["null","string"],"description":"Postal address of the store."},"longitude":{"type":"number","description":"Longitude of the store in decimal value.","format":"double"},"latitude":{"type":"number","description":"Latitude of the store in decimal value.","format":"double"},"altitude":{"type":["null","integer"],"description":"Optional altitude of the store in meters.","format":"int32"},"availableLanguages":{"type":"array","items":{"type":"string"},"description":"List of ISO 639 language codes available for this store."},"advisors":{"type":"array","items":{"description":"Advisor assigned to a store, as submitted through a store write request.","$ref":"#/components/schemas/StoreAdvisorRequest"},"description":"Optional list of advisors of this store."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other additional values for this store."}},"additionalProperties":false,"description":"Request body to create a store."},"StoreAdvisorRequest":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"minLength":1,"type":"string","description":"Identifier of the advisor."},"displayName":{"minLength":1,"type":"string","description":"Display name of the advisor."}},"additionalProperties":false,"description":"Advisor assigned to a store, as submitted through a store write request."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CredentialDefinition":{"required":["clientEmail","clientId","hasClientSecret","hasPrivateKey","hasRefreshToken","privateKeyId","projectId","type"],"type":"object","properties":{"type":{"type":"string","description":"Type of the credential."},"projectId":{"type":"string","description":"Project ID associated with this credential."},"quotaProject":{"type":["null","string"],"description":"Project ID associated with this credential for the purposes of quota calculations and billing."},"clientId":{"type":"string","description":"Client ID associated with the credential."},"clientEmail":{"type":"string","description":"Client Email associated with the service account credential."},"privateKeyId":{"type":"string","description":"Private Key ID associated with the service account credential."},"hasPrivateKey":{"type":"boolean","description":"Whether the private key is currently set."},"hasClientSecret":{"type":"boolean","description":"Whether a client secret is currently set."},"hasRefreshToken":{"type":"boolean","description":"Whether a refresh token is currently set."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other fields present in the uploaded service account credential."}},"additionalProperties":false,"description":"Google Wallet issuer service account credential, with secret material redacted."}}}}
```

## The CredentialRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CredentialRequest":{"required":["clientEmail","clientId","privateKeyId","projectId","type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the credential."},"projectId":{"minLength":1,"type":"string","description":"Project ID associated with this credential."},"quotaProject":{"type":["null","string"],"description":"Project ID associated with this credential for the purposes of quota calculations and billing."},"clientId":{"minLength":1,"type":"string","description":"Client ID associated with the credential."},"clientSecret":{"type":["null","string"],"description":"Client Secret associated with the credential. Omit or leave empty to keep the currently configured value unchanged."},"clientEmail":{"minLength":1,"type":"string","description":"Client Email associated with the service account credential."},"privateKey":{"type":["null","string"],"description":"Private Key associated with the service account credential. Omit or leave empty to keep the\ncurrently configured private key unchanged; required the first time Google Wallet is configured."},"privateKeyId":{"minLength":1,"type":"string","description":"Private Key ID associated with the service account credential."},"refreshToken":{"type":["null","string"],"description":"Refresh Token associated with the credential. Omit or leave empty to keep the currently configured value unchanged."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other fields present in the uploaded service account credential."}},"additionalProperties":false,"description":"Request body to configure the Google Wallet issuer service account credential."}}}}
```

## 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."},"nfc":{"$ref":"#/components/schemas/NfcSettings"}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false},"NfcSettings":{"type":"object","properties":{"apple":{"$ref":"#/components/schemas/AppleNfcSettings"},"google":{"$ref":"#/components/schemas/GoogleNfcSettings"}},"additionalProperties":false},"AppleNfcSettings":{"type":"object","properties":{"publicKey":{"type":"string","description":"Apple public key used for NFC tap authentication."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier associated with the Apple Wallet pass."}},"additionalProperties":false},"GoogleNfcSettings":{"type":"object","properties":{"collectorId":{"type":"string","description":"Google collector identifier used for NFC tap authentication."}},"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 CustomDomainAvailability object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainAvailability":{"enum":["available","unavailable","claimedByThisTenant","unknown"],"type":"string","description":"Whether a hostname can be claimed."}}}}
```

## The CustomDomainCertificate object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainCertificate":{"type":"object","properties":{"status":{"type":["null","string"],"description":"Cloudflare's certificate status, for support. Null before one exists."},"expiresOn":{"type":["null","string"],"description":"Expiry, null until issued.","format":"date-time"},"autoRenew":{"type":"boolean","description":"Always true for anything we provision — Cloudflare renews on the same HTTP challenge, which is why the\ncustomer must leave their records in place."}},"additionalProperties":false,"description":"Certificate Cloudflare issued for the hostname."}}}}
```

## The CustomDomainDiagnostics object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainDiagnostics":{"type":"object","properties":{"cloudflareId":{"type":["null","string"],"description":"Cloudflare's identifier for the custom hostname."},"cloudflareStatus":{"type":["null","string"],"description":"Raw hostname status."},"cloudflareSslStatus":{"type":["null","string"],"description":"Raw certificate status."},"domainControlValidationMethod":{"type":["null","string"],"description":"`http` for anything provisioned through this API; `txt` for hostnames created by hand before it\n            existed."},"originSni":{"type":["null","string"],"description":"Hostname the origin connection's SNI is pinned to, when one is set."},"validationErrors":{"type":"array","items":{"type":"string"},"description":"Cloudflare's validation messages. Present within a minute of creation while the customer has simply not\nadded their records yet, so never a headline."}},"additionalProperties":false,"description":"Raw upstream detail, for internal users only."}}}}
```

## The CustomDomainDnsRecord object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainDnsRecord":{"type":"object","properties":{"type":{"type":"string","description":"Record type, `CNAME` or `TXT`."},"name":{"type":"string","description":"Record name, fully qualified."},"value":{"type":"string","description":"Value to set."},"purpose":{"description":"What breaks if it is missing.","$ref":"#/components/schemas/CustomDomainDnsRecordPurpose"}},"additionalProperties":false,"description":"A DNS record the customer creates at their own provider."},"CustomDomainDnsRecordPurpose":{"enum":["routing","ownershipVerification"],"type":"string","description":"What a DNS record the customer must create is for."}}}}
```

## The CustomDomainDnsRecordPurpose object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainDnsRecordPurpose":{"enum":["routing","ownershipVerification"],"type":"string","description":"What a DNS record the customer must create is for."}}}}
```

## The CustomDomainPreflight object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainPreflight":{"type":"object","properties":{"hostname":{"type":"string","description":"The hostname, lowercased and normalised."},"isValid":{"type":"boolean","description":"False when one of the rules below rejected it."},"rejections":{"type":"array","items":{"description":"Why a hostname was rejected.","$ref":"#/components/schemas/HostnameRejection"},"description":"Which rules rejected it. Empty when it may be used."},"isApex":{"type":"boolean","description":"True when the hostname is the root of its DNS zone. Read from the zone's `SOA`, so it is right for\nmulti-part suffixes such as `brand.co.uk` and for delegated subzones."},"zoneApex":{"type":["null","string"],"description":"Root of the zone the hostname belongs to, when DNS answered."},"dnsProvider":{"type":["null","string"],"description":"Recognised DNS provider, or null when the nameservers are unfamiliar."},"supportsApex":{"type":["null","boolean"],"description":"Whether that provider can point a zone root at a hostname. Null means unknown — show the generic\ncaution, never \"no\"."},"availability":{"description":"Whether the hostname can be claimed.","$ref":"#/components/schemas/CustomDomainAvailability"}},"additionalProperties":false,"description":"What a preflight found out about a hostname."},"HostnameRejection":{"enum":["malformed","tooLong","wildcard","ownDomain"],"type":"string","description":"Why a hostname was rejected."},"CustomDomainAvailability":{"enum":["available","unavailable","claimedByThisTenant","unknown"],"type":"string","description":"Whether a hostname can be claimed."}}}}
```

## The CustomDomainProbeFailure object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainProbeFailure":{"enum":["unreachable","tlsFailure","differentServer","hostNotRewritten","timeout"],"type":"string","description":"Why a configuration check did not pass."}}}}
```

## The CustomDomainProbeResult object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainProbeResult":{"type":"object","properties":{"passed":{"type":"boolean","description":"True when the hostname reached this application and was identified correctly."},"resolvedHost":{"type":["null","string"],"description":"The host the origin reported seeing, when it answered at all."},"failure":{"description":"Why it did not pass. Null when it did.","$ref":"#/components/schemas/CustomDomainProbeFailure"},"checkedAt":{"type":"string","description":"When the check ran.","format":"date-time"}},"additionalProperties":false,"description":"Outcome of one configuration check."},"CustomDomainProbeFailure":{"enum":["unreachable","tlsFailure","differentServer","hostNotRewritten","timeout"],"type":"string","description":"Why a configuration check did not pass."}}}}
```

## The CustomDomainRecord object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainRecord":{"required":["dnsRecords","hostname","isBoundInAzure","isLive","state"],"type":"object","properties":{"hostname":{"type":"string","description":"The hostname, lowercased."},"state":{"description":"Where provisioning has got to.","$ref":"#/components/schemas/CustomDomainState"},"dnsRecords":{"type":"array","items":{"description":"A DNS record the customer creates at their own provider.","$ref":"#/components/schemas/CustomDomainDnsRecord"},"description":"Records the customer must create at their DNS provider. Always both, so the screen can show what is\nexpected even after they are in place."},"isLive":{"type":"boolean","description":"True when the tenant's `publicUri` points at this hostname, so end users are sent here."},"isBoundInAzure":{"type":["null","boolean"],"description":"Whether the App Service accepts the hostname. Null when Resource Manager could not be reached — which\nis not the same as a confirmed absence, and must not be reported to anyone as \"the customer has not\npublished their ownership record\"."},"certificate":{"description":"Certificate detail, null before one is issued.","$ref":"#/components/schemas/CustomDomainCertificate"},"claimedAt":{"type":["null","string"],"description":"When the hostname was registered at Cloudflare.","format":"date-time"},"lastCheckedAt":{"type":["null","string"],"description":"When Cloudflare and Azure were last reached. Null means everything above came from configuration only,\nbecause the upstream calls were skipped or failed — do not read certificate health from such a record.","format":"date-time"},"diagnostics":{"description":"Raw upstream detail. Populated for internal callers only.","$ref":"#/components/schemas/CustomDomainDiagnostics"}},"additionalProperties":false,"description":"One custom domain, as the admin API reports it."},"CustomDomainState":{"enum":["pending_dns","validating","ready","active","failed","deleted"],"type":"string","description":"Where a custom domain is in provisioning."},"CustomDomainDnsRecord":{"type":"object","properties":{"type":{"type":"string","description":"Record type, `CNAME` or `TXT`."},"name":{"type":"string","description":"Record name, fully qualified."},"value":{"type":"string","description":"Value to set."},"purpose":{"description":"What breaks if it is missing.","$ref":"#/components/schemas/CustomDomainDnsRecordPurpose"}},"additionalProperties":false,"description":"A DNS record the customer creates at their own provider."},"CustomDomainDnsRecordPurpose":{"enum":["routing","ownershipVerification"],"type":"string","description":"What a DNS record the customer must create is for."},"CustomDomainCertificate":{"type":"object","properties":{"status":{"type":["null","string"],"description":"Cloudflare's certificate status, for support. Null before one exists."},"expiresOn":{"type":["null","string"],"description":"Expiry, null until issued.","format":"date-time"},"autoRenew":{"type":"boolean","description":"Always true for anything we provision — Cloudflare renews on the same HTTP challenge, which is why the\ncustomer must leave their records in place."}},"additionalProperties":false,"description":"Certificate Cloudflare issued for the hostname."},"CustomDomainDiagnostics":{"type":"object","properties":{"cloudflareId":{"type":["null","string"],"description":"Cloudflare's identifier for the custom hostname."},"cloudflareStatus":{"type":["null","string"],"description":"Raw hostname status."},"cloudflareSslStatus":{"type":["null","string"],"description":"Raw certificate status."},"domainControlValidationMethod":{"type":["null","string"],"description":"`http` for anything provisioned through this API; `txt` for hostnames created by hand before it\n            existed."},"originSni":{"type":["null","string"],"description":"Hostname the origin connection's SNI is pinned to, when one is set."},"validationErrors":{"type":"array","items":{"type":"string"},"description":"Cloudflare's validation messages. Present within a minute of creation while the customer has simply not\nadded their records yet, so never a headline."}},"additionalProperties":false,"description":"Raw upstream detail, for internal users only."}}}}
```

## The CustomDomainState object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"CustomDomainState":{"enum":["pending_dns","validating","ready","active","failed","deleted"],"type":"string","description":"Where a custom domain is in provisioning."}}}}
```

## 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 DataWrapper\_JsonElement object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DataWrapper_JsonElement":{"required":["Body","Header"],"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":{"required":["ContentType","EventId","EventSource","SourceId","UserId"],"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 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."},"nfc":{"$ref":"#/components/schemas/NfcSettings"}},"additionalProperties":false},"DeviceSettingsBase":{"type":"object","additionalProperties":false},"NfcSettings":{"type":"object","properties":{"apple":{"$ref":"#/components/schemas/AppleNfcSettings"},"google":{"$ref":"#/components/schemas/GoogleNfcSettings"}},"additionalProperties":false},"AppleNfcSettings":{"type":"object","properties":{"publicKey":{"type":"string","description":"Apple public key used for NFC tap authentication."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier associated with the Apple Wallet pass."}},"additionalProperties":false},"GoogleNfcSettings":{"type":"object","properties":{"collectorId":{"type":"string","description":"Google collector identifier used for NFC tap authentication."}},"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 DiscoverableProgramRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DiscoverableProgramRequest":{"type":"object","properties":{"classId":{"type":["null","string"]},"countryCode":{"type":"string"},"programName":{"type":["null","string"]},"programLogo":{"type":"string"},"issuerName":{"type":"object","additionalProperties":{"type":"string"}},"localizedProgramName":{"type":["null","object"],"additionalProperties":{"type":"string"}},"signinUrl":{"type":["null","string"]},"signupUrl":{"type":["null","string"]},"signupSharedDatas":{"type":["null","array"],"items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The DiscoverableProgramResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DiscoverableProgramResponse":{"type":"object","properties":{"classId":{"type":"string"},"countryCode":{"type":"string"},"programName":{"type":"string"},"programLogo":{"type":["null","string"]},"issuerName":{"type":["null","object"],"additionalProperties":{"type":"string"}},"localizedProgramName":{"type":["null","object"],"additionalProperties":{"type":"string"}},"signinUrl":{"type":["null","string"]},"signupUrl":{"type":["null","string"]},"signupSharedDatas":{"type":["null","array"],"items":{"type":"string"}},"state":{"type":["null","string"]}},"additionalProperties":false}}}}
```

## The DownloadPageDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPageDefinition":{"required":["localization","name","requireValidRedirectId","type","yaml"],"type":"object","properties":{"name":{"type":"string","description":"Name of the page."},"type":{"description":"Kind of page. Fixed at creation.","$ref":"#/components/schemas/DownloadPageType"},"headerImage":{"type":["null","string"],"description":"Image shown in the header, as a URL. `/public/…` for an image stored in the tenant\nconfiguration. Null when the page shows none."},"requireValidRedirectId":{"type":"boolean","description":"Whether the page refuses traffic that does not come through a valid short link."},"autoDownloadPass":{"type":["null","boolean"],"description":"Whether the pass is downloaded without the customer acting. `pass` pages only."},"passCreation":{"description":"Pass creation wiring. Null when the page does not create passes.","$ref":"#/components/schemas/DownloadPagePassCreation"},"allowDownloadAllPasses":{"type":["null","boolean"],"description":"Whether a download-everything button is offered. `passList` pages only."},"showInactivePasses":{"type":["null","boolean"],"description":"Whether inactive passes are listed, undownloadable. `passList` pages only."},"localization":{"description":"Localization wiring and translated strings.","$ref":"#/components/schemas/DownloadPageLocalization"},"yaml":{"type":"string","description":"The stored layout file, verbatim."}},"additionalProperties":false,"description":"Full definition of a download page, returned by the get/create/save endpoints."},"DownloadPageType":{"enum":["pass","passList"],"type":"string","description":"Kind of download page."},"DownloadPagePassCreation":{"required":["flow","flowExists","flowHasPassStep"],"type":"object","properties":{"flow":{"type":"string","description":"Flow executed to create the pass."},"flowExists":{"type":"boolean","description":"Whether the flow still exists as a registration flow. False means the page cannot create a pass\nany more — the flow was renamed or deleted."},"flowHasPassStep":{"type":"boolean","description":"Whether the flow carries a `pass` step. False means the flow runs but creates no pass, so\nthe page will not show one. Advisory: the configuration is valid either way."}},"additionalProperties":false,"description":"How a `pass` page creates the pass it shows, when it is missing."},"DownloadPageLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/myPage/`. Order matters when the same key is\ndefined in more than one directory. Translations are read from, and written to, the first one."},"directory":{"type":["null","string"],"description":"Directory the translations below are stored in, as a configuration path. Null when the page\ndeclares no resource directory, in which case translations cannot be stored."},"translations":{"type":"object","additionalProperties":{"description":"Translated strings of one culture.","$ref":"#/components/schemas/DownloadPageTranslations"},"description":"Translated strings, keyed by culture. Cultures with no stored file are absent."}},"additionalProperties":false,"description":"Localization wiring and translated strings of a download page."},"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The DownloadPageListItem object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPageListItem":{"required":["localeResourceCount","name","type"],"type":"object","properties":{"name":{"type":"string","description":"Name of the page, unique within the tenant, and the last segment of its public URL."},"type":{"description":"Kind of page.","$ref":"#/components/schemas/DownloadPageType"},"passCreationFlow":{"type":["null","string"],"description":"Flow executed when the page has to create the pass it shows. Null when the page does not create\npasses, and always null for a `passList` page."},"localeResourceCount":{"type":"integer","description":"Number of locale resource directories the page pulls its translations from.","format":"int32"}},"additionalProperties":false,"description":"Download page returned by the list endpoint."},"DownloadPageType":{"enum":["pass","passList"],"type":"string","description":"Kind of download page."}}}}
```

## The DownloadPageLocalization object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPageLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/myPage/`. Order matters when the same key is\ndefined in more than one directory. Translations are read from, and written to, the first one."},"directory":{"type":["null","string"],"description":"Directory the translations below are stored in, as a configuration path. Null when the page\ndeclares no resource directory, in which case translations cannot be stored."},"translations":{"type":"object","additionalProperties":{"description":"Translated strings of one culture.","$ref":"#/components/schemas/DownloadPageTranslations"},"description":"Translated strings, keyed by culture. Cultures with no stored file are absent."}},"additionalProperties":false,"description":"Localization wiring and translated strings of a download page."},"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The DownloadPagePassCreation object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPagePassCreation":{"required":["flow","flowExists","flowHasPassStep"],"type":"object","properties":{"flow":{"type":"string","description":"Flow executed to create the pass."},"flowExists":{"type":"boolean","description":"Whether the flow still exists as a registration flow. False means the page cannot create a pass\nany more — the flow was renamed or deleted."},"flowHasPassStep":{"type":"boolean","description":"Whether the flow carries a `pass` step. False means the flow runs but creates no pass, so\nthe page will not show one. Advisory: the configuration is valid either way."}},"additionalProperties":false,"description":"How a `pass` page creates the pass it shows, when it is missing."}}}}
```

## The DownloadPageTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The DownloadPageType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"DownloadPageType":{"enum":["pass","passList"],"type":"string","description":"Kind of download page."}}}}
```

## The EmailProviderDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailProviderDefinition":{"required":["hasApiKey","starterScript"],"type":"object","properties":{"type":{"type":["null","string"],"description":"Provider type as stored in `server/emails.yml`. Usually one of the values of\nNeo.Web.Api.Admin.Controllers.Settings.EmailProviderController.EmailProviderType, but a tenant configured by hand may hold any other value.\nNull when this tenant has no email provider configured yet."},"from":{"description":"Sender identity. Null for the `script` provider and when nothing is configured.","$ref":"#/components/schemas/FromDefinition"},"hasApiKey":{"type":"boolean","description":"Whether an API key is currently set."},"script":{"type":["null","string"],"description":"Content of `server/scripts/email.provider.js`. Null when the tenant has no script file yet."},"starterScript":{"type":"string","description":"Starter implementation to seed a new script with."}},"additionalProperties":false,"description":"Email provider settings, with the API key redacted."},"FromDefinition":{"required":["email"],"type":"object","properties":{"email":{"type":"string","description":"Email address mail is sent from."},"name":{"type":["null","string"],"description":"Display name mail is sent from."}},"additionalProperties":false,"description":"Sender identity used by the SendGrid and Mailchimp providers."}}}}
```

## The EmailProviderType object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailProviderType":{"enum":["sendgrid","mailchimp","script"],"type":"string","description":"Email provider supported by this endpoint."}}}}
```

## The EmailTemplateCultureContent object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailTemplateCultureContent":{"required":["css","html"],"type":"object","properties":{"html":{"type":"string","description":"Stripo-designed HTML source."},"css":{"type":"string","description":"Stripo-designed CSS source."},"subject":{"type":["null","string"],"description":"Compiled email subject actually used to send mail. Null when the template has never been\nsaved from the Stripo editor for this culture (design source exists but is not yet compiled)."},"body":{"type":["null","string"],"description":"Compiled email body (HTML, with DotLiquid placeholders) actually used to send mail. Null when the\ntemplate has never been saved from the Stripo editor for this culture."}},"additionalProperties":false,"description":"Design source and compiled content of a single template culture."}}}}
```

## The EmailTemplateDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailTemplateDefinition":{"required":["cultures","id"],"type":"object","properties":{"id":{"type":"string","description":"Template identifier."},"cultures":{"type":"object","additionalProperties":{"description":"Design source and compiled content of a single template culture.","$ref":"#/components/schemas/EmailTemplateCultureContent"},"description":"Content for every culture this template has, keyed by culture code."}},"additionalProperties":false,"description":"Full definition of an email template, returned by get/create/save endpoints."},"EmailTemplateCultureContent":{"required":["css","html"],"type":"object","properties":{"html":{"type":"string","description":"Stripo-designed HTML source."},"css":{"type":"string","description":"Stripo-designed CSS source."},"subject":{"type":["null","string"],"description":"Compiled email subject actually used to send mail. Null when the template has never been\nsaved from the Stripo editor for this culture (design source exists but is not yet compiled)."},"body":{"type":["null","string"],"description":"Compiled email body (HTML, with DotLiquid placeholders) actually used to send mail. Null when the\ntemplate has never been saved from the Stripo editor for this culture."}},"additionalProperties":false,"description":"Design source and compiled content of a single template culture."}}}}
```

## The EmailTemplateListItem object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EmailTemplateListItem":{"required":["cultures","id"],"type":"object","properties":{"id":{"type":"string","description":"Template identifier."},"cultures":{"type":"array","items":{"type":"string"},"description":"Cultures for which this template has design content."}},"additionalProperties":false,"description":"Email template returned by the list endpoint."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EnrolmentFormDefinition":{"required":["localization","name","yaml"],"type":"object","properties":{"name":{"type":"string","description":"Name of the form."},"flow":{"type":["null","string"],"description":"Flow executed when a customer registers through this form. Null when the stored form has none —\nwhich the form needs to work, so writing it back through this API requires one."},"localization":{"description":"Localization wiring of the form.","$ref":"#/components/schemas/EnrolmentFormLocalization"},"yaml":{"type":"string","description":"The stored file, verbatim."}},"additionalProperties":false,"description":"Full definition of an enrolment form, returned by the get/create/save endpoints."},"EnrolmentFormLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/fields/`. Order matters: when the same key is\ndefined in more than one directory, the last one wins. Each directory holds one file per culture,\nmanaged through the enrolment locale endpoints."}},"additionalProperties":false,"description":"Localization wiring of an enrolment form."}}}}
```

## The EnrolmentFormListItem object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EnrolmentFormListItem":{"required":["hasForm","localeResourceCount","name"],"type":"object","properties":{"name":{"type":"string","description":"Name of the form, unique within the tenant, and the last segment of its public URL."},"flow":{"type":["null","string"],"description":"Flow executed when a customer registers through this form. Null when the stored form has none."},"localeResourceCount":{"type":"integer","description":"Number of locale resource directories the form pulls its translations from.","format":"int32"},"hasForm":{"type":"boolean","description":"Whether the form declares any fields to fill in."}},"additionalProperties":false,"description":"Enrolment form returned by the list endpoint."}}}}
```

## The EnrolmentFormLocalization object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EnrolmentFormLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/fields/`. Order matters: when the same key is\ndefined in more than one directory, the last one wins. Each directory holds one file per culture,\nmanaged through the enrolment locale endpoints."}},"additionalProperties":false,"description":"Localization wiring of an enrolment form."}}}}
```

## The EnrolmentLocaleResourceCulture object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EnrolmentLocaleResourceCulture":{"required":["culture","formNames","resourceDir","values"],"type":"object","properties":{"resourceDir":{"type":"string","description":"Directory name, as in Neo.Web.Api.Admin.Controllers.Enrolment.EnrolmentLocalesController.EnrolmentLocaleResourceListItem.ResourceDir."},"culture":{"type":"string","description":"Culture the content is stored under, e.g. `en`."},"formNames":{"type":"array","items":{"type":"string"},"description":"Enrolment forms whose `internationalization.resources` reference this directory."},"values":{"description":"The stored tree: nested objects of string leaves."}},"additionalProperties":false,"description":"One culture's stored content, returned by the get and built by the save endpoint."}}}}
```

## The EnrolmentLocaleResourceListItem object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"EnrolmentLocaleResourceListItem":{"required":["cultures","formNames","resourceDir"],"type":"object","properties":{"resourceDir":{"type":"string","description":"Directory name under `locales/`, e.g. `fields` for `locales/fields/`."},"formNames":{"type":"array","items":{"type":"string"},"description":"Enrolment forms whose `internationalization.resources` reference this directory."},"cultures":{"type":"array","items":{"type":"string"},"description":"Cultures that have a stored file directly inside the directory."}},"additionalProperties":false,"description":"Resource directory returned by the list endpoint."}}}}
```

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

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

## The FacebookSignInDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FacebookSignInDefinition":{"required":["appId","hasAppSecret"],"type":"object","properties":{"appId":{"type":"string","description":"AppId of the associated Facebook application."},"hasAppSecret":{"type":"boolean","description":"Whether an AppSecret is currently configured. The secret itself is never returned."}},"additionalProperties":false,"description":"Sign in with Facebook settings."}}}}
```

## The FilterAction object

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

## The FilterInformation object

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

## The FilterModel object

````json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FilterModel":{"type":"object","properties":{"field":{"type":"string","description":"Field to filter by. Supported values:\n            <list type=\"bullet\"><item>`passType` — pass type name (string).</item><item>`installationStatus` — concatenation of installed wallet names (e.g. `\"apple\"`, `\"google\"`, `\"applegoogle\"`). Use `contains` to test for a single wallet.</item><item>`identifiers.{key}` — an external identifier (string).</item><item>`metadata.{key}` — a metadata field. The comparison type (string, number, boolean, datetime) is resolved automatically from the pass configuration.</item></list>"},"operator":{"description":"Comparison operator to apply.","$ref":"#/components/schemas/FilterModelOperator"},"value":{"type":["null","array"],"items":{"type":"string"},"description":"Filter value(s). Interpretation depends on `Operator` and the metadata field's configured type:\n<list type=\"bullet\"><item><b>String fields</b> (`identifiers.*`, `passType`, `installationStatus`, or `metadata.*` configured as string)\n    — plain string value for most operators; an array of strings for `in` / `notIn`.</item><item><b>Numeric fields</b> (metadata configured as number) — decimal number as a string, e.g. `\"42\"` or `\"3.14\"`.\n    Parsed using invariant culture (`.` as decimal separator).</item><item><b>Boolean fields</b> (metadata configured as boolean) — `\"true\"` or `\"false\"` (case-insensitive).</item><item><b>Date fields</b> (metadata configured as datetime) — ISO 8601 date-time string with timezone, e.g. `\"2024-06-01T00:00:00+00:00\"` or `\"2024-06-01T00:00:00Z\"`.\n    The value is converted to a unix timestamp (seconds) before comparison against the stored unix timestamp.</item></list>\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```\nDate comparison (metadata field configured as datetime):\n```\nGET /passes?filter[0].field=metadata.eventDate&filter[0].operator=greaterThan&filter[0].value=2024-01-01T00:00:00Z\n```\nBoolean comparison (metadata field configured as boolean):\n```\nGET /passes?filter[0].field=metadata.isVip&filter[0].operator=equals&filter[0].value=true\n```</example>"}},"additionalProperties":false,"description":"Filter specification for pass queries."},"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","NotEquals","In","NotIn","GreaterThan","LessThan","GreaterThanOrEqual","LessThanOrEqual"],"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","GreaterThan","LessThan","GreaterThanOrEqual","LessThanOrEqual"],"type":"string","description":"Filter operators for pass list queries."}}}}
```

## The FlowDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FlowDefinition":{"required":["name","steps","type"],"type":"object","properties":{"name":{"type":"string","description":"Name of the flow."},"type":{"type":"string","description":"Type of the flow."},"steps":{"type":"array","items":{"description":"One step of a flow.","$ref":"#/components/schemas/FlowStepDefinition"},"description":"Steps executed by the flow, in order."}},"additionalProperties":false,"description":"Full definition of a flow, returned by the get/create/save endpoints."},"FlowStepDefinition":{"required":["type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the step, e.g. `mail`, `sms`, `pass` or `script`."}},"additionalProperties":{},"description":"One step of a flow."}}}}
```

## The FlowListItem object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FlowListItem":{"required":["name","stepCount","type"],"type":"object","properties":{"name":{"type":"string","description":"Name of the flow, unique within the tenant."},"type":{"type":"string","description":"Type of the flow, e.g. `userRegistration`."},"stepCount":{"type":"integer","description":"Number of steps the flow executes.","format":"int32"}},"additionalProperties":false,"description":"Flow returned by the list endpoint."}}}}
```

## The FlowStepDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FlowStepDefinition":{"required":["type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the step, e.g. `mail`, `sms`, `pass` or `script`."}},"additionalProperties":{},"description":"One step of a flow."}}}}
```

## The FromDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FromDefinition":{"required":["email"],"type":"object","properties":{"email":{"type":"string","description":"Email address mail is sent from."},"name":{"type":["null","string"],"description":"Display name mail is sent from."}},"additionalProperties":false,"description":"Sender identity used by the SendGrid and Mailchimp providers."}}}}
```

## The FromRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"FromRequest":{"required":["email"],"type":"object","properties":{"email":{"minLength":1,"type":"string","description":"Email address mail is sent from.","format":"email"},"name":{"type":["null","string"],"description":"Display name mail is sent from."}},"additionalProperties":false,"description":"Request body to configure the sender identity."}}}}
```

## The GeneralSecretsDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GeneralSecretsDefinition":{"type":"object","properties":{"secret1":{"type":["null","string"],"description":"First secret used for signing. Null when the tenant has none configured yet."},"secret2":{"type":["null","string"],"description":"Second secret used for signing. Null when the tenant has none configured yet."}},"additionalProperties":false,"description":"General secrets of the tenant."}}}}
```

## The GenericEventData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GenericEventData":{"type":"object","allOf":[{"$ref":"#/components/schemas/DataWrapper_JsonElement"}],"additionalProperties":false},"DataWrapper_JsonElement":{"required":["Body","Header"],"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":{"required":["ContentType","EventId","EventSource","SourceId","UserId"],"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 GoogleClassResponse object

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

## The GoogleClassType object

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

## The GoogleNfcSettings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GoogleNfcSettings":{"type":"object","properties":{"collectorId":{"type":"string","description":"Google collector identifier used for NFC tap authentication."}},"additionalProperties":false}}}}
```

## The GoogleSignInDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GoogleSignInDefinition":{"required":["clientId"],"type":"object","properties":{"clientId":{"type":"string","description":"OAuth client ID of the Google application."},"gtmId":{"type":["null","string"],"description":"Identifier of the Google Tag Manager container, in the form 'GTM-XXX'."}},"additionalProperties":false,"description":"Sign in with Google settings."}}}}
```

## The GoogleWalletProviderDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"GoogleWalletProviderDefinition":{"required":["credential","issuerId"],"type":"object","properties":{"issuerId":{"type":"string","description":"Google Wallet issuer identifier."},"credential":{"description":"Service account credential used to call the Google Wallet API.","$ref":"#/components/schemas/CredentialDefinition"},"webServiceUrl":{"type":["null","string"],"description":"WebServiceUrl used by Google Wallet to notify pass installation / uninstallation.","format":"uri"}},"additionalProperties":false,"description":"Google Wallet provider settings."},"CredentialDefinition":{"required":["clientEmail","clientId","hasClientSecret","hasPrivateKey","hasRefreshToken","privateKeyId","projectId","type"],"type":"object","properties":{"type":{"type":"string","description":"Type of the credential."},"projectId":{"type":"string","description":"Project ID associated with this credential."},"quotaProject":{"type":["null","string"],"description":"Project ID associated with this credential for the purposes of quota calculations and billing."},"clientId":{"type":"string","description":"Client ID associated with the credential."},"clientEmail":{"type":"string","description":"Client Email associated with the service account credential."},"privateKeyId":{"type":"string","description":"Private Key ID associated with the service account credential."},"hasPrivateKey":{"type":"boolean","description":"Whether the private key is currently set."},"hasClientSecret":{"type":"boolean","description":"Whether a client secret is currently set."},"hasRefreshToken":{"type":"boolean","description":"Whether a refresh token is currently set."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other fields present in the uploaded service account credential."}},"additionalProperties":false,"description":"Google Wallet issuer service account credential, with secret material redacted."}}}}
```

## The Header object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"Header":{"required":["ContentType","EventId","EventSource","SourceId","UserId"],"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 HostnameRejection object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"HostnameRejection":{"enum":["malformed","tooLong","wildcard","ownDomain"],"type":"string","description":"Why a hostname was rejected."}}}}
```

## 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":{"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"},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags 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."},"behavior":{"description":"Behavioral configuration for the privilege (e.g., target value).","$ref":"#/components/schemas/PrivilegeBehavior"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"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."},"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."},"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 LineSignInDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"LineSignInDefinition":{"required":["clientId"],"type":"object","properties":{"clientId":{"type":"string","description":"LINE Login Channel ID."}},"additionalProperties":false,"description":"Sign in with LINE settings."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"MediaImageDefinition":{"required":["fileName","url"],"type":"object","properties":{"fileName":{"type":"string","description":"File name of the image, without any folder segment."},"url":{"type":"string","description":"Publicly accessible URL of the image."},"lastModified":{"type":["null","string"],"description":"Date and time the image was last uploaded, when known.","format":"date-time"}},"additionalProperties":false,"description":"A public media image, as returned by the list/upload endpoints."}}}}
```

## 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/UpdatePassData_MultipleUpdatePassDataOptions"}],"additionalProperties":false,"description":"Data payload for multi-pass (bulk) update operations."},"UpdatePassData_MultipleUpdatePassDataOptions":{"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 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 NfcSettings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"NfcSettings":{"type":"object","properties":{"apple":{"$ref":"#/components/schemas/AppleNfcSettings"},"google":{"$ref":"#/components/schemas/GoogleNfcSettings"}},"additionalProperties":false},"AppleNfcSettings":{"type":"object","properties":{"publicKey":{"type":"string","description":"Apple public key used for NFC tap authentication."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier associated with the Apple Wallet pass."}},"additionalProperties":false},"GoogleNfcSettings":{"type":"object","properties":{"collectorId":{"type":"string","description":"Google collector identifier used for NFC tap authentication."}},"additionalProperties":false}}}}
```

## 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 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. DateTime values are serialized as ISO-8601 strings."},"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 PassCertificateDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassCertificateDefinition":{"required":["certificate","hasKey"],"type":"object","properties":{"certificate":{"type":"string","description":"PEM encoded (Base64) Certificate."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Apple Wallet pass signing certificate, with private key material redacted."}}}}
```

## The PassCertificateRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassCertificateRequest":{"required":["certificate"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured private key\nunchanged; required the first time Apple Wallet is configured."},"certificate":{"minLength":1,"type":"string","description":"PEM encoded (Base64) Certificate."}},"additionalProperties":false,"description":"Request body to configure the Apple Wallet pass signing certificate."}}}}
```

## The PassCertificateSigningRequestDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassCertificateSigningRequestDefinition":{"required":["hasKey","passTypeIdentifier"],"type":"object","properties":{"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier, as issued by Apple."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Current certificate signing request (CSR), with private key material redacted."}}}}
```

## The PassCertificateSigningRequestRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassCertificateSigningRequestRequest":{"required":["passTypeIdentifier"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured certificate\nrequest's private key unchanged; required the first time a certificate request is submitted."},"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"minLength":1,"type":"string","description":"Pass type identifier, as issued by Apple."}},"additionalProperties":false,"description":"Request body to configure a certificate signing request (CSR)."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassDefinition":{"required":["certificate","passTypeIdentifier"],"type":"object","properties":{"passTypeIdentifier":{"type":"string","description":"Pass type identifier, as issued by Apple."},"certificate":{"description":"Certificate used to sign the pass.","$ref":"#/components/schemas/PassCertificateDefinition"},"certificateRequest":{"description":"Current certificate request, if any.","$ref":"#/components/schemas/PassCertificateSigningRequestDefinition"}},"additionalProperties":false,"description":"Pass configuration, with private key material redacted."},"PassCertificateDefinition":{"required":["certificate","hasKey"],"type":"object","properties":{"certificate":{"type":"string","description":"PEM encoded (Base64) Certificate."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Apple Wallet pass signing certificate, with private key material redacted."},"PassCertificateSigningRequestDefinition":{"required":["hasKey","passTypeIdentifier"],"type":"object","properties":{"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"type":"string","description":"Pass type identifier, as issued by Apple."},"hasKey":{"type":"boolean","description":"Whether the private key is currently set."}},"additionalProperties":false,"description":"Current certificate signing request (CSR), with private key material redacted."}}}}
```

## The PassDesktopQrCodeTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."}}}}
```

## The PassDesktopTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."}}}}
```

## The PassListLayoutTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."}}}}
```

## The PassListQrCodeTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The PassMobileTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."}}}}
```

## The PassNeedHelpDialogTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."}}}}
```

## The PassPostInstalledTranslations object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."}}}}
```

## The PassRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PassRequest":{"required":["certificate","passTypeIdentifier"],"type":"object","properties":{"passTypeIdentifier":{"minLength":1,"type":"string","description":"Pass type identifier, as issued by Apple."},"certificate":{"description":"Certificate used to sign the pass.","$ref":"#/components/schemas/PassCertificateRequest"},"certificateRequest":{"description":"Current certificate request. Should only be set when a request is being issued.","$ref":"#/components/schemas/PassCertificateSigningRequestRequest"}},"additionalProperties":false,"description":"Request body to configure the Apple Wallet pass."},"PassCertificateRequest":{"required":["certificate"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured private key\nunchanged; required the first time Apple Wallet is configured."},"certificate":{"minLength":1,"type":"string","description":"PEM encoded (Base64) Certificate."}},"additionalProperties":false,"description":"Request body to configure the Apple Wallet pass signing certificate."},"PassCertificateSigningRequestRequest":{"required":["passTypeIdentifier"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured certificate\nrequest's private key unchanged; required the first time a certificate request is submitted."},"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"minLength":1,"type":"string","description":"Pass type identifier, as issued by Apple."}},"additionalProperties":false,"description":"Request body to configure a certificate signing request (CSR)."}}}}
```

## 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":{"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"},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags 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."},"behavior":{"description":"Behavioral configuration for the privilege (e.g., target value).","$ref":"#/components/schemas/PrivilegeBehavior"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"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."},"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."},"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":{"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"},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags 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."},"behavior":{"description":"Behavioral configuration for the privilege (e.g., target value).","$ref":"#/components/schemas/PrivilegeBehavior"},"creationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this privilege was created on the server. Set automatically; cannot be modified. 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":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"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."},"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."},"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."}}}}
```

## 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":{"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"},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags 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."},"behavior":{"description":"Behavioral configuration for the privilege (e.g., target value).","$ref":"#/components/schemas/PrivilegeBehavior"},"creationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"Timestamp when this privilege was created on the server. Set automatically; cannot be modified. 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":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"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."},"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."},"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."}}}}
```

## The PrivilegeBehavior object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."}}}}
```

## 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":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"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":{"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"},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags 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."},"behavior":{"description":"Behavioral configuration for the privilege (e.g., target value).","$ref":"#/components/schemas/PrivilegeBehavior"}},"additionalProperties":false,"description":"Base request model for privilege operations."},"PrivilegeOrigin":{"type":"object","properties":{"externalId":{"maxLength":100,"minLength":1,"type":["null","string"],"description":"Unique external identifier for this privilege within the tenant."},"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 batch job that created this privilege (e.g. `campaign3`)."}},"additionalProperties":false,"description":"Describes the origin of a privilege in an external/partner system."},"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."},"PrivilegeBehavior":{"type":"object","properties":{"target":{"type":["null","number"],"description":"Value at which this privilege is considered fulfilled.\nFor progress-based privileges (MultiUse, Unlockable), progress can be computed as Data.Value / Target.\nOptional for all types.","format":"double"}},"additionalProperties":false,"description":"Behavioral configuration for a privilege."}}}}
```

## 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","properties":{"maxRows":{"type":"integer","description":"Safety net against a query that returns far more rows than any caller can use. It is\ndeliberately far above what a dashboard needs, so it catches a runaway query without\ntouching real ones. Exceeding it fails the request instead of returning the first\nNeo.Web.Api.Insights.Controllers.InsightsController.QueryRequest.QueryOptions.MaxRows rows, because a trimmed result is an unordered sample that looks\nexactly like a complete answer. Raise it deliberately for an export.","format":"int32"}},"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","properties":{"maxRows":{"type":"integer","description":"Safety net against a query that returns far more rows than any caller can use. It is\ndeliberately far above what a dashboard needs, so it catches a runaway query without\ntouching real ones. Exceeding it fails the request instead of returning the first\nNeo.Web.Api.Insights.Controllers.InsightsController.QueryRequest.QueryOptions.MaxRows rows, because a trimmed result is an unordered sample that looks\nexactly like a complete answer. Raise it deliberately for an export.","format":"int32"}},"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 ResetResult object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ResetResult":{"required":["action","taskId","triggerType"],"type":"object","properties":{"taskId":{"type":"string","description":"Task id that was reset."},"triggerType":{"type":"string","description":"Trigger discriminator, e.g. `dateRelative`, `recurrence`, `fixedDate`."},"action":{"type":"string","description":"Short summary of what happened, e.g. `backfill-enqueued`, `no-op-not-implemented`."},"rowsDeleted":{"type":["null","integer"],"description":"Number of pending-trigger rows deleted prior to backfill. `null` when the trigger type has no rows.","format":"int32"},"correlationId":{"type":["null","string"],"description":"Correlation id of the enqueued backfill task, if any. Support can trace this in the executions endpoint."}},"additionalProperties":false,"description":"Result of a task reset operation."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SaveDownloadPageLocalization":{"type":"object","properties":{"resources":{"type":["null","array"],"items":{"type":"string"},"description":"Locale resource directories. Omitted keeps the stored directories; provided replaces them, so an\nempty list clears them. Changing them does not move the files already stored."},"translations":{"type":["null","object"],"additionalProperties":{"description":"Translated strings of one culture.","$ref":"#/components/schemas/DownloadPageTranslations"},"description":"Translated strings to store, keyed by culture. Cultures left out are not touched. Omitted\nentirely writes no resource file at all."}},"additionalProperties":false,"description":"Localization wiring to write."},"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The SaveDownloadPageRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SaveDownloadPageRequest":{"type":"object","properties":{"headerImage":{"type":["null","string"],"description":"Image shown in the header, as a URL. Omitted keeps the stored image; an empty string removes it."},"requireValidRedirectId":{"type":["null","boolean"],"description":"Whether the page refuses traffic that does not come through a valid short link."},"autoDownloadPass":{"type":["null","boolean"],"description":"Whether the pass is downloaded without the customer acting. `pass` pages only."},"passCreationFlow":{"type":["null","string"],"description":"Flow executed when the page has to create the pass it shows. `pass` pages only. Omitted\nkeeps the stored flow; an empty string stops the page creating passes."},"allowDownloadAllPasses":{"type":["null","boolean"],"description":"Whether a download-everything button is offered. `passList` pages only."},"showInactivePasses":{"type":["null","boolean"],"description":"Whether inactive passes are listed, undownloadable. `passList` pages only."},"localization":{"description":"Localization wiring and translations to store.","$ref":"#/components/schemas/SaveDownloadPageLocalization"},"yaml":{"type":["null","string"],"description":"Complete layout file to store, verbatim. Mutually exclusive with the typed fields, and must keep\nthe kind of page unchanged. Translations can still be sent alongside it."}},"additionalProperties":false,"description":"Request body to save an existing download page."},"SaveDownloadPageLocalization":{"type":"object","properties":{"resources":{"type":["null","array"],"items":{"type":"string"},"description":"Locale resource directories. Omitted keeps the stored directories; provided replaces them, so an\nempty list clears them. Changing them does not move the files already stored."},"translations":{"type":["null","object"],"additionalProperties":{"description":"Translated strings of one culture.","$ref":"#/components/schemas/DownloadPageTranslations"},"description":"Translated strings to store, keyed by culture. Cultures left out are not touched. Omitted\nentirely writes no resource file at all."}},"additionalProperties":false,"description":"Localization wiring to write."},"DownloadPageTranslations":{"type":"object","properties":{"mobile":{"description":"Phone strings. `pass` pages only.","$ref":"#/components/schemas/PassMobileTranslations"},"desktop":{"description":"Desktop strings. `pass` pages only.","$ref":"#/components/schemas/PassDesktopTranslations"},"layout":{"description":"Headline strings. `passList` pages only.","$ref":"#/components/schemas/PassListLayoutTranslations"},"qrCode":{"description":"QR code strings. `passList` pages only.","$ref":"#/components/schemas/PassListQrCodeTranslations"}},"additionalProperties":false,"description":"Translated strings of one culture."},"PassMobileTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the page."},"subTitle":{"type":["null","string"],"description":"Text under the headline. May be HTML, prefixed with `$html`."},"postInstalled":{"description":"Strings shown once the pass has been added to the wallet.","$ref":"#/components/schemas/PassPostInstalledTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a phone."},"PassPostInstalledTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline of the confirmation."},"description":{"type":["null","string"],"description":"Text under the confirmation headline."},"viewMyCard":{"type":["null","string"],"description":"Label of the button opening the installed pass."}},"additionalProperties":false,"description":"Strings shown on a `pass` page once the pass has been installed."},"PassDesktopTranslations":{"type":"object","properties":{"qrCode":{"description":"Strings around the QR code the customer scans with their phone.","$ref":"#/components/schemas/PassDesktopQrCodeTranslations"},"needHelpButton":{"type":["null","string"],"description":"Label of the button opening the scanning help."},"needHelpDialog":{"description":"Strings of the scanning help dialog.","$ref":"#/components/schemas/PassNeedHelpDialogTranslations"}},"additionalProperties":false,"description":"Strings shown on a `pass` page opened on a desktop browser."},"PassDesktopQrCodeTranslations":{"type":"object","properties":{"caption":{"type":["null","string"],"description":"Instruction above the QR code."},"passDescription":{"type":["null","string"],"description":"Text describing what scanning the QR code does."},"baseline":{"type":["null","string"],"description":"Supporting text under the QR code."}},"additionalProperties":false,"description":"Strings around the QR code on a `pass` page opened on a desktop browser."},"PassNeedHelpDialogTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Title of the dialog."},"closeButton":{"type":["null","string"],"description":"Label of the button closing the dialog."}},"additionalProperties":false,"description":"Strings of the scanning help dialog on a `pass` page."},"PassListLayoutTranslations":{"type":"object","properties":{"title":{"type":["null","string"],"description":"Headline used for two or more passes."},"title_one":{"type":["null","string"],"description":"Headline used for exactly one pass."},"title_zero":{"type":["null","string"],"description":"Headline used when the customer holds no pass."},"subTitle":{"type":["null","string"],"description":"Text under the headline."},"subTitle_zero":{"type":["null","string"],"description":"Text under the headline when the customer holds no pass."},"individual":{"type":["null","string"],"description":"Label of the individual-passes section, for two or more."},"individual_one":{"type":["null","string"],"description":"Label of the individual-passes section, for exactly one."},"all":{"type":["null","string"],"description":"Label of the all-passes action, for two or more."},"all_one":{"type":["null","string"],"description":"Label of the all-passes action, for exactly one."},"tickets":{"type":["null","string"],"description":"Pass counter. Carries a `{count}` placeholder."}},"additionalProperties":false,"description":"Headline strings of a `passList` page."},"PassListQrCodeTranslations":{"type":"object","properties":{"seeQRCode":{"type":["null","string"],"description":"Label of the action revealing the QR code."},"scanQRCode":{"type":["null","string"],"description":"Title shown with the QR code."},"QRCodeInstructions":{"type":["null","string"],"description":"Scanning instructions. May be HTML, prefixed with `$html`."},"copyQRLink":{"type":["null","string"],"description":"Label of the action copying the QR code link."},"linkCopied":{"type":["null","string"],"description":"Confirmation shown once the link has been copied."}},"additionalProperties":false,"description":"Strings around the QR code on a `passList` page."}}}}
```

## The SaveEmailTemplateRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SaveEmailTemplateRequest":{"required":["cultures"],"type":"object","properties":{"cultures":{"type":"object","additionalProperties":{"description":"Design source and compiled content of a single template culture.","$ref":"#/components/schemas/EmailTemplateCultureContent"},"description":"Content to upsert, keyed by culture code. Cultures not present in this map are left untouched."}},"additionalProperties":false,"description":"Request body to save (create or update) culture content on an existing email template."},"EmailTemplateCultureContent":{"required":["css","html"],"type":"object","properties":{"html":{"type":"string","description":"Stripo-designed HTML source."},"css":{"type":"string","description":"Stripo-designed CSS source."},"subject":{"type":["null","string"],"description":"Compiled email subject actually used to send mail. Null when the template has never been\nsaved from the Stripo editor for this culture (design source exists but is not yet compiled)."},"body":{"type":["null","string"],"description":"Compiled email body (HTML, with DotLiquid placeholders) actually used to send mail. Null when the\ntemplate has never been saved from the Stripo editor for this culture."}},"additionalProperties":false,"description":"Design source and compiled content of a single template culture."}}}}
```

## The SaveEnrolmentFormRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SaveEnrolmentFormRequest":{"type":"object","properties":{"flow":{"type":["null","string"],"description":"Flow executed when a customer registers through this form. Required unless `yaml` is used."},"localization":{"description":"Localization wiring. Omitted keeps the stored resource directories; provided replaces them, so an\nempty list clears them.","$ref":"#/components/schemas/EnrolmentFormLocalization"},"yaml":{"type":["null","string"],"description":"Complete file to store, verbatim. Mutually exclusive with `flow` and `localization`."}},"additionalProperties":false,"description":"Request body to save an existing enrolment form."},"EnrolmentFormLocalization":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"},"description":"Locale resource directories, e.g. `/locales/fields/`. Order matters: when the same key is\ndefined in more than one directory, the last one wins. Each directory holds one file per culture,\nmanaged through the enrolment locale endpoints."}},"additionalProperties":false,"description":"Localization wiring of an enrolment form."}}}}
```

## The SaveFlowRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SaveFlowRequest":{"required":["steps"],"type":"object","properties":{"type":{"type":["null","string"],"description":"Type of the flow. Keeps the currently stored type when omitted."},"steps":{"type":"array","items":{"description":"One step of a flow.","$ref":"#/components/schemas/FlowStepDefinition"},"description":"Steps executed by the flow, in order. Replaces the stored steps entirely."}},"additionalProperties":false,"description":"Request body to save an existing flow."},"FlowStepDefinition":{"required":["type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the step, e.g. `mail`, `sms`, `pass` or `script`."}},"additionalProperties":{},"description":"One step of a flow."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SchemaAssociation":{"type":"object","properties":{"schema":{"type":"string","description":"Title of the schema this rule selects."},"kind":{"description":"Which of the rules below applies.","$ref":"#/components/schemas/SchemaAssociationKind"},"path":{"type":"string","description":"The exact file for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.File, otherwise the folder prefix."},"extension":{"type":["null","string"],"description":"Optional extension filter, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Prefix."},"property":{"type":["null","string"],"description":"Property carrying the discriminating value, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Discriminator."},"value":{"type":["null","string"],"description":"Value that property must hold, for Neo.Configuration.Tenants.Documentation.SchemaAssociationKind.Discriminator."}},"additionalProperties":false,"description":"The rule binding one schema to the files it validates.\n            \nThis is the single definition of that binding. Save-time validation resolves a file's schema\nthrough M:Neo.Configuration.Tenants.Documentation.SchemaAssociation.Matches(System.String,System.Text.Json.JsonElement), and the same rules are published so that the administration UI\nand MCP callers reach the same conclusion instead of reimplementing them and drifting."},"SchemaAssociationKind":{"enum":["File","Prefix","Discriminator"],"type":"string","description":"How a schema decides which configuration files it validates."}}}}
```

## The SchemaAssociationKind object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SchemaAssociationKind":{"enum":["File","Prefix","Discriminator"],"type":"string","description":"How a schema decides which configuration files it validates."}}}}
```

## The ScriptEndpointSignature object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ScriptEndpointSignature":{"type":"object","properties":{"name":{"type":"string","description":"The name `register` is called with, placeholders included."},"description":{"type":["null","string"],"description":"What the endpoint is for, as its own documentation states it."},"methods":{"type":"array","items":{"description":"One method of an endpoint, named as a script has to spell it.","$ref":"#/components/schemas/ScriptMethodSignature"},"description":"The methods an implementation may carry."}},"additionalProperties":false,"description":"One endpoint a script may register an implementation for."},"ScriptMethodSignature":{"type":"object","properties":{"name":{"type":"string","description":"The property name an implementation is registered under."},"isOptional":{"type":"boolean","description":"Whether the endpoint declares the method optional. A script may leave an optional method\nout; leaving out a required one changes what the platform can do."},"description":{"type":["null","string"],"description":"What the method is for, as its own documentation states it."},"parameters":{"type":"array","items":{"type":"string"},"description":"The parameter names, in order, for scaffolding a handler."}},"additionalProperties":false,"description":"One method of an endpoint, named as a script has to spell it."}}}}
```

## The ScriptMethodSignature object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ScriptMethodSignature":{"type":"object","properties":{"name":{"type":"string","description":"The property name an implementation is registered under."},"isOptional":{"type":"boolean","description":"Whether the endpoint declares the method optional. A script may leave an optional method\nout; leaving out a required one changes what the platform can do."},"description":{"type":["null","string"],"description":"What the method is for, as its own documentation states it."},"parameters":{"type":"array","items":{"type":"string"},"description":"The parameter names, in order, for scaffolding a handler."}},"additionalProperties":false,"description":"One method of an endpoint, named as a script has to spell it."}}}}
```

## The ScriptTypings object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"ScriptTypings":{"type":"object","properties":{"declarations":{"type":"string","description":"The contents of a TypeScript declaration file describing `ScriptContext`. Types a\nscript that annotates its context parameter, down to the fields of every argument."},"endpoints":{"type":"array","items":{"description":"One endpoint a script may register an implementation for.","$ref":"#/components/schemas/ScriptEndpointSignature"},"description":"The same endpoints as data. A script cannot be made to carry that annotation, and\nTypeScript will not infer a parameter's type from the way it is used, so an editor also\nneeds the names on their own to complete `register(...)` without it."}},"additionalProperties":false,"description":"What an editor needs to help someone write an extensibility script."},"ScriptEndpointSignature":{"type":"object","properties":{"name":{"type":"string","description":"The name `register` is called with, placeholders included."},"description":{"type":["null","string"],"description":"What the endpoint is for, as its own documentation states it."},"methods":{"type":"array","items":{"description":"One method of an endpoint, named as a script has to spell it.","$ref":"#/components/schemas/ScriptMethodSignature"},"description":"The methods an implementation may carry."}},"additionalProperties":false,"description":"One endpoint a script may register an implementation for."},"ScriptMethodSignature":{"type":"object","properties":{"name":{"type":"string","description":"The property name an implementation is registered under."},"isOptional":{"type":"boolean","description":"Whether the endpoint declares the method optional. A script may leave an optional method\nout; leaving out a required one changes what the platform can do."},"description":{"type":["null","string"],"description":"What the method is for, as its own documentation states it."},"parameters":{"type":"array","items":{"type":"string"},"description":"The parameter names, in order, for scaffolding a handler."}},"additionalProperties":false,"description":"One method of an endpoint, named as a script has to spell it."}}}}
```

## The SetAparteRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetAparteRequest":{"required":["baseUrl","defaultPassType","tenant","timeZoneId"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Aparte WalletCrew API.","format":"uri"},"tenant":{"minLength":1,"type":"string","description":"Tenant identifier sent as the `X-Tenant` header."},"defaultPassType":{"minLength":1,"type":"string","description":"Default pass type assigned to passes created from Aparte tickets."},"invalidPassType":{"type":["null","string"],"description":"Pass type assigned when the Aparte ticket is invalid or no longer found."},"apiKey":{"type":["null","string"],"description":"API key sent as the `X-Api-Key` header.\nStored in the secret repository under `APARTE-APIKEY`.\nWhen omitted, the existing secret is preserved."},"timeZoneId":{"minLength":1,"type":"string","description":"IANA timezone identifier for the venue (e.g. \"Europe/Paris\").\nUsed to convert local dates returned by the Aparte API to DateTimeOffset."},"rateLimit":{"description":"Client-side rate limiting settings.","$ref":"#/components/schemas/AparteRateLimitSettings"}},"additionalProperties":false,"description":"Request body for setting Aparte configuration."},"AparteRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per minute. Default 500.","format":"int32","default":500}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Aparte request and response bodies."}}}}
```

## The SetBloomreachCacheRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetBloomreachCacheRequest":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"Cache duration for customer lookups.","format":"date-span"}},"additionalProperties":false,"description":"Cache section of the Bloomreach PUT request body."}}}}
```

## The SetBloomreachRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetBloomreachRequest":{"required":["apiKeyId","baseUrl","projectToken"],"type":"object","properties":{"projectToken":{"minLength":1,"type":"string","description":"Bloomreach project token."},"baseUrl":{"type":"string","description":"Bloomreach API base URL.","format":"uri"},"apiKeyId":{"minLength":1,"type":"string","description":"API key ID used for Basic authentication."},"apiKeySecret":{"type":["null","string"],"description":"API key secret used for Basic authentication.\nStored in the secret repository under `BLOOMREACH-APIKEYSECRET`.\nWhen omitted, the existing secret is preserved."},"cache":{"description":"Cache duration settings.","$ref":"#/components/schemas/SetBloomreachCacheRequest"}},"additionalProperties":false,"description":"Request body for setting Bloomreach configuration."},"SetBloomreachCacheRequest":{"type":"object","properties":{"customer":{"type":["null","string"],"description":"Cache duration for customer lookups.","format":"date-span"}},"additionalProperties":false,"description":"Cache section of the Bloomreach PUT request body."}}}}
```

## The SetComarchRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SetComarchRequest":{"required":["connection","providers"],"type":"object","properties":{"connection":{"description":"Connection settings.","$ref":"#/components/schemas/ComarchConnectionRequest"},"providers":{"description":"Provider-specific settings.","$ref":"#/components/schemas/ComarchProvidersConfiguration"},"kafkaConnection":{"description":"Optional Kafka connection settings.","$ref":"#/components/schemas/ComarchKafkaConnectionRequest"},"rateLimit":{"description":"Optional client-side rate limiting settings. When omitted, defaults are used (80 req/s, enabled).","$ref":"#/components/schemas/ComarchRateLimitSettings"}},"additionalProperties":false,"description":"Request body for setting Comarch configuration."},"ComarchConnectionRequest":{"required":["baseUrl","clientId","partnerCode","programCode"],"type":"object","properties":{"baseUrl":{"type":"string","description":"Root URL of the Comarch CLM B2B Gateway API.","format":"uri"},"clientId":{"minLength":1,"type":"string","description":"OAuth2 client credentials – client ID."},"programCode":{"minLength":1,"type":"string","description":"Program code used to identify the loyalty program in Comarch CLM."},"partnerCode":{"minLength":1,"type":"string","description":"Code of the Comarch partner."},"clientSecret":{"type":["null","string"],"description":"OAuth2 client secret.\nStored in the secret repository under `COMARCH-CLIENTSECRET`.\nWhen omitted, the existing secret is preserved."}},"additionalProperties":false,"description":"Connection settings section of the Comarch PUT request body."},"ComarchProvidersConfiguration":{"required":["customer"],"type":"object","properties":{"customer":{"description":"Customer provider settings.","$ref":"#/components/schemas/ComarchCustomerConfiguration"}},"additionalProperties":false,"description":"Providers section shared between the Comarch request and response bodies."},"ComarchCustomerConfiguration":{"type":"object","properties":{"retrieveCustomerTransactionBalance":{"type":"boolean","description":"Whether to fetch customer transaction balance.","default":false},"updateOnPassInstallationChange":{"type":"boolean","description":"Whether to sync a customer's Comarch attributes when a pass's combined active install count\ncrosses zero (first install on any platform, or last device removed).","default":false}},"additionalProperties":false,"description":"Customer provider settings shared between the Comarch request and response bodies."},"ComarchKafkaConnectionRequest":{"required":["bootstrapServers","topic","username"],"type":"object","properties":{"bootstrapServers":{"minLength":1,"type":"string","description":"Comma-separated list of Kafka bootstrap servers."},"username":{"minLength":1,"type":"string","description":"Username used for Kafka authentication."},"topic":{"minLength":1,"type":"string","description":"Kafka topic name where Comarch events are published."},"password":{"type":["null","string"],"description":"Password used for Kafka authentication.\nStored in the secret repository under `COMARCH-KAFKAPASSWORD`.\nWhen omitted, the existing secret is preserved."}},"additionalProperties":false,"description":"Kafka connection settings section of the Comarch PUT request body."},"ComarchRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"type":"integer","description":"Maximum number of requests allowed per second. Default 80.","format":"int32","default":80}},"additionalProperties":false,"description":"Client-side rate limiting settings shared between the Comarch request and response bodies."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SftpFileResponse":{"required":["blobPath","fileName","lastModified","sizeInBytes","status"],"type":"object","properties":{"fileName":{"type":"string","description":"Original file name (stripped of any internal timestamp prefix)."},"status":{"type":"string","description":"One of `pending`, `processed`, or `error`."},"sizeInBytes":{"type":"integer","description":"File size in bytes.","format":"int64"},"lastModified":{"type":"string","description":"When the file was last written, in UTC.","format":"date-time"},"blobPath":{"type":"string","description":"Stable identifier for this specific file run. Pass this to the import-log endpoint.\nUnlike Neo.Web.Api.Admin.Controllers.Sftp.SftpController.SftpFileResponse.FileName, this is unique even when the same file name is re-imported\nmultiple times: each run produces a distinct blob path."}},"additionalProperties":false,"description":"One file sitting in the tenant's SFTP inbox."}}}}
```

## The SftpImportLogResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SftpImportLogResponse":{"required":["fileRunFound","passOutcomes","status"],"type":"object","properties":{"status":{"type":"string","description":"Current status of the file: `pending`, `processed`, or `error`."},"fileRunFound":{"type":"boolean","description":"Whether a matching import run was found in the log store. false while the file is pending."},"fileRunSuccess":{"type":["null","boolean"],"description":"Whether the import function itself completed successfully. null when not found."},"batchCount":{"type":["null","integer"],"description":"Number of batches sent to the wallet update pipeline.","format":"int32"},"rowCount":{"type":["null","integer"],"description":"Total rows read from the file.","format":"int32"},"successCount":{"type":["null","integer"],"description":"Rows that resolved to at least one pass and were queued for update.","format":"int32"},"noMatchCount":{"type":["null","integer"],"description":"Rows whose identifiers matched no pass at all — a data-quality signal, not a technical failure.","format":"int32"},"errorCount":{"type":["null","integer"],"description":"Rows that threw while being transformed.","format":"int32"},"passOutcomes":{"type":"array","items":{"description":"Outcome of a single pass touched by an imported file.","$ref":"#/components/schemas/SftpPassOutcomeResponse"},"description":"Per-pass breakdown. Empty when none could be recovered — not necessarily an error."}},"additionalProperties":false,"description":"Full story of what happened when one SFTP-dropped file was imported."},"SftpPassOutcomeResponse":{"required":["success"],"type":"object","properties":{"passId":{"type":["null","string"],"description":"Pass identifier, when it could be recovered from the execution's logs."},"success":{"type":"boolean","description":"Whether the push-update for this pass succeeded."},"errorMessage":{"type":["null","string"],"description":"Failure reason, when available. null on success."}},"additionalProperties":false,"description":"Outcome of a single pass touched by an imported file."}}}}
```

## The SftpPassOutcomeResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SftpPassOutcomeResponse":{"required":["success"],"type":"object","properties":{"passId":{"type":["null","string"],"description":"Pass identifier, when it could be recovered from the execution's logs."},"success":{"type":"boolean","description":"Whether the push-update for this pass succeeded."},"errorMessage":{"type":["null","string"],"description":"Failure reason, when available. null on success."}},"additionalProperties":false,"description":"Outcome of a single pass touched by an imported file."}}}}
```

## The SftpStatusResponse object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SftpStatusResponse":{"required":["sftpEnabled"],"type":"object","properties":{"sftpEnabled":{"type":"boolean","description":"false when the tenant has no SFTP inbox at all — the normal case for most\n            tenants, not an error. Every other field is null in that case."},"pendingCount":{"type":["null","integer"],"description":"Files dropped but not yet processed.","format":"int32"},"processedCount":{"type":["null","integer"],"description":"Files successfully processed.","format":"int32"},"errorCount":{"type":["null","integer"],"description":"Files that failed processing.","format":"int32"},"lastActivity":{"type":["null","string"],"description":"Timestamp of the most recently modified file across all folders.","format":"date-time"}},"additionalProperties":false,"description":"Quick-glance SFTP activity summary for a tenant."}}}}
```

## The SingleUpdatePassData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"SingleUpdatePassData":{"type":"object","allOf":[{"$ref":"#/components/schemas/UpdatePassData_SingleUpdatePassDataOptions"}],"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."},"UpdatePassData_SingleUpdatePassDataOptions":{"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 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 StoreAdvisorDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"StoreAdvisorDefinition":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"type":"string","description":"Identifier of the advisor."},"displayName":{"type":"string","description":"Display name of the advisor."}},"additionalProperties":false,"description":"Advisor assigned to a store."}}}}
```

## The StoreAdvisorRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"StoreAdvisorRequest":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"minLength":1,"type":"string","description":"Identifier of the advisor."},"displayName":{"minLength":1,"type":"string","description":"Display name of the advisor."}},"additionalProperties":false,"description":"Advisor assigned to a store, as submitted through a store write request."}}}}
```

## The StoreDefinition object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"StoreDefinition":{"required":["latitude","longitude","storeId"],"type":"object","properties":{"storeId":{"type":"string","description":"Unique identifier of the store."},"displayName":{"type":["null","string"],"description":"Display name of the store."},"address":{"type":["null","string"],"description":"Postal address of the store."},"longitude":{"type":"number","description":"Longitude of the store in decimal value.","format":"double"},"latitude":{"type":"number","description":"Latitude of the store in decimal value.","format":"double"},"altitude":{"type":["null","integer"],"description":"Optional altitude of the store in meters.","format":"int32"},"availableLanguages":{"type":"array","items":{"type":"string"},"description":"List of ISO 639 language codes available for this store."},"advisors":{"type":"array","items":{"description":"Advisor assigned to a store.","$ref":"#/components/schemas/StoreAdvisorDefinition"},"description":"Advisors assigned to this store."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other additional values for this store."}},"additionalProperties":false,"description":"Full definition of a store, returned by list/get/create/update endpoints."},"StoreAdvisorDefinition":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"type":"string","description":"Identifier of the advisor."},"displayName":{"type":"string","description":"Display name of the advisor."}},"additionalProperties":false,"description":"Advisor assigned to a store."}}}}
```

## The SubscriptionInformation object

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

## The TOptions object

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

## The 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":["onboarding","active","disabled"],"type":"string","description":"Operational status of the tenant."},"TenantPurpose":{"enum":["demo","test","production"],"type":"string","description":"Intended usage context of the tenant."}}}}
```

## 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":["demo","test","production"],"type":"string","description":"Intended usage context of the tenant."}}}}
```

## The TenantStatus object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"TenantStatus":{"enum":["onboarding","active","disabled"],"type":"string","description":"Operational status of the tenant."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateAppleSignInRequest":{"required":["serviceIdentifier"],"type":"object","properties":{"serviceIdentifier":{"minLength":1,"type":"string","description":"Identifier for the service ID where \"Sign in with Apple\" is configured."}},"additionalProperties":false,"description":"Request body to configure sign in with Apple."}}}}
```

## The UpdateAppleWalletProviderRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateAppleWalletProviderRequest":{"required":["apnKey","pass","teamIdentifier"],"type":"object","properties":{"teamIdentifier":{"minLength":1,"type":"string","description":"Team identifier of the organization that originated and signed the pass, as issued by Apple."},"apnKey":{"description":"Information about the key generated by Apple for the Apple Push Notifications service.","$ref":"#/components/schemas/APNKeyRequest"},"pass":{"description":"Information related to the Apple certificate used to generate passes.","$ref":"#/components/schemas/PassRequest"},"webServiceUrl":{"type":["null","string"],"description":"WebServiceUrl used by Apple Wallet to migrate passes from neostore to another pass provider.","format":"uri"}},"additionalProperties":false,"description":"Request body to configure Apple Wallet."},"APNKeyRequest":{"required":["id"],"type":"object","properties":{"id":{"minLength":1,"type":"string","description":"Identifier of the key. In most cases a 10 digit number embedded in the file name of the key generated by Apple."},"value":{"type":["null","string"],"description":"Base64 value of the P8 key. Omit or leave empty to keep the currently configured value unchanged;\nrequired the first time Apple Wallet is configured."}},"additionalProperties":false,"description":"Request body to configure the Apple Push Notifications key."},"PassRequest":{"required":["certificate","passTypeIdentifier"],"type":"object","properties":{"passTypeIdentifier":{"minLength":1,"type":"string","description":"Pass type identifier, as issued by Apple."},"certificate":{"description":"Certificate used to sign the pass.","$ref":"#/components/schemas/PassCertificateRequest"},"certificateRequest":{"description":"Current certificate request. Should only be set when a request is being issued.","$ref":"#/components/schemas/PassCertificateSigningRequestRequest"}},"additionalProperties":false,"description":"Request body to configure the Apple Wallet pass."},"PassCertificateRequest":{"required":["certificate"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured private key\nunchanged; required the first time Apple Wallet is configured."},"certificate":{"minLength":1,"type":"string","description":"PEM encoded (Base64) Certificate."}},"additionalProperties":false,"description":"Request body to configure the Apple Wallet pass signing certificate."},"PassCertificateSigningRequestRequest":{"required":["passTypeIdentifier"],"type":"object","properties":{"key":{"type":["null","string"],"description":"PEM encoded (Base64) Private Key. Omit or leave empty to keep the currently configured certificate\nrequest's private key unchanged; required the first time a certificate request is submitted."},"certificateRequest":{"type":["null","string"],"description":"PEM encoded (Base64) Certificate request (CSR)."},"passTypeIdentifier":{"minLength":1,"type":"string","description":"Pass type identifier, as issued by Apple."}},"additionalProperties":false,"description":"Request body to configure a certificate signing request (CSR)."}}}}
```

## The UpdateCheckinPolicyRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateCheckinPolicyRequest":{"required":["mode"],"type":"object","properties":{"mode":{"description":"Identification required from a customer collecting a pass.","$ref":"#/components/schemas/CheckinPolicyMode"}},"additionalProperties":false,"description":"Request body to configure the check-in policy."},"CheckinPolicyMode":{"enum":["noIdentification","none","partial","full"],"type":"string","description":"Identification required from a customer collecting a pass."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateEmailProviderRequest":{"required":["type"],"type":"object","properties":{"type":{"description":"Provider used to send mail.","$ref":"#/components/schemas/EmailProviderType"},"from":{"description":"Sender identity. Required for `sendgrid` and `mailchimp`, ignored for `script`.","$ref":"#/components/schemas/FromRequest"},"apiKey":{"type":["null","string"],"description":"API key of the provider. Omit or leave empty to keep the currently configured key, which is only\npossible when the provider type is left unchanged. Ignored for `script`."},"script":{"type":["null","string"],"description":"Content of `server/scripts/email.provider.js`. Only written when Neo.Web.Api.Admin.Controllers.Settings.EmailProviderController.UpdateEmailProviderRequest.Type is\n`script`; omit or leave empty to keep the currently configured script. Ignored for the other\nprovider types, which leave the script file untouched."}},"additionalProperties":false,"description":"Request body to configure the email provider."},"EmailProviderType":{"enum":["sendgrid","mailchimp","script"],"type":"string","description":"Email provider supported by this endpoint."},"FromRequest":{"required":["email"],"type":"object","properties":{"email":{"minLength":1,"type":"string","description":"Email address mail is sent from.","format":"email"},"name":{"type":["null","string"],"description":"Display name mail is sent from."}},"additionalProperties":false,"description":"Request body to configure the sender identity."}}}}
```

## The UpdateFacebookSignInRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateFacebookSignInRequest":{"required":["appId"],"type":"object","properties":{"appId":{"minLength":1,"type":"string","description":"AppId of the associated Facebook application."},"appSecret":{"type":["null","string"],"description":"AppSecret of the associated Facebook application. Omit or leave empty to keep the currently\nconfigured secret unchanged; required the first time sign in with Facebook is configured."}},"additionalProperties":false,"description":"Request body to configure sign in with Facebook."}}}}
```

## The UpdateGeneralSecretsRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateGeneralSecretsRequest":{"required":["secret1","secret2"],"type":"object","properties":{"secret1":{"minLength":1,"type":"string","description":"First secret used for signing."},"secret2":{"minLength":1,"type":"string","description":"Second secret used for signing."}},"additionalProperties":false,"description":"Request body to configure the general secrets. Both values are replaced."}}}}
```

## The UpdateGoogleSignInRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateGoogleSignInRequest":{"required":["clientId"],"type":"object","properties":{"clientId":{"minLength":1,"type":"string","description":"OAuth client ID of the Google application."},"gtmId":{"type":["null","string"],"description":"Identifier of the Google Tag Manager container, in the form 'GTM-XXX'."}},"additionalProperties":false,"description":"Request body to configure sign in with Google."}}}}
```

## The UpdateGoogleWalletProviderRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateGoogleWalletProviderRequest":{"required":["credential","issuerId"],"type":"object","properties":{"issuerId":{"minLength":1,"type":"string","description":"Google Wallet issuer identifier."},"credential":{"description":"Service account credential used to call the Google Wallet API.","$ref":"#/components/schemas/CredentialRequest"},"webServiceUrl":{"type":["null","string"],"description":"WebServiceUrl used by Google Wallet to notify pass installation / uninstallation.","format":"uri"}},"additionalProperties":false,"description":"Request body to configure Google Wallet."},"CredentialRequest":{"required":["clientEmail","clientId","privateKeyId","projectId","type"],"type":"object","properties":{"type":{"minLength":1,"type":"string","description":"Type of the credential."},"projectId":{"minLength":1,"type":"string","description":"Project ID associated with this credential."},"quotaProject":{"type":["null","string"],"description":"Project ID associated with this credential for the purposes of quota calculations and billing."},"clientId":{"minLength":1,"type":"string","description":"Client ID associated with the credential."},"clientSecret":{"type":["null","string"],"description":"Client Secret associated with the credential. Omit or leave empty to keep the currently configured value unchanged."},"clientEmail":{"minLength":1,"type":"string","description":"Client Email associated with the service account credential."},"privateKey":{"type":["null","string"],"description":"Private Key associated with the service account credential. Omit or leave empty to keep the\ncurrently configured private key unchanged; required the first time Google Wallet is configured."},"privateKeyId":{"minLength":1,"type":"string","description":"Private Key ID associated with the service account credential."},"refreshToken":{"type":["null","string"],"description":"Refresh Token associated with the credential. Omit or leave empty to keep the currently configured value unchanged."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other fields present in the uploaded service account credential."}},"additionalProperties":false,"description":"Request body to configure the Google Wallet issuer service account credential."}}}}
```

## The UpdateLineSignInRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateLineSignInRequest":{"required":["clientId"],"type":"object","properties":{"clientId":{"minLength":1,"type":"string","description":"LINE Login Channel ID."}},"additionalProperties":false,"description":"Request body to configure sign in with LINE."}}}}
```

## 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\_MultipleUpdatePassDataOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdatePassData_MultipleUpdatePassDataOptions":{"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 UpdatePassData\_SingleUpdatePassDataOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdatePassData_SingleUpdatePassDataOptions":{"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 UpdatePassData\_TOptions object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdatePassData_TOptions":{"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 UpdateStoreRequest object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpdateStoreRequest":{"required":["latitude","longitude"],"type":"object","properties":{"displayName":{"type":["null","string"],"description":"Display name of the store."},"address":{"type":["null","string"],"description":"Postal address of the store."},"longitude":{"type":"number","description":"Longitude of the store in decimal value.","format":"double"},"latitude":{"type":"number","description":"Latitude of the store in decimal value.","format":"double"},"altitude":{"type":["null","integer"],"description":"Optional altitude of the store in meters.","format":"int32"},"availableLanguages":{"type":"array","items":{"type":"string"},"description":"List of ISO 639 language codes available for this store."},"advisors":{"type":"array","items":{"description":"Advisor assigned to a store, as submitted through a store write request.","$ref":"#/components/schemas/StoreAdvisorRequest"},"description":"Optional list of advisors of this store."},"additionalProperties":{"type":"object","additionalProperties":{},"description":"Any other additional values for this store."}},"additionalProperties":false,"description":"Request body to update a store. Fully replaces the store's fields other than its identifier."},"StoreAdvisorRequest":{"required":["advisorId","displayName"],"type":"object","properties":{"advisorId":{"minLength":1,"type":"string","description":"Identifier of the advisor."},"displayName":{"minLength":1,"type":"string","description":"Display name of the advisor."}},"additionalProperties":false,"description":"Advisor assigned to a store, as submitted through a store write request."}}}}
```

## 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":["onboarding","active","disabled"],"type":"string","description":"Operational status of the tenant."},"TenantPurpose":{"enum":["demo","test","production"],"type":"string","description":"Intended usage context of the tenant."}}}}
```

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

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"UpsertPrivilegeResponse":{"type":"object","properties":{"privilegeId":{"type":"string"}},"additionalProperties":false,"description":"Response payload after a privilege is created or updated via POST."}}}}
```

## The UserInformation object

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

## The 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}}}}
```

## The WebhookRequest\_OrderConfirmedData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebhookRequest_OrderConfirmedData":{"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 WebhookRequest\_TicketCanceledData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebhookRequest_TicketCanceledData":{"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 WebhookRequest\_TicketCheckedData object

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"components":{"schemas":{"WebhookRequest_TicketCheckedData":{"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}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
