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

# Yurplan

## Create passes for Yurplan order

> Creates one pass per ticket with the identifier \`yurplan.ticketId\` = \`{eventId}|{token}\`, on the\
> tenant's default Yurplan pass template. The pass content comes from Yurplan. A ticket that already has a\
> pass gets no new one, so the call can be replayed safely.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Yurplan"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"paths":{"/api/{tenantId}/webhooks/listeners/yurplan/{eventId}/order/confirmed":{"post":{"tags":["Yurplan"],"summary":"Create passes for Yurplan order","description":"Creates one pass per ticket with the identifier `yurplan.ticketId` = `{eventId}|{token}`, on the\ntenant's default Yurplan pass template. The pass content comes from Yurplan. A ticket that already has a\npass gets no new one, so the call can be replayed safely.","parameters":[{"name":"eventId","in":"path","description":"Yurplan identifier of the event the tickets admit to.","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The confirmed order.","content":{"application/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_OrderConfirmedData"}},"text/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_OrderConfirmedData"}},"application/*+json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_OrderConfirmedData"}}}},"responses":{"200":{"description":"Every ticket of the order has a pass."},"400":{"description":"The body has no `data`, the order no `identifier` or `tickets`, or a\n            ticket no `token` or `identifier`.","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"}]}}}}}}}},"components":{"schemas":{"WebhookRequest_OrderConfirmedData":{"type":"object","properties":{"data":{"description":"The payload, under `data`. Required; 400 when missing.","$ref":"#/components/schemas/OrderConfirmedData"}},"additionalProperties":false,"description":"Envelope of a Yurplan webhook call."},"OrderConfirmedData":{"type":"object","properties":{"identifier":{"type":"string","description":"Yurplan identifier of the order."},"tickets":{"type":"array","items":{"description":"A Yurplan ticket.","$ref":"#/components/schemas/TicketData"},"description":"Tickets of the order: one pass is created per ticket, an empty list creates none."}},"additionalProperties":false,"description":"Payload of an order confirmation."},"TicketData":{"type":"object","properties":{"token":{"type":"string","description":"Yurplan token of the ticket. With the event id it forms the pass identifier\n            `yurplan.ticketId`; it is exposed to the pass template as `barCode`."},"identifier":{"type":"string","description":"Yurplan identifier of the ticket. Required; 400 when missing."}},"additionalProperties":false,"description":"A Yurplan ticket."},"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":{}}}}}
```

## Handle Yurplan ticket cancellation

> The passes whose \`yurplan.ticketId\` is \`{eventId}|{token}\` are refreshed from Yurplan, which exposes the ticket's new \`status\` to the\
> pass template. The passes stay installed; the pass template decides how a cancelled ticket shows. An\
> unknown ticket is accepted and changes nothing.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Yurplan"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"paths":{"/api/{tenantId}/webhooks/listeners/yurplan/{eventId}/ticket/canceled":{"post":{"tags":["Yurplan"],"summary":"Handle Yurplan ticket cancellation","description":"The passes whose `yurplan.ticketId` is `{eventId}|{token}` are refreshed from Yurplan, which exposes the ticket's new `status` to the\npass template. The passes stay installed; the pass template decides how a cancelled ticket shows. An\nunknown ticket is accepted and changes nothing.","parameters":[{"name":"eventId","in":"path","description":"Yurplan identifier of the event the ticket admits to.","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The cancelled ticket.","content":{"application/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCanceledData"}},"text/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCanceledData"}},"application/*+json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCanceledData"}}}},"responses":{"200":{"description":"Cancellation accepted."},"400":{"description":"The body has no `data.ticket` with a `token` and an `identifier`.","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"}]}}}}}}}},"components":{"schemas":{"WebhookRequest_TicketCanceledData":{"type":"object","properties":{"data":{"description":"The payload, under `data`. Required; 400 when missing.","$ref":"#/components/schemas/TicketCanceledData"}},"additionalProperties":false,"description":"Envelope of a Yurplan webhook call."},"TicketCanceledData":{"type":"object","properties":{"ticket":{"description":"The cancelled ticket.","$ref":"#/components/schemas/TicketData"}},"additionalProperties":false,"description":"Payload of a ticket cancellation."},"TicketData":{"type":"object","properties":{"token":{"type":"string","description":"Yurplan token of the ticket. With the event id it forms the pass identifier\n            `yurplan.ticketId`; it is exposed to the pass template as `barCode`."},"identifier":{"type":"string","description":"Yurplan identifier of the ticket. Required; 400 when missing."}},"additionalProperties":false,"description":"A Yurplan ticket."},"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":{}}}}}
```

## Handle Yurplan ticket check-in

> The passes whose \`yurplan.ticketId\` is \`{eventId}|{token}\` are refreshed from Yurplan, which exposes the ticket's \`scanCount\` (check-ins\
> across the event's scan lists) and \`status\` to the pass template. The passes stay installed. An\
> unknown ticket is accepted and changes nothing.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Yurplan"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"paths":{"/api/{tenantId}/webhooks/listeners/yurplan/{eventId}/ticket/checked":{"post":{"tags":["Yurplan"],"summary":"Handle Yurplan ticket check-in","description":"The passes whose `yurplan.ticketId` is `{eventId}|{token}` are refreshed from Yurplan, which exposes the ticket's `scanCount` (check-ins\nacross the event's scan lists) and `status` to the pass template. The passes stay installed. An\nunknown ticket is accepted and changes nothing.","parameters":[{"name":"eventId","in":"path","description":"Yurplan identifier of the event the ticket admits to.","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The checked-in ticket.","content":{"application/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCheckedData"}},"text/json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCheckedData"}},"application/*+json":{"schema":{"description":"Envelope of a Yurplan webhook call.","$ref":"#/components/schemas/WebhookRequest_TicketCheckedData"}}}},"responses":{"200":{"description":"Check-in accepted."},"400":{"description":"The body has no `data.ticket` with a `token` and an `identifier`.","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"}]}}}}}}}},"components":{"schemas":{"WebhookRequest_TicketCheckedData":{"type":"object","properties":{"data":{"description":"The payload, under `data`. Required; 400 when missing.","$ref":"#/components/schemas/TicketCheckedData"}},"additionalProperties":false,"description":"Envelope of a Yurplan webhook call."},"TicketCheckedData":{"type":"object","properties":{"ticket":{"description":"The checked-in ticket.","$ref":"#/components/schemas/TicketData"}},"additionalProperties":false,"description":"Payload of a ticket check-in."},"TicketData":{"type":"object","properties":{"token":{"type":"string","description":"Yurplan token of the ticket. With the event id it forms the pass identifier\n            `yurplan.ticketId`; it is exposed to the pass template as `barCode`."},"identifier":{"type":"string","description":"Yurplan identifier of the ticket. Required; 400 when missing."}},"additionalProperties":false,"description":"A Yurplan ticket."},"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/yurplan.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.
