MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with Courses Plus API.

Authenticating requests

To authenticate requests, include a Authorization header with the value "{YOUR_ACCESS_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by contacting our support team at support@architechpro.com

Courses

Sections (modules)

Endpoints to work with course sections (modules)

Course sections

requires authentication

Display a list of sections for a course

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/sections" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"course_type\": \"regular\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/sections"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "course_type": "regular"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "sections": [
     {
         "id": 123456789,
          "title": "Test preparation",
          "course_id": 123456789,
          "order": 1,
          "created_at": "2024-01-01T06:30:10+00:00",
          "updated_at": "2024-01-01T06:30:10+00:00",
          "removed": false,
          "visible": true,
      }
 ]
}
 

Request   

GET api/v1/courses/{courseId}/sections

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   integer     

ID of the course Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

course_type   string     

Course type (public|private|regular|connected) Example: regular

Response

Response Fields

id   integer     

Section ID

title   string     

Section title.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

order   integer     

Section order.

created_at   string     

Section creation date.

updated_at   string     

Section update date.

removed   boolean     

If section removed.

visible   boolean     

If section visible.

Course section

requires authentication

Display a section for selected course

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/sections/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"course_type\": \"regular\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/sections/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "course_type": "regular"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "section":
     {
         "id": 123456789,
         "title": "Test preparation",
         "course_id": 123456789,
         "order": 1,
         "created_at": "2024-01-01T06:30:10+00:00",
         "updated_at": "2024-01-01T06:30:10+00:00",
         "removed": false,
         "visible": true,
     }
}
 

Request   

