A single quote in the search term changes the result count and a time-based payload delays the response by the injected amount, which shows the term reaches the database unescaped.
Request
GET /api/v2/search?q=acme'%20AND%20pg_sleep(5)-- Host: staging.acme.dev Authorization: Bearer ‹member›
Response
HTTP/1.1 200 OK (response delayed 5.02 s; baseline 0.08 s)
How to fix
Pass the search term as a bound parameter instead of building the SQL string, and add the endpoint to the integration tests with the payload above.