Skip to main content
Noodle Lifelong Platform API Version 2.0.0
Getting startedIntroductionOverviewDetailsGlossaryAuthenticationEnvironments and choosing a Partner IDHow data moves
Courses APIOverviewDetails on propertiesAny other access rules not covered aboveSample data API loads
Shopping Cart APIOverviewDetails on propertiesAny other access rules not covered aboveSample data API loads
Course property reference
Other objects
WordPress integrationOverviewNoodle CMS Connections – Data held outside the APIDetails

Noodle Lifelong Platform API

Course catalogue and shopping cart endpoints for Noodle partner institutions.

Getting started

Introduction

The Noodle Lifelong Platform (NLP) is the system where Noodle’s partner institutions author and manage their course catalogues. This documentation describes the public endpoints available to partners and to developers building on their behalf.

Overview

There are four topics to find here.

The Courses API returns a partner’s course catalogue — every course they offer, with schedules, pricing, instructors, locations, and enrollment dates. It supports search, filtering, and pagination, and it can return a single course by its slug.

The Shopping Cart API lets a website build a cart on a learner’s behalf: create a cart, add and remove courses, and hand the learner over to NLP to complete checkout and enrollment.

The course property reference documents every property returned on a course object, with the type, permitted values, and an example for each.

How Noodle’s own WordPress integration consumes the API. This is worth reading before planning a project that will replace or rebuild an existing Noodle-built marketing site, because some of the information displayed on those sites originates outside the API.

Details

The sections that follow are ordered for a first read: terminology, authentication, environments, and how data moves, then the material specific to each API, and finally the Engage CMS material. Each section opens with a plain-language overview and follows with the technical detail.

How this document is organised

  1. Glossary, authentication, environments, and data flow — the orientation below, which applies to every endpoint.
  2. All about the Courses API — the catalogue endpoints, their properties, their access rules, and a sample response.
  3. All about the Shopping Cart API — the cart endpoints, their properties, their access rules, and a sample response.
  4. How the Engage CMS integration works — context for projects that replace or extend a Noodle-built marketing site, including the Noodle CMS Connections data those sites hold outside the API.

Glossary

NLP uses a small number of terms in specific ways. Definitions follow Noodle’s platform documentation.

Term Definition
Instance A tenant environment containing the branding, content, settings, and policies for one partner or client, reached at its own URL. Sometimes called a Discover Instance.
Parent instance The organisation-level environment — typically the university itself — whose administrators can view and create instances beneath it.
Child instance An instance created beneath a parent, commonly for a specific population such as a school, programme line, corporate partner, or alumni group.
Partner ID The identifier of an instance. It is also the credential this API uses: the Partner ID is supplied as the API key.
Private label The underlying hosting model. Every NLP instance is branded for its partner, which is unrelated to whether the instance is open or invitation-only.
Microsite The public-facing landing and catalogue pages for an instance. This is the surface a partner’s marketing site replaces or supplements.
LMS instance A configuration that connects an NLP instance to an external learning platform such as Canvas or Moodle, so that courses and enrollments can move between the two systems.
Shopping cart The checkout capability that allows a learner to enroll in several courses at once. Enabled per instance.
Member A person who belongs to an instance.
Course instance One enrollable offering of a course. Several instances of the same course may run on different dates and are separate records.
Grouping key A value shared by several course records that belong to the same offering, used to present them together while keeping them separate for enrollment.
Engage CMS Noodle’s WordPress theme and plugin suite, used to build partner marketing sites that display NLP course data.

Authentication

Overview

Access is granted by a single identifier rather than a login. Noodle issues a Partner ID for an instance, and that value is sent with every request. The response contains that partner’s courses and nothing else.

The shopping cart adds one further identifier. The first cart request returns a session ID that represents one shopper’s cart; sending it back on later requests reaches the same cart.

Details

There is no token exchange and no OAuth handshake.

Header Required on Value
X-Noodle-Partner-Id Every endpoint The Partner ID of an NLP instance, acting as the API key. Scopes every response to that partner.
X-Noodle-Cart-Session-Id Shopping Cart, after the first call The session_id returned by Get or Create Cart. Identifies one shopper’s cart across requests.

Establishing a cart session. Call Get or Create Cart with the partner header alone. The response returns a session_id, which represents the shopper, and an id, which identifies the cart itself. Store the session_id — a cookie or local storage is typical — and send it in X-Noodle-Cart-Session-Id on subsequent cart requests. The id is used in the path of the remaining cart endpoints.

Environments and choosing a Partner ID

Overview

NLP runs separate environments for testing and for live traffic, and a partner’s catalogue may be divided across more than one instance. Two configuration choices follow from this: which environment to point at, and which Partner ID to use.

Both endpoints in an integration — the catalogue and the cart — should point at the same environment, and the Partner ID should normally be that of a child instance rather than a parent.

Details

Environment Base URL
Production https://services.noodle.com
Staging https://staging2services.noodle.com

Keeping environments aligned. The catalogue endpoint and the cart endpoint are expected to remain synchronised. Each works independently, so a mismatch can be difficult to identify from behaviour alone; confirming both are configured for the same environment during setup avoids this.

Parent and child instances. NLP instances form a hierarchy. A parent instance is the organisation-level environment; child instances sit beneath it and typically represent a school, programme line, or sponsored population. Courses are associated to child instances for enrollment, so an integration reading a catalogue normally uses a child instance Partner ID. A parent Partner ID may return course records that also exist at the child level, which can surface the same course more than once.

Multiple catalogues on one site. A partner maintaining several child instances will have several Partner IDs, and a single marketing site may present all of them. Each is a separate call; results are combined by the client.

Cart scope. The cart is associated with one Partner ID. Where a site draws on several instances, the behaviour for combining items from different partners into a single cart is not yet defined. Noodle can advise on the current position for integrations that need this.

How data moves

Overview

NLP holds the authoritative record of every course. A website reads that record and displays it; nothing a website does changes the course itself. The exception is the shopping cart, which is genuinely two-way.

Details

Courses are read-only. Courses are authored in NLP, which creates the corresponding course in the connected LMS. A marketing site retrieves the record and renders it. No course attribute is written back through this API.

The cart is bidirectional. Items added through the Shopping Cart API appear in the learner’s NLP cart, and items removed in NLP are reflected back. Checkout and enrollment take place on the NLP domain, behind authentication.

The API exposes a selected set of fields. The properties documented here are those made available over the API, which is a subset of what NLP holds internally. Where a value is visible in the NLP administrative interface but is not present in a response, Noodle can confirm whether it is exposed and advise on alternatives.

Courses API

Endpoints for reading a partner’s course catalogue.

Overview

Two endpoints are available. List Courses returns a partner’s whole catalogue and supports search, filtering, and pagination. Get Course by Slug returns one course by its URL-friendly identifier, optionally with its sections.

Course data is read-only. NLP holds the authoritative record, and nothing is written back through these endpoints.

Details on properties

A course object carries 70 top-level properties. The table below groups them so that the right area can be found quickly; each property’s type, permitted values, nullability, and example are documented in full on the Course schema.

Group Properties
Identity and naming id, slug, shortTitle, courseCode, sectionCode, contentType, sys
Descriptive content courseAbout, courseShortDescription, courseObjective, syllabus, prerequisites, notes, terms, cardImage, courseUrl
Categorisation and grouping courseCategories, courseModality, reportingGroup, groupingKey, groupingTitle, courseGroup, mode
Class dates and schedule courseStartDate, courseEndDate, courseStartDateWithTimezone, courseEndDateWithTimezone, courseSchedule, timezone, isSelfPaced
Enrollment dates startDate, endDate, startDateWithTimezone, endDateWithTimezone, enrollmentStartDate, enrollmentEndDate, enrollmentStartDateWithTimezone, enrollmentEndDateWithTimezone
Pricing and payment priceInCents, depositEnabled, depositAmount, depositPercentage, depositPriceId, installmentOption
Availability and capacity isActive, courseAvailability, isPathwayOnly, requiresMembership, isWaitlistEnabled, accept_waitlist_enrollment_only, minNumOfEnrollments, maxNumOfEnrollments, learners_count, creditHours
LMS connection lms, lmsInstance, isLmsHosted, canvasCourseId, moodleCourseId, canvasAuthenticationProviderAssociation, lmsAccessStartDate, lmsAccessEndDate, lmsAccessStartDateWithTimezone, lmsAccessEndDateWithTimezone, lmsIndefiniteAccess
Related records parentCourse, partner, school, instructorsCollection, location

Property names to note

A few properties carry names that developed before their current meaning settled. They behave consistently and are safe to rely on; the notes below simply describe what each one contains, so that the right property is chosen the first time.

startDate holds the enrollment start date, and endDate the enrollment end date. The first and last days of class are courseStartDate and courseEndDate. Where several sessions of the same course run on different dates, the class dates are what distinguish them.

Timestamps are returned in UTC. NLP administrators enter dates in local time, so a date entered late in the evening can appear as the following calendar day when the UTC value is displayed directly. Each date property has a WithTimezone companion carrying the same instant in the course’s local zone, named by the timezone property.

Some timestamps include fractional seconds and some do not. A parser that accepts both forms will handle every value.

Several properties are arrays assembled from related records — instructorsCollection, location, and the schedule array within courseSchedule. Each carries a selected set of fields from its source record rather than the complete record.

Properties that share a value

Eleven pairs of properties always return the same value. Both members of each pair are documented, and either may be used. Each property’s entry in the reference names its counterpart, so the relationship is visible wherever it is encountered.

