Queue an async ReviewData competitive report comparing one store location against 1-2 competitors on one shared publisher (review site). Counts 1 unit against the store's competitive_analysis plan quota at submit; hard-stop plans 403 once exhausted, soft-stop plans bill the call as overage. Deduped against an identical non-failed report unless you set force. Returns immediately with status: queued + task_id; the completed report arrives via the COMPETITIVE_REPORT_RESULT webhook (poll Check status (poll until complete)).
Auth: Both — authentication. The route lives directly under the authenticated group (not behind partner-only access), so any authenticated user (Partner or Account) may call it. The target store must sit inside your own account tree, keyed on store_id, which walks the auth user's company hierarchy — so a Partner reaches any store in its tree, an Account only its own. review_site_id must additionally be linked to the store (checked during validation).
Rate limit: No rate limit.
Request
- Body:
| Field | Type | Required | Notes |
|---|---|---|---|
store_id | integer | yes | Must be an existing location inside your own account tree (must be in caller's company hierarchy). |
review_site_id | integer | yes | Must be an existing review site and must also be linked to the store. |
year | integer | yes | between:2000,2100. |
month | integer | no | between:1,12; omit for a full-year report. |
theme | string | yes | max:64. A theme slug from List available themes (e.g. home-services); general is no longer accepted by the reporting engine. |
competitors | array | yes | 1-2 items. |
competitors.*.name | string | yes | max:255. |
competitors.*.profile_key | string (url) | yes | max:1024. Competitor's review-page URL on the publisher. |
competitors.*.id | string | no | max:255. |
competitors.*.phone | string | no | max:64. |
competitors.*.description | string | no | max:2048. |
competitors.*.tags | array | no | max:30, each tag string max:64. |
competitors.*.address | object | no | optional street/city/state/zip/country strings. |
force | boolean | no | Explicit recall — bypasses dedup and bills a fresh RD run. |
Response — { data. } envelope (HTTP 202; also carries plan feature headers via withFeatureHeaders for competitive_analysis). Built by present.
competitive_report_id(integer) — ourcompetitive_reportsrow id; use it with Check status (poll until complete).store_id(integer)review_site_id(integer|null)publisher(string) — resolved publisher slug.year(integer)month(integer|null)theme(string)status(string) — typicallyqueued(orpending/existing status on dedup).task_id(string|null) — RD task id.competitors(array) — normalised competitor blocks.competitor_count(integer)review_count(integer|null)report_data(object|null) — null until the webhook lands.failure_reason(string|null)failure_details(mixed|null)completed_at(string|null, ISO 8601)remaining(integer|null) — quota left after this submit (merged viaextra).overage(boolean) — whether this call was billed as overage.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
