Search tickets
const url = 'https://api.muninx.com/search';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"q":"expired login link","per-page":20,"page":1,"group-limit":3,"include-preview":false,"filters":{"kind":["title"],"author-id":"example","created-at-from":1,"created-at-to":1}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.muninx.com/search \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "q": "expired login link", "per-page": 20, "page": 1, "group-limit": 3, "include-preview": false, "filters": { "kind": [ "title" ], "author-id": "example", "created-at-from": 1, "created-at-to": 1 } }'Searches ticket content and returns grouped ticket IDs. Results are scoped by JWT tenant, user, and role claims.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”object
Example
expired login linkResults per page. Values above 100 are clamped to 100; missing or non-positive values default to 20.
Example
20One-based page number. Missing or non-positive values default to 1.
Example
1Maximum matching documents considered per ticket group. Values above 25 are clamped to 25; missing or non-positive values default to 3.
Example
3Return a short snippet from the matched content instead of the full body.
object
Restrict search to specific ticket document kinds. Customer users never receive internal messages.
Inclusive lower bound for the document creation Unix timestamp.
Inclusive upper bound for the document creation Unix timestamp.
Responses
Section titled “ Responses ”Grouped ticket search results
object
Ticket IDs grouped from matching Typesense documents.
Typesense filter expression applied after RBAC and request filters.
Next page number when more results are available; omitted on the last page.
Optional snippets keyed by ticket id when include-preview is true. Includes the document kind that matched (message, title, etc.).
object
object
Example
{ "found": 42, "previews": { "additionalProperty": { "kind": "title" } }}Invalid request body, invalid filters, missing claims, or invalid query.
RFC 9457 problem details response emitted by the shared error middleware.
object
Example
{ "title": "Bad Request", "status": 400, "detail": "search query cannot be empty", "instance": "/search", "code": "missing_query"}Missing, invalid, or unauthorized bearer token.
RFC 9457 problem details response emitted by the shared error middleware.
object
Example
{ "title": "Bad Request", "status": 400, "detail": "search query cannot be empty", "instance": "/search", "code": "missing_query"}Search backend or unexpected server failure.
RFC 9457 problem details response emitted by the shared error middleware.
object
Example
{ "title": "Bad Request", "status": 400, "detail": "search query cannot be empty", "instance": "/search", "code": "missing_query"}