GET api/v1/courses/{courseId}/sections/{sectionId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   integer     

ID of the course Example: 123456789

sectionId   integer     

ID of the section Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

course_type   string     

Course type (public|private|regular|connected) Example: regular

Response

Response Fields

id   integer     

Section ID

title   string     

Section title.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

order   integer     

Section order.

created_at   string     

Section creation date.

updated_at   string     

Section update date.

removed   boolean     

If section removed.

visible   boolean     

If section visible.

POST api/v1/courses/{courseId}/sections

requires authentication

Example request:
curl --request POST \
    "https://courses-plus-api.architechpro.cc/api/v1/courses/vel/sections" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"pif\",
    \"title\": \"eeomfe\",
    \"course_type\": \"regular\",
    \"status\": true,
    \"removed\": false,
    \"visible\": true
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/vel/sections"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "pif",
    "title": "eeomfe",
    "course_type": "regular",
    "status": true,
    "removed": false,
    "visible": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request   

POST api/v1/courses/{courseId}/sections

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   string     

Example: vel

Body Parameters

shop   string     

Must match the regex /^[a-zA-Z0-9-]+.myshopify.com$/. Must not be greater than 255 characters. Example: pif

title   string     

Must not be greater than 255 characters. Example: eeomfe

course_type   string     

'course_type' => 'required|string|in:open,free,private,regular,connected',. Example: regular

Must be one of:
  • open
  • free
  • private
  • regular
status   boolean  optional    

Example: true

removed   boolean  optional    

Example: false

visible   boolean  optional    

Example: true

DELETE api/v1/courses/{courseId}/sections/{sectionId}

requires authentication

Example request:
curl --request DELETE \
    "https://courses-plus-api.architechpro.cc/api/v1/courses/voluptas/sections/quo" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"iwjfoemcyueivl\",
    \"course_type\": \"open\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/voluptas/sections/quo"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "iwjfoemcyueivl",
    "course_type": "open"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request   

DELETE api/v1/courses/{courseId}/sections/{sectionId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   string     

Example: voluptas

sectionId   string     

Example: quo

Body Parameters

shop   string     

Must match the regex /^[a-zA-Z0-9-]+.myshopify.com$/. Must not be greater than 255 characters. Example: iwjfoemcyueivl

course_type   string     

Example: open

Must be one of:
  • open
  • free
  • private
  • regular

Student's courses

The student's courses resource allows you to to retrieve information about all available courses for student. This includes:

Student's courses

requires authentication

Display a list of all available courses for a student.

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/student-courses?shop=example-shop.myshopify.com&student_id=123456789&liquid_product_ids=12345678%2C21345678%2C32145678&variants_ids=12345678%2C21345678%2C32145678&tags=access_tag%2Cmy+tag%2CMultiple+words+tag" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/student-courses"
);

const params = {
    "shop": "example-shop.myshopify.com",
    "student_id": "123456789",
    "liquid_product_ids": "12345678,21345678,32145678",
    "variants_ids": "12345678,21345678,32145678",
    "tags": "access_tag,my tag,Multiple words tag",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
 "courses": [
     {
         "id": 123456789,
         "type": "regular",
         "title": "Paid course",
         "handle": "paid-course",
         "short_description": "Paid course",
         "description": "This is paid course",
         "image": "https://cdn.shopify.com/s/files/1/0504/5829/6488/products/no_image.png"
         "completionMinutes": 15
         "completionHours": 20,
         "tags": ['first', 'second', 'third', 'vip']
         "link": "https://cdn.shopify.com/s/files/1/0504/5829/6488/products/no_image.png",
         "total_lessons": 10,
         "finished_lessons": 2,
         "is_free": false,
         "enrolled_date": 1703548800,
         "prerequisite_json": "[\"8042275799318\", \"8002744353046\", \"8438703227158\"]",
         "instructor": {
             "id": 42,
             "shop": "example-shop.myshopify.com",
             "customer_id": 7012569871234,
             "email": "david.chen@summityoga.com",
             "title": "Senior Yoga Instructor",
             "bio": "David is a certified E-RYT 500 instructor with over a decade of experience in Vinyasa and Hatha yoga. His passion is making the principles of mindfulness and alignment accessible to everyone, from complete beginners to advanced practitioners. When he's not on the mat, David enjoys trail running and writing about holistic wellness.",
             "settings": "{\"show_phone\": false, \"contact_form_enabled\": true}",
             "twitter": "davidchen_yoga",
             "facebook": "DavidChenYoga",
             "linkedin": "in/david-chen-yoga",
             "instagram": "davidchen.mindfulmovement",
             "youtube": "https://www.youtube.com/c/DavidChenYoga",
             "website": "https://www.davidchenyoga.com",
             "created_at": "2023-05-15 14:22:05",
             "updated_at": "2024-10-28 09:15:33",
             "customer": {
              "id": 7012569871234,
              "lastName": "Chen",
              "firstName": "David",
              "email": "david.chen@summityoga.com",
              "state": "ENABLED",
              "displayName": "David Chen",
              "tags": [
                  "vip_customer",
                  "workshop_attendee_2023",
                  "yoga_pro_subscription",
                  "instructor",
                  "newsletter_subscriber"
              ],
              "gid": "gid://shopify/Customer/7012569871234"
             }
         }
     }
 ]
}
 

Request   

GET api/v1/student-courses

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Query Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

student_id   integer     

ID of the student (Shopify customer) Example: 123456789

liquid_product_ids   string  optional    

If you already have the list of course products purchased by a customer in your Liquid code (or in any other code you're creating) you may specify them here in order to improve response speed Example: 12345678,21345678,32145678

variants_ids   string  optional    

Comma seperated list of purchased products' variants ids Example: 12345678,21345678,32145678

tags   string  optional    

Comma seperated list of customer's tags Example: access_tag,my tag,Multiple words tag

Response

Response Fields

id   integer     

Course ID.

type   string     

Course type (public|private|regular|connected).

title   string     

Course title.

handle   string     

Course handle.

description   string     

Course description.

short_description   string     

Course short discription that could be used instead of description on course cards (if provided).

image   string     

Course image URL.

completionHours   string     

Estimated amount of hours (specified by admin) to complete the course.

completionMinutes   string     

Estimated amount of minutes (specified by admin) to complete the course.

tags   string[]     

Either associated product tags or course category (for private and public courses).

link   string     

Link to course download.

total_lessons   integer     

Number of lessons in a course.

finished_lessons   integer     

Number of finished lessons in a course.

is_free   boolean     

If the course is free.

enrolled_date   integer     

Date when student enrolled to a course (in Unix timestamp format).

prerequisite_json   string     

Json representation of an array of course ids that are required to complete before student starts this course.

instructor   object     

Course instructor.

Student's private courses

requires authentication

Display a list of all available private courses for a student.

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/student-courses/private?shop=example-shop.myshopify.com&student_id=123456789&liquid_product_ids[]=16&variants_ids[]=13&tags[]=dxbtyn" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/student-courses/private"
);

const params = {
    "shop": "example-shop.myshopify.com",
    "student_id": "123456789",
    "liquid_product_ids[0]": "16",
    "variants_ids[0]": "13",
    "tags[0]": "dxbtyn",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "private_courses": [
            {
                "private_course_id": 1,
                "shop": "example-shop.myshopify.com",
                "title": "test private course",
                "description": "long course description",
                "short_description": "short description for private course",
                "handle": "test_private_course",
                "certificate": 0,
                "completion_hours": 0,
                "completion_minutes": 0,
                "hidden": 0,
                "buttontext": "private course download link",
                "settings": null,
                "customer_tag_value": null,
                "customer_tag_enabled": 0,
                "order": 0,
                "image": "https://cdn.shopify.com/s/files/1/0504/5829/6488/products/no_image.png",
                "category": "my private courses",
                "created_at": "2023-10-12 07:25:52",
                "updated_at": "2023-10-12 07:25:52"
            }
        ]
    }
}
 

