---
title: "Programs"
description: "List and filter programs, load program details, and discover tags and child courses."
source: "https://docs.blend-ed.com/blendx-discovery/programs/"
---

# Programs

Program routes accept an authenticated user or the server-side `clientapisecret`.

## List programs
```
GET /blendxapi/discovery/programs/
```

| Query parameter | Default | Description |
| --- | --- | --- |
| `limit` | `8` | Page size, clamped to 1–100. |
| `page` | `1` | 1-indexed page number. |
| `search` | empty | Search `name`, `description`, or `about`. |
| `org` | empty | Comma-separated organisation names. |
| `tags` | empty | Comma-separated tags; a match on any tag is included. |
| `order_by` | `created_at.desc` | `{field}.{direction}`; `display_name` maps to `name`. |

```
curl "https://<LMS_HOST>/blendxapi/discovery/programs/?org=Acme&tags=leadership&page=1" \  -H "clientapisecret: $BLENDX_CLIENT_API_SECRET"
```
The response envelope contains `programs`, `total_count`, `has_more`, `limit`, `page`, and `offset`. It can include `partial_errors` if a child course could not be serialized.

### Program list fields

| Field | Description |
| --- | --- |
| `id` | BlendX program UUID used by detail and checkout requests. |
| `name` | Display name. |
| `description` | Short program description. |
| `about` | Longer program information. |
| `achievements` | Outcomes or achievements associated with the program. |
| `duration`, `duration_metric` | Duration value and its unit. `duration_metric` is present on filtered-query results. |
| `image` | Program image reference. |
| `price` | Regionally adjusted program price. |
| `originalPrice`, `discountPct` | Original price and applied regional discount. |
| `nativeCurrency`, `nativeAmount` | Optional local-currency display hints. |
| `organisation` | Object containing the organisation name and, when available, `logo_url` and `favicon_url`. |
| `tags` | Tag-name array. |
| `avg_rating` | Average program rating. |
| `courses` | Serialized child-course array, including catalog modes, metadata, and regional pricing. |

Each list response child course contains `id`, `openedx_course_id`, `display_name`, `short_description`, `course_image_url`, `start`, `end`, `effort`, `enrollment_start`, `enrollment_end`, `price`, `course_mode`, `available_course_modes`, `organisation`, `organisation_logo_url`, `organisation_favicon_url`, `is_invite_only`, `is_published`, `overview`, and regional price fields. See [Courses](/blendx-discovery/courses/) for the mode and regional-price shapes.

## Get program details
```
GET /blendxapi/discovery/program/{program_id}/
```
The response is an object with these top-level fields:

| Field | Description |
| --- | --- |
| `programs` | Array containing the matching program record. |
| `program_courses` | Serialized child-course array. |
| `avg_rating` | Average rating for the program UUID. |
| `reviews` | Program review array. |
| `partial_errors` | Optional details when some child courses could not be loaded. |

Each record in `programs` contains `id`, `name`, `price`, `about`, `achievements`, `description`, `duration`, `duration_metric`, `image`, `invite_only`, `published`, `organisation`, and `organisation_id`. The `organisation` object contains `id` and `name`. Regional pricing adds `originalPrice`, `discountPct`, and, when available, `nativeCurrency` and `nativeAmount` to the program record.

Use the BlendX program UUID—not a course key—in this URL and in a checkout item whose `type` is `program`.

## Discover tags
```
GET /blendxapi/discovery/tags/
```

| Query parameter | Default | Description |
| --- | --- | --- |
| `search` | empty | Filter tag names. |
| `include_courses` | `true` | Include courses assigned to each tag. |
| `include_programs` | `true` | Include programs assigned to each tag. |

The response has a `tags` array. Each entry contains `tag`, `courses`, and `programs`; a disabled relationship is returned as an empty array.

A directly tagged course contains `id`, `openedx_course_id`, `display_name`, `short_description`, `overview`, `course_image_url`, `start`, `end`, `effort`, `enrollment_start`, `enrollment_end`, `price`, `organisation`, `language`, `self_paced`, `org`, `number`, `link_to_course`, and regional price fields. A program entry contains `id`, `name`, `description`, `about`, `organisation`, `courses_count`, and `courses`. When both relationship flags are enabled, each program’s `courses` array contains its course catalog data.

For a lightweight filter menu, set both include flags to `false`.
