---
title: "Autocomplete-driven keyword suggestions"
method: GET
path: "/api/v1/keywords/suggestions"
tags: ["Keywords"]
---

# Autocomplete-driven keyword suggestions

`GET /api/v1/keywords/suggestions`

## Request

- Base URL: `https://api.trysonar.app`
- URL: `https://api.trysonar.app/api/v1/keywords/suggestions`
- Auth: one of:
  - none
  - HTTP bearer

Autocomplete-driven keyword suggestions

## Query parameters

- `q` string, required
- `store` 'ios' | 'android', required
- `country` string

## Response `200`

Autocomplete suggestions. When the store is throttling, stored terms starting with the seed (3+ characters) that Sonar has seen in autocomplete within 90 days, ranked by popularity, with `meta.stale` + `meta.partial`.

- object
  - `data` object[], required
    - `term` string
    - `priority` integer
  - `meta` StaleMeta: Envelope `meta`, present only when the store was throttling and the endpoint answered from Sonar's stored copy instead of failing (apps/lookup, apps/search, apps/reviews, keywords/suggestions). Live answers carry no `meta`. A stored copy is billed like any 200.
    - `stale` true, required
    - `stale_as_of` string, nullable, required: When the stored copy was captured: ISO 8601 timestamp or YYYY-MM-DD date; null when unknown.
    - `partial` boolean, required: The copy holds less than a live call would: fewer results or fields (stored search results stop at the top 10, name/developer/icon only), or a different order (stored suggestions are ranked by popularity).
    - `stale_country` string, nullable: App lookup only: the storefront the stored copy came from, when it differs from the request.
    - `retry_after_seconds` integer, required: When live data is expected again.
    - `note` string, required: One sentence explaining what was served — safe to show to a user.

## Other responses

- `400`: Missing or invalid request parameters
- `401`: Missing or invalid API key
- `429`: Rate limited — see `error.reason`: daily_limit (Indie 1,000, Agency 5,000, trial 150 requests/day, resets 00:00 UTC; see `reset_at`), anonymous_daily_limit / batch_too_large (keyless free tier), store_rate_limited or concurrency_limit (transient, honor `retry_after_seconds`)
- `500`: Unexpected server error

---

[API](https://skmtc.dev/trysonar/apis/sonar-api.md) · [All operations](https://skmtc.dev/trysonar/apis/sonar-api/llms.txt) · [OpenAPI document](https://skmtc.dev/trysonar/apis/sonar-api/revisions/bf1d31dadd5f?raw)