Request   

GET api/v1/student-courses/private

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Query Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

student_id   integer     

Id of the student to get private courses info Example: 123456789

liquid_product_ids   integer[]  optional    
variants_ids   integer[]  optional    
tags   string[]  optional    

Must not be greater than 255 characters.

Response

Response Fields

private_course_id   integer     

Private course ID.

shop   string     

Shop where a course was created.

title   string     

Course title.

description   string     

Course description.

short_description   string     

Course short discription that could be used instead of description on course cards (if provided).

handle   string     

Course handle.

certificate   integer     

Whether certificate send is enabled (0|1).

completion_hours   integer     

Estimated amount of hours (specified by admin) to complete the course.

completion_minutes   integer     

Estimated amount of minutes (specified by admin) to complete the course.

hidden   integer     

If the course is hidden (0 or 1) (set in course settings by admin).

buttontext   string     

Text displayed on button that allows to download course materials (set in course settings by admin).

settings   string     

Course settings in json format.

customer_tag_value   string     

Shopify customer tag that will be assigned to the customer after course completion (set in course settings by admin).

customer_tag_enabled   integer     

If the course allows access by tag (set in course settings by admin) (0|1).

order   integer     

Course order both in admin and on the storefront.

image   string     

Course image URL.

category   string     

Course category (set in course settings by admin).

create_at   string     

Course creation datetime.

updated_at   string     

Course updation datetime.

Course structure

Course lessons

requires authentication

Provides course lessons

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/lessons" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"course_type\": \"regular\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/lessons"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "course_type": "regular"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "lessons": [
     {
          "id": 123456789,
          "type": "regular",
          "course_id": 123456789,
          "course_type": "private",
          "title": "Getting stared with revision",
          "order": 1,
          "html": '<div>Hello world</div>',
          "removed": false,
          "created_at": "2024-01-01T06:30:10+00:00",
          "updated_at": "2024-01-01T06:30:10+00:00",
      }
 ]
}
 

Request   

GET api/v1/courses/{courseId}/lessons

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   integer     

ID of the course Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

course_type   string     

Course type (public|private|regular|connected) Example: regular

Response

Response Fields

id   integer     

Lesson ID.

type   string     

Lesson type.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

title   string     

Lesson title.

order   integer     

Lesson order.

html   string     

Lesson markup.

removed   boolean     

If lesson is removed.

created_at   string     

Creation date.

updated_at   string     

Updation date.

Course quizes

requires authentication

