REST API

# List feature plans

`GET https://mbj-api.com/v1/feature_plans`

Lists published plans of every status, including completed and closed; drafts are excluded. No debug filter. Localized by Preferred-Languages or Language-Code with original-content fallback. Search matches all query words as prefixes in the original or any translated title/body. Pagination returns a JSON array, with counts and navigation in response headers. Page 1 is valid for an empty list.

## Request

```sh
curl --include --request GET 'https://mbj-api.com/v1/feature_plans' \
  --header 'Authorization: Token token=YOUR_API_KEY' \
  --header 'Identity-Anonymous-ID: $MBJAnonymousID:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
```

## Parameters

| Name / location | Required / type | Details |
| --- | --- | --- |
| `search` / query | No / string | Full-text search on original and translated title and body (case-insensitive, partial matches) Example: `"export pdf"` |
| `statuses[]` / query | No / array of FeaturePlanStatus | Repeat the key, for example statuses[]=open&statuses[]=planned. Case-sensitive OR filter; unknown values match nothing. Omit for all statuses. Example: `["open","planned"]` |
| `sort` / query | No / string | Defaults to updated\_desc for absent or unknown values. created sorts newest first; score aliases score\_desc. trending orders by votes from the last 30 days, then by score, then newest first; initial votes don't count. Status sorts alphabetically. roadmap orders in\_progress, planned, under\_review, then all others, with newest updates first within groups; it does not filter statuses. Values: `created, score, trending, title_asc, title_desc, status_asc, status_desc, score_asc, score_desc, updated_asc, updated_desc, roadmap` Default: `updated_desc` |
| `limit` / query | No / integer | Items per page; converted to an integer and clamped to 1–100. Omitted: 20; nonnumeric values: 1. Default: `20` |
| `page` / query | No / integer | One-based page number. Omission defaults to 1. Nonnumeric, fractional, and non-positive values return 400; pages beyond the last available page return 404. Page 1 supports an empty result set. Default: `1` Example: `1` |

Headers: `Identity-Anonymous-ID` (required), `Identity-External-ID`, `Preferred-Languages`, `Language-Code`. See [Headers](https://docs.mobilejoe.dev/api.md#headers).

## Responses

### 200 — Successful response

| Response header | Type / details |
| --- | --- |
| `current-page` | integer — Current page number |
| `page-items` | integer — Configured items per page |
| `total-count` | integer — Total matching plans |
| `total-pages` | integer — Total pages |
| `link` | string — Pagination links with rel="first", "prev", "next", and "last" as applicable. |

`application/json` · [array of FeaturePlan schema](https://docs.mobilejoe.dev/api/schemas.md)

```json
[
  {
    "id": 1,
    "title": "PDF Export",
    "body": "Allow exporting data to PDF format for offline viewing",
    "score": 42,
    "status": "open",
    "voted": false,
    "created_at": "2024-01-08T12:00:00Z",
    "updated_at": "2024-01-08T12:00:00Z"
  }
]
```

Errors: 400, 401, 403, 404, 422, and 429. See [Errors](https://docs.mobilejoe.dev/api.md#errors).
