---
title: "Get competitor reasons (v2)"
method: GET
path: "/api/v1/experience/competitor-reasons-v2/{id}"
tags: ["experience"]
---

# Get competitor reasons (v2)

`GET /api/v1/experience/competitor-reasons-v2/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/experience/competitor-reasons-v2/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Get why an Experience campaign's own website won and lost its matched pairs with one competitor from its Brands map, under the same window and segments: exactly the drivers experience_campaign_analytics_get_v9 counts against that competitor on the overview. Over the pairs whose visit of the website is dated in the 30 UTC days ending with the map's results.asOf and that went to a side (a pass beats a failure, and of two passes more stars win; a failure blamed on the shopper decides nothing), a win counts each strength the website's journey carried and a loss each issue, as the issue grouping recorded them from what the scorer wrote, or Not grouped yet for what no grouping run has grouped, counted in pairs. A pair carrying several reasons counts under each.

## Path parameters

- `id` string, uuid, required: The Experience campaign's id

## Query parameters

- `from` string, date-time: The window's start; with to, or neither for all time
- `to` string, date-time: The window's end; with from, or neither for all time
- `widenWhenEmpty` boolean: When no day of the window has one of the campaign's interactions in its 30 days, read all time instead (dateScope.widenedToAllTime says so). Otherwise such a window reports dateScope.outOfRange.
- `segments` string[]: Customer-level entries as axis:id (ids from experience_campaign_segments_get), ANDed across axes; empty reads the whole cohort. Every customer attribute narrows by its own buckets, a store by its customers. An agent entry names one of point11, dots, spark, muse, grok_bot and narrows every figure to that agent's visits (scopeAgent states it); one at most, and with none every agent's visits are read together.
- `agent` 'point11' | 'dots' | 'spark' | 'muse' | 'grok_bot': The segment scope's agent entry (the object form's {axis: agent}): every figure is of that agent's visits alone; absent reads every agent's
- `competitor` string, required: A competitor's website id, from experience_brand_maps_get_v4's competitors[].id

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- ExperienceCompetitorReasonsGetV2Response
  - `datasetKey` string, nullable, required: Names what the reasons were read from, as experience.brand-maps.get's map.datasetKey does: equal while both describe the same window, website and segment scope. Null when the scope holds no interaction or website to read
  - `reasons` object, nullable, required: Null when the scope holds no interaction or website to read
    - `competitor` object, required
      - `id` string, required
      - `name` string, required
    - `win` object[], required: Why the website won its pairs with the competitor, most pairs first
      - `key` string, required: strength:<label> or issue:<label> for what issue grouping recorded, ungrouped:strength or ungrouped:issue for what no grouping run has grouped yet, as experience.campaign-analytics.get.v9's drivers are keyed
      - `label` string, required
      - `pairs` integer, required: The pairs that went to this side carrying it
      - `customers` integer, required: Distinct customers behind those pairs
    - `loss` object[], required: Why the website lost its pairs with the competitor, most pairs first
      - `key` string, required: strength:<label> or issue:<label> for what issue grouping recorded, ungrouped:strength or ungrouped:issue for what no grouping run has grouped yet, as experience.campaign-analytics.get.v9's drivers are keyed
      - `label` string, required
      - `pairs` integer, required: The pairs that went to this side carrying it
      - `customers` integer, required: Distinct customers behind those pairs

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

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