Skip to content

Course structure (sections and pages)

GET
/wp-json/wp2/course-manager/v1/courses/{course_id}/structure
curl --request GET \
--url 'https://example.com/wp-json/wp2/course-manager/v1/courses/1/structure?post_type=page' \
--header 'X-WP-Nonce: <X-WP-Nonce>'

Read-only snapshot: sections in term_order, pages inside each section by menu_order ASC then title (same traversal as Static Builder CourseBuildStructure). pageIds is the flat order. Query lang is reserved for future WPML filtering (accepted, ignored in v1). Requires WP2LMS (CourseSectionRelation). Mutations stay on /sections, /assign, /reorder.

course_id
required
integer
>= 1

Course post ID (wp2lms_courses).

post_type
string
default: page

Bound CPT to list under sections (one type per request).

lang
string

Reserved for WPML language code (ignored in v1).

Course tree in Static Builder order. Empty course returns empty sections/pageIds.

Media typeapplication/json
object
courseId
required
integer
title
required
string
postType
required
string
sections
required
Array<object>
object
id
required
integer
name
required
string
slug
required
string
order
required
integer
pages
required
Array<object>
object
id
required
integer
title
required
string
slug
required
string
status
required
string
menuOrder
required
integer
pageIds
required

Flat page order (section term_order, then menu_order).

Array<integer>
Example
{
"courseId": 12,
"title": "Introductory compliance course",
"postType": "page",
"sections": [
{
"id": 18,
"name": "Introduction",
"slug": "compliance-intro",
"order": 0,
"pages": [
{
"id": 101,
"title": "What is compliance",
"slug": "what-is-compliance",
"status": "publish",
"menuOrder": 0
},
{
"id": 102,
"title": "Course goals",
"slug": "course-goals",
"status": "draft",
"menuOrder": 1
}
]
},
{
"id": 19,
"name": "Practice",
"slug": "compliance-practice",
"order": 1,
"pages": [
{
"id": 110,
"title": "Case study",
"slug": "case-study",
"status": "publish",
"menuOrder": 0
}
]
}
],
"pageIds": [
101,
102,
110
]
}

Wp2cm_bad_post_type

Media typeapplication/json
object
code

Machine-readable error or event code.

string
message

Message text (log, PIN, or password reset).

string
data

Extra WP_Error or license payload.

object
Examplegenerated
{
"code": "example",
"message": "example",
"data": {}
}

Not authenticated.

Media typeapplication/json
object
code

Machine-readable error or event code.

string
message

Message text (log, PIN, or password reset).

string
data

Extra WP_Error or license payload.

object
Examplegenerated
{
"code": "example",
"message": "example",
"data": {}
}

Insufficient capability or invalid REST nonce.

Media typeapplication/json
object
code

Machine-readable error or event code.

string
message

Message text (log, PIN, or password reset).

string
data

Extra WP_Error or license payload.

object
Examplegenerated
{
"code": "example",
"message": "example",
"data": {}
}

Wp2cm_invalid_course_post

Media typeapplication/json
object
code

Machine-readable error or event code.

string
message

Message text (log, PIN, or password reset).

string
data

Extra WP_Error or license payload.

object
Examplegenerated
{
"code": "example",
"message": "example",
"data": {}
}

Wp2cm_course_link_unavailable

Media typeapplication/json
object
code

Machine-readable error or event code.

string
message

Message text (log, PIN, or password reset).

string
data

Extra WP_Error or license payload.

object
Examplegenerated
{
"code": "example",
"message": "example",
"data": {}
}