Provides course quizes

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/quizes" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"course_type\": \"regular\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/courses/123456789/quizes"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "course_type": "regular"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "quizes" => [
     {
         "id": 123456789,
          "title": "Revision test"",
           "course_id": 123456789,
           "course_type": "regular",
           "section_id": 123456789,
           "min_correct_answers_amount": 100,
           "questions_data": {
               "questions": {
                   "1": [
                       "Two plus two equals:"
                   ],
                   "2": [
                       "Ten times ten equals:"
                   ],
               },
               "question_files": {
                   "1": [
                       null
                   ],
                   "2": [
                       "https://cdn.shopify.com/s/files/1/0675/8377/0902/files/download.jpg?v=1670491061"
                   ],
               },
               "question_options": {
                   "1": {
                       "1": [
                           "2"
                       ],
                       "2": [
                           "4"
                       ]
                   },
                   "2": {
                       "1": [
                           "50"
                       ],
                       "2": [
                           "0"
                       ],
                       "3": [
                           "100"
                       ]
                   },
               },
               "question_answers": {
                   "1": [
                       "2"
                   ],
                   "2": [
                       "3"
                   ],
               }
           },
           "quiz_tag": "revision_complete",
           "require_correct_answers": 10,
           "active": true,
     }
 ]
}
 

Request   

GET api/v1/courses/{courseId}/quizes

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

courseId   integer     

ID of the course Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

course_type   string     

Course type (public|private|regular|connected) Example: regular

Response

Response Fields

id   integer     

Quiz ID.

title   string     

Quiz title.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

section_id   integer     

Section ID.

min_correct_answers_amount   integer     

Minimum number of correct answers to complete the quiz.

questions_data   object     

Questions data: questions itself, question options, questions files, questions answers.

quiz_tag   string     

Tag to be assign to customer after quiz comleteion.

require_correct_answers   boolean     

If each quiz answer is requied to be correct before advancing to the next question.

active   boolean     

If quiz is available (active).

Shop courses

The shop courses resource allows you to retrieve information about all available courses for a shop.

Shop courses

requires authentication

Display all courses for a shop.

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/shop-courses" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/shop-courses"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "courses": [
     {
         "id": 123456789,
         "type": "regular",
         "title": "Paid course",
         "handle": "paid-course",
      }
 ]
}
 

Request   

GET api/v1/shop-courses

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

id   integer     

Course ID

type   string     

Course type (public|private|regular|connected).

title   string     

Course title.

handle   string     

Course handle.

Course instructors

Course instructors

requires authentication

Get information about course instructor.

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/instructors/get-course-instructor" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"product_id\": 123456789,
    \"type\": \"regular\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/instructors/get-course-instructor"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "product_id": 123456789,
    "type": "regular"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
     "id": 37,
     "shop": "example-shop.myshopify.com"
     "customer_id": 6675927990550,
     "email": "johnsmith@mail.com",
     "title": "Specialist"
     "bio":"John Smith, expert in yoga field",
     "twitter": "",
     "facebook": "",
     "linkedin": "",
     "instagram": "",
     "youtube": "",
     "website": "john-smith.com",
     "created_at": "2023-12-01 09:30:00",
     "updated_at": "2023-12-02 10:20:00",
     "customer": {
         "id": 6675927990550,
         "lastName": "Doe"
         "firstName": "John"
         "email": "johndoe@test.com"
         "state": "ENABLED"
         "displayName": "John Doe"
         "tags": ["vip", "instructor"],
         "gid": "gid:\/\/shopify\/Customer\/6675927990550"
     }
 }
 

Request   

GET api/v1/instructors/get-course-instructor

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

product_id   integer     

ID of the product to get the course info Example: 123456789

type   string     

Course type (public|private|regular|connected) Example: regular

Response

Response Fields

id   integer     

Instructor's ID.

shop   string     

Shopify shop.

customer_id   integer     

Associated customer ID.

email   string     

Associated customer email.

title   string     

Instructor's title.

bio   string     

Instructor's bio.

twitter   string     

Instructor's twitter link.

facebook   string     

Instructor's facebook link.

linkedin   string     

Instructor's linkedin link.

instagram   string     

