---
title: "Player Missions"
method: GET
path: "/missions/brand/{brandId}/player/{playerId}"
tags: ["Missions"]
---

# Player Missions

`GET /missions/brand/{brandId}/player/{playerId}`

Active and completed missions for the player. Each item pairs an `objective` (the task definition) with the player's `mission` progress record and the `rewards` granted on completion.

> 📘 Render filtering
>
> Only render items where `objective.status === "active"`. The list may include objectives with status `draft`, `archived`, or `deleted` that should not be displayed to players.

## Path parameters

- `brandId` string, uuid, required
- `playerId` string, required

## Response `200`

Array of mission items.

- MissionItem[]
  - `objective` Objective
    - `id` string, uuid — UUID of the objective. Use as `objectiveId` in unlock/claim calls.
    - `name` string — Title shown to the player.
    - `description` string, nullable — Optional longer description.
    - `type` 'task' | 'mission' — `task` (standalone) or `mission` (part of a mission group).
    - `goal` integer — Target value the player must reach (e.g. 5 purchases).
    - `icon` string, nullable — URL to the mission icon. Validate it is an `https` URL from a trusted host before using in `src`/`href`.
    - `status` 'active' | 'draft' | 'archived' | 'deleted' — Lifecycle of the objective definition. Only render `active`.
    - `isRepeatable` boolean — Whether the mission can be completed more than once.
    - `repeatLimit` integer, nullable — Maximum number of times the mission can be repeated. `null` = unlimited.
    - `cooldownPeriodSeconds` integer, nullable — Seconds the player must wait between repeats. `null` = no cooldown.
    - `unlockCurrencyId` string, uuid, nullable — UUID of the currency required to unlock. `null` if no unlock cost.
    - `unlockAmount` integer, nullable — Amount of that currency required to unlock. `null` if no unlock cost.
  - `mission` Mission, nullable — Player's progress record. `null` when the player has never started this objective (render as "Not started").
    - `status` 'active' | 'completed' | 'claimed' | 'locked' | 'failed' — Player's current state for this mission. `active` show progress bar; `completed` show Claim button; `claimed` show completion state; `locked` show Unlock button with cost; `failed` show failed state.
    - `progress` integer — How far the player has gotten toward `objective.goal`.
    - `objectiveId` string, uuid — Links back to the parent objective.
    - `playerId` string
    - `repeatCount` integer — How many times the player has already completed and claimed this repeatable mission.
    - `lastRepeated` string, date-time, nullable — ISO 8601 timestamp of the last completion. Use with `cooldownPeriodSeconds` to show next-available time.
    - `version` integer — Internal optimistic-lock counter. Not for display.
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
  - `rewards` MissionRewardRef[]
    - `rewardTypeId` string, uuid — UUID of the reward type. Look up name and icon from the rewards catalog using this value.
    - `amount` integer — Quantity of the reward granted on completion.
    - `repeatable` boolean — Whether the reward is granted on every repeat of a repeatable mission, or only on first claim.

## Other responses

- `404` — Resource not found (brand, player, mission, leaderboard, etc.).

---

[API](https://skmtc.net/optimove/apis/optimove-api.md) · [All operations](https://skmtc.net/optimove/apis/optimove-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/optimove/optimove-api/revisions/fc55c5b1bec5/schema)
