---
title: "List missions"
method: GET
path: "/v1/{domainId}/missions"
tags: ["missions"]
---

# List missions

`GET /v1/{domainId}/missions`

## Request

- Base URL: `https://api.morningscore.io`
- URL: `https://api.morningscore.io/v1/{domainId}/missions`
- Auth: HTTP bearer

Lists missions for a domain. `status` maps to Laravel: `current`, `completed`, `archived` (`is_archived`), `active` (`is_not_archived`), or `suggested`. Optional `category` filters by keywords, links, onsite, ai, or onboarding.

## Path parameters

- `domainId` string, required

## Response `200`

200

- object: Paginated mission list (`total`, `page`, `per_page`, `data`).
  - `total` number, required
  - `page` number, required
  - `per_page` number, required
  - `data` object[], required
    - `is_disabled` boolean, required
    - `xp` number, nullable, required
    - `xp_claimed_at` string, nullable, required: ISO 8601 datetime string from Laravel serialization.
    - `category` 'keywords' | 'links' | 'onsite' | 'ai' | 'custom' | 'onboarding' | 'unknown', required: High-level mission category derived from mission type.
    - `translated_category` string, required
    - `completed_at` string, nullable, required: ISO 8601 datetime string from Laravel serialization.
    - `archived_at` string, nullable, required: ISO 8601 datetime string from Laravel serialization.
    - `checking_status` boolean, required
    - `created_at` string, required: ISO 8601 datetime string from Laravel serialization.
    - `description` string, required
    - `difficulty` number, required
    - `roi_currency` number, required: Converted ROI monetary value (Laravel `getRoiCurrencyAttribute()` returns a float despite the name; not an ISO currency code).
    - `roi_slug` 'epic' | 'amazing' | 'great' | 'good' | 'fine' | 'small_fix', required: ROI tier label derived from `increase_ratio`.
    - `type` 'keywords_target_position' | 'keywords_morningscore' | 'keywords_gsc' | 'links_count' | 'links_count_rating' | 'links_specific' | 'links_rank' | 'onsite_page_tasks' | 'health_score' | 'health_validator' | 'ai_geo_score_low' | 'ai_geo_health_weak' | 'geo_prompt_answer' | 'custom' | 'onboarding_verify_account' | 'onboarding_keywords_count' | 'onboarding_competitors_count' | 'onboarding_keyword_research_count' | 'onboarding_added_missions_count' | 'onboarding_scan_website_count' | 'onboarding_prompts_count' | 'onboarding_geo_score' | 'onboarding_article_count' | 'onboarding_growth_opportunities' | 'onboarding_tooltips_clicked_count' | 'onboarding_guides_opened_count' | 'onboarding_add_domain' | 'onboarding_watch_intro_video', required: Mission type slug.
    - `is_suggested` boolean, required
    - `keyword` string, nullable, required
    - `kwHash` string, nullable, required
    - `progress_ratio` number, required
    - `roi` number, required
    - `roi_recent` number, required
    - `current` number, required
    - `target` number, required
    - `target_currency` string, required
    - `target_diff` number, required
    - `hostname` string, nullable, required
    - `page` string, nullable, required
    - `details` string, nullable
    - `prompt` string, nullable: Tracked prompt for `geo_prompt_answer` missions.
    - `onsite_page_id` union, required: Onsite page id from mission parameters (string or numeric depending on storage).
      - string
      - number
    - `notes_count` integer: Number of notes on the mission. Note bodies are not included; fetch them from the mission notes endpoint.

## Other responses

- `401`: 401
- `404`: 404
- `429`: 429
- `500`: 500

---

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