Property Returns the same value as
enrollmentStartDate startDate
enrollmentStartDateWithTimezone startDateWithTimezone
enrollmentEndDate endDate
enrollmentEndDateWithTimezone endDateWithTimezone
courseGroup.groupingKey groupingKey
courseGroup.groupingTitle groupingTitle
courseStartDate courseSchedule.schedule_start_date
courseEndDate courseSchedule.schedule_end_date
lmsInstance.lms lms
instructorsCollection.items[].profilePicture.url instructorsCollection.items[].profilePictureUrl
instructorsCollection.items[].sys.id instructorsCollection.items[].contentfulId

Any other access rules not covered above

Overview

Beyond the partner header, a handful of rules govern which courses appear in a response and what may be done with them. They fall into three areas: how a catalogue is scoped, which courses are visible, and how search and filtering combine.

Details

Scope. X-Noodle-Partner-Id is required on both endpoints, and every response is scoped to that instance. A child instance Partner ID is the normal choice, as described under Environments above.

Method. Both endpoints are GET. No course attribute can be created, updated, or deleted through this API.

Visibility. Four properties determine whether a course reaches a learner, and a course may be present in a response while still being unavailable for enrollment:

Property Effect
isActive Controls whether the course appears in the API load at all, and therefore on any external site reading the API.
isPathwayOnly When true, the course is available only as a component of a pathway. It is hidden from the learner catalogue and cannot be enrolled in or purchased on its own.
requiresMembership When true, only learners holding at least one matching active membership can enroll in or purchase the course.
courseAvailability Carries the current enrollment state: Open, Upcoming, Waitlisting, Full, or Closed.

Search. The search parameter is case-insensitive and matches on any of short_title, course_modality, course_categories, grouping_key, and grouping_title.

Filtering. Filters combine with and: a response contains only the courses matching every filter supplied. The available filters are min_start_date, max_start_date, min_end_date, max_end_date, min_price, max_price, content_type, content_title, grouping_key, grouping_title, reporting_group, and is_waitlist_enabled.

Pagination. Pagination is optional. Supply page[size] and page[number] to page through results; meta.count reports the total number of matching courses.

Sections. On Get Course by Slug, include=sections returns the course’s available sections alongside the course itself.

Field coverage. The properties documented here are the subset of NLP’s internal record that is exposed over the API. Where a value is visible in the NLP administrative interface but absent from a response, Noodle can confirm whether it is exposed and advise on alternatives.

Sample data API loads

Overview

A catalogue response returns a data array of course objects and a meta object carrying the result count. The example below shows the shape of a single-result response, abbreviated to the properties most integrations read first.

Details

Complete responses for every search, filter, and pagination case are saved against List Courses and Get Course by Slug.

{
  "data": [
    {
      "id": 1,
      "slug": "flavorful-foundations-101",
      "shortTitle": "Flavorful Foundations 101",
      "priceInCents": 55500,
      "isActive": true,
      "startDate": "2024-11-22",
      "learners_count": 160,
      "lms": "moodle",
      "mode": ["Audit"],
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/4fGHkzl2qGL5WiwiWE0ieZ/dd27f43874bfb0666c9f8aa4f1db7ebc/spices.jpg"
      },
      "contentType": null,
      "courseModality": null,
      "courseCategories": null,
      "groupingKey": null,
      "groupingTitle": null,
      "courseSchedule": null,
      "location": null
    }
  ],
  "meta": {
    "count": 1
  }
}

Null values are returned rather than omitted, so a property is always present on the object even where no value is set.

List courses

GET/v2/courses

Gets all courses provided a partner_id header.

Supports optional pagination.

  • X-Noodle-Partner-Id header is required to call this endpoint.
Searching

Searches for courses that match the search query (case insensitive) on ANY of the following fields:

  • short_title

  • course_modality

  • course_categories

  • grouping_key

  • grouping_title

Example: GET/v2/courses?search=Online

Filtering

Requires that one or more of the parameters below be specified and will return the courses that match ALL the specified filter conditions.

  • min_start_date (datestring) : This filters based on the course start_date field.
    GET/v2/courses?min_start_date=2024-04-20

  • max_start_date (datestring): This filters based on the course start_date field.
    GET/v2/courses?max_start_date=2024-05-20

  • min_end_date (datestring) : This filters based on the course end_date field.
    GET/v2/courses?min_end_date=2024-04-20

  • max_end_date (datestring): This filters based on the course end_date field.
    GET/v2/courses?max_end_date=2024-05-20

  • min_price (number): This filters based on the course price_in_cents field.
    GET/v2/courses?min_price=3400

  • max_price (number): This filters based on the course price_in_cents field.
    GET/v2/courses?max_price=4055

  • content_type (string): Filters based on the course content_type field.
    GET/v2/courses?content_type=Course

  • content_title (string): Filters based on the course content_title field.
    GET/v2/courses?content_title=test-content-title-1

  • grouping_key (string): Filters based on the course grouping_key field.
    GET/v2/courses?grouping_key=intro-to-art

  • grouping_title (string): Filters based on the grouping_title field.
    GET/v2/courses?grouping_title=Intro to Art

  • reporting_group (string): Filters based on the course reporting_group field.
    GET/v2/courses?reporting_group=Travel Study

  • is_waitlist_enabled (bool): Filters based on the is_waitlist_enabled field.
    GET/v2/courses?is_waitlist_enabled=True

Multiple filter parameters example:
GET/v2/courses?min_start_date=2024-04-20&max_start_date=2024-05- 20&min_price=3400&max_price=4055&content_type=Course


Property reference. Every property on a course object, with type, nullability, allowed values and examples, is documented in the collection overview — available in both a nested view and a flat table.

Parameters

NameInTypeDescription
page[size]queryintegerOptionalPage size.
page[number]queryintegerOptionalPage number.
searchquerystringOptionalSearches for any matching strings in “short_title”, “course_modality”, “course_categories”, “grouping_key” and “grouping_title” course properties.
min_start_datequerystringOptionalMinimum start date of course.
max_start_datequerystringOptionalMax start date of course.
min_end_datequerystringOptionalMinimum end date of course.
max_end_datequerystringOptionalMax end date of course.
min_pricequeryintegerOptionalMinimum course price filter.
max_pricequeryintegerOptionalMax course price filter.
content_typequerystringOptionalReturns courses with specified content type.
content_titlequerystringOptionalFilter based on the course content_title field.
grouping_keyquerystringOptionalReturns courses matching specified grouping_key.
grouping_titlequerystringOptionalReturns courses matching specified grouping_title
reporting_groupquerystringOptionalReturns courses by reporting_group field.
is_waitlist_enabledquerybooleanOptionalReturns courses with active waitlist.

Responses

StatusMeaningReturns
200The partner’s course catalogue.CourseListResponse

Example responses

Get Courses with pagination · 200
{
  "data": [
    {
      "accept_waitlist_enrollment_only": false,
      "brightspaceOrgUnitId": null,
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/4q5cBX0luW5ElN5t43HvMp/17a1940bc00d0738c31fed03da3622ff/5616d013-c1a3-4643-a2a5-c07fa910198d.jpg"
      },
      "contentType": null,
      "courseAbout": "Do you have any idea why this is not working? Type classes first appeared in the Haskell programming language. Haskell features a type system with type inference and lazy evaluation. Initially composing light-hearted and irreverent works, he also wrote serious, sombre and religious pieces beginning in the 1930s.",
      "courseCategories": null,
      "courseCode": null,
      "courseModality": null,
      "courseObjective": "In 1989 the building was heavily damaged by fire, but it has since been restored. Where are my pants? Atoms can contain any character if they are enclosed within single quotes and an escape convention exists which allows any character to be used within an atom. Erlang is known for its designs that are well suited for systems.",
      "courseSchedule": null,
      "courseShortDescription": null,
      "courseUrl": "https://learn.noodle.com/course/view.php?id=184&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
      "endDate": null,
      "fedNetMoodleId": 184,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Alix",
            "lastName": "Grant",
            "middleName": null,
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/1nlVHYbJDUAihxNKqlGkxr/a2effe53e16733bf21baf89e7ed1141c/ba0c9aea-2389-43bb-9bae-821568ccfe7b.png"
            },
            "slug": "alix-grant",
            "sys": {
              "id": "alix-grant",
              "publishedAt": "2024-08-28T17:27:46.033Z"
            },
            "title": "D.Ed."
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": true,
      "isFedNetCourse": true,
      "isWaitlistEnabled": null,
      "learners_count": 3,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "name": "Noodle Moodle",
        "parentAccountId": null,
        "partner": {
          "auth0ClientId": "pQZxMeGuqM9FYv6fNkFaAoR5wMyEyNJG",
          "fromEmail": "noreply@noodle.com",
          "frontDomain": "https://www.noodle.com",
          "name": "Noodle",
          "partnerId": "NOODLE"
        },
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "location": null,
      "maxNumOfEnrollments": null,
      "minNumOfEnrollments": null,
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 184,
      "notes": null,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": true,
        "slug": "goulash-potter-479",
        "sys": {
          "id": "2EpXOOandfwVkNXhYaIN9F",
          "publishedAt": "2024-09-09T21:07:44.773Z"
        }
      },
      "prerequisites": null,
      "priceInCents": 74199,
      "reportingGroup": null,
      "school": {
        "shortDescription": "The School of Peaches is all about you!",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/2JkIf6QniR6WIpNpdjmY9m/d366b6a0ffd4355b922cbc1edb1be502/pessego-1.jpg"
          },
          "name": "Pici University",
          "reverseLogo": null
        }
      },
      "sectionCode": null,
      "shortTitle": "Goulash Potter 479",
      "slug": "goulash-potter-479",
      "startDate": null,

Shortened here. The complete payload is in the specification file.

