---
title: "Get AEO recommendations"
method: GET
path: "/api/sites/multiscreen/{site_name}/aeo/recommendations"
tags: ["AEO Analytics"]
---

# Get AEO recommendations

`GET /api/sites/multiscreen/{site_name}/aeo/recommendations`

## Request

- Base URL: `https://api.duda.co`
- URL: `https://api.duda.co/api/sites/multiscreen/{site_name}/aeo/recommendations`
- Auth: HTTP basic

Returns recommendations for improving the site's visibility in AI answers, sorted by impact (`HIGH`, then `MEDIUM`, then `LOW`). Recommendations always cover the last 30 days up to today (UTC); there are no date parameters.

- `type=on-site` returns changes to make on the site itself, such as blog posts or page updates. It requires the site's Blog or SEO permission and at least one competitor brand with a domain.
- `type=off-site` returns up to 10 opportunities on third-party sites, such as listicles, comparisons or community sites. `counts` covers only the returned items.

## Path parameters

- `site_name` string, required

## Query parameters

- `type` 'on-site' | 'off-site', required

## Response `200`

OK

- ApiAeoRecommendationsResp
  - `counts` ApiAeoRecommendationCountsResp
    - `high` integer: Number of `HIGH` impact recommendations.
    - `low` integer: Number of `LOW` impact recommendations.
    - `medium` integer: Number of `MEDIUM` impact recommendations.
  - `items` ApiAeoRecommendationResp[]: Recommendations, by impact (`HIGH` first), then by text.
    - `impact` 'HIGH' | 'MEDIUM' | 'LOW': Expected impact of acting on a recommendation.
    - `suggestion` string: What to do.
    - `type` string: Kind of change. On-site: `Blog` or `Site Page`. Off-site: a kind of third-party page (e.g. `Listicle`, `Comparison`, `Article`) or a community site's domain (e.g. `reddit.com`).

## Other responses

- `400`: Bad request. `error_code` is `InvalidInput` and `errors` is empty. - `type` is missing or isn't `on-site` or `off-site`.
- `401`: Unauthorized. The credentials are missing or invalid.
- `403`: Forbidden. `error_code` is `AccessForbidden`, and `errors[0].code` names the cause: - No code (`errors` is empty): the caller can't access the site. - No code (`errors` is empty): `type=on-site` and the caller lacks the site's Blog or SEO permission. - `AeoPlanNotFound`: the account has no active AEO plan.
- `404`: Not found. `error_code` is `ResourceNotExist`, and `errors[0].code` names the cause: - `AeoProjectNotFound`: the site has no AEO project.
- `422`: Unprocessable entity. `error_code` is `InvalidState`, and `errors[0].code` names the cause: - `AeoCompetitorDomainRequired`: `type=on-site` and no competitor brand has a domain. Add one with Add a competitor brand.
- `429`: Too many requests. The rate limit was exceeded.

---

[API](https://skmtc.dev/duda/apis/duda-partner-api.md) - [All operations](https://skmtc.dev/duda/apis/duda-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/duda/apis/duda-partner-api/revisions/52be4d41cb12?raw)
