> 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/pass-management/benefits.md).

# Benefits

## List benefits across passes

> Flat, paginated list, each row enriched with its pass (pass type, identifiers, metadata).\
> Benefit filter fields: \`benefitId\`, \`passId\`, \`origin.processId\` (contains, starts with, ends with, equals, not equals, in, is empty), \`type\` (equals only); dates \`creationDate\`, \`lastModificationDate\`, \`activationDate\`, \`deactivationDate\`, \`deletionDate\` (equals, greater/less than, or equal).\
> Benefit sort fields: \`benefitId\`, \`passId\`, \`type\`, \`value\` and the five date fields.\
> The field \`search\` (operator \`contains\` only) matches a benefit when any of several text fields contains the text, ignoring case: the first value is the text, the following ones name the fields to look in (\`benefitId\`, \`passId\`, \`origin.processId\`), defaulting to all three.\
> Pass filter/sort fields: \`passType\`, \`passCreationDate\`, \`passLastUpdateDate\`, \`identifiers.\*\`, \`metadata.\*\`; refused with 400 when they match too many rows, so narrow with benefit filters.\
> Total count is returned in the \`x-pagination-total\` header.\
> Example: \`?pageIndex=0\&pageSize=20\&filter\[0].field=origin.processId\&filter\[0].operator=equals\&filter\[0].value=benefit-template-id\`

````json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Benefits"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.pass: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":{"FilterModel":{"type":"object","properties":{"field":{"type":"string","description":"`id`, `passType`, `themeId`, `creationDate` and `lastUpdateDate` (UTC), `installationStatus` (installed wallets concatenated: `\"\"`, `\"apple\"`, `\"google\"` or `\"applegoogle\"`; test with `contains`), `identifiers.{key}`, or `metadata.{key}` (compared as the type the tenant's metadata configuration gives it)."},"operator":{"description":"Comparison operator. Required.","$ref":"#/components/schemas/FilterModelOperator"},"value":{"type":["null","array"],"items":{"type":"string"},"description":"Values to compare, as repeated `value` query parameters (several only for `in`/`notIn`). Numbers use `.` as decimal separator, booleans are `true`/`false`, dates are ISO 8601 with timezone.\nA value containing `{{`, `{%` or `{#` is first rendered as a Liquid template (`{{ 'now' | date: '%Y-%m-%d' }}`).\n<example>```\nGET /passes?filter[0].field=passType&filter[0].operator=in&filter[0].value=boarding&filter[0].value=loyalty\n```</example>"}},"additionalProperties":false,"description":"One condition on passes. Several conditions must all hold."},"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","NotEquals","In","NotIn","GreaterThan","LessThan","GreaterThanOrEqual","LessThanOrEqual"],"type":"string","description":"How a pass filter compares the field with its value."},"SortModel":{"type":"object","properties":{"field":{"type":"string","description":"`id`, `passType`, `themeId`, `creationDate`, `lastUpdateDate`, `apple`,\n            `google` (installation data of that wallet), `identifiers.{key}` or `metadata.{key}`; a datetime\n            metadata field sorts chronologically. Any other field is refused with a 400."},"direction":{"description":"`ASC` or `DESC`.","$ref":"#/components/schemas/SortModelDirection"}},"additionalProperties":false,"description":"One sort key for pass queries. Several keys apply in order, the first one being the primary sort."},"SortModelDirection":{"enum":[0,1],"type":"integer","description":"Sort direction for pass list queries, sent as `ASC` or `DESC`.","format":"int32"},"BenefitWithPassRow":{"required":["benefitId","passCreationDate","passId","passType","type"],"type":"object","properties":{"passId":{"type":"string","description":"Id of the pass carrying the benefit, for the pass endpoints."},"passType":{"type":"string","description":"Pass template of the pass carrying the benefit (e.g. `loyalty`), not of a linked benefit pass."},"passCreationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the holder's pass was created. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"passLastUpdateDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the holder's pass last changed, if recorded. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"identifiers":{"type":"object","additionalProperties":{"type":"string"},"description":"Pass identifiers in other systems, keyed by name (e.g. `y2.customerId`)."},"metadata":{"type":"object","additionalProperties":{},"description":"The pass's metadata, as stored on it by the tenant's integrations."},"benefitId":{"type":"string","description":"Id of the benefit, for the benefit endpoints."},"type":{"description":"How the benefit is consumed: `oneTime`, `multiUse` or `unlimited`.","$ref":"#/components/schemas/BenefitType"},"value":{"type":"number","description":"Uses left: the sum of all movements. For `unlimited`, a tally of what was taken.","format":"double"},"target":{"type":["null","number"],"description":"Uses a `multiUse` benefit started with; null when there is no allowance.","format":"double"},"creationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the benefit was issued. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"lastModificationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the benefit last changed — a patch, or a movement applied. Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"activationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the benefit becomes redeemable (null = straight away). Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"deactivationDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the benefit stops being redeemable (null = never expires). Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"deletionDate":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When the benefit is removed from the pass (null = never removed). Accepts ISO 8601 date-time string or Unix epoch seconds in request inputs. Responses are serialized as ISO 8601 date-time strings."},"originProcessId":{"type":["null","string"],"description":"The `origin.processId`: the issuing benefit template id, or the integration's process id."},"lastMovement":{"description":"The latest movement - typically the last redemption - so a row can show it without loading the history.","$ref":"#/components/schemas/BenefitMovementSummary"},"movementCount":{"type":"integer","description":"Number of movements, the opening one included.","format":"int32"},"tags":{"type":"array","items":{"type":"string"},"description":"The benefit's tags, for segmenting and reporting."}},"additionalProperties":false,"description":"A benefit and its pass, flattened into one row."},"BenefitType":{"enum":["oneTime","unlimited","multiUse"],"type":"string","description":"How a benefit is consumed, which decides what its movements mean and when it is used up."},"BenefitMovementSummary":{"type":"object","properties":{"movementId":{"type":"string","description":"Movement id."},"date":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","format":"int64"}],"description":"When it happened. 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 to the balance: positive credits, negative redeems.","format":"double"},"remarks":{"type":["null","string"],"description":"Optional note."}},"additionalProperties":false,"description":"Summary of a benefit movement."},"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}/benefits":{"get":{"tags":["Benefits"],"summary":"List benefits across passes","description":"Flat, paginated list, each row enriched with its pass (pass type, identifiers, metadata).\nBenefit filter fields: `benefitId`, `passId`, `origin.processId` (contains, starts with, ends with, equals, not equals, in, is empty), `type` (equals only); dates `creationDate`, `lastModificationDate`, `activationDate`, `deactivationDate`, `deletionDate` (equals, greater/less than, or equal).\nBenefit sort fields: `benefitId`, `passId`, `type`, `value` and the five date fields.\nThe field `search` (operator `contains` only) matches a benefit when any of several text fields contains the text, ignoring case: the first value is the text, the following ones name the fields to look in (`benefitId`, `passId`, `origin.processId`), defaulting to all three.\nPass filter/sort fields: `passType`, `passCreationDate`, `passLastUpdateDate`, `identifiers.*`, `metadata.*`; refused with 400 when they match too many rows, so narrow with benefit filters.\nTotal count is returned in the `x-pagination-total` header.\nExample: `?pageIndex=0&pageSize=20&filter[0].field=origin.processId&filter[0].operator=equals&filter[0].value=benefit-template-id`","parameters":[{"name":"pageIndex","in":"query","description":"Zero-based page index.","schema":{"type":"integer","format":"int32","default":0}},{"name":"pageSize","in":"query","description":"Benefits per page (1-200).","schema":{"maximum":200,"minimum":1,"type":"integer","format":"int32","default":20}},{"name":"filter","in":"query","description":"Filters on benefit or pass fields.","schema":{"type":"array","items":{"description":"One condition on passes. Several conditions must all hold.","$ref":"#/components/schemas/FilterModel"}}},{"name":"sortBy","in":"query","description":"Sort descriptors; unordered when absent.","schema":{"type":"array","items":{"description":"One sort key for pass queries. Several keys apply in order, the first one being the primary sort.","$ref":"#/components/schemas/SortModel"}}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Benefits returned.","content":{"text/plain":{"schema":{"type":"array","items":{"description":"A benefit and its pass, flattened into one row.","$ref":"#/components/schemas/BenefitWithPassRow"}}},"application/json":{"schema":{"type":"array","items":{"description":"A benefit and its pass, flattened into one row.","$ref":"#/components/schemas/BenefitWithPassRow"}}},"text/json":{"schema":{"type":"array","items":{"description":"A benefit and its pass, flattened into one row.","$ref":"#/components/schemas/BenefitWithPassRow"}}}}},"400":{"description":"pageSize outside 1-200, unknown filter/sort field or unsupported operator, invalid `type` or date value, or a pass-field filter/sort matching too many rows.","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.pass:read</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"}]}}}}}}}}}
````

## Download benefits export

> Returns the xlsx for a token from \`POST export/token\`. The token is the credential: no Authorization header needed.

```json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Benefits"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"paths":{"/api/{tenantId}/benefits/export/download":{"get":{"tags":["Benefits"],"summary":"Download benefits export","description":"Returns the xlsx for a token from `POST export/token`. The token is the credential: no Authorization header needed.","parameters":[{"name":"token","in":"query","description":"Token from `POST export/token`.","schema":{"type":"string"}},{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Excel file returned."},"400":{"description":"Token missing, or its filters are refused (same reasons as `GET /benefits`).","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":"Token invalid or expired.","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":{"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":{}}}}}
```

## Create benefits export link

> Returns an Excel download URL valid 30 minutes, applying the filters and sorts sent here. The file has one row per benefit with the columns of \`GET /benefits\`.

````json
{"openapi":"3.1.1","info":{"title":"Neostore internal API","version":"v1"},"tags":[{"name":"Benefits"}],"servers":[{"url":"https://app.neostore.cloud","description":"Production Server"},{"url":"https://app-qa.neostore.cloud","description":"Staging Server"}],"security":[{"admin-bearer":["tenant.pass: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":{"ExportTokenRequest":{"type":"object","properties":{"filters":{"type":["null","array"],"items":{"description":"One condition on passes. Several conditions must all hold.","$ref":"#/components/schemas/FilterModel"},"description":"The filters of `GET benefits`, with the same fields and operators. Omit to export every benefit."},"sortBys":{"type":["null","array"],"items":{"description":"One sort key for pass queries. Several keys apply in order, the first one being the primary sort.","$ref":"#/components/schemas/SortModel"},"description":"The sort descriptors of `GET benefits`. Omit for an unordered export."}},"additionalProperties":false,"description":"Export token request body."},"FilterModel":{"type":"object","properties":{"field":{"type":"string","description":"`id`, `passType`, `themeId`, `creationDate` and `lastUpdateDate` (UTC), `installationStatus` (installed wallets concatenated: `\"\"`, `\"apple\"`, `\"google\"` or `\"applegoogle\"`; test with `contains`), `identifiers.{key}`, or `metadata.{key}` (compared as the type the tenant's metadata configuration gives it)."},"operator":{"description":"Comparison operator. Required.","$ref":"#/components/schemas/FilterModelOperator"},"value":{"type":["null","array"],"items":{"type":"string"},"description":"Values to compare, as repeated `value` query parameters (several only for `in`/`notIn`). Numbers use `.` as decimal separator, booleans are `true`/`false`, dates are ISO 8601 with timezone.\nA value containing `{{`, `{%` or `{#` is first rendered as a Liquid template (`{{ 'now' | date: '%Y-%m-%d' }}`).\n<example>```\nGET /passes?filter[0].field=passType&filter[0].operator=in&filter[0].value=boarding&filter[0].value=loyalty\n```</example>"}},"additionalProperties":false,"description":"One condition on passes. Several conditions must all hold."},"FilterModelOperator":{"enum":["Contains","StartsWith","EndsWith","Equals","IsEmpty","IsNotEmpty","NotEquals","In","NotIn","GreaterThan","LessThan","GreaterThanOrEqual","LessThanOrEqual"],"type":"string","description":"How a pass filter compares the field with its value."},"SortModel":{"type":"object","properties":{"field":{"type":"string","description":"`id`, `passType`, `themeId`, `creationDate`, `lastUpdateDate`, `apple`,\n            `google` (installation data of that wallet), `identifiers.{key}` or `metadata.{key}`; a datetime\n            metadata field sorts chronologically. Any other field is refused with a 400."},"direction":{"description":"`ASC` or `DESC`.","$ref":"#/components/schemas/SortModelDirection"}},"additionalProperties":false,"description":"One sort key for pass queries. Several keys apply in order, the first one being the primary sort."},"SortModelDirection":{"enum":[0,1],"type":"integer","description":"Sort direction for pass list queries, sent as `ASC` or `DESC`.","format":"int32"},"BenefitExportTokenResponse":{"type":"object","properties":{"downloadUrl":{"type":"string","description":"Absolute URL of `GET export/download`, valid 30 minutes. It carries its own credential: keep it private."}},"additionalProperties":false,"description":"Export download link."},"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}/benefits/export/token":{"post":{"tags":["Benefits"],"summary":"Create benefits export link","description":"Returns an Excel download URL valid 30 minutes, applying the filters and sorts sent here. The file has one row per benefit with the columns of `GET /benefits`.","parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Filters and sorts of the export.","content":{"application/json":{"schema":{"description":"Export token request body.","$ref":"#/components/schemas/ExportTokenRequest"}},"text/json":{"schema":{"description":"Export token request body.","$ref":"#/components/schemas/ExportTokenRequest"}},"application/*+json":{"schema":{"description":"Export token request body.","$ref":"#/components/schemas/ExportTokenRequest"}}}},"responses":{"200":{"description":"Download URL created.","content":{"text/plain":{"schema":{"description":"Export download link.","$ref":"#/components/schemas/BenefitExportTokenResponse"}},"application/json":{"schema":{"description":"Export download link.","$ref":"#/components/schemas/BenefitExportTokenResponse"}},"text/json":{"schema":{"description":"Export download link.","$ref":"#/components/schemas/BenefitExportTokenResponse"}}}},"400":{"description":"Unknown filter/sort field or unsupported operator, invalid `type` or date value, or a pass-field filter/sort matching too many rows.","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.pass:read</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/pass-management/benefits.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.
