> 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 Aparte configuration of the tenant and whether an API key is stored. 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":["tenant.aparte.settings:read"]},{"apiKey":[]}],"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, as last saved.","format":"uri"},"tenant":{"minLength":1,"type":"string","description":"Aparte tenant code, sent with every call to Aparte."},"defaultPassType":{"minLength":1,"type":"string","description":"Pass template given to a pass created with an `aparte.ticketId` identifier and no pass template."},"invalidPassType":{"type":["null","string"],"description":"Pass template a ticket pass is moved to when Aparte no longer returns its ticket; null when such a\npass keeps its pass template."},"hasApiKey":{"type":"boolean","description":"Whether an API key is stored. When true, a save may omit `apiKey` to keep it."},"timeZoneId":{"minLength":1,"type":"string","description":"Time zone of the venue, e.g. `Europe/Paris`, in which Aparte session dates are read."},"rateLimit":{"description":"Cap on the calls sent to Aparte.","$ref":"#/components/schemas/AparteRateLimitSettings"}},"additionalProperties":false,"description":"The stored Aparte configuration of the tenant, without its API key."},"AparteRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"maximum":10000,"minimum":1,"type":"integer","description":"Maximum calls per minute sent to Aparte, 1 to 10000 (else 400). Default 500.","format":"int32","default":500}},"additionalProperties":false,"description":"Cap on the calls this tenant sends to Aparte."},"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 Aparte configuration of the tenant and whether an API key is stored. The API key itself is\nnever returned.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration returned.","content":{"text/plain":{"schema":{"description":"The stored Aparte configuration of the tenant, without its API key.","$ref":"#/components/schemas/AparteConfigurationResponse"}},"application/json":{"schema":{"description":"The stored Aparte configuration of the tenant, without its API key.","$ref":"#/components/schemas/AparteConfigurationResponse"}},"text/json":{"schema":{"description":"The stored Aparte configuration of the tenant, without its API key.","$ref":"#/components/schemas/AparteConfigurationResponse"}}}},"401":{"description":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.aparte.settings:read</c> scope.","content":{"application/problem+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"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}}}}}}}
```

## Set Aparte configuration

> Tests the base URL, tenant and API key against the Aparte WalletCrew API, then saves the configuration.\
> Aparte must answer the test within 10 seconds. Omit \`apiKey\` to keep the stored key (it is the one\
> tested), and \`rateLimit\` to keep the current settings. Nothing is saved when the request is refused.

```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":["tenant.aparte.settings:write"]},{"apiKey":[]}],"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; must be an absolute `http` or `https` URL (else 400).\nReturned as sent.","format":"uri"},"tenant":{"minLength":1,"type":"string","description":"Aparte tenant code, sent with every call to Aparte. A value with unsupported characters is\nrefused with a 400."},"defaultPassType":{"minLength":1,"type":"string","description":"Pass template given to a pass created with an `aparte.ticketId` identifier and no pass template."},"invalidPassType":{"type":["null","string"],"description":"Pass template a ticket pass is moved to when, on a metadata update, Aparte no longer returns its\nticket. Null or omitted: the pass keeps its pass template."},"apiKey":{"type":["null","string"],"description":"Aparte API key. Never returned."},"timeZoneId":{"minLength":1,"type":"string","description":"IANA time zone of the venue, e.g. `Europe/Paris`; an unknown zone is refused with a 400."},"rateLimit":{"description":"Cap on the calls sent to Aparte. When omitted, the current settings are kept (500 per minute when none).","$ref":"#/components/schemas/AparteRateLimitSettings"}},"additionalProperties":false,"description":"The Aparte configuration of the tenant, as sent on a save. Every field but `apiKey` and\n`rateLimit` is written as sent, so an omitted `invalidPassType` clears the stored one."},"AparteRateLimitSettings":{"type":"object","properties":{"throttlingLimit":{"maximum":10000,"minimum":1,"type":"integer","description":"Maximum calls per minute sent to Aparte, 1 to 10000 (else 400). Default 500.","format":"int32","default":500}},"additionalProperties":false,"description":"Cap on the calls this tenant sends to Aparte."},"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":"Tests the base URL, tenant and API key against the Aparte WalletCrew API, then saves the configuration.\nAparte must answer the test within 10 seconds. Omit `apiKey` to keep the stored key (it is the one\ntested), and `rateLimit` to keep the current settings. Nothing is saved when the request is refused.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The configuration to store.","content":{"application/json":{"schema":{"description":"The Aparte configuration of the tenant, as sent on a save. Every field but `apiKey` and\n`rateLimit` is written as sent, so an omitted `invalidPassType` clears the stored one.","$ref":"#/components/schemas/SetAparteRequest"}},"text/json":{"schema":{"description":"The Aparte configuration of the tenant, as sent on a save. Every field but `apiKey` and\n`rateLimit` is written as sent, so an omitted `invalidPassType` clears the stored one.","$ref":"#/components/schemas/SetAparteRequest"}},"application/*+json":{"schema":{"description":"The Aparte configuration of the tenant, as sent on a save. Every field but `apiKey` and\n`rateLimit` is written as sent, so an omitted `invalidPassType` clears the stored one.","$ref":"#/components/schemas/SetAparteRequest"}}},"required":true},"responses":{"204":{"description":"Configuration saved."},"400":{"description":"The body is invalid; `apiKey` is omitted while none is stored; `timeZoneId` is unknown; `baseUrl` is not absolute http(s); `tenant` or `apiKey` contains unsupported characters; or Aparte refused the credentials.","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":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.aparte.settings:write</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"502":{"description":"The Aparte API could not be reached, did not answer within 10 seconds, or failed while testing the credentials; retry later."}}}}}}
```

## Delete Aparte configuration

> Removes the Aparte configuration and its API key. The Aparte scripts are kept. Succeeds even when nothing\
> is configured.

```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":["tenant.aparte.settings:write"]},{"apiKey":[]}],"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 the Aparte configuration and its API key. The Aparte scripts are kept. Succeeds even when nothing\nis configured.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Configuration deleted."},"401":{"description":"The caller is not authenticated.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"403":{"description":"The caller lacks the <c>tenant.aparte.settings:write</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"429":{"description":"Over 1200 requests per minute to this endpoint for the tenant (default limit); retry after <c>Retry-After</c>.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limiter knows it.","schema":{"type":"integer"}}},"content":{"application/problem+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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
