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

# Secutix

## Get Secutix settings

> The operator secret is never returned;\
> \`connection.hasSecret\` tells whether one is stored.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Secutix"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.secutix.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":{"SecutixConfigurationResponse":{"required":["connection","pass","rateLimit","webhook"],"type":"object","properties":{"connection":{"description":"How the integration signs in to Secutix.","$ref":"#/components/schemas/SecutixConnectionResponse"},"pass":{"description":"Pass template resolution and printing status settings.","$ref":"#/components/schemas/SecutixPassSettings"},"webhook":{"description":"What an order change notification refreshes.","$ref":"#/components/schemas/SecutixWebhookSettings"},"rateLimit":{"description":"Limit on calls to Secutix.","$ref":"#/components/schemas/SecutixRateLimitSettings"}},"additionalProperties":false,"description":"The tenant's stored Secutix configuration, without the operator secret."},"SecutixConnectionResponse":{"required":["hasSecret","institution","operator","partner","url"],"type":"object","properties":{"url":{"type":"string","description":"Base address of the tenant's Secutix back-end web services.","format":"uri"},"institution":{"minLength":1,"type":"string","description":"Secutix institution code the integration acts for."},"operator":{"minLength":1,"type":"string","description":"Secutix operator (login) the integration acts as."},"partner":{"minLength":1,"type":"string","description":"Partner name registered in Secutix for the integration."},"hasSecret":{"type":"boolean","description":"Whether an operator secret is stored. The secret itself is never returned; when true, a PUT may omit it."}},"additionalProperties":false,"description":"Settings the integration uses to connect to Secutix, without the operator secret."},"SecutixPassSettings":{"required":["defaultPassTypes"],"type":"object","properties":{"defaultPassTypes":{"description":"Fallback pass template per Secutix product family, for a ticket whose pass template is not otherwise\nresolved.","$ref":"#/components/schemas/SecutixDefaultPassTypes"},"updatePrintingStatus":{"type":"boolean","description":"Whether a ticket is marked as installed in its Secutix printing status when its pass is\nadded to a first wallet.","default":false}},"additionalProperties":false,"description":"How passes are built from Secutix tickets. Shared between the request and the response."},"SecutixDefaultPassTypes":{"required":["default"],"type":"object","properties":{"default":{"minLength":1,"type":"string","description":"Pass template of a ticket whose product family has no pass template of its own, or that has no product\nfamily."},"membership":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `MEMBERSHIP` product family."},"seasonticket":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SEASONTICKET` product family."},"event":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SIMPLE_TICKET` product family."},"match":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SPORTING_EVENT` product family."},"visitPass":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `VISIT_PASS` product family."},"openPass":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `OPEN_PASS` product family."},"voucher":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `VOUCHER` product family."},"donation":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `DONATION` product family."},"service":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SERVICE` product family."},"openProduct":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `OPEN` product family."}},"additionalProperties":false,"description":"Fallback pass template of a Secutix ticket, per Secutix product family. Shared between the request and the\nresponse."},"SecutixWebhookSettings":{"type":"object","properties":{"searchForContactIds":{"type":"boolean","description":"Whether an order change notification refreshes the passes of every movement and contact of the order,\nnot only the pass of the notified movement.","default":false},"updateMetadata":{"type":"boolean","description":"Whether a pass refreshed by an order change also has its data and pass template refreshed from Secutix.\nOff, the refresh is faster.","default":true}},"additionalProperties":false,"description":"What an order change notification from Secutix refreshes. Shared between the request and the response."},"SecutixRateLimitSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether calls to Secutix are limited at all. Off, every call is sent.","default":true},"permitLimit":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Maximum number of calls to Secutix per Neo.Extensions.Secutix.Controllers.SecutixRateLimitSettings.WindowSeconds. At least 1.","format":"int32","default":400},"windowSeconds":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Length, in seconds, of the period Neo.Extensions.Secutix.Controllers.SecutixRateLimitSettings.PermitLimit applies to. At least 1.","format":"int32","default":60},"retryAfterSeconds":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Default delay, in seconds, reported in `Retry-After` when a call is refused. 0 or more.","format":"int32","default":60},"queueAcquireTimeoutSeconds":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Time, in seconds, a call over the limit may wait for a free slot before being refused. 0 refuses at once.","format":"int32","default":0},"queueRetryDelaySeconds":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Interval, in seconds, at which a waiting call checks again for a free slot. At least 1.","format":"int32","default":1}},"additionalProperties":false,"description":"Limit on the calls the integration makes to Secutix. Shared between the request and the response."},"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/secutix":{"get":{"tags":["Secutix"],"summary":"Get Secutix settings","description":"The operator secret is never returned;\n`connection.hasSecret` tells whether one is stored.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Settings returned.","content":{"text/plain":{"schema":{"description":"The tenant's stored Secutix configuration, without the operator secret.","$ref":"#/components/schemas/SecutixConfigurationResponse"}},"application/json":{"schema":{"description":"The tenant's stored Secutix configuration, without the operator secret.","$ref":"#/components/schemas/SecutixConfigurationResponse"}},"text/json":{"schema":{"description":"The tenant's stored Secutix configuration, without the operator secret.","$ref":"#/components/schemas/SecutixConfigurationResponse"}}}},"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.secutix.settings:read</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"404":{"description":"Secutix 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"}]}}}}}}}}}
```

## Update Secutix settings

> Replaces the tenant's Secutix settings. \`connection\` and \`pass\` are taken as sent;\
> omit \`connection.secret\`, \`connection.partner\`, \`webhook\` or \`rateLimit\` to keep what is\
> stored. A first save without a partner uses \`neostore\`.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Secutix"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.secutix.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":{"SetSecutixRequest":{"required":["connection","pass"],"type":"object","properties":{"connection":{"description":"How the integration signs in to Secutix.","$ref":"#/components/schemas/SecutixConnectionRequest"},"pass":{"description":"Pass template resolution and printing status settings. Stored as sent.","$ref":"#/components/schemas/SecutixPassSettings"},"webhook":{"description":"What an order change notification refreshes. Omitted, the stored settings are kept, or the defaults on a\nfirst save.","$ref":"#/components/schemas/SecutixWebhookSettings"},"rateLimit":{"description":"Limit on calls to Secutix. Omitted, the stored settings are kept, or the defaults on a first save.","$ref":"#/components/schemas/SecutixRateLimitSettings"}},"additionalProperties":false,"description":"Secutix configuration to store for the tenant."},"SecutixConnectionRequest":{"required":["institution","operator","url"],"type":"object","properties":{"url":{"type":"string","description":"Base address of the tenant's Secutix back-end web services.","format":"uri"},"institution":{"minLength":1,"type":"string","description":"Secutix institution code the integration acts for."},"operator":{"minLength":1,"type":"string","description":"Secutix operator (login) the integration acts as."},"partner":{"type":["null","string"],"description":"Partner name registered in Secutix for the integration. Omitted or blank, the stored partner is kept, or\n`neostore` on a first save."},"secret":{"type":["null","string"],"description":"Secret (password) of the Secutix operator. Omitted or blank, the stored secret is kept; with none stored,\nthe request is refused with 400. Never returned."}},"additionalProperties":false,"description":"Settings the integration uses to connect to Secutix."},"SecutixPassSettings":{"required":["defaultPassTypes"],"type":"object","properties":{"defaultPassTypes":{"description":"Fallback pass template per Secutix product family, for a ticket whose pass template is not otherwise\nresolved.","$ref":"#/components/schemas/SecutixDefaultPassTypes"},"updatePrintingStatus":{"type":"boolean","description":"Whether a ticket is marked as installed in its Secutix printing status when its pass is\nadded to a first wallet.","default":false}},"additionalProperties":false,"description":"How passes are built from Secutix tickets. Shared between the request and the response."},"SecutixDefaultPassTypes":{"required":["default"],"type":"object","properties":{"default":{"minLength":1,"type":"string","description":"Pass template of a ticket whose product family has no pass template of its own, or that has no product\nfamily."},"membership":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `MEMBERSHIP` product family."},"seasonticket":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SEASONTICKET` product family."},"event":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SIMPLE_TICKET` product family."},"match":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SPORTING_EVENT` product family."},"visitPass":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `VISIT_PASS` product family."},"openPass":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `OPEN_PASS` product family."},"voucher":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `VOUCHER` product family."},"donation":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `DONATION` product family."},"service":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `SERVICE` product family."},"openProduct":{"type":["null","string"],"description":"Pass template of a ticket of the Secutix `OPEN` product family."}},"additionalProperties":false,"description":"Fallback pass template of a Secutix ticket, per Secutix product family. Shared between the request and the\nresponse."},"SecutixWebhookSettings":{"type":"object","properties":{"searchForContactIds":{"type":"boolean","description":"Whether an order change notification refreshes the passes of every movement and contact of the order,\nnot only the pass of the notified movement.","default":false},"updateMetadata":{"type":"boolean","description":"Whether a pass refreshed by an order change also has its data and pass template refreshed from Secutix.\nOff, the refresh is faster.","default":true}},"additionalProperties":false,"description":"What an order change notification from Secutix refreshes. Shared between the request and the response."},"SecutixRateLimitSettings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether calls to Secutix are limited at all. Off, every call is sent.","default":true},"permitLimit":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Maximum number of calls to Secutix per Neo.Extensions.Secutix.Controllers.SecutixRateLimitSettings.WindowSeconds. At least 1.","format":"int32","default":400},"windowSeconds":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Length, in seconds, of the period Neo.Extensions.Secutix.Controllers.SecutixRateLimitSettings.PermitLimit applies to. At least 1.","format":"int32","default":60},"retryAfterSeconds":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Default delay, in seconds, reported in `Retry-After` when a call is refused. 0 or more.","format":"int32","default":60},"queueAcquireTimeoutSeconds":{"maximum":2147483647,"minimum":0,"type":"integer","description":"Time, in seconds, a call over the limit may wait for a free slot before being refused. 0 refuses at once.","format":"int32","default":0},"queueRetryDelaySeconds":{"maximum":2147483647,"minimum":1,"type":"integer","description":"Interval, in seconds, at which a waiting call checks again for a free slot. At least 1.","format":"int32","default":1}},"additionalProperties":false,"description":"Limit on the calls the integration makes to Secutix. Shared between the request and the response."},"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/secutix":{"put":{"tags":["Secutix"],"summary":"Update Secutix settings","description":"Replaces the tenant's Secutix settings. `connection` and `pass` are taken as sent;\nomit `connection.secret`, `connection.partner`, `webhook` or `rateLimit` to keep what is\nstored. A first save without a partner uses `neostore`.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The settings to store.","content":{"application/json":{"schema":{"description":"Secutix configuration to store for the tenant.","$ref":"#/components/schemas/SetSecutixRequest"}},"text/json":{"schema":{"description":"Secutix configuration to store for the tenant.","$ref":"#/components/schemas/SetSecutixRequest"}},"application/*+json":{"schema":{"description":"Secutix configuration to store for the tenant.","$ref":"#/components/schemas/SetSecutixRequest"}}},"required":true},"responses":{"204":{"description":"Settings saved."},"400":{"description":"A required field is missing, a rate limit value is out of range, or no secret is sent and none is stored.","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.secutix.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"}]}}}}}}}}}
```