Instructor's instagram link.

youtube   string     

Instructor's youtube link.

website   string     

Instructor's website link.

created_at   string     

Datetime when instructor was created.

updated_at   string     

Datetime when instructor was updated.

customer   object     

Associated customer.

Lessons

Endpoints to work with course lessons

Section lessons

requires authentication

Display a list of lessons for a section

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/lessons" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/lessons"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "lessons": [
     {
         "id": 123456789,
         "type": "regular",
         "course_id": 123456789,
         "course_type": "private",
         "title": "Getting stared with revision",
         "order": 1,
         "html": '<div>Hello world</div>',
         "removed": false,
         "created_at": "2024-01-01T06:30:10+00:00",
         "updated_at": "2024-01-01T06:30:10+00:00",
     }
 ]
}
 

Request   

GET api/v1/sections/{sectionId}/lessons

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

sectionId   integer     

ID of the course section Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

id   integer     

Lesson ID

type   string     

Lesson type.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

title   string     

Lesson title.

order   integer     

Lesson order.

html   string     

Lesson markup.

removed   boolean     

If lesson is removed.

created_at   string     

Creation date.

updated_at   string     

Updation date.

Section lesson

requires authentication

Display a lesson for a section

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/lessons/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/lessons/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "lesson": {
     "id": 123456789,
     "type": "regular",
     "course_id": 123456789,
     "course_type": "private",
     "title": "Getting stared with revision",
     "order": 1,
     "html": '<div>Hello world</div>',
     "removed": false,
     "created_at": "2024-01-01T06:30:10+00:00",
     "updated_at": "2024-01-01T06:30:10+00:00",
  }
}
 

Request   

GET api/v1/sections/{sectionId}/lessons/{lessonId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

sectionId   integer     

ID of the course section Example: 123456789

lessonId   integer     

ID of the section lesson Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

id   integer     

Lesson ID

type   string     

Lesson type.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

title   string     

Lesson title.

order   integer     

Lesson order.

html   string     

Lesson markup.

removed   boolean     

If lesson is removed.

created_at   string     

Creation date.

updated_at   string     

Updation date.

Quizes

Endpoints to work with quizes

Course section quiz

requires authentication

Display a quiz for a course section

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/quiz" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/sections/123456789/quiz"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
 "quizes" => [
     {
         "id": 123456789,
         "title": "Revision test"",
         "course_id": 123456789,
         "course_type": "regular",
         "section_id": 123456789,
         "min_correct_answers_amount": 100,
         "questions_data": {
             "questions": {
                 "1": [
                     "Two plus two equals:"
                 ],
                 "2": [
                     "Ten times ten equals:"
                 ],
               },
               "question_files": {
                   "1": [
                       null
                   ],
                   "2": [
                       "https://cdn.shopify.com/s/files/1/0675/8377/0902/files/download.jpg?v=1670491061"
                   ],
               },
               "question_options": {
                   "1": {
                       "1": [
                           "2"
                       ],
                       "2": [
                           "4"
                       ]
                   },
                   "2": {
                       "1": [
                           "50"
                       ],
                       "2": [
                           "0"
                       ],
                       "3": [
                           "100"
                       ]
                   },
               },
               "question_answers": {
                   "1": [
                       "2"
                   ],
                   "2": [
                       "3"
                   ],
               }
           },
           "quiz_tag": "revision_complete",
           "require_correct_answers": 10,
           "active": true,
     }
 ]
}
 

Request   

GET api/v1/sections/{sectionId}/quiz

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

sectionId   integer     

ID of the course section Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

id   integer     

Quiz ID

title   string     

Quiz title.

course_id   integer     

Course ID.

course_type   string     

Course type (public|private|regular|connected).

section_id   integer     

Section ID.

min_correct_answers_amount   integer     

Minimum number of correct answers to complete the quiz.

questions_data   object     

Questions data: questions itself, question options, questions files, questions answers.

quiz_tag   string     

Tag to be assign to customer after quiz comleteion.

require_correct_answers   boolean     

If each quiz answer is requied to be correct before advancing to the next question.

