> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mesolab.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Recommend assessments

> Suggest assessment methods that suit a set of learning outcomes.

The assessment counterpart to
[`/recommend-lo`](https://docs.mesolab.ai/api-reference/curriculum/recommend-lo). Given the outcomes a
unit covers, returns the assessment methods that best suit them, ranked.

Where `/recommend-lo` matches on a topic string, this matches on the **outcomes
themselves** — their text is concatenated into one query and embedded, so the
suggestions follow what the unit actually teaches.

## Request

**subjectCode** `string` *required*

Specification code for the subject, e.g. `"ENG"`. Same
[supported set](https://docs.mesolab.ai/api-reference/curriculum/recommend-lo.md#supported-subjects) as
`/recommend-lo`.

**learningOutcomes** `object[]` *required*

The outcomes to assess. Must be non-empty.

**properties**

**id** `string` *required*

Identifier for the outcome.

**text** `string` *required*

Outcome text. This is what gets embedded.

**reference** `string`

Specification reference, e.g. `"1.4"`.

**k** `number` (default: 10)

How many recommendations to return. Note the default is `10` here, against
`5` for `/recommend-lo`.

```bash cURL theme={null}
curl -X POST "$BASE_URL/recommend-as" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "subjectCode": "EGN",
        "learningOutcomes": [
          { "id": "lo-1", "reference": "1.4",
            "text": "recognise the origins of everyday materials" }
        ],
        "k": 10
      }'
```

## Response

**success** `boolean`

`true` on a successful match.

**recommendations** `object[]`

Ranked assessment methods, best fit first. Each entry carries
`assessment_name`, `description`, `category`, `skills_assessed`, `depth`,
`timing` and a `score`.

**metadata** `object`

Echoes `subjectCode`, plus `learningOutcomeCount`, `count` and an ISO
`timestamp`.

```json Response theme={null}
{
  "success": true,
  "recommendations": [
    {
      "id": 17,
      "subject_code": "EGN",
      "assessment_name": "Project-based assessment",
      "description": "Students design and build to a brief over several lessons.",
      "category": "Summative",
      "skills_assessed": "Design, fabrication, evaluation",
      "depth": "Deep",
      "timing": "End of unit",
      "score": 0.79
    }
  ],
  "metadata": {
    "subjectCode": "EGN",
    "learningOutcomeCount": 1,
    "count": 10,
    "timestamp": "2026-08-21T12:00:00.000Z"
  }
}
```

## Errors

Same coded-error convention as `/recommend-lo`, with one extra case.

| `code` | Status | Cause |
| - | - | - |
| `METHOD_NOT_ALLOWED` | 405 | Anything other than `POST`. |
| `MISSING_SUBJECT_CODE` | 400 | `subjectCode` absent. |
| `MISSING_LEARNING_OUTCOMES` | 400 | `learningOutcomes` absent, not an array, or empty. |
| `UNSUPPORTED_SUBJECT` | 400 | Not in the supported list. |
| `EMPTY_LEARNING_OUTCOMES` | 400 | Outcomes were supplied, but every `text` was blank once trimmed. |

> [!WARNING]
>
> `MISSING_LEARNING_OUTCOMES` and `EMPTY_LEARNING_OUTCOMES` are different
> failures. The first means you sent no outcomes; the second means you sent
> outcomes whose `text` was empty, so there was nothing to embed.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.