> 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/extensions/aparte.md).

# Aparte

## Get the Aparte configuration

> Returns the non-secret Aparte configuration for this tenant and whether an API key is currently stored.\
> Returns 404 when Aparte is not configured.\
> The API key itself is never returned.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Aparte"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["ScopedAuthorizeRequirement"]},{"apiKey":["ScopedAuthorizeRequirement"]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"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."},"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":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/aparte":{"get":{"tags":["Aparte"],"summary":"Get the Aparte configuration","description":"Returns the non-secret Aparte configuration for this tenant and whether an API key is currently stored.\nReturns 404 when Aparte is not configured.\nThe API key itself is never returned.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration returned.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/AparteConfigurationResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/AparteConfigurationResponse"}},"text/json":{"schema":{"$ref":"#/components/schemas/AparteConfigurationResponse"}}}},"401":{"description":"Caller not authenticated.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"Caller lacks required scope.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"404":{"description":"Aparte is not configured for this tenant.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```

## Set Aparte configuration

> Validates credentials against the Aparte WalletCrew API, then saves the configuration to \`server/aparte.yml\`.\
> Omit \`apiKey\` to update settings without rotating the secret (the existing stored key is used for the credential check).

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Aparte"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["ScopedAuthorizeRequirement"]},{"apiKey":["ScopedAuthorizeRequirement"]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"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."},"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":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/aparte":{"put":{"tags":["Aparte"],"summary":"Set Aparte configuration","description":"Validates credentials against the Aparte WalletCrew API, then saves the configuration to `server/aparte.yml`.\nOmit `apiKey` to update settings without rotating the secret (the existing stored key is used for the credential check).","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Request body for setting Aparte configuration.","$ref":"#/components/schemas/SetAparteRequest"}},"text/json":{"schema":{"description":"Request body for setting Aparte configuration.","$ref":"#/components/schemas/SetAparteRequest"}},"application/*+json":{"schema":{"description":"Request body for setting Aparte configuration.","$ref":"#/components/schemas/SetAparteRequest"}}},"required":true},"responses":{"204":{"description":"Configuration saved."},"400":{"description":"Request body is invalid or the credentials failed to validate against the Aparte API.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"401":{"description":"Caller not authenticated.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"Caller lacks required scope.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```

## Delete Aparte configuration

> Removes \`server/aparte.yml\` from tenant configuration and deletes the stored API key.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Aparte"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["ScopedAuthorizeRequirement"]},{"apiKey":["ScopedAuthorizeRequirement"]}],"components":{"securitySchemes":{"admin-bearer":{"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://auth.neostore.cloud/authorize?audience=https://app.neostore.cloud/api/","scopes":{}}}},"apiKey":{"type":"apiKey","name":"X-API-KEY","in":"header"}},"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":{}},"HttpValidationProblemDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProblemDetails"}],"properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":{}}}},"paths":{"/api/{tenantId}/admin/extensions/aparte":{"delete":{"tags":["Aparte"],"summary":"Delete Aparte configuration","description":"Removes `server/aparte.yml` from tenant configuration and deletes the stored API key.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Configuration deleted."},"401":{"description":"Caller not authenticated.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"Caller lacks required scope.","content":{"text/plain":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}},"text/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```


---

# 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/extensions/aparte.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.