Get Courses with search · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": "7164",
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/7164",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/4fGHkzl2qGL5WiwiWE0ieZ/dd27f43874bfb0666c9f8aa4f1db7ebc/spices.jpg"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "Welcome to Flavorful Foundations, a course designed to deepen your understanding and appreciation of flavors in cooking. In this course, you will learn about the building blocks of flavor, how to balance flavors in a dish, and how to enhance and manipulate flavors to create unique and delicious dishes.\n\nBy the end of this course, you will have a deeper understanding and appreciation of the role of flavor in cooking. You will be equipped with the knowledge and skills to balance and manipulate flavors to create delicious and unique dishes. You will also have the ability to create your own recipes using the principles of flavor. Whether you are a beginner or an experienced cook, this course will help you take your culinary skills to the next level.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": null,
      "courseUrl": "https://learn.noodle.com/course/view.php?id=4&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
      "fedNetMoodleId": null,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Ronny",
            "lastName": "Ravioli",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/3WU8riJCo3j1yce96cI2Pk/04ebcb467fe7feb65a5129519b9cbdbb/ronny-ravioli.png"
            },
            "slug": "ronny-ravioli",
            "sys": {
              "id": "ronny-ravioli",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "Mayor of Flavortown"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": false,
      "isFedNetCourse": false,
      "learners_count": 160,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "parentAccountId": null,
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 4,
      "parentCourse": {
        "isActive": false,
        "isFedNetCourse": true,
        "slug": "flavorful-foundations-101",
        "sys": {
          "id": "7fHKDAJ5iEcI5Bn0ilpzOo",
          "publishedAt": "2024-08-08T17:22:24.645Z"
        }
      },
      "priceInCents": 55500,
      "school": {
        "shortDescription": "Orzo University offers various programs related to culinary arts, including certificate programs, associate degrees, bachelor's degrees, and even graduate-level degrees. Students learn about food science, nutrition, culinary techniques, kitchen management, and other topics related to the culinary industry.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/1ZRRFMYiP58FRFNB6LY6O7/92326c97ac18cde2eb16f7b80f925e8e/orzouniversity_logo_small.png"
          },
          "name": "Orzo University",
          "reverseLogo": null
        }
      },
      "shortTitle": "Flavorful Foundations 101",
      "slug": "flavorful-foundations-101",
      "startDate": "2024-11-22",

Shortened here. The complete payload is in the specification file.

Get Courses with start date filters · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": null,
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/5E5lz6kbW5STxOVDRTsp2T/4236df13a4b53b9aa3bdceb7c87287dc/ac-logo.png"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "The A/C school is the most successful part of Greendale. The job placement rate for its students is five times higher than the main schools, and its alumni's donations comprise 80% of Greendale's overall budget.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": "Learn how to repair A/Cs",
      "courseUrl": "https://learn.noodle.com/course/view.php?id=105&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
      "fedNetMoodleId": 105,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Troy",
            "lastName": "Barnes",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/1cI9Zh2rUoJ02E5xY1UzlJ/bde694aa54b74bbacaae0e549de60fe0/Troy_close_up_Season_Five.webp"
            },
            "slug": "troy-barnes",
            "sys": {
              "id": "troy-barnes",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "The Messiah"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": true,
      "isFedNetCourse": true,
      "learners_count": 31,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "parentAccountId": null,
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 105,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": true,
        "slug": "ac-repair-101",
        "sys": {
          "id": "5F5jfiHIGUzko4LJPLQs9I",
          "publishedAt": "2024-08-08T17:28:55.716Z"
        }
      },
      "priceInCents": 3454,
      "school": {
        "shortDescription": "Greendale Community College (GCC) is an open-admissions college located Greendale County, Colorado. Founded back in 1974 by Russell Borchert, it is best known for having amongst its alumni the character actor Luis Guzman. While not as prestigious an academic institution as its rival City College, it's an affordable school which has over 80 different fields of study.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/htdfGQiQFeWheKShBG5ya/88d6c7ce85365f03428afbbef882dfa3/greendale_logo_small.png"
          },
          "name": "Greendale University",
          "reverseLogo": null
        }
      },
      "shortTitle": "AC Repair 101",
      "slug": "ac-repair-101",
      "startDate": "2025-05-20",
      "syllabus": "1. Tour\n2. The Sun Chamber",
      "sys": {
        "id": "iACdwlTdqxq4BGVJkrjju",
        "publishedAt": "2024-08-08T20:14:30.859Z"
      },
      "teacherAssistantsCollection": {
        "items": []
      }
    }
  ],
  "meta": {
    "count": 1
  }
}
Get Courses with price filters · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": null,
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/5E5lz6kbW5STxOVDRTsp2T/4236df13a4b53b9aa3bdceb7c87287dc/ac-logo.png"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "The A/C school is the most successful part of Greendale. The job placement rate for its students is five times higher than the main schools, and its alumni's donations comprise 80% of Greendale's overall budget.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": "Learn how to repair A/Cs",
      "courseUrl": "https://learn.noodle.com/course/view.php?id=105&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
      "fedNetMoodleId": 105,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Troy",
            "lastName": "Barnes",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/1cI9Zh2rUoJ02E5xY1UzlJ/bde694aa54b74bbacaae0e549de60fe0/Troy_close_up_Season_Five.webp"
            },
            "slug": "troy-barnes",
            "sys": {
              "id": "troy-barnes",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "The Messiah"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": true,
      "isFedNetCourse": true,
      "learners_count": 31,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "parentAccountId": null,
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 105,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": true,
        "slug": "ac-repair-101",
        "sys": {
          "id": "5F5jfiHIGUzko4LJPLQs9I",
          "publishedAt": "2024-08-08T17:28:55.716Z"
        }
      },
      "priceInCents": 3454,
      "school": {
        "shortDescription": "Greendale Community College (GCC) is an open-admissions college located Greendale County, Colorado. Founded back in 1974 by Russell Borchert, it is best known for having amongst its alumni the character actor Luis Guzman. While not as prestigious an academic institution as its rival City College, it's an affordable school which has over 80 different fields of study.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/htdfGQiQFeWheKShBG5ya/88d6c7ce85365f03428afbbef882dfa3/greendale_logo_small.png"
          },
          "name": "Greendale University",
          "reverseLogo": null
        }
      },
      "shortTitle": "AC Repair 101",
      "slug": "ac-repair-101",
      "startDate": null,
      "syllabus": "1. Tour\n2. The Sun Chamber",
      "sys": {
        "id": "iACdwlTdqxq4BGVJkrjju",
        "publishedAt": "2024-08-08T20:14:30.859Z"
      },
      "teacherAssistantsCollection": {
        "items": []
      }
    }
  ],
  "meta": {
    "count": 1
  }
}
Get Courses with grouping key filter · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": null,
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
      "canvasCourseId": 1266,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/h5KY3hYGAIUEIBsc0wfME/d2d4dae09141feaa722dc763cf93e9f3/v1_txt2img_76c80ff7-bb08-4a52-9d92-f56a53afd82f.png"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "Digital Art Fundamentals introduces students to the basic principles and techniques of creating art using digital tools. The course covers a range of topics including digital painting, vector illustration, and graphic design. Students will develop skills in using various software applications to create original digital artworks.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": null,
      "courseUrl": "https://noodle.instructure.com/login/saml/1234?partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com&courseId=1266",
      "fedNetMoodleId": null,
      "groupingKey": "digital-art-fundamentals",
      "groupingTitle": "Digital Art Fundamentals",
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Alex",
            "lastName": "Morgan",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/6G65g3zzhfsFzy12PSqakX/19d1e3f20cae11f5c382d7533e905081/artist.jpg"
            },
            "slug": "alex-morgan",
            "sys": {
              "id": "alex-morgan",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "Head Artist"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": false,
      "isFedNetCourse": false,
      "learners_count": 0,
      "lms": "canvas",
      "lmsInstance": {
        "domain": "https://noodle.instructure.com",
        "lms": "canvas",
        "parentAccountId": null,
        "sys": {
          "id": "6BkzFejxqtdwQQAqz5pXRx",
          "publishedAt": "2024-08-08T17:20:25.825Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": null,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": false,
        "slug": "digital-art-fundamentals",
        "sys": {
          "id": "3FcZMZtcgcXuwGk5XFGbH0",
          "publishedAt": "2024-08-08T20:15:21.499Z"
        }
      },
      "priceInCents": 0,
      "school": {
        "shortDescription": "Orzo University offers various programs related to culinary arts, including certificate programs, associate degrees, bachelor's degrees, and even graduate-level degrees. Students learn about food science, nutrition, culinary techniques, kitchen management, and other topics related to the culinary industry.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/1ZRRFMYiP58FRFNB6LY6O7/92326c97ac18cde2eb16f7b80f925e8e/orzouniversity_logo_small.png"
          },
          "name": "Orzo University",
          "reverseLogo": null
        }
      },
      "shortTitle": "Digital Art Fundamentals",
      "slug": "digital-art-fundamentals",
      "startDate": null,

Shortened here. The complete payload is in the specification file.

