Search titles
const url = 'https://api.doesitarm.com/v1/titles?query=photoshop&kind=app&limit=50';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.doesitarm.com/v1/titles?query=photoshop&kind=app&limit=50'Resolve a fuzzy query to ranked candidate titles, each with its best-known
status. This is the disambiguation surface; GET /verdicts/{identifier} is
the cacheable answer surface. Search never returns 409 — ambiguity is its
normal 200.
Mirrors the MCP tool search_titles.
Authorizations
Section titled “Authorizations ”- None
- ApiKeyAuth
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”The search string.
Example
photoshopRestrict to apps or games.
Page size (default 50, max 100).
Opaque pagination cursor from the previous page’s pagination.nextCursor. Do not parse it.
Responses
Section titled “ Responses ”Ranked candidate titles.
A page of search results.
object
One candidate from a search, with its best-known status and a match score.
object
Best-known status for the candidate (may be unknown).
Match score from 0 to 1.
Cursor-based pagination envelope. The cursor is opaque — never parse it.
object
Opaque cursor for the next page; null at the end.
Example
{ "data": [ { "slug": "figma", "title": "Figma", "kind": "app", "status": "native", "score": 0.97 }, { "slug": "figment", "title": "Figment", "kind": "app", "status": "unknown", "score": 0.41 } ], "pagination": { "nextCursor": null, "hasMore": false }}Headers
Section titled “Headers ”Requests allowed in the current window.
Requests left in the current window.
Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).
A parameter was invalid. (HTTP 422.)
The single error envelope used by every 4xx/5xx. Agents branch on code;
humans read message. No 3xx ever carries this body.
object
object
Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)
Fine-grained branch value.
Human-readable explanation.
Present on ambiguous — candidate titles to disambiguate with.
object
Quote this to support.
Example
{ "error": { "type": "invalid_request", "code": "invalid_param", "message": "Unknown chip 'm9'. Allowed: apple_silicon, m1, m2, m3, m4.", "docsUrl": "https://docs.doesitarm.com/api/errors/", "requestId": "req_01J5K6Q8ZA" }}Rate limit exceeded. (HTTP 429.)
The single error envelope used by every 4xx/5xx. Agents branch on code;
humans read message. No 3xx ever carries this body.
object
object
Coarse family. (‘ambiguous’ is a code, carried under type invalid_request.)
Fine-grained branch value.
Human-readable explanation.
Present on ambiguous — candidate titles to disambiguate with.
object
Quote this to support.
Example
{ "error": { "type": "rate_limited", "code": "rate_limited", "message": "Free tier allows 60 requests/min. Retry in 30s or upgrade.", "docsUrl": "https://docs.doesitarm.com/api/rate-limits/", "upgradeUrl": "https://doesitarm.com/early-access", "requestId": "req_01J5K6Q8ZD" }}Headers
Section titled “Headers ”Seconds to wait before retrying. Sent on 429.
Requests allowed in the current window.
Requests left in the current window.
Seconds until the window resets (IETF ratelimit-headers, pre-08 three-header form).