## Get Secutix order tickets URL

> Looks up the Secutix file and returns, as plain text, the absolute URL of the tenant's public tickets page for the first order of the\
> Secutix file (\`…/{tenantId}/tickets?ids.secutix.orderToken={orderToken}\`). That page is where the\
> holder adds the order's tickets to a wallet.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Secutix"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.secutix.order: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":{"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}/external/secutix/orders/getTicketsUrl/{fileId}":{"get":{"tags":["Secutix"],"summary":"Get Secutix order tickets URL","description":"Looks up the Secutix file and returns, as plain text, the absolute URL of the tenant's public tickets page for the first order of the\nSecutix file (`…/{tenantId}/tickets?ids.secutix.orderToken={orderToken}`). That page is where the\nholder adds the order's tickets to a wallet.","parameters":[{"name":"fileId","in":"path","description":"Secutix file identifier.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"URL of the tickets page."},"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.secutix.order:read</c> scope.","content":{"application/problem+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ProblemDetails"},{"$ref":"#/components/schemas/HttpValidationProblemDetails"}]}}}},"404":{"description":"Secutix is not configured for the tenant, or Secutix has no order for the file.","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"}]}}}}}}}}}
```

## Handle Secutix order change

> Returns at once; the passes are updated afterwards. Updates the existing passes concerned by the change:\
> \- the pass of \`saleMovementId\`;\
> \- the passes of every movement and contact of the order, when \`saleMovementId\` is omitted or the\
> &#x20; \`searchForContactIds\` webhook setting of the tenant is on.\
> &#x20;           \
> With the \`updateMetadata\` webhook setting on, each pass also has its data and pass template\
> refreshed from Secutix. No pass is created.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Secutix"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"paths":{"/api/{tenantId}/webhooks/listeners/secutix/orders":{"post":{"tags":["Secutix"],"summary":"Handle Secutix order change","description":"Returns at once; the passes are updated afterwards. Updates the existing passes concerned by the change:\n- the pass of `saleMovementId`;\n- the passes of every movement and contact of the order, when `saleMovementId` is omitted or the\n  `searchForContactIds` webhook setting of the tenant is on.\n            \nWith the `updateMetadata` webhook setting on, each pass also has its data and pass template\nrefreshed from Secutix. No pass is created.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The order change notification.","content":{"application/json":{"schema":{"description":"Order change notification, as Secutix sends it.","$ref":"#/components/schemas/OrderChangeRequest"}},"text/json":{"schema":{"description":"Order change notification, as Secutix sends it.","$ref":"#/components/schemas/OrderChangeRequest"}},"application/*+json":{"schema":{"description":"Order change notification, as Secutix sends it.","$ref":"#/components/schemas/OrderChangeRequest"}}}},"responses":{"200":{"description":"Order change accepted. No body."},"400":{"description":"`orderSecretToken` is empty, or a required field is missing.","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 600 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"}]}}}}}}}},"components":{"schemas":{"OrderChangeRequest":{"required":["lastUpdate","orderSecretToken","state"],"type":"object","properties":{"ticketId":{"type":["null","integer"],"description":"Secutix ticket concerned by the change.","format":"int64"},"saleMovementId":{"type":["null","integer"],"description":"Secutix sale movement (one ticket line of the order) concerned by the change. Its pass is the one\nupdated. Omitted, the passes of all movements and contacts of the order identified by\n`orderSecretToken` are updated.","format":"int64"},"orderSecretToken":{"type":"string","description":"Secret token of the Secutix order. Required and non-empty, otherwise 400."},"state":{"type":"string","description":"Order state as reported by Secutix."},"lastUpdate":{"type":"string","description":"Time of the change, as Secutix formats it."}},"additionalProperties":false,"description":"Order change notification, as Secutix sends it."},"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":{}}}}}
```


---

# 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/secutix.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.