Get Courses with grouping title filter · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": null,
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
      "canvasCourseId": 1266,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/h5KY3hYGAIUEIBsc0wfME/d2d4dae09141feaa722dc763cf93e9f3/v1_txt2img_76c80ff7-bb08-4a52-9d92-f56a53afd82f.png"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "Digital Art Fundamentals introduces students to the basic principles and techniques of creating art using digital tools. The course covers a range of topics including digital painting, vector illustration, and graphic design. Students will develop skills in using various software applications to create original digital artworks.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": null,
      "courseUrl": "https://noodle.instructure.com/login/saml/1234?partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com&courseId=1266",
      "fedNetMoodleId": null,
      "groupingKey": "digital-art-fundamentals",
      "groupingTitle": "Digital Art Fundamentals",
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Alex",
            "lastName": "Morgan",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/6G65g3zzhfsFzy12PSqakX/19d1e3f20cae11f5c382d7533e905081/artist.jpg"
            },
            "slug": "alex-morgan",
            "sys": {
              "id": "alex-morgan",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "Head Artist"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": false,
      "isFedNetCourse": false,
      "learners_count": 0,
      "lms": "canvas",
      "lmsInstance": {
        "domain": "https://noodle.instructure.com",
        "lms": "canvas",
        "parentAccountId": null,
        "sys": {
          "id": "6BkzFejxqtdwQQAqz5pXRx",
          "publishedAt": "2024-08-08T17:20:25.825Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": null,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": false,
        "slug": "digital-art-fundamentals",
        "sys": {
          "id": "3FcZMZtcgcXuwGk5XFGbH0",
          "publishedAt": "2024-08-08T20:15:21.499Z"
        }
      },
      "priceInCents": 0,
      "school": {
        "shortDescription": "Orzo University offers various programs related to culinary arts, including certificate programs, associate degrees, bachelor's degrees, and even graduate-level degrees. Students learn about food science, nutrition, culinary techniques, kitchen management, and other topics related to the culinary industry.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/1ZRRFMYiP58FRFNB6LY6O7/92326c97ac18cde2eb16f7b80f925e8e/orzouniversity_logo_small.png"
          },
          "name": "Orzo University",
          "reverseLogo": null
        }
      },
      "shortTitle": "Digital Art Fundamentals",
      "slug": "digital-art-fundamentals",
      "startDate": null,

Shortened here. The complete payload is in the specification file.

Get Courses with multiple filters · 200
{
  "data": [
    {
      "backgroundColor": null,
      "brightspaceOrgUnitId": "7164",
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/7164",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/4fGHkzl2qGL5WiwiWE0ieZ/dd27f43874bfb0666c9f8aa4f1db7ebc/spices.jpg"
      },
      "contentTitle": null,
      "contentType": null,
      "courseAbout": "Welcome to Flavorful Foundations, a course designed to deepen your understanding and appreciation of flavors in cooking. In this course, you will learn about the building blocks of flavor, how to balance flavors in a dish, and how to enhance and manipulate flavors to create unique and delicious dishes.\n\nBy the end of this course, you will have a deeper understanding and appreciation of the role of flavor in cooking. You will be equipped with the knowledge and skills to balance and manipulate flavors to create delicious and unique dishes. You will also have the ability to create your own recipes using the principles of flavor. Whether you are a beginner or an experienced cook, this course will help you take your culinary skills to the next level.",
      "courseCategories": null,
      "courseModality": null,
      "courseObjective": null,
      "courseUrl": "https://learn.noodle.com/course/view.php?id=4&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
      "fedNetMoodleId": null,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Ronny",
            "lastName": "Ravioli",
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/3WU8riJCo3j1yce96cI2Pk/04ebcb467fe7feb65a5129519b9cbdbb/ronny-ravioli.png"
            },
            "slug": "ronny-ravioli",
            "sys": {
              "id": "ronny-ravioli",
              "publishedAt": "2024-08-28T17:25:40.227Z"
            },
            "title": "Mayor of Flavortown"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": false,
      "isFedNetCourse": false,
      "learners_count": 160,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "parentAccountId": null,
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 4,
      "parentCourse": {
        "isActive": false,
        "isFedNetCourse": true,
        "slug": "flavorful-foundations-101",
        "sys": {
          "id": "7fHKDAJ5iEcI5Bn0ilpzOo",
          "publishedAt": "2024-08-08T17:22:24.645Z"
        }
      },
      "priceInCents": 55500,
      "school": {
        "shortDescription": "Orzo University offers various programs related to culinary arts, including certificate programs, associate degrees, bachelor's degrees, and even graduate-level degrees. Students learn about food science, nutrition, culinary techniques, kitchen management, and other topics related to the culinary industry.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/1ZRRFMYiP58FRFNB6LY6O7/92326c97ac18cde2eb16f7b80f925e8e/orzouniversity_logo_small.png"
          },
          "name": "Orzo University",
          "reverseLogo": null
        }
      },
      "shortTitle": "Flavorful Foundations 101",
      "slug": "flavorful-foundations-101",
      "startDate": "2024-11-22",

Shortened here. The complete payload is in the specification file.