active   boolean     

If quiz is available (active).

Students

Endpoints to work with student access to courses

Provide course access to a specific student (customer)

requires authentication

Allows to provide access to a course (or membership) for a customer (student)

Example request:
curl --request POST \
    "https://courses-plus-api.architechpro.cc/api/v1/attendees/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"product_id\": \"12345678\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/attendees/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "product_id": "12345678"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "provided": true
}
 

Request   

POST api/v1/attendees/{studentId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

studentId   integer     

ID of the student (Shopify customer) Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

product_id   string     

Shopify product ID Example: 12345678

Response

Response Fields

provided   boolean     

boolen If the access to a course was provided

Revoke course access to a specific student (customer)

requires authentication

Allows to revoke access to a course (or membership) for a customer (student)

Example request:
curl --request DELETE \
    "https://courses-plus-api.architechpro.cc/api/v1/attendees/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"product_id\": \"12345678\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/attendees/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "product_id": "12345678"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "revoked": true
}
 

Request   

DELETE api/v1/attendees/{studentId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

studentId   integer     

ID of the student (Shopify customer) Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

product_id   string     

Shopify product ID Example: 12345678

Response

Response Fields

provided        

boolen If the access to a course was revoked

Membership / Bundles

Endpoints to work with bundles

Display list of courses connected with a product (could be a bundle (membership) or just a product)

requires authentication

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "product_ids": [
        12345678,
        12345679,
        12345679
    ]
}
 

Request   

GET api/v1/membership-courses/{membershipId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

membershipId   integer     

The ID of the bundle (membership) Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

product_ids   string[]     

Array if courses ids that are connected with a product

Add a course (by providing product_id) to a bundle (membership)

requires authentication

Example request:
curl --request PUT \
    "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"product_id\": \"12345678\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "product_id": "12345678"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "updated": true
}
 

Request   

PUT api/v1/membership-courses/{membershipId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

membershipId   integer     

The ID of the bundle (membership) Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

product_id   string     

Shopify product ID Example: 12345678

Response

Response Fields

updated   boolean     

boolen If a course was added to a bundle

Delete a course (by providing product_id) from a bundle (membership)

requires authentication

Example request:
curl --request DELETE \
    "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"product_id\": \"12345678\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/membership-courses/123456789"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "product_id": "12345678"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "deleted": "true"
}
 

Request   

DELETE api/v1/membership-courses/{membershipId}

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

URL Parameters

membershipId   integer     

The ID of the bundle (membership) Example: 123456789

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

product_id   string     

Shopify product ID Example: 12345678

Response

Response Fields

deleted   string     

boolen If a course was deleted from a bundle

Shop

Endpoints to get information by shop

Endpoints to get information about shop

requires authentication

Check if Courses Plus app is installed on the shop

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/installed" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/installed"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "installed": true
}
 

Request   

GET api/v1/installed

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

Response

Response Fields

installed   boolean     

boolen If the app is installed on the shop

Courses extensions

APIs for extensions requests

Courses extensions

requires authentication

Check if order items contains course data

Example request:
curl --request GET \
    --get "https://courses-plus-api.architechpro.cc/api/v1/extensions/check-courses-data" \
    --header "Authorization: {YOUR_ACCESS_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Access-Control-Allow-Origin: *" \
    --data "{
    \"shop\": \"example-shop.myshopify.com\",
    \"orderId\": \"5904502620480\"
}"
const url = new URL(
    "https://courses-plus-api.architechpro.cc/api/v1/extensions/check-courses-data"
);

const headers = {
    "Authorization": "{YOUR_ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Access-Control-Allow-Origin": "*",
};

let body = {
    "shop": "example-shop.myshopify.com",
    "orderId": "5904502620480"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "status": "true"
}
 

Request   

GET api/v1/extensions/check-courses-data

Headers

Authorization        

Example: {YOUR_ACCESS_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Access-Control-Allow-Origin        

Example: *

Body Parameters

shop   string     

Shopify shop Example: example-shop.myshopify.com

orderId   string     

order ID Example: 5904502620480