# Choose products or request help inside the app (/api-reference/survey-channels/actNativeMobileBuyer)

`POST /public/retention/mobile-survey/actions`

Base URL: `https://api.bitelio.com`

Revalidates device session and mobile permission inside the action transaction. REQUESTED returns up to three eligible product choices; VIEWED records deliberate viewing; SELECTED/CHECKOUT require an exact returned product and variant and recheck current stock and policy. HELP REQUESTED shows reviewed guidance; HELP_REQUESTED creates support only if canContact, RESOLVED confirms resolution. No survey submission is required. Never invent product ids or a checkout URL. HELP/RESOLVED must echo caseId and updatedAt from the displayed helpRevision; a changed case is rejected with HELP_REPLY_CONFLICT. Never generate these values locally.

## Header parameters

- `X-Bitelio-Device`: string (required)

## Request body

- `action`: enum ("REPEAT" | "DISCOVER" | "HELP") (required)
- `stage`: enum ("REQUESTED" | "VIEWED" | "SELECTED" | "CHECKOUT" | "HELP_REQUESTED" | "RESOLVED") (required)
- `productId`: string
- `variantId`: string
- `caseId`: string — Exact helpRevision.caseId returned for the case shown to the buyer; required only for HELP/RESOLVED.
- `updatedAt`: string (date-time) — Exact helpRevision.updatedAt returned by the API; required only for HELP/RESOLVED.

Example:

```json
{
  "action": "REPEAT",
  "stage": "REQUESTED"
}
```

## Responses

### `200` — Current choices, help, support state or verified checkout URL

```json
null
```

### `400` — Invalid input or unavailable survey

### `404` — Session, permission or survey unavailable

### `429` — Rate limit exceeded; Retry-After gives seconds

### `503` — Rate limiter temporarily unavailable

## Example request

```bash
curl -X POST 'https://api.bitelio.com/public/retention/mobile-survey/actions' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"REPEAT","stage":"REQUESTED"}'
```