Get Courses · 200
{
  "data": [
    {
      "accept_waitlist_enrollment_only": false,
      "brightspaceOrgUnitId": "7083",
      "brightspaceUrl": "https://learn.noodle.com/d2l/home/7083",
      "canvasCourseId": null,
      "cardImage": {
        "url": "https://assets.noodle.com/yzn2zv0qt1y1/p3jjmoFfZr7R1WdO6inoX/f51bc99f613303cf1a43158d3ea2c3bd/vball.webp"
      },
      "contentType": null,
      "courseAbout": "Beach volleyball is a team sport played by two teams of two or more players on a sand court divided by a net. Similar to indoor volleyball, the objective of the game is to send the ball over the net and to ground it on the opponent's side of the court.",
      "courseCategories": null,
      "courseCode": null,
      "courseModality": null,
      "courseObjective": null,
      "courseSchedule": null,
      "courseShortDescription": null,
      "courseUrl": "https://learn.noodle.com/course/view.php?id=31&partnerDomain=qa-greendale-acme.noodlealdente.com",
      "endDate": null,
      "fedNetMoodleId": null,
      "groupingKey": null,
      "groupingTitle": null,
      "id": 1,
      "instructorsCollection": {
        "items": [
          {
            "email": null,
            "firstName": "Wilson",
            "lastName": "Spalding",
            "middleName": null,
            "profilePicture": {
              "url": "https://assets.noodle.com/yzn2zv0qt1y1/67PLEkrYS6Al4TA0wiLXFV/053046a1f72e197a660e42fd744cc842/wilson.jpg"
            },
            "slug": "wilson-spalding",
            "sys": {
              "id": "wilson-spalding",
              "publishedAt": "2024-08-28T17:25:44.237Z"
            },
            "title": "Head Setter"
          }
        ],
        "limit": 100,
        "total": 1
      },
      "isActive": true,
      "isAddedFromFedNet": false,
      "isFedNetCourse": false,
      "isWaitlistEnabled": null,
      "learners_count": 38,
      "lms": "moodle",
      "lmsInstance": {
        "domain": "https://learn.noodle.com",
        "lms": "moodle",
        "name": "Noodle Moodle",
        "parentAccountId": null,
        "partner": {
          "auth0ClientId": "pQZxMeGuqM9FYv6fNkFaAoR5wMyEyNJG",
          "fromEmail": "noreply@noodle.com",
          "frontDomain": "https://www.noodle.com",
          "name": "Noodle",
          "partnerId": "NOODLE"
        },
        "sys": {
          "id": "7s29UiUkPLXAWBnvN7GHA0",
          "publishedAt": "2024-08-08T17:20:23.235Z"
        }
      },
      "location": null,
      "maxNumOfEnrollments": null,
      "minNumOfEnrollments": null,
      "mode": [
        "Audit"
      ],
      "moodleCourseId": 31,
      "notes": null,
      "parentCourse": {
        "isActive": true,
        "isFedNetCourse": true,
        "slug": "beach-volleyball-101",
        "sys": {
          "id": "1FTKHLPQ7vM3lwDc4zIY7C",
          "publishedAt": "2024-09-09T01:02:34.819Z"
        }
      },
      "prerequisites": null,
      "priceInCents": 86388,
      "reportingGroup": null,
      "school": {
        "shortDescription": "Greendale Community College (GCC) is an open-admissions college located Greendale County, Colorado. Founded back in 1974 by Russell Borchert, it is best known for having amongst its alumni the character actor Luis Guzman. While not as prestigious an academic institution as its rival City College, it's an affordable school which has over 80 different fields of study.",
        "university": {
          "logo": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/htdfGQiQFeWheKShBG5ya/88d6c7ce85365f03428afbbef882dfa3/greendale_logo_small.png"
          },
          "name": "Greendale University",
          "reverseLogo": null
        }
      },
      "sectionCode": null,
      "shortTitle": "Beach Volleyball 101",
      "slug": "beach-volleyball-101",
      "startDate": null,
      "syllabus": "1. Peppering\n2. Setting\n3. Jumping\n4. Spiking\n5. Digging",
      "sys": {
        "id": "V6sXcdio9qoMkZmggpkPD",
        "publishedAt": "2024-09-09T02:08:14.391Z"

Shortened here. The complete payload is in the specification file.

Get a course by slug

GET/v2/courses/{slug}

Gets a course provided its slug and partner_id header.

Supports optional include parameter to fetch the course’s sections.

  • X-Noodle-Partner-Id header is required to call this endpoint.

Property reference. Every property on a course object, with type, nullability, allowed values and examples, is documented in the collection overview — available in both a nested view and a flat table.

Parameters

NameInTypeDescription
slugpathstringRequiredThe course’s URL-friendly identifier.
includequerystringOptionalSet to sections to include the course’s available sections.

Responses

StatusMeaningReturns
200The requested course.CourseResponse

Example responses

Get Course by Slug with sections · 200
{
  "data": {
    "accept_waitlist_enrollment_only": false,
    "brightspaceOrgUnitId": null,
    "brightspaceUrl": "https://learn.noodle.com/d2l/home/None",
    "canvasCourseId": null,
    "cardImage": {
      "url": "https://assets.noodle.com/yzn2zv0qt1y1/4fGHkzl2qGL5WiwiWE0ieZ/dd27f43874bfb0666c9f8aa4f1db7ebc/spices.jpg"
    },
    "completion_rate": 0.07,
    "contentType": null,
    "courseAbout": "Welcome to Flavorful Foundations, a course designed to deepen your understanding and appreciation of flavors in cooking. In this course, you will learn about the building blocks of flavor, how to balance flavors in a dish, and how to enhance and manipulate flavors to create unique and delicious dishes.\n\nBy the end of this course, you will have a deeper understanding and appreciation of the role of flavor in cooking. You will be equipped with the knowledge and skills to balance and manipulate flavors to create delicious and unique dishes. You will also have the ability to create your own recipes using the principles of flavor. Whether you are a beginner or an experienced cook, this course will help you take your culinary skills to the next level.",
    "courseCategories": null,
    "courseCode": null,
    "courseModality": null,
    "courseObjective": null,
    "courseSchedule": null,
    "courseShortDescription": null,
    "courseUrl": "https://learn.noodle.com/course/view.php?id=148&partnerDomain=qa-orzo-university-gnocchiandcompany.noodle.com",
    "course_status": null,
    "endDate": null,
    "fedNetMoodleId": 148,
    "groupingKey": null,
    "groupingTitle": null,
    "id": 1,
    "instructorsCollection": {
      "items": [
        {
          "email": null,
          "firstName": "Ronny",
          "lastName": "Ravioli",
          "middleName": null,
          "profilePicture": {
            "url": "https://assets.noodle.com/yzn2zv0qt1y1/3WU8riJCo3j1yce96cI2Pk/04ebcb467fe7feb65a5129519b9cbdbb/ronny-ravioli.png"
          },
          "slug": "ronny-ravioli",
          "sys": {
            "id": "ronny-ravioli",
            "publishedAt": "2024-08-28T17:26:00.878Z"
          },
          "title": "Mayor of Flavortown"
        }
      ],
      "limit": 100,
      "total": 1
    },
    "isActive": false,
    "isAddedFromFedNet": true,
    "isFedNetCourse": true,
    "isWaitlistEnabled": null,
    "is_added_to_federated_network": false,
    "is_from_federated_network": true,
    "learners_count": 161,
    "lms": "moodle",
    "lmsInstance": {
      "domain": "https://learn.noodle.com",
      "lms": "moodle",
      "parentAccountId": null,
      "sys": {
        "id": "7s29UiUkPLXAWBnvN7GHA0",
        "publishedAt": "2024-08-08T17:20:23.235Z"
      }
    },
    "location": null,
    "maxNumOfEnrollments": null,
    "minNumOfEnrollments": null,
    "mode": [
      "Audit"
    ],
    "moodleCourseId": 148,
    "notes": null,
    "parentCourse": {
      "isActive": false,
      "isFedNetCourse": true,
      "partner": {
        "name": "Pici University",
        "partnerId": "PICIUNIVERSITY"
      },
      "slug": "flavorful-foundations-101",
      "sys": {
        "id": "4reqfxFeCKg6smP7LdnDyr",
        "publishedAt": "2024-09-08T00:58:19.356Z"
      }
    },
    "partner": {
      "name": "Gnocchi and Co",
      "partnerId": "ORZOUNIVERSITY-GNOCCHIANDCO"
    },
    "percent_course_complete": 0,
    "prerequisites": null,
    "priceInCents": 0,
    "reportingGroup": null,
    "school": {
      "shortDescription": "The School of Peaches is all about you!",
      "university": {
        "horizontalLogo": {
          "url": "https://assets.noodle.com/yzn2zv0qt1y1/2a8K07qURexoxDYiPa7Vol/746b1748b7e9c14fb341f8201ad75e5d/Pici_University-logos_transparent.png"
        },
        "image": {
          "url": "https://assets.noodle.com/yzn2zv0qt1y1/2JkIf6QniR6WIpNpdjmY9m/d366b6a0ffd4355b922cbc1edb1be502/pessego-1.jpg"
        },
        "name": "Pici University",
        "reverseLogo": null
      }
    },
    "sectionCode": null,

Shortened here. The complete payload is in the specification file.

Shopping Cart API

Endpoints for the anonymous and logged-in shopping cart experience.

Overview

A cart is created on a learner’s behalf, courses are added to it, and the learner is then handed to NLP to complete checkout and enrollment. Cart state is shared with NLP in both directions: items added here appear in the learner’s NLP cart, and items removed in NLP are reflected back.

Get or Create Cart is the entry point. Called with the partner header alone it creates a cart and returns a session_id identifying the shopper and an id identifying the cart. Store the session_id and send it in X-Noodle-Cart-Session-Id on later requests; use the id in the path of the remaining endpoints.

Checkout and enrollment take place on the NLP domain, behind authentication. The cart_url property in the response is where a learner is sent to complete a purchase.

Details on properties

Three objects appear across the cart endpoints.

Cart is the container returned by Get or Create Cart.

Property Notes
id The cart’s identifier, used in the path of the remaining cart endpoints.
session_id The shopper’s identifier, sent back in X-Noodle-Cart-Session-Id.
partner_id The instance the cart belongs to.
cart_url The NLP address where the learner completes checkout.
cart_items The items currently in the cart.
cart_items_count The number of items in the cart.
subtotal The cart total, in the same units as priceInCents on a course.
user_id The NLP user once a learner has authenticated; null for an anonymous cart.

CartItem is one course in a cart.

Property Notes
id The cart item’s identifier, used in the path when updating or removing it.
shopping_cart_id The cart the item belongs to.
course_id The database identifier of the course, from id on a course object.
external_id The Contentful identifier of the course, from sys.id on a course object.
quantity Always 1.
cart_item_metadata Free-form key-value data carried with the item, including enrollment options.
created_at, updated_at Timestamps for the item.

AddCartItemRequest is the body sent when adding an item. Supply either course_id or external_id, together with quantity; cart_item_metadata is optional.

Any other access rules not covered above

Overview

The cart is scoped to a single instance and a single shopper, and a course may be added to it only once. The rules below cover identification, the limits on what a cart may contain, and where the learner is handed over.

Details

Scope. X-Noodle-Partner-Id is required on every cart endpoint. After the first call, X-Noodle-Cart-Session-Id identifies the shopper’s cart. A cart is associated with one Partner ID; where a site draws on several instances, the behaviour for combining items from different partners into one cart is not yet defined, and Noodle can advise on the current position.

Environment alignment. The catalogue endpoint and the cart endpoint should point at the same environment. Each works independently, so a mismatch is difficult to identify from behaviour alone.

Availability. The shopping cart is enabled per instance.

Identifying a course. Either course_id or external_id may be supplied when adding an item. Courses created recently may have no external_id, in which case course_id is used.

One enrollment per course. quantity is always 1, because a course cannot be enrolled in twice. Adding a course already in the cart returns 409 Conflict.

Enrollment type. Passing an enrollment_data.team_id object inside cart_item_metadata enrolls the learner as a team member of the given team. Without it, the learner is enrolled as a solo learner.

Updating an item. The update endpoint is not yet supported. Cart items cannot be modified and their quantity cannot be changed. The endpoint is reserved for future support of cart_item_metadata updates, to allow a learner to switch between team and solo enrollment.

Completing a purchase. Checkout and enrollment happen on the NLP domain, behind authentication. Send the learner to the address in cart_url.

Sample data API loads

Overview

Two payloads cover the common path: the cart returned when a session is established, and the item returned when a course is added to it.

Details

Complete responses for every cart endpoint are saved against the endpoints themselves.

A newly created cart, from Get or Create Cart. Store session_id and id.

{
  "data": {
    "id": 277,
    "session_id": "8124e2e4-c4b8-40e5-a101-4ea0c31ede41",
    "partner_id": "ORZOUNIVERSITY-GNOCCHIANDCO",
    "cart_url": "https://orzo-university-gnocchiandcompany.noodle.com/cart",
    "cart_items": [],
    "cart_items_count": 0,
    "subtotal": 0,
    "user_id": null
  }
}

An item added to that cart, from Add Cart Item. Abbreviated: cart_item_metadata.contentful_data carries a copy of the course record at the time of adding.

{
  "data": {
    "id": 165,
    "shopping_cart_id": 277,
    "course_id": 1234,
    "external_id": "19hcByx0VvmLpnwMK0mHks",
    "quantity": 1,
    "cart_item_metadata": {
      "enrollment_data": {
        "team_id": 123
      },
      "contentful_data": {
        "shortTitle": "Beach Volleyball 101",
        "slug": "beach-volleyball-101",
        "priceInCents": 0,
        "isActive": true,
        "lms": "moodle",
        "mode": ["Audit"]
      }
    },
    "created_at": "2024-07-22T16:28:30.884433+00:00",
    "updated_at": "2024-07-22T16:28:30.884438+00:00"
  }
}

Get or create a cart

GET/cart

This is the entrypoint of the shopping cart flow, returning the necessary data to interact with the shopping cart.

Creating a Shopping Cart

You just need to call this endpoint with a valid X-Noodle-Partner-Id header and it’ll return the following values that you’ll need to save:

  • session_id: This will be your user’s identifier, you can save this in localStorage or cookies and send it in a X-Noodle-Cart-Session-Id header to fetch said user’s cart.

  • id: This is the shopping cart’s id, used for calling all other shopping cart endpoints.

Getting a Shopping Cart

You can fetch a user’s shopping cart using the aforementioned session_id. You just need to send the session_id in a X-Noodle-Cart-Session-Id header alongside the correct X-Noodle-Partner-Id header value and it’ll return your user’s shopping cart.

Parameters

NameInTypeDescription
X-Noodle-Cart-Session-IdheaderstringOptionalAn existing shopper session. Omit to create a new cart.

Responses

StatusMeaningReturns
200An existing cart.CartResponse
201A new cart was created.CartResponse

Example responses

Create a new cart · 200
{
  "data": {
    "cart_items": [],
    "cart_items_count": 0,
    "cart_url": "https://orzo-university-gnocchiandcompany.noodle.com/cart",
    "id": 276,
    "partner_id": "ORZOUNIVERSITY-GNOCCHIANDCO",
    "session_id": "8124e2e4-c4b8-40e5-a101-4ea0c31ede41",
    "subtotal": 0,
    "user_id": null
  }
}
Get a cart · 200
{
  "data": {
    "cart_items": [],
    "cart_items_count": 0,
    "cart_url": "https://orzo-university-gnocchiandcompany.noodle.com/cart",
    "id": 277,
    "partner_id": "ORZOUNIVERSITY-GNOCCHIANDCO",
    "session_id": "8124e2e4-c4b8-40e5-a101-4ea0c31ede41",
    "subtotal": 0,
    "user_id": null
  }
}

Add an item to a cart

POST/cart/{shopping_cart_id}/cart_items

Lets you add a cart item to a shopping cart.

You need to provide the id of the shopping cart that was saved from the Get or Create Cart endpoint.

The body expects:

  • course_id: The database id of the course you’re trying to add to the shopping cart. This can be found inside course.id from our v2/courses api. It can be sent instead of external_id.

  • external_id: The Contentful id of the course you’re trying to add to the shopping cart. This can be found inside course.sys.id from our v2/courses api. New courses won’t have a value in this field, can be replaced by course_id.

  • quantity: Should always be 1 for now, as courses cannot be enrolled in twice.

  • cart_item_metadata: Optional key, you can add any key-value pair to this. You can add an enrollment_data.team_id object to enroll the user as a team_member in the provided team. Otherwise, they’ll be enrolled as solo-learners by default.

The endpoint will throw a 409 Conflict error if you try to add the same cart item twice as courses cannot be bought/enrolled in twice.

Parameters

NameInTypeDescription
shopping_cart_idpathintegerRequiredThe cart’s id.

Request body

Sends a AddCartItemRequest object.

Responses

StatusMeaningReturns
200The cart item that was added.CartItemResponse
409The course is already in the cart. A course can be purchased once.—

Example responses

Add Cart Item to Shopping Cart · 200
{
  "data": {
    "cart_item_metadata": {
      "contentful_data": {
        "cardImage": {
          "url": "https://assets.noodle.com/yzn2zv0qt1y1/p3jjmoFfZr7R1WdO6inoX/f51bc99f613303cf1a43158d3ea2c3bd/vball.webp"
        },
        "contentTitle": null,
        "contentType": null,
        "courseCategory": null,
        "courseModality": null,
        "fedNetMoodleId": 110,
        "isActive": true,
        "isAddedFromFedNet": true,
        "isFedNetCourse": true,
        "lms": "moodle",
        "mode": [
          "Audit"
        ],
        "moodleCourseId": 110,
        "parentCourse": {
          "isActive": true,
          "isFedNetCourse": true,
          "slug": "beach-volleyball-101",
          "sys": {
            "id": "1FTKHLPQ7vM3lwDc4zIY7C",
            "publishedAt": "2024-06-12T15:19:52.389Z"
          }
        },
        "priceInCents": 0,
        "shortTitle": "Beach Volleyball 101",
        "slug": "beach-volleyball-101",
        "startDate": null,
        "stripePriceId": "price_1PQsxnPmPdlBDUMHjcJ93SWY",
        "stripeProductId": "prod_PgKhb95dWNaqXw",
        "sys": {
          "id": "19hcByx0VvmLpnwMK0mHks",
          "publishedAt": "2024-06-12T15:19:53.267Z"
        }
      },
      "enrollment_data": {
        "team_id": 123
      }
    },
    "course_id": 1234,
    "created_at": "2024-07-22T16:28:30.884433+00:00",
    "external_id": "19hcByx0VvmLpnwMK0mHks",
    "id": 165,
    "quantity": 1,
    "shopping_cart_id": 277,
    "updated_at": "2024-07-22T16:28:30.884438+00:00"
  }
}

Update a cart item

PATCH/cart/{shopping_cart_id}/cart_items/{cart_item_id}

Not supported as of now. Cart Items cannot be modified, nor their quantity changed as courses can only bought and enrolled in once.

This endpoint will be updated to allow card_item_metadata updates in order to change enrollment type between team and solo learning.

Parameters

NameInTypeDescription
shopping_cart_idpathintegerRequiredThe cart’s id.
cart_item_idpathintegerRequiredThe cart item’s id.

Responses

StatusMeaningReturns
200Reserved for future use.—

Remove an item from a cart

DELETE/cart/{shopping_cart_id}/cart_items/{cart_item_id}

Lets you delete a cart item from the shopping cart provided the shopping_cart_id and cart_item_id

Parameters

NameInTypeDescription
shopping_cart_idpathintegerRequiredThe cart’s id.
cart_item_idpathintegerRequiredThe cart item’s id.

Responses

StatusMeaningReturns
200Confirmation that the item was removed.DeleteCartItemResponse

Example responses

Delete Cart Item from Shopping Cart · 200
{
  "data": {
    "deleted": true,
    "id": 165
  }
}

Course property reference

Every property returned on a course object. 70 top-level properties, plus 38 within nested objects. Use the filter to jump to one.

accept_waitlist_enrollment_onlyboolean

Indicates if the course is currently accepting enrollments exclusively through the waitlist. A value of “true” means that regular enrollment is closed, and only waitlist enrollments are being accepted at this time.

canvasAuthenticationProviderAssociationobject or null

Stores the Canvas SSO configuration associated with the course, used to route learners to the correct identity provider when they access the course in Canvas. Each entry carries the issuer URL, login path, partner ID, provider ID, and provider type.

Contains

issuerUrlstring or null

Specifies the identity provider’s issuer URL used to validate authentication assertions for the course’s Canvas authentication provider.

loginPathstring

Specifies the relative Canvas path that initiates the SSO login flow for this provider (e.g., “/login/saml/000”). Appended to the partner’s Canvas instance domain to send learners to the correct login endpoint.

partnerIdstring

Identifies the partner institution whose Canvas authentication provider is associated with the course (e.g., “10”).

providerIdinteger

Identifies the specific authentication provider record configured within the partner’s Canvas instance (e.g., “100”).

providerTypestring

Specifies the authentication protocol used by the Canvas authentication provider (e.g., “AuthProviderTypeEnum.SAML”), indicating how learner identity is asserted at login.

canvasCourseIdinteger or null

The course’s identifier within Canvas. Populated when lms is “canvas”; returns null otherwise.

cardImageobject

Container for the course’s representative card image. Holds the image file reference used as the thumbnail or preview image in course listings and promotional cards.

Contains

urlstring

Stores the URL link for the course’s representative image, typically used as a thumbnail or preview image in course listings or promotional cards. This image enhances visual recognition and provides a quick reference for the course’s content or theme (e.g., “https://example.com/card_image.png”).

contentTypestringCOURSE

Specifies the category of educational material, indicating whether the content is a standalone course, a comprehensive program, or another type of learning resource.

courseAboutstring

Provides a detailed description of the course, including its objectives, topics covered, and intended audience. This rich text area allows for a comprehensive description to engage prospective learners, highlighting key aspects of the course content, learning outcomes, and any unique features or benefits (e.g., “This course was crafted with you, the learner, at its core…”).

courseAvailabilitystringClosed, Full, Open, Upcoming, Waitlisting

Indicates the current enrollment state of the course, selected from “Open” (accepting enrollments), “Waitlisting” (regular enrollment is closed and learners may join the waitlist), and “Closed” (accepting neither enrollments nor waitlist entries).

courseCategoriesarray of string

The subject areas or disciplines the course belongs to, drawn from a predefined list (e.g., “History”, “Great Books”, “Political Science”).

courseCodestring or null

A unique alphanumeric identifier assigned to the course (e.g., “BASC65133”). This code is used for course cataloging, enrollment, and administrative tracking.

courseEndDatestring or null

The date and time the course ends (last day of classes), in UTC. Returns the same value as courseSchedule.schedule_end_date.

courseEndDateWithTimezonestring or null

The date and time the course ends (last day of classes), in the course’s local zone named by timezone.

courseGroupobject

Groups related variations of the same course — different terms, cohorts, or modalities of a single offering — so they can be presented and managed together. Each entry carries the grouping key and grouping title shared across all variations.

Contains

groupingKeystring

Identifier shared by every variation of the same course, used to group them together (e.g., “intro-to-art”). Returns the same value as groupingKey.

groupingTitlestring

Title shared by every variation of the same course, used to group them together (e.g., “Intro to Art”). Returns the same value as groupingTitle.

courseModalityarray of string

The delivery format of the course. Returns lowercase values: “online”, “in-person”, or “hybrid”.

courseObjectivestring or null

The primary learning goals and skills a learner gains from the course. May contain links to supplementary resources.

courseScheduleobject

Stores the recurring meeting pattern for the course. This container holds one or more schedule entries defining when classes meet.

Contains

schedulearray of object

Holds the individual weekly meeting entries for the course. Each entry specifies a meeting day, a start time, and an end time.

schedule_end_datestring or null

The date and time the course ends (last day of classes), in UTC. Returns the same value as courseEndDate.

schedule_start_datestring or null

The date and time the course begins (first day of classes), in UTC. Returns the same value as courseStartDate.

courseShortDescriptionstring or null

Provides a concise overview of the course, highlighting its main focus and topics. This brief summary is ideal for quick reference in course listings.

courseStartDatestring or null

The date and time the course begins (first day of classes), in UTC. Returns the same value as courseSchedule.schedule_start_date.

courseStartDateWithTimezonestring or null

The date and time the course begins (first day of classes), in the course’s local zone named by timezone.

courseUrlstring or null

Specifies the direct link to access the course on the learning management system. This URL directs learners to the course’s login or access page.

creditHoursnumber or null

Specifies the number of academic credit hours awarded for successful completion of the course (e.g., “1.0”).

depositAmountinteger or null

This sets the deposit amount to a fixed amount.

depositEnabledboolean

This determines whether the learner must submit an initial deposit and then separately pay for the remainder of the course price.

depositPercentagenumber or null

This sets the deposit amount as a percentage of the course’s price.

depositPriceIdstring or null

Stores the identifier of the Stripe Price object representing the course deposit (e.g., “price_2DCxx54gG2GGz4bA1hjdhsu1”). Populated only when Deposit Enablement Status is enabled.

endDatestring or null

The date and time public enrollment closes, in UTC. Returns the same value as enrollmentEndDate.

endDateWithTimezonestring or null

The date and time public enrollment closes, in the course’s local zone named by timezone. Returns the same value as enrollmentEndDateWithTimezone.

enrollmentEndDatestring or null

The date and time public enrollment closes, in UTC. Returns the same value as endDate.

enrollmentEndDateWithTimezonestring or null

The date and time public enrollment closes, in the course’s local zone named by timezone. Returns the same value as endDateWithTimezone.

enrollmentStartDatestring

The date and time public enrollment opens, in UTC. Returns the same value as startDate.

enrollmentStartDateWithTimezonestring

The date and time public enrollment opens, in the course’s local zone named by timezone. Returns the same value as startDateWithTimezone.

groupingKeystring

Identifier shared by every variation of the same course, used to group them together (e.g., “intro-to-art”). Returns the same value as courseGroup.groupingKey.

groupingTitlestring

Title shared by every variation of the same course, used to group them together (e.g., “Intro to Art”). Returns the same value as courseGroup.groupingTitle.

idinteger

The record ID within the NLP system; also this is the ID used for the shopping cart.

installmentOptionobject

Container for the course’s installment payment configuration. Holds whether an installment plan is offered, how many installments it comprises, the per-installment amount, and the remaining balance.

Contains

installmentAmountCentsinteger

Specifies the amount of each single installment payment for the course, expressed in cents (e.g., “25000” for $250.00).

isInstallmentOptionAvailableboolean

Indicates whether the course is currently offered with an installment payment option. A value of “true” means learners may elect to pay in installments at checkout.

numberOfInstallmentsinteger

Specifies how many separate payments make up the course’s installment plan (e.g., “4”).

remainingBalanceCentsinteger

Specifies the portion of the course price still to be collected across the remaining installment payments, expressed in cents (e.g., “100000” for $1,000.00).

instructorsCollectionobject

Indicates one or more instructors who are leading the course.

Contains

itemsarray of object

Holds the individual instructor records associated with the course. Each entry carries that instructor’s name, contact details, biography, address, profile picture, and system metadata.

isActiveboolean

Indicates if the course is visible in the API load. This controls whether the course appears on any external marketing website using the API.

isLmsHostedboolean

Indicates whether or not the course appears within a Learning Management System. Some courses, regardless of modality, have no corresponding LMS experience.

isPathwayOnlyboolean

Indicates whether the course is available only as a component of a pathway. A value of “true” means the course is hidden from the learner catalogue and cannot be independently enrolled in or purchased on its own.

isSelfPacedboolean

This indicates whether the course is self-paced (asynchronous) or if it is synchronous (with set class meeting times).

isWaitlistEnabledboolean

Indicates whether a waitlist option is available for the course. A value of “true” means students can join a waitlist if the course reaches full capacity, allowing them to be notified if spots open up.

learners_countinteger

The number of learners currently enrolled in the course.

lmsstring or nullmoodle, brightspace, canvas, None

The learning management system hosting the course: “canvas” or “moodle”. Returns the same value as lmsInstance.lms.

lmsAccessEndDatestring or null

This is the last day that a learner can access the course within the LMS.

lmsAccessEndDateWithTimezonestring or null

This is the last day that a learner can access the course within the LMS.

lmsAccessStartDatestring or null

This is the first day that a learner can access the course within the LMS.

lmsAccessStartDateWithTimezonestring or null

This is the first day that a learner can access the course within the LMS.

lmsIndefiniteAccessboolean

Specifies whether learners will have unrestricted access to the course within the LMS with no set end date.

lmsInstanceobject or null

References the LMS instance that hosts the course. Each entry carries the instance’s domain, LMS platform, record ID, and system metadata.

Contains

domainstring

The base URL of the LMS instance hosting the course.

lmsstringcanvas, moodle

The learning management system the instance runs: “canvas” or “moodle”. Determines how the course is provisioned and how learners are launched into it. Returns the same value as lms.

idinteger

The system-generated unique identifier for the LMS instance record, used to link the course to its hosting platform.

sysobject

System metadata for the LMS instance record. Contains a single identifier property.

Contains

idstring or null

The system-generated identifier for the LMS instance record as held in its system metadata block.

locationobject or null

References a location record which indicates the premises where any in-person elements of the course are held.

Contains

administrativeAreastring or null

The administrative region for the course location, such as a state, province, or city district (e.g., “Arizona”).

countryCodestring or null

The ISO 3166-2 country code for the course location (e.g., “US”).

localitystring or null

The locality or city area for the course location (e.g., “Manhattan”).

namestring

The name of the venue or building where the course is held (e.g., “Pharos Hall”).

postalCodestring or null

The postal or ZIP code for the course location (e.g., “10003”).

premisesstring or null

The suite, room, lecture hall, or other specific area within a building where the course is held (e.g., “Suite 6020”).

streetstring or null

The street name of the course venue (e.g., “Chelsea Piers”). Combine with streetNumber for the full address.

streetNumberstring or null

The street number of the course venue (e.g., “60”). Combine with street for the full address.

subPremisesstring or null

Additional detail within a building or suite, such as a floor or section (e.g., “Floor 3”).

maxNumOfEnrollmentsinteger or null

Specifies the maximum number of learners allowed to enroll in the course (e.g., 18). This numeric limit ensures class size management and helps control course capacity.

minNumOfEnrollmentsinteger or null

Defines the minimum number of learners required for the course to proceed (e.g., 10). This numeric threshold ensures viability and helps determine if the course will be offered.

modearray of string

Enrollment mode for the course. Currently always returns “AUDIT”.

moodleCourseIdinteger or null

The course’s identifier within Moodle. Populated when lms is “moodle”; returns null otherwise.

notesstring or null

Additional course information such as registration deadlines, platform instructions, or special notices. Returns HTML markup and must be sanitised before rendering.

parentCourseobject or null

The parent course record this course derives from, carrying the parent’s active status, slug, and system metadata. Returns null for courses that do not derive from a parent.

Contains

isActiveboolean

Indicates whether the parent course record that this instance derives from is currently active.

slugstring

A URL-friendly identifier for the parent course record, used in web links that reference the parent rather than a specific course instance.

sysobject

System metadata for the parent course record. Contains a single identifier property.

Contains

idstring or null

The system-generated identifier of the parent course record from which this course instance derives.

partnerobject

The client partner organization that owns the course. Carries the partner’s display name, its identifier, and the currency its courses are priced in.

Contains

currencystring

Specifies the currency in which the partner’s courses are priced and transacted. This governs how course price values are interpreted and displayed at checkout.

namestring

Specifies the display name of the client partner organization that owns the course.

partnerIdstring

The unique identifier of the client partner organization that owns the course. Every course in a single response carries the same value, matching the partner identified by the X-Noodle-Partner-Id request header.

prerequisitesstring or null

Lists any requirements or recommended knowledge and skills students should have before enrolling in the course. This text area allows for a detailed explanation of prerequisites to help prospective learners assess their preparedness for the course.

priceInCentsinteger

The total price of the course in cents.

reportingGroupstring or null

Identifies the designated reporting group for the course (e.g., “Basic Program Open to All”). This grouping is used for analytics and reporting purposes, categorizing courses based on specific criteria or program access levels.

requiresMembershipboolean

Indicates whether enrollment in the course is restricted to learners holding an active membership. A value of “true” means only learners with at least one matching active membership can enroll in or purchase the course.

schoolobject

References the school or content provider within the partner organization that offers the course. Each entry carries the school’s descriptive text, logo variants, tags, and associated university.

Contains

shortDescriptionstring or null

A brief description of the associated school, which may highlight the academic mission or key value propositions.

universityobject

References the university associated with the school that offers the course. Each entry carries the university’s name and its logo variants.

Contains

horizontalLogoobject

Container for the university’s horizontal logo. Holds the image file reference used where a wide, horizontal lockup of the logo is required.

Contains

urlstring

This is the version of the image to be used in a horizontal context.

logoobject

Container for the university’s standard logo. Holds the image file reference used as the default logo lockup.

Contains

urlstring

This is the standard version of the image.

namestring

This is the name of the university associated with the school that offers the course.

sectionCodestring or null

Identifies the specific section of the course, typically used to distinguish different offerings of the same course within a term (e.g., “25S2”). This code helps in organizing and tracking individual course sections.

shortTitlestring

The course’s title.

slugstring

A URL-friendly identifier for the course (e.g., “cyber-ms-01”), used in web links for easy navigation to the course page. This slug ensures a consistent and accessible reference to the course online.

In the example provided:

“nlpc” is an abbreviation set by the school — in this case it stands for noodle learning platform course “84011” is the number of the course within the school’s course catalogue–in this case, it is a 5-character string, but theoretically could be longer or shorter. “-” the dash separates the course code from the section code “26” is the year the section is offered, in this case “2026” “w” is the term the section is offered, in this case “winter” “1” is the way to number different sections in the same term. In this case, it indicates that this is the first section offered in winter 2026.

startDatestring

The date and time public enrollment opens, in UTC. Returns the same value as enrollmentStartDate.

startDateWithTimezonestring

The date and time public enrollment opens, in the course’s local zone named by timezone. Returns the same value as enrollmentStartDateWithTimezone.

syllabusstring or null

Provides a detailed outline of course content, required readings, and other essential resources (e.g., “Shakespeare, King Henry V. Edited by T.W. Craik…”). This rich text area allows for a comprehensive syllabus description to help students understand course expectations and materials.

sysobject

System metadata for the course record. Contains a single identifier property.

Contains

idstring or null

The system-generated identifier for the course record as held in its system metadata block.

termsstring or null

Indicates the academic term during which the course is offered, selected from predefined options (e.g., “Spring 2025”). This single-select field helps specify the scheduled timing for course availability.

timezonestringAmerica/Anchorage, America/Phoenix, America/Chicago, America/New_York, Pacific/Honolulu, America/Denver, America/Los_Angeles, UTC

The academic term during which the course is offered (e.g., “Spring 2025”).

Other objects

CourseListResponse

PropertyTypeDescription
dataarrayThe matching course records.
metaobject—

CourseResponse

PropertyTypeDescription
dataobject—

ResponseMeta

PropertyTypeDescription
countintegerThe number of records in data. When paginating, this is the size of the page returned rather than the total across all pages.

CartResponse

PropertyTypeDescription
dataobject—

Cart

PropertyTypeDescription
cart_itemsarrayThe courses currently in the cart.
cart_items_countintegerThe number of items in the cart.
cart_urlstringWhere to send the learner to complete checkout on the NLP domain.
idintegerThe cart’s identifier, used in the path of the other cart endpoints.
partner_idstringThe Partner ID the cart belongs to.
session_idstringIdentifies the shopper. Send this in X-Noodle-Cart-Session-Id to reach the same cart again.
subtotalintegerThe cart total in cents.
user_idinteger or nullThe signed-in learner, where the cart belongs to one.

CartItem

PropertyTypeDescription
idintegerThe cart item’s identifier.
shopping_cart_idintegerThe cart this item belongs to.
course_idintegerThe course’s id from the Courses API.
external_idstring or nullThe course’s sys.id from the Courses API, where present.
quantityintegerAlways 1. A course can be enrolled in once.
cart_item_metadataobjectFree-form data stored with the item, including any enrollment details supplied when it was added.
created_atstring—
updated_atstring—

CartItemResponse

PropertyTypeDescription
dataobject—

AddCartItemRequest

Supply either `course_id` or `external_id` to identify the course.

PropertyTypeDescription
course_idintegerThe course’s id from the Courses API.
external_idstringThe course’s sys.id from the Courses API. Courses created more recently may not carry one, in which case use course_id.
quantityintegerAlways 1. A course can be enrolled in once.
item_typestring—
cart_item_metadataobjectOptional. Any key-value data to store with the item. Supply enrollment_data.team_id to enroll the learner as a member of that team; otherwise they are enrolled individually.

DeleteCartItemResponse

PropertyTypeDescription
dataobject—

WordPress integration

How Noodle’s own WordPress marketing sites consume this API, and what those sites hold outside it.

Overview

Three plugins connect an Engage CMS site to NLP. One retrieves and stores course data, one renders it on the page, and one adds the shopping cart. Together they produce a partner-branded marketing site whose course information stays aligned with NLP.

This section describes their behaviour so that an integration can reproduce it where needed. It is written for projects that will replace or rebuild an existing Noodle-built marketing site.

Noodle CMS Connections – Data held outside the API

Overview

Noodle builds partner marketing sites on Engage CMS, a WordPress theme and plugin suite that reads this API. Those sites display a combination of API data and information maintained locally in the CMS.

This distinction matters most when planning a project that will rebuild such a site against the API directly. Content that a site currently displays may originate in the CMS rather than in NLP, and would need an equivalent home in the new architecture. Establishing the proportion early is the single most useful input to an estimate.

Details

Three categories of data appear on a course record in the CMS:

  1. API-sourced — retrieved from NLP and normalised. Available to any client calling the API.
  2. Locally overridden — an administrator has replaced an NLP value for marketing purposes. NLP remains authoritative; the override exists only in the CMS.
  3. CMS-only — no NLP equivalent. These fields were introduced where partner marketing requirements moved ahead of the platform.

An integration reading the API directly receives category 1. Categories 2 and 3 are held in the CMS and would need to be reproduced.

Properties with no API equivalent
Field Type or values Notes
Format Asynchronous, Synchronous Maintained in the CMS as a filter criterion. Related to but distinct from the API’s isSelfPaced property, from which a Format label can be derived.
Credit eligibility Yes, No Indicates whether a course may count toward degree options.
Partner Text or select Maintained in the CMS. It does not correspond to school.university.name, which describes something different.
CEU credits Numeric, decimals supported NLP does not model credits. Held as CMS metadata and displayed with a configurable label.
Hide from results Boolean A display control. Removes a course from carousels and filtered results while leaving it published and reachable by direct URL.
Image alt text and ARIA labels Text Images retrieved from the API arrive without alt text, caption, or description. Accessibility metadata is authored in the CMS.
Administrator-defined fields Single-select or multi-select Site administrators can add categorisations for faceted search. The set varies by site.
Course hours Numeric Held in CMS course settings.
Duration Free text A CMS marketing field.
Continuing education fields Numeric or yes/no Held in the CMS; related to but separate from CEU credits.
API properties commonly overridden locally

These carry API values by default, which a CMS administrator may replace.

Field API property Behaviour
Title shortTitle The CMS value controls card and page display.
Featured image cardImage.url The API image is the default; a CMS featured image takes precedence.
Categories courseCategories Combined. The API supplies a defined list; administrators may add site-specific values.
Modality courseModality The API returns online, in-person, and hybrid. CMS filter lists may differ.
Price priceInCents A CMS-editable starting price is available, used chiefly for manually created cards.
Short description courseShortDescription CMS-editable. Nothing is rendered when the API value is empty.
Prerequisites prerequisites The API value is used first, with the CMS value as a fallback.
Course URL courseUrl Overridable per course. Implementations may append enroll=true to direct learners into the NLP enrollment flow.
Course description courseAbout Overridable per course.
How local edits are preserved

A record-level flag marks a course as locally edited, and the scheduled sync leaves those values in place. Two related behaviours follow from it:

  • Manually created course records are exempt from the rule that removes courses no longer present in the API.
  • When a course is deleted in NLP, the corresponding CMS record is removed.

The wider design principle is worth carrying into any reimplementation: record ownership is most reliable when stored explicitly rather than inferred from whether a record appears in an API response.

Details

NLP Courses is the data layer. It calls the API, retrieves course objects, and stores them as WordPress records alongside instructors and schools. It provides the administrative tools for configuration, refresh scheduling, and the local overrides described above.

Engage NLP is the presentation layer, supplying the page blocks that render course data. It expects data already retrieved by NLP Courses.

NLP Courses Shopping Cart adds the cart experience to the marketing site and keeps it aligned with NLP.

Normalisation

Retrieved values are mapped to stable internal names before rendering. This keeps display code independent of API naming conventions, which vary between properties, and confines any future API change to a single mapping layer. Some values are derived during this step, such as generating several image sizes from one source image.

Grouping courses

Courses carry a grouping key and grouping title, which relate several course records that should be presented together while remaining separate for enrollment. A programme running several sessions is the common case.

The grouping key determines which page layout applies:

  • A single-course page presents one enrollable course. It applies where a course carries no grouping key, or is the only active record with its key.
  • A grouped page presents several sessions on one page, typically one panel per session. It applies where several records share a grouping key.

Where a grouped page exists, the individual sessions are usually suppressed from catalogue listings so that the group is presented once. Two controls do this: a per-course setting that hides a course from listings while keeping its page reachable, and a per-block setting that suppresses a whole grouping key. The per-course setting takes precedence.

Automatic page creation

An administrator designates an existing page as a template. When the sync encounters a new course, it creates a page from that template, associates it with the course, and publishes it at an indexable address. New pages are not added to navigation menus; they are reached through catalogue listings and direct links, and can be edited afterwards.

The benefit of retaining this behaviour in a rebuild is that a change made in NLP reaches the site without a second edit. An approach based on manual entry or file import introduces that second step for every change, not only for new courses.

Refresh scheduling

Refresh runs on a per-site schedule — Never, Hourly, Twice daily, Daily, or Weekly — following the site’s timezone, and can also be triggered manually to pick up a change immediately.

Records are processed in batches of up to fifty, with progress reported by data source. Selecting Never is a practical way to hold a site’s content steady while a large set of changes is made in NLP.

Conditional rendering

Blocks display a column, field, or section only where a value is present. Enabling a field in a block does not cause it to appear if the underlying value is empty. This behaviour appears throughout the block library and is worth reproducing in any equivalent implementation.

Search indexing

Faceted filtering is provided by an indexing plugin, and some values are copied into separate fields so they can be indexed. Reindexing runs automatically after a sync and is also required after a change to the facet configuration. Any field added to a filter carries this indexing step with it, and sorting chronologically requires the relevant date to be exposed as an indexed value.

Harmony Hills College

Contact Us | Privacy Policy

Harmony Hills College

1313 Harmony Street

Harmony, NY 11102

P: 212-000-0000

© 2026 Harmony Hills College. All rights reserved.

Request Information

"id" is a required parameter

Your Shopping Cart

Review and manage items in your shopping cart

No items in your cart.

Total: $0.00
Close cart and continue browsing courses Enroll Now Proceed to enrollment with items in cart