For the complete documentation index, see llms.txt. This page is also available as Markdown.

APIs

List account admins

get
Authorizations
AuthorizationstringRequired
Query parameters
pageintegerOptional

Page number (defaults to 0)

sortstringOptional

Sort field (only 'name')

searchstringOptional

Search query to filter account admins

per_pageintegerOptional

Results per page

Responses
200

account admins listed

application/json
total_elementsintegerRequired

Total number of admins across all pages

page_numberintegerRequired

Current page number (0-based)

sizeintegerRequired

Page size

permission_keysstring[]Required

All available permission keys

total_pagesintegerRequired

Total number of pages

get/api/v1/account_admins
GET /api/v1/account_admins HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

account admins listed

{
  "content": [
    {
      "user": {
        "id": 1,
        "canvas_user_id": 1,
        "canvas_user_uuid": "text",
        "name": "text",
        "email": "text",
        "profile_link": "text",
        "canvas_user_id_string": "text"
      },
      "accounts": [
        {
          "id": 1,
          "name": "text"
        }
      ],
      "permissions": [
        {
          "key": "text",
          "value": "text"
        }
      ]
    }
  ],
  "total_elements": 1,
  "page_number": 1,
  "size": 1,
  "permission_keys": [
    "text"
  ],
  "total_pages": 1
}

Create an account admin association

post

Creates a new account admin or adds account associations to an existing admin. account_ids may contain multiple account IDs.

Authorizations
AuthorizationstringRequired
Body
canvas_user_idstringRequired

Canvas user ID

user_namestringRequired

Full name of the user

email_addressstringRequired

Email address of the user

account_idsinteger[]Required

Account IDs to associate with the user

Responses
201

account admin created

application/json
canvas_user_idintegerRequired

Canvas user ID of the admin

account_idsinteger[]Required

Account IDs the user now administers

post/api/v1/account_admins
POST /api/v1/account_admins HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 85

{
  "canvas_user_id": "text",
  "user_name": "text",
  "email_address": "text",
  "account_ids": [
    1
  ]
}
201

account admin created

{
  "canvas_user_id": 1,
  "account_ids": [
    1
  ]
}

Remove an admin from a specific account

delete

Removes the association between a user and a specific account.

Authorizations
AuthorizationstringRequired
Path parameters
idstringRequired

Canvas user ID of the admin

account_idintegerRequired

Account ID to remove

Responses
204

association removed

No content

delete/api/v1/account_admins/{id}/accounts/{account_id}
DELETE /api/v1/account_admins/{id}/accounts/{account_id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

association removed

No content

Remove all account associations for an admin

delete

Removes all account associations for the specified user.

Authorizations
AuthorizationstringRequired
Path parameters
idstringRequired

Canvas user ID of the admin

Responses
204

all associations removed

No content

delete/api/v1/account_admins/{id}
DELETE /api/v1/account_admins/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

all associations removed

No content

Get products analytics

post
Authorizations
AuthorizationstringRequired
Body
account_idsinteger[]Optional

Restrict to these account ids

product_idsinteger[]Optional

Restrict to these product ids

creation_date_fromstring · date-timeOptional
creation_date_tostring · date-timeOptional
enrollment_count_minintegerOptional
enrollment_count_maxintegerOptional
completion_count_minintegerOptional
completion_count_maxintegerOptional
dropped_count_minintegerOptional
dropped_count_maxintegerOptional
listing_price_minnumberOptional
listing_price_maxnumberOptional
revenue_minnumberOptional
revenue_maxnumberOptional
certificate_offeredbooleanOptional
Responses
200

product analytics rows

application/json
post/api/v1/analytics/products
POST /api/v1/analytics/products HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 432

{
  "account_ids": [
    1
  ],
  "product_ids": [
    1
  ],
  "product_statuses": [
    "OPEN"
  ],
  "promo_codes": [
    "APPLIED"
  ],
  "creation_date_from": "2026-01-01T00:00:00.000Z",
  "creation_date_to": "2026-01-01T00:00:00.000Z",
  "enrollment_count_min": 1,
  "enrollment_count_max": 1,
  "completion_count_min": 1,
  "completion_count_max": 1,
  "dropped_count_min": 1,
  "dropped_count_max": 1,
  "listing_price_min": 1,
  "listing_price_max": 1,
  "revenue_min": 1,
  "revenue_max": 1,
  "certificate_offered": true
}
200

product analytics rows

{
  "products": [
    {
      "account_id": 1,
      "account_name": "text",
      "product": {
        "name": "text",
        "id": 1,
        "url": "text",
        "sku": "text"
      },
      "product_status": "text",
      "created_at": "text",
      "canvas_course_id": 1,
      "canvas_section_id": 1,
      "enrollment_count": 1,
      "dropped_count": 1,
      "completion_count": 1,
      "currency": "text",
      "list_price": 1,
      "promo_codes": [
        "text"
      ],
      "discount": 1,
      "revenue": 1,
      "credits": 1,
      "certificate_offered": true,
      "instructor_names": [
        "text"
      ],
      "primary_instructor_name": "text",
      "archived_at": "text",
      "total_rows": 1
    }
  ]
}

Get enrollments analytics

post
Authorizations
AuthorizationstringRequired
Body
account_idsinteger[]Optional

Restrict to these account ids

product_idsinteger[]Optional

Restrict to these product ids

student_idsinteger[]Optional
student_canvas_user_idsinteger[]Optional
enrollment_date_fromstring · date-timeOptional
enrollment_date_tostring · date-timeOptional
completion_date_fromstring · date-timeOptional
completion_date_tostring · date-timeOptional
Responses
200

enrollment analytics rows

application/json
post/api/v1/analytics/enrollments
POST /api/v1/analytics/enrollments HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 368

{
  "account_ids": [
    1
  ],
  "product_ids": [
    1
  ],
  "product_statuses": [
    "OPEN"
  ],
  "promo_codes": [
    "APPLIED"
  ],
  "student_ids": [
    1
  ],
  "student_canvas_user_ids": [
    1
  ],
  "enrollment_date_from": "2026-01-01T00:00:00.000Z",
  "enrollment_date_to": "2026-01-01T00:00:00.000Z",
  "enrollment_statuses": [
    "ACTIVE"
  ],
  "completion_date_from": "2026-01-01T00:00:00.000Z",
  "completion_date_to": "2026-01-01T00:00:00.000Z"
}
200

enrollment analytics rows

{
  "enrollments": [
    {
      "id": 1,
      "account_id": 1,
      "account_name": "text",
      "product": {
        "name": "text",
        "id": 1,
        "url": "text",
        "sku": "text"
      },
      "product_status": "text",
      "canvas_course_id": 1,
      "canvas_section_id": 1,
      "student": {
        "canvas_user_id": 1,
        "name": "text",
        "email": "text",
        "canvas_user_id_string": "text"
      },
      "requirement_count": 1,
      "requirement_completed_count": 1,
      "requirement_completed_percentage": 1,
      "created_at": "text",
      "completed_at": "text",
      "enrollment_status": "text",
      "certificate_attainable": true,
      "certificate_offered": true,
      "custom_fields": [
        {
          "key": "text",
          "value": "text"
        }
      ],
      "certificate_url": "text",
      "archived_at": "text",
      "total_rows": 1
    }
  ]
}

Get orders analytics

post
Authorizations
AuthorizationstringRequired
Body
account_idsinteger[]Optional

Restrict to these account ids

product_idsinteger[]Optional

Restrict to these product ids

student_idsinteger[]Optional
student_canvas_user_idsinteger[]Optional
purchaser_idsinteger[]Optional
purchaser_canvas_user_idsinteger[]Optional
bulk_purchases_onlybooleanOptional
purchase_date_fromstring · date-timeOptional
purchase_date_tostring · date-timeOptional
order_feenumberOptional
listing_price_minnumberOptional
listing_price_maxnumberOptional
revenue_minnumberOptional
revenue_maxnumberOptional
Responses
200

order analytics rows

application/json
post/api/v1/analytics/orders
POST /api/v1/analytics/orders HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 402

{
  "account_ids": [
    1
  ],
  "product_ids": [
    1
  ],
  "product_statuses": [
    "OPEN"
  ],
  "promo_codes": [
    "APPLIED"
  ],
  "student_ids": [
    1
  ],
  "student_canvas_user_ids": [
    1
  ],
  "purchaser_ids": [
    1
  ],
  "purchaser_canvas_user_ids": [
    1
  ],
  "bulk_purchases_only": true,
  "purchase_date_from": "2026-01-01T00:00:00.000Z",
  "purchase_date_to": "2026-01-01T00:00:00.000Z",
  "order_fee": 1,
  "listing_price_min": 1,
  "listing_price_max": 1,
  "revenue_min": 1,
  "revenue_max": 1
}
200

order analytics rows

{
  "orders": [
    {
      "account_id": 1,
      "account_name": "text",
      "product": {
        "name": "text",
        "id": 1,
        "url": "text",
        "sku": "text"
      },
      "product_status": "text",
      "canvas_course_id": 1,
      "canvas_section_id": 1,
      "purchaser": {
        "id": 1,
        "canvas_user_id": 1,
        "name": "text",
        "email": "text",
        "canvas_user_id_string": "text"
      },
      "purchased_at": "text",
      "order_id": 1,
      "order_item_id": 1,
      "reference_id": "text",
      "list_price": 1,
      "currency": "text",
      "promo_codes": [
        "text"
      ],
      "discount": 1,
      "revenue": 1,
      "bulk_purchase": true,
      "seat_count": 1,
      "bulk_enrollments": [
        {
          "id": 1,
          "canvas_user_id": 1,
          "name": "text",
          "email": "text",
          "canvas_user_id_string": "text"
        }
      ],
      "last_modification_date": "text",
      "revenue_change_history": [
        {
          "modification_date": "text",
          "new_value": 1,
          "new_value_currency": "text",
          "old_value": 1,
          "old_value_currency": "text",
          "reason": "text",
          "user_name": "text",
          "user_profile_link": "text"
        }
      ],
      "total_rows": 1
    }
  ]
}

Get users analytics

post
Authorizations
AuthorizationstringRequired
Body
account_idsinteger[]Optional

Restrict to these account ids

product_idsinteger[]Optional

Restrict to these product ids

student_idsinteger[]Optional
student_canvas_user_idsinteger[]Optional
enrollment_count_minintegerOptional
enrollment_count_maxintegerOptional
last_enrollment_date_fromstring · date-timeOptional
last_enrollment_date_tostring · date-timeOptional
registration_date_fromstring · date-timeOptional
registration_date_tostring · date-timeOptional
Responses
200

user analytics rows

application/json
post/api/v1/analytics/users
POST /api/v1/analytics/users HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 431

{
  "account_ids": [
    1
  ],
  "product_ids": [
    1
  ],
  "product_statuses": [
    "OPEN"
  ],
  "promo_codes": [
    "APPLIED"
  ],
  "student_ids": [
    1
  ],
  "student_canvas_user_ids": [
    1
  ],
  "enrollment_count_min": 1,
  "enrollment_count_max": 1,
  "last_enrollment_date_from": "2026-01-01T00:00:00.000Z",
  "last_enrollment_date_to": "2026-01-01T00:00:00.000Z",
  "registration_date_from": "2026-01-01T00:00:00.000Z",
  "registration_date_to": "2026-01-01T00:00:00.000Z",
  "registered_through": [
    "CANVAS"
  ]
}
200

user analytics rows

{
  "users": [
    {
      "id": 1,
      "canvas_user_id": 1,
      "name": "text",
      "email": "text",
      "account_id": 1,
      "account_name": "text",
      "registered_through": "text",
      "registered_at": "text",
      "enrollment_count": 1,
      "last_enrolled_at": "text",
      "custom_fields": [
        {
          "key": "text",
          "value": "text"
        }
      ],
      "total_rows": 1
    }
  ]
}

Get a specific applicant record

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this applicant

Responses
200

applicant found

application/json
get/api/v1/applicants/{id}
GET /api/v1/applicants/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

applicant found

{
  "applicant": {
    "id": 1,
    "user": {
      "id": 1,
      "name": "text",
      "email": "text"
    },
    "listing": {
      "id": 1,
      "title": "text"
    },
    "notified_of_opening_at": "text",
    "status": "text",
    "created_at": "text",
    "updated_at": "text"
  }
}

List applicants

get
Authorizations
AuthorizationstringRequired
Query parameters
listing_idintegerOptional

Only include applicants for the specified listing

statusstringOptional

Only include applicants with the specified status (waitlist, accepted, declined, or expired)

Responses
200

applicants listed

application/json
get/api/v1/applicants
GET /api/v1/applicants HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

applicants listed

{
  "applicants": [
    {
      "id": 1,
      "user": {
        "id": 1,
        "name": "text",
        "email": "text"
      },
      "listing": {
        "id": 1,
        "title": "text"
      },
      "notified_of_opening_at": "text",
      "status": "text",
      "created_at": "text",
      "updated_at": "text"
    }
  ]
}

Delete applicants

delete
Authorizations
AuthorizationstringRequired
Query parameters
listing_idintegerRequired

Only delete applicants for the specified listing

canvas_user_idintegerOptional

Only delete applicants with the specified Canvas user ID

Responses
204

applicants deleted

No content

delete/api/v1/applicants
DELETE /api/v1/applicants?listing_id=1 HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

applicants deleted

No content

Get a specific bulk enrollment

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Order ID

Responses
200

bulk enrollment found

application/json
get/api/v1/order_items/history/bulk_enrollments/{id}
GET /api/v1/order_items/history/bulk_enrollments/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

bulk enrollment found

{
  "bulk_purchase": {
    "order": {
      "id": 1,
      "created_at": "text",
      "updated_at": "text",
      "full_id": "text",
      "account_id": 1,
      "user_id": 1,
      "canvas_user_id": 1,
      "canvas_root_account_uuid": "text",
      "source": "text",
      "currency": "text",
      "purchased_at": "text",
      "total": 1,
      "email": "text",
      "name": "text",
      "items": [
        {
          "id": 1,
          "created_at": "text",
          "updated_at": "text",
          "order_id": 1,
          "item_id": 1,
          "amount": 1,
          "canvas_root_account_uuid": "text",
          "discounted_amount": 1,
          "quantity": 1,
          "unit_price": 1
        }
      ]
    },
    "product": {
      "id": 1,
      "visibility": "text",
      "enrollment_open": true,
      "title": "text",
      "enrollment_fee": 1,
      "account_id": 1,
      "type": "text",
      "canvas_root_account_uuid": "text",
      "waitlist": true,
      "limited": true,
      "started": true,
      "program": true,
      "course": true,
      "ended": true,
      "days_to_complete": 1,
      "enrollment_cap": 1
    },
    "bulk_invitations": [
      {
        "order_item_id": 1,
        "invitation_id": 1,
        "status": "text"
      }
    ]
  }
}

List bulk enrollments

get
Authorizations
AuthorizationstringRequired
Query parameters
fromstring · date-timeOptional

Only include bulk enrollments from this date

tostring · date-timeOptional

Only include bulk enrollments to this date

canvas_user_idsinteger[]Optional

Only include bulk enrollments for the specified Canvas user IDs

Responses
200

bulk enrollments listed

application/json
get/api/v1/order_items/history/bulk_enrollments
GET /api/v1/order_items/history/bulk_enrollments HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

bulk enrollments listed

{
  "bulk_enrollments": [
    {
      "bulk_purchase": {
        "order": {
          "id": 1,
          "created_at": "text",
          "updated_at": "text",
          "full_id": "text",
          "account_id": 1,
          "user_id": 1,
          "canvas_user_id": 1,
          "canvas_root_account_uuid": "text",
          "source": "text",
          "currency": "text",
          "purchased_at": "text",
          "total": 1,
          "email": "text",
          "name": "text",
          "items": [
            {
              "id": 1,
              "created_at": "text",
              "updated_at": "text",
              "order_id": 1,
              "item_id": 1,
              "amount": 1,
              "canvas_root_account_uuid": "text",
              "discounted_amount": 1,
              "quantity": 1,
              "unit_price": 1
            }
          ]
        },
        "product": {
          "id": 1,
          "visibility": "text",
          "enrollment_open": true,
          "title": "text",
          "enrollment_fee": 1,
          "account_id": 1,
          "type": "text",
          "canvas_root_account_uuid": "text",
          "waitlist": true,
          "limited": true,
          "started": true,
          "program": true,
          "course": true,
          "ended": true,
          "days_to_complete": 1,
          "enrollment_cap": 1
        },
        "bulk_invitations": [
          {
            "order_item_id": 1,
            "invitation_id": 1,
            "status": "text"
          }
        ]
      }
    }
  ]
}

List catalogs

get
Authorizations
AuthorizationstringRequired
Responses
200

catalogs listed

application/json
get/api/v1/catalogs
GET /api/v1/catalogs HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

catalogs listed

{
  "catalogs": [
    {
      "id": 1,
      "name": "text",
      "parent": {
        "id": 1,
        "name": "text"
      },
      "created_at": "text",
      "updated_at": "text",
      "canvas_domain": "text",
      "canvas_id": 1,
      "settings": {
        "privacy_policy_url": "text",
        "terms_url": "text",
        "currency": "text",
        "supported_payment_types": "text",
        "time_zone": "text",
        "country": "text",
        "measurement": "text",
        "email_from_name": "text",
        "email_from_address": "text",
        "allow_user_registration": true,
        "title_tag": "text",
        "meta_description": "text",
        "custom_head_content": "text",
        "custom_body_content": "text",
        "show_listings_in_parent": true,
        "order_id_prefix": "text",
        "inherit_categories": true,
        "inherit_user_defined_fields": true,
        "inherit_purchase_order_institution_details": true,
        "beta_canvas_domain": "text",
        "skus_enabled": true,
        "canvas_enrollment_events": true,
        "include_noncatalog_courses_in_dashboard": true,
        "external_idp_logout_workflow": true,
        "private_catalog": true,
        "bulk_purchase_disabled": true,
        "enroll_button_behavior": "text",
        "external_registration_url": "text",
        "external_registration_public_key": "text",
        "redirect_external_registration_condition": "text",
        "include_captcha": true,
        "user_registration_domain_restriction_type": "text",
        "user_registration_domain_deny_list": "text",
        "user_registration_domain_allow_list": "text",
        "restrict_enrollment_to_user_registration_domain": true,
        "frame_ancestors": "text",
        "email_reply_to": "text",
        "has_sso_warning": true,
        "measurement_id": "text",
        "redirect_non_admins_to_root_url": true,
        "canvas_feature_send_usage_metrics": true,
        "disable_passive_login": true,
        "new_storefront": true,
        "tags_permission_default_value": true,
        "cross_listing_permission_default_value": true,
        "inherit_storefront_theme": true,
        "canvas_authentication_provider_id": "text",
        "udf_collection_level": "text",
        "disable_drop_course_button": true,
        "google_tag_manager_id": "text",
        "linkedin_partner_id": "text",
        "enable_credentials": true,
        "enable_impact": true,
        "enable_pathways": true,
        "hide_missing_pathway": true,
        "storefront_product_recommendation_behavior": "text",
        "storefront_product_recommendation_count": 1,
        "enable_recommendations": true,
        "product_page_recommendation_fallback": "text",
        "product_page_recommendation_count": 1,
        "enable_recommendations_for_product_page": true,
        "hide_self_paced_label": true,
        "login_auth_providers": "text",
        "multiple_promo_codes_enabled": true,
        "custom_instructor_label": "text",
        "custom_instructor_label_plural": "text",
        "purchase_seats_for_others_enabled": true,
        "hide_no_badges_text": true,
        "load_custom_scripts": true,
        "enable_purchase_orders": true,
        "enable_detail_codes": true
      },
      "user_defined_fields": [
        {
          "list_order": 1,
          "name": "text",
          "label": "text",
          "field_type": "text",
          "required": true,
          "required_message": "text",
          "metadata": {},
          "hide_in_user_workflow": true
        }
      ],
      "logo": "text",
      "locale": "text",
      "url": "text",
      "measurement": "text",
      "storefront_theme_id": "text"
    }
  ]
}

Get a specific catalog

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this catalog

Responses
200

catalog found

application/json
get/api/v1/catalogs/{id}
GET /api/v1/catalogs/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

catalog found

{
  "account": {
    "id": 1,
    "name": "text",
    "parent": {
      "id": 1,
      "name": "text"
    },
    "created_at": "text",
    "updated_at": "text",
    "canvas_domain": "text",
    "canvas_id": 1,
    "settings": {
      "privacy_policy_url": "text",
      "terms_url": "text",
      "currency": "text",
      "supported_payment_types": "text",
      "time_zone": "text",
      "country": "text",
      "measurement": "text",
      "email_from_name": "text",
      "email_from_address": "text",
      "allow_user_registration": true,
      "title_tag": "text",
      "meta_description": "text",
      "custom_head_content": "text",
      "custom_body_content": "text",
      "show_listings_in_parent": true,
      "order_id_prefix": "text",
      "inherit_categories": true,
      "inherit_user_defined_fields": true,
      "inherit_purchase_order_institution_details": true,
      "beta_canvas_domain": "text",
      "skus_enabled": true,
      "canvas_enrollment_events": true,
      "include_noncatalog_courses_in_dashboard": true,
      "external_idp_logout_workflow": true,
      "private_catalog": true,
      "bulk_purchase_disabled": true,
      "enroll_button_behavior": "text",
      "external_registration_url": "text",
      "external_registration_public_key": "text",
      "redirect_external_registration_condition": "text",
      "include_captcha": true,
      "user_registration_domain_restriction_type": "text",
      "user_registration_domain_deny_list": "text",
      "user_registration_domain_allow_list": "text",
      "restrict_enrollment_to_user_registration_domain": true,
      "frame_ancestors": "text",
      "email_reply_to": "text",
      "has_sso_warning": true,
      "measurement_id": "text",
      "redirect_non_admins_to_root_url": true,
      "canvas_feature_send_usage_metrics": true,
      "disable_passive_login": true,
      "new_storefront": true,
      "tags_permission_default_value": true,
      "cross_listing_permission_default_value": true,
      "inherit_storefront_theme": true,
      "canvas_authentication_provider_id": "text",
      "udf_collection_level": "text",
      "disable_drop_course_button": true,
      "google_tag_manager_id": "text",
      "linkedin_partner_id": "text",
      "enable_credentials": true,
      "enable_impact": true,
      "enable_pathways": true,
      "hide_missing_pathway": true,
      "storefront_product_recommendation_behavior": "text",
      "storefront_product_recommendation_count": 1,
      "enable_recommendations": true,
      "product_page_recommendation_fallback": "text",
      "product_page_recommendation_count": 1,
      "enable_recommendations_for_product_page": true,
      "hide_self_paced_label": true,
      "login_auth_providers": "text",
      "multiple_promo_codes_enabled": true,
      "custom_instructor_label": "text",
      "custom_instructor_label_plural": "text",
      "purchase_seats_for_others_enabled": true,
      "hide_no_badges_text": true,
      "load_custom_scripts": true,
      "enable_purchase_orders": true,
      "enable_detail_codes": true
    },
    "user_defined_fields": [
      {
        "list_order": 1,
        "name": "text",
        "label": "text",
        "field_type": "text",
        "required": true,
        "required_message": "text",
        "metadata": {},
        "hide_in_user_workflow": true
      }
    ],
    "logo": "text",
    "locale": "text",
    "url": "text",
    "measurement": "text",
    "storefront_theme_id": "text"
  }
}

Get a listing certificate

get
Authorizations
AuthorizationstringRequired
Query parameters
certificate[listing_id]integerRequired

Id of the listing

Responses
200

certificate found

application/json
get/api/v1/certificates
GET /api/v1/certificates?certificate[listing_id]=1 HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

certificate found

{
  "certificate": {
    "id": 1,
    "listing_id": 1,
    "name": "text",
    "active": true,
    "template": "text",
    "pdf_settings": {
      "orientation": "text"
    },
    "created_at": "text",
    "updated_at": "text",
    "days_to_expire": 1,
    "expires_at": "text"
  }
}

Create a certificate

post
Authorizations
AuthorizationstringRequired
Body
days_to_expireintegerOptional

Days until expiry after award; mutually exclusive with expires_at

expires_atstringOptional

Fixed expiry datetime; mutually exclusive with days_to_expire

Responses
201

certificate created

application/json
post/api/v1/certificates
POST /api/v1/certificates HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 155

{
  "certificate": {
    "listing_id": 1,
    "name": "text",
    "active": true,
    "template": "text",
    "pdf_settings": {
      "orientation": "text"
    }
  },
  "days_to_expire": 1,
  "expires_at": "text"
}
201

certificate created

{
  "certificate": {
    "id": 1,
    "listing_id": 1,
    "name": "text",
    "active": true,
    "template": "text",
    "pdf_settings": {
      "orientation": "text"
    },
    "created_at": "text",
    "updated_at": "text",
    "days_to_expire": 1,
    "expires_at": "text"
  }
}

Delete a certificate

delete
Authorizations
AuthorizationstringRequired
Body
nullify_requirements_completed_atbooleanOptional

Nullify requirements_completed_at for enrollments (default: false)

Responses
204

certificate deleted

No content

delete/api/v1/certificates
DELETE /api/v1/certificates HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 73

{
  "certificate": {
    "listing_id": 1
  },
  "nullify_requirements_completed_at": true
}
204

certificate deleted

No content

Revoke users' certificates

put
Authorizations
AuthorizationstringRequired
Body
Responses
200

certificates revoked

application/json
put/api/v1/certificates/revoke_users_certificate
PUT /api/v1/certificates/revoke_users_certificate HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 54

{
  "certificate": {
    "listing_id": 1,
    "canvas_user_ids": [
      1
    ]
  }
}
200

certificates revoked

{
  "revoked_certificates": [
    {
      "canvas_user_id": 1,
      "canvas_course_id": 1,
      "listing_id": 1
    }
  ]
}

List completed certificates

get
Authorizations
AuthorizationstringRequired
Query parameters
user_idintegerOptional

Canvas ID of the user (required unless canvas_course_id is given)

canvas_course_idintegerOptional

Canvas course ID; filter completions to a specific course

only_certificatesbooleanOptional

When true, exclude courses without certificates (default: include all)

Responses
200

completions listed

application/json
get/api/v1/completed_certificates
GET /api/v1/completed_certificates HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

completions listed

{
  "completed_certificates": [
    {
      "user_id": 1,
      "canvas_course_id": 1,
      "catalog_title": "text",
      "canvas_course_name": "text",
      "certificate_id": 1,
      "verification_code": "text",
      "verification_code_alt": "text",
      "certificate_url": "text",
      "canvas_course_workflow_state": "text",
      "completed_at": "text"
    }
  ]
}

List courses

get
Authorizations
AuthorizationstringRequired
Query parameters
querystringOptional

General search query (title OR description OR tags)

titlestringOptional

Search by title

tag_namestringOptional

Search by tag name

is_enrollablebooleanOptional

Filter by whether currently open for enrollment

Responses
200

courses listed

application/json
get/api/v1/courses
GET /api/v1/courses HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

courses listed

{
  "courses": [
    {
      "id": 1,
      "visibility": "text",
      "enrollment_open": true,
      "enrollment_open_from": "text",
      "enrollment_open_to": "text",
      "enrollment_cap": 1,
      "hide_enrollment_info": true,
      "description": "text",
      "enrollment_fee": 1,
      "created_at": "text",
      "credits": 1,
      "measurement": "text",
      "updated_at": "text",
      "short_description": "text",
      "listing_path": "text",
      "listing_image": "text",
      "currency": "text",
      "catalog": {
        "id": 1,
        "name": "text"
      },
      "type": "text",
      "title": "text",
      "list_order": 1,
      "waitlist": true,
      "waitlist_cap": 1,
      "sku": "text",
      "show_free_banner": true,
      "image_alt_text": "text",
      "allowed_payment_types": [
        "text"
      ],
      "tag_names": [
        "text"
      ],
      "listing_url": "text",
      "start_date": "text",
      "end_date": "text",
      "canvas_section_id": 1,
      "associated_account_ids": [
        1
      ],
      "archived_at": "text",
      "canvas_course": {
        "id": 1
      },
      "instructor_names": [
        "text"
      ],
      "primary_instructor_name": "text"
    }
  ]
}

Create a course

post
Authorizations
AuthorizationstringRequired
Body
Responses
201

course created

application/json
post/api/v1/courses
POST /api/v1/courses HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 378

{
  "course": {
    "title": "text",
    "description": "text",
    "path": "text",
    "teaser": "text",
    "enrollment_open": true,
    "visibility": "text",
    "enrollment_cap": 1,
    "enrollment_fee": 1,
    "days_to_complete": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "list_order": 1,
    "sku": "text",
    "canvas_course_id": 1,
    "canvas_section_id": 1,
    "credits": 1,
    "instructor_names": [
      "text"
    ],
    "primary_instructor_name": "text",
    "tag_names": [
      "text"
    ]
  }
}
201

course created

{
  "course": {
    "id": 1,
    "visibility": "text",
    "enrollment_open": true,
    "enrollment_open_from": "text",
    "enrollment_open_to": "text",
    "enrollment_cap": 1,
    "hide_enrollment_info": true,
    "description": "text",
    "enrollment_fee": 1,
    "created_at": "text",
    "credits": 1,
    "measurement": "text",
    "updated_at": "text",
    "short_description": "text",
    "listing_path": "text",
    "listing_image": "text",
    "currency": "text",
    "catalog": {
      "id": 1,
      "name": "text"
    },
    "type": "text",
    "title": "text",
    "list_order": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "sku": "text",
    "show_free_banner": true,
    "image_alt_text": "text",
    "allowed_payment_types": [
      "text"
    ],
    "tag_names": [
      "text"
    ],
    "listing_url": "text",
    "start_date": "text",
    "end_date": "text",
    "canvas_section_id": 1,
    "associated_account_ids": [
      1
    ],
    "archived_at": "text",
    "canvas_course": {
      "id": 1
    },
    "instructor_names": [
      "text"
    ],
    "primary_instructor_name": "text"
  }
}

Get a specific course

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this course

Responses
200

course found

application/json
get/api/v1/courses/{id}
GET /api/v1/courses/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

course found

{
  "course": {
    "id": 1,
    "visibility": "text",
    "enrollment_open": true,
    "enrollment_open_from": "text",
    "enrollment_open_to": "text",
    "enrollment_cap": 1,
    "hide_enrollment_info": true,
    "description": "text",
    "enrollment_fee": 1,
    "created_at": "text",
    "credits": 1,
    "measurement": "text",
    "updated_at": "text",
    "short_description": "text",
    "listing_path": "text",
    "listing_image": "text",
    "currency": "text",
    "catalog": {
      "id": 1,
      "name": "text"
    },
    "type": "text",
    "title": "text",
    "list_order": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "sku": "text",
    "show_free_banner": true,
    "image_alt_text": "text",
    "allowed_payment_types": [
      "text"
    ],
    "tag_names": [
      "text"
    ],
    "listing_url": "text",
    "start_date": "text",
    "end_date": "text",
    "canvas_section_id": 1,
    "associated_account_ids": [
      1
    ],
    "archived_at": "text",
    "canvas_course": {
      "id": 1
    },
    "instructor_names": [
      "text"
    ],
    "primary_instructor_name": "text"
  }
}

Update a course

put
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this course

Body
Responses
204

course updated

No content

put/api/v1/courses/{id}
PUT /api/v1/courses/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 378

{
  "course": {
    "title": "text",
    "description": "text",
    "path": "text",
    "teaser": "text",
    "enrollment_open": true,
    "visibility": "text",
    "enrollment_cap": 1,
    "enrollment_fee": 1,
    "days_to_complete": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "list_order": 1,
    "sku": "text",
    "canvas_course_id": 1,
    "canvas_section_id": 1,
    "credits": 1,
    "instructor_names": [
      "text"
    ],
    "primary_instructor_name": "text",
    "tag_names": [
      "text"
    ]
  }
}
204

course updated

No content

Delete a course

delete
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this course

Responses
204

course deleted

No content

delete/api/v1/courses/{id}
DELETE /api/v1/courses/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

course deleted

No content

Archive or reactivate courses

put
Authorizations
AuthorizationstringRequired
Body
product_actionstringRequired

Action to perform: archive or reactivate

product_idsinteger[]Required

Product ids to act on

Responses
200

all courses processed

No content

put/api/v1/courses/archived
PUT /api/v1/courses/archived HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 43

{
  "product_action": "text",
  "product_ids": [
    1
  ]
}

No content

Update course SKUs from CSV

put
Authorizations
AuthorizationstringRequired
Body
string · binaryOptional
Responses
200

SKU import enqueued

No content

put/api/v1/courses/update_skus
PUT /api/v1/courses/update_skus HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 8

"binary"
200

SKU import enqueued

No content

List email domain sets

get
Authorizations
AuthorizationstringRequired
Query parameters
searchstringOptional

Filter email domain sets by name

exactstringOptional

When set, only return exact name matches

Responses
200

email domain sets listed

application/json
get/api/v1/email_domain_sets
GET /api/v1/email_domain_sets HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

email domain sets listed

{
  "email_domain_sets": [
    {
      "id": 1,
      "name": "text",
      "account_id": 1,
      "email_domains": [
        {
          "id": 1,
          "domain": "text",
          "email_domain_set_id": 1,
          "canvas_root_account_uuid": "text",
          "created_at": "text",
          "updated_at": "text",
          "deleted_at": "text"
        }
      ]
    }
  ],
  "meta": {
    "total_pages": 1
  }
}

Get a specific email domain set

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Email domain set ID

Responses
200

email domain set found

application/json
idintegerRequired

Email domain set ID

namestringRequired

Name of the email domain set

account_idintegerRequired

Owning account ID

canvas_root_account_uuidstringRequired
created_atstringRequired
updated_atstringRequired
deleted_atstring · nullableRequired
get/api/v1/email_domain_sets/{id}
GET /api/v1/email_domain_sets/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

email domain set found

{
  "id": 1,
  "name": "text",
  "account_id": 1,
  "canvas_root_account_uuid": "text",
  "created_at": "text",
  "updated_at": "text",
  "deleted_at": "text"
}

Update an email domain set

put
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Email domain set ID

Body
Responses
200

email domain set updated

application/json
put/api/v1/email_domain_sets/{id}
PUT /api/v1/email_domain_sets/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 83

{
  "email_domain_set": {
    "name": "text",
    "email_domains_attributes": [
      {
        "domain": "text"
      }
    ]
  }
}
200

email domain set updated

{
  "email_domain_set": {
    "id": 1,
    "name": "text",
    "account_id": 1,
    "email_domains": [
      {
        "id": 1,
        "domain": "text",
        "email_domain_set_id": 1,
        "canvas_root_account_uuid": "text",
        "created_at": "text",
        "updated_at": "text",
        "deleted_at": "text"
      }
    ]
  }
}

List promotions for an email domain set

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Email domain set ID

Responses
200

promotions listed

application/json
get/api/v1/email_domain_sets/{id}/promotions
GET /api/v1/email_domain_sets/{id}/promotions HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

promotions listed

{
  "promotions": [
    {
      "id": 1,
      "account_id": 1,
      "product_id": 1,
      "product_title": "text",
      "product_archived_at": "text",
      "account_name": "text",
      "currency": "text",
      "amount": "text",
      "discount_type": "text",
      "code": "text",
      "name": "text",
      "description": "text",
      "active": true,
      "start_date": "text",
      "end_date": "text",
      "created_at": "text",
      "updated_at": "text",
      "deleted_at": "text",
      "usage_type": "text",
      "canvas_root_account_uuid": "text",
      "email_domain_set_id": 1,
      "email_domain_set_name": "text",
      "email_domains": [
        {
          "id": 1,
          "domain": "text",
          "email_domain_set_id": 1,
          "canvas_root_account_uuid": "text",
          "created_at": "text",
          "updated_at": "text",
          "deleted_at": "text"
        }
      ],
      "status": "text",
      "max_per_user": 1,
      "max_total_use": 1,
      "enable_for_multi_seat_purchases": true
    }
  ]
}

List enrollments

get
Authorizations
AuthorizationstringRequired
Query parameters
listing_idintegerOptional

Only include enrollments for the specified listing

Responses
200

enrollments listed

application/json
get/api/v1/enrollments
GET /api/v1/enrollments HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

enrollments listed

{
  "enrollments": [
    {
      "id": 1,
      "user": {
        "id": 1
      },
      "listing": {
        "id": 1,
        "title": "text",
        "type": "text",
        "canvas_course_id": 1
      },
      "enrolled_at": "text",
      "status": "text",
      "requirement_details": {
        "requirement_count": 1,
        "requirement_completed_count": 1,
        "requirement_completed_percentage": 1
      }
    }
  ]
}

Create an enrollment

post
Authorizations
AuthorizationstringRequired
Query parameters
create_orderbooleanOptional

Create an order record for this enrollment (default: true)

send_emailbooleanOptional

Send an enrollment email to the user (default: true)

Body
Responses
201

enrollment created

application/json
post/api/v1/enrollments
POST /api/v1/enrollments HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 50

{
  "enrollment": {
    "listing_id": 1,
    "canvas_user_id": 1
  }
}
201

enrollment created

{
  "enrollment": {
    "id": 1,
    "user": {
      "id": 1
    },
    "listing": {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1
    },
    "enrolled_at": "text",
    "status": "text",
    "requirement_details": {
      "requirement_count": 1,
      "requirement_completed_count": 1,
      "requirement_completed_percentage": 1
    }
  }
}

Get a specific enrollment

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this enrollment

Responses
200

enrollment found

application/json
get/api/v1/enrollments/{id}
GET /api/v1/enrollments/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

enrollment found

{
  "enrollment": {
    "id": 1,
    "user": {
      "id": 1
    },
    "listing": {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1
    },
    "enrolled_at": "text",
    "status": "text",
    "requirement_details": {
      "requirement_count": 1,
      "requirement_completed_count": 1,
      "requirement_completed_percentage": 1
    }
  }
}

Delete an enrollment

delete

An additional request must be made to Canvas to delete the enrollment and remove it from the Catalog Student Dashboard.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this enrollment

Responses
204

enrollment deleted

No content

delete/api/v1/enrollments/{id}
DELETE /api/v1/enrollments/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

enrollment deleted

No content

List orders

get
Authorizations
AuthorizationstringRequired
Query parameters
fromstring · date-timeOptional

Earliest date/time to return (e.g. 2018-01-01T00:00:00Z, UTC)

tostring · date-timeOptional

Latest date/time to return

canvas_user_idintegerOptional

Return only orders for the specified Canvas user ID

completedbooleanOptional

When set, only return orders completed successfully

Responses
200

orders listed

application/json
get/api/v1/orders
GET /api/v1/orders HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

orders listed

{
  "orders": [
    {
      "id": 1,
      "full_id": "text",
      "catalog_id": 1,
      "catalog": {
        "id": 1,
        "name": "text"
      },
      "user": {
        "id": 1,
        "name": "text",
        "email": "text"
      },
      "listings": [
        {
          "id": 1,
          "canvas_course_id": 1,
          "title": "text",
          "amount": "text",
          "discounted_amount": "text",
          "catalog_id": 1
        }
      ],
      "promotions": [
        {
          "id": 1,
          "listing_id": 1,
          "code": "text",
          "amount": "text"
        }
      ],
      "payments": [
        {
          "reference_id": "text",
          "status": "text",
          "amount": "text"
        }
      ],
      "total": "text",
      "currency": "text",
      "purchased_at": "text",
      "created_at": "text"
    }
  ]
}

Get a specific order

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this order

Responses
200

order found

application/json
get/api/v1/orders/{id}
GET /api/v1/orders/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

order found

{
  "order": {
    "id": 1,
    "full_id": "text",
    "catalog_id": 1,
    "catalog": {
      "id": 1,
      "name": "text"
    },
    "user": {
      "id": 1,
      "name": "text",
      "email": "text"
    },
    "listings": [
      {
        "id": 1,
        "canvas_course_id": 1,
        "title": "text",
        "amount": "text",
        "discounted_amount": "text",
        "catalog_id": 1
      }
    ],
    "promotions": [
      {
        "id": 1,
        "listing_id": 1,
        "code": "text",
        "amount": "text"
      }
    ],
    "payments": [
      {
        "reference_id": "text",
        "status": "text",
        "amount": "text"
      }
    ],
    "total": "text",
    "currency": "text",
    "purchased_at": "text",
    "created_at": "text"
  }
}

List programs

get
Authorizations
AuthorizationstringRequired
Query parameters
querystringOptional

General search query

tag_namestringOptional

Search by tag name

Responses
200

programs listed

application/json
get/api/v1/programs
GET /api/v1/programs HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

programs listed

{
  "programs": [
    {
      "id": 1,
      "visibility": "text",
      "enrollment_open": true,
      "enrollment_open_from": "text",
      "enrollment_open_to": "text",
      "enrollment_cap": 1,
      "hide_enrollment_info": true,
      "description": "text",
      "enrollment_fee": 1,
      "created_at": "text",
      "credits": 1,
      "measurement": "text",
      "updated_at": "text",
      "short_description": "text",
      "listing_path": "text",
      "listing_image": "text",
      "currency": "text",
      "catalog": {
        "id": 1,
        "name": "text"
      },
      "type": "text",
      "title": "text",
      "list_order": 1,
      "waitlist": true,
      "waitlist_cap": 1,
      "sku": "text",
      "show_free_banner": true,
      "image_alt_text": "text",
      "allowed_payment_types": [
        "text"
      ],
      "tag_names": [
        "text"
      ],
      "listing_url": "text",
      "start_date": "text",
      "end_date": "text",
      "canvas_section_id": 1,
      "associated_account_ids": [
        1
      ],
      "archived_at": "text",
      "sequential": true,
      "auto_enroll_courses": true,
      "requirements": [
        {
          "id": 1,
          "visibility": "text",
          "enrollment_open": true,
          "enrollment_open_from": "text",
          "enrollment_open_to": "text",
          "enrollment_cap": 1,
          "hide_enrollment_info": true,
          "description": "text",
          "enrollment_fee": 1,
          "created_at": "text",
          "credits": 1,
          "measurement": "text",
          "updated_at": "text",
          "short_description": "text",
          "listing_path": "text",
          "listing_image": "text",
          "currency": "text",
          "catalog": {
            "id": 1,
            "name": "text"
          },
          "type": "text",
          "title": "text",
          "list_order": 1,
          "waitlist": true,
          "waitlist_cap": 1,
          "sku": "text",
          "show_free_banner": true,
          "image_alt_text": "text",
          "allowed_payment_types": [
            "text"
          ],
          "tag_names": [
            "text"
          ],
          "listing_url": "text",
          "start_date": "text",
          "end_date": "text",
          "canvas_section_id": 1,
          "associated_account_ids": [
            1
          ],
          "archived_at": "text",
          "sequential": true,
          "auto_enroll_courses": true,
          "canvas_course": {
            "id": 1
          },
          "instructor_names": [
            "text"
          ],
          "primary_instructor_name": "text",
          "requirements": [
            {}
          ]
        }
      ]
    }
  ]
}

Create a program

post
Authorizations
AuthorizationstringRequired
Body
Responses
201

program created

application/json
post/api/v1/programs
POST /api/v1/programs HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 303

{
  "program": {
    "title": "text",
    "description": "text",
    "path": "text",
    "teaser": "text",
    "enrollment_open": true,
    "visibility": "text",
    "enrollment_cap": 1,
    "enrollment_fee": 1,
    "days_to_complete": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "list_order": 1,
    "sku": "text",
    "requirement_ids": [
      1
    ],
    "sequential": true,
    "tag_names": [
      "text"
    ]
  }
}
201

program created

{
  "program": {
    "id": 1,
    "visibility": "text",
    "enrollment_open": true,
    "enrollment_open_from": "text",
    "enrollment_open_to": "text",
    "enrollment_cap": 1,
    "hide_enrollment_info": true,
    "description": "text",
    "enrollment_fee": 1,
    "created_at": "text",
    "credits": 1,
    "measurement": "text",
    "updated_at": "text",
    "short_description": "text",
    "listing_path": "text",
    "listing_image": "text",
    "currency": "text",
    "catalog": {
      "id": 1,
      "name": "text"
    },
    "type": "text",
    "title": "text",
    "list_order": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "sku": "text",
    "show_free_banner": true,
    "image_alt_text": "text",
    "allowed_payment_types": [
      "text"
    ],
    "tag_names": [
      "text"
    ],
    "listing_url": "text",
    "start_date": "text",
    "end_date": "text",
    "canvas_section_id": 1,
    "associated_account_ids": [
      1
    ],
    "archived_at": "text",
    "sequential": true,
    "auto_enroll_courses": true,
    "requirements": [
      {
        "id": 1,
        "visibility": "text",
        "enrollment_open": true,
        "enrollment_open_from": "text",
        "enrollment_open_to": "text",
        "enrollment_cap": 1,
        "hide_enrollment_info": true,
        "description": "text",
        "enrollment_fee": 1,
        "created_at": "text",
        "credits": 1,
        "measurement": "text",
        "updated_at": "text",
        "short_description": "text",
        "listing_path": "text",
        "listing_image": "text",
        "currency": "text",
        "catalog": {
          "id": 1,
          "name": "text"
        },
        "type": "text",
        "title": "text",
        "list_order": 1,
        "waitlist": true,
        "waitlist_cap": 1,
        "sku": "text",
        "show_free_banner": true,
        "image_alt_text": "text",
        "allowed_payment_types": [
          "text"
        ],
        "tag_names": [
          "text"
        ],
        "listing_url": "text",
        "start_date": "text",
        "end_date": "text",
        "canvas_section_id": 1,
        "associated_account_ids": [
          1
        ],
        "archived_at": "text",
        "sequential": true,
        "auto_enroll_courses": true,
        "canvas_course": {
          "id": 1
        },
        "instructor_names": [
          "text"
        ],
        "primary_instructor_name": "text",
        "requirements": [
          {}
        ]
      }
    ]
  }
}

Get a specific program

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this program

Responses
200

program found

application/json
get/api/v1/programs/{id}
GET /api/v1/programs/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

program found

{
  "program": {
    "id": 1,
    "visibility": "text",
    "enrollment_open": true,
    "enrollment_open_from": "text",
    "enrollment_open_to": "text",
    "enrollment_cap": 1,
    "hide_enrollment_info": true,
    "description": "text",
    "enrollment_fee": 1,
    "created_at": "text",
    "credits": 1,
    "measurement": "text",
    "updated_at": "text",
    "short_description": "text",
    "listing_path": "text",
    "listing_image": "text",
    "currency": "text",
    "catalog": {
      "id": 1,
      "name": "text"
    },
    "type": "text",
    "title": "text",
    "list_order": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "sku": "text",
    "show_free_banner": true,
    "image_alt_text": "text",
    "allowed_payment_types": [
      "text"
    ],
    "tag_names": [
      "text"
    ],
    "listing_url": "text",
    "start_date": "text",
    "end_date": "text",
    "canvas_section_id": 1,
    "associated_account_ids": [
      1
    ],
    "archived_at": "text",
    "sequential": true,
    "auto_enroll_courses": true,
    "requirements": [
      {
        "id": 1,
        "visibility": "text",
        "enrollment_open": true,
        "enrollment_open_from": "text",
        "enrollment_open_to": "text",
        "enrollment_cap": 1,
        "hide_enrollment_info": true,
        "description": "text",
        "enrollment_fee": 1,
        "created_at": "text",
        "credits": 1,
        "measurement": "text",
        "updated_at": "text",
        "short_description": "text",
        "listing_path": "text",
        "listing_image": "text",
        "currency": "text",
        "catalog": {
          "id": 1,
          "name": "text"
        },
        "type": "text",
        "title": "text",
        "list_order": 1,
        "waitlist": true,
        "waitlist_cap": 1,
        "sku": "text",
        "show_free_banner": true,
        "image_alt_text": "text",
        "allowed_payment_types": [
          "text"
        ],
        "tag_names": [
          "text"
        ],
        "listing_url": "text",
        "start_date": "text",
        "end_date": "text",
        "canvas_section_id": 1,
        "associated_account_ids": [
          1
        ],
        "archived_at": "text",
        "sequential": true,
        "auto_enroll_courses": true,
        "canvas_course": {
          "id": 1
        },
        "instructor_names": [
          "text"
        ],
        "primary_instructor_name": "text",
        "requirements": [
          {}
        ]
      }
    ]
  }
}

Update a program

put
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this program

Body
Responses
204

program updated

No content

put/api/v1/programs/{id}
PUT /api/v1/programs/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 303

{
  "program": {
    "title": "text",
    "description": "text",
    "path": "text",
    "teaser": "text",
    "enrollment_open": true,
    "visibility": "text",
    "enrollment_cap": 1,
    "enrollment_fee": 1,
    "days_to_complete": 1,
    "waitlist": true,
    "waitlist_cap": 1,
    "list_order": 1,
    "sku": "text",
    "requirement_ids": [
      1
    ],
    "sequential": true,
    "tag_names": [
      "text"
    ]
  }
}
204

program updated

No content

Delete a program

delete
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Identifier for this program

Responses
204

program deleted

No content

delete/api/v1/programs/{id}
DELETE /api/v1/programs/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
204

program deleted

No content

Archive or reactivate programs

put
Authorizations
AuthorizationstringRequired
Body
product_actionstringRequired

archive or reactivate

product_idsinteger[]Required
Responses
200

all programs processed

No content

put/api/v1/programs/archived
PUT /api/v1/programs/archived HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 43

{
  "product_action": "text",
  "product_ids": [
    1
  ]
}

No content

Get a specific progress

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Progress ID

Responses
200

progress found

application/json
get/api/v1/progresses/{id}
GET /api/v1/progresses/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

progress found

{
  "progress": {
    "id": 1,
    "account_id": 1,
    "canvas_user_id": 1,
    "completion_percent": 1,
    "workflow_state": "text",
    "payload": {},
    "created_at": "text",
    "updated_at": "text"
  }
}

Bulk-create promotional codes

post

Creates many promotions in a single request, all sharing the configuration in promotion. Supply the codes explicitly via codes, OR ask the server to generate them via generate (exactly one of the two is required). Up to 1000 codes may be created per request.

The response reports partial success: every requested code appears either in created or in failed with a reason (e.g. already taken, duplicate in request). A 201 is returned when all codes were created, 207 when some failed.

Authorizations
AuthorizationstringRequired
Body
codesstring[]Optional

Explicit list of codes to create (mutually exclusive with generate)

Responses
201

all codes created

application/json
post/api/v1/promotions/bulk
POST /api/v1/promotions/bulk HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 361

{
  "promotion": {
    "account_id": 1,
    "listing_id": 1,
    "name": "text",
    "description": "text",
    "amount": 1,
    "discount_type": "flat",
    "usage_type": "once-per-user",
    "active": true,
    "start_date": "text",
    "end_date": "text",
    "max_per_user": 1,
    "max_total_use": 1,
    "enable_for_multi_seat_purchases": true
  },
  "codes": [
    "text"
  ],
  "generate": {
    "count": 1,
    "prefix": "text",
    "length": 1,
    "charset": "alphanumeric"
  }
}
{
  "summary": {
    "requested": 1,
    "created": 1,
    "failed": 1
  },
  "created": [
    {
      "id": 1,
      "listing_id": 1,
      "code": "text",
      "name": "text",
      "description": "text",
      "amount": "text",
      "discount_type": "flat",
      "usage_type": "once-per-user",
      "active": true,
      "start_date": "text",
      "end_date": "text",
      "max_per_user": 1,
      "max_total_use": 1,
      "status": "text",
      "created_at": "text"
    }
  ],
  "failed": [
    {
      "code": "text",
      "errors": [
        "text"
      ]
    }
  ]
}

List tags

get
Authorizations
AuthorizationstringRequired
Query parameters
product_idsstringOptional

Comma-separated product ids (max 20)

namestringOptional

Search tag name and associated product names

has_categorybooleanOptional

Tag has a category or not

Responses
200

tags listed

application/json
get/api/v1/tags
GET /api/v1/tags HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

tags listed

{
  "tags": [
    {
      "id": 1,
      "account_id": 1,
      "name": "text",
      "assigned_listings": [
        {
          "id": 1,
          "title": "text",
          "type": "text",
          "canvas_course_id": 1,
          "archived_at": "text"
        }
      ],
      "assigned_categories": [
        {
          "id": 1,
          "account_id": 1,
          "tag_id": 1,
          "created_at": "text",
          "updated_at": "text"
        }
      ],
      "created_at": "text",
      "updated_at": "text"
    }
  ]
}

Create a tag

post
Authorizations
AuthorizationstringRequired
Body
namestringRequired

Tag name (1-255 characters)

product_idsinteger[]Optional

Product ids to associate

Responses
200

tag created

application/json
idintegerRequired

Tag id

account_idintegerOptional

Account id

namestringOptional

Tag name

created_atstringRequired

Tag created at

updated_atstringRequired

Tag updated at

post/api/v1/tags
POST /api/v1/tags HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 33

{
  "name": "text",
  "product_ids": [
    1
  ]
}
200

tag created

{
  "id": 1,
  "account_id": 1,
  "name": "text",
  "assigned_listings": [
    {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1,
      "archived_at": "text"
    }
  ],
  "assigned_categories": [
    {
      "id": 1,
      "account_id": 1,
      "tag_id": 1,
      "created_at": "text",
      "updated_at": "text"
    }
  ],
  "created_at": "text",
  "updated_at": "text"
}

Get a specific tag

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Tag id

Responses
200

tag found

application/json
idintegerRequired

Tag id

account_idintegerOptional

Account id

namestringOptional

Tag name

created_atstringRequired

Tag created at

updated_atstringRequired

Tag updated at

get/api/v1/tags/{id}
GET /api/v1/tags/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

tag found

{
  "id": 1,
  "account_id": 1,
  "name": "text",
  "assigned_listings": [
    {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1,
      "archived_at": "text"
    }
  ],
  "assigned_categories": [
    {
      "id": 1,
      "account_id": 1,
      "tag_id": 1,
      "created_at": "text",
      "updated_at": "text"
    }
  ],
  "created_at": "text",
  "updated_at": "text"
}

Update a tag

put
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Tag id

Body
namestringRequired

New tag name (1-255 characters)

Responses
200

tag updated

application/json
idintegerRequired

Tag id

account_idintegerOptional

Account id

namestringOptional

Tag name

created_atstringRequired

Tag created at

updated_atstringRequired

Tag updated at

put/api/v1/tags/{id}
PUT /api/v1/tags/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 15

{
  "name": "text"
}
200

tag updated

{
  "id": 1,
  "account_id": 1,
  "name": "text",
  "assigned_listings": [
    {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1,
      "archived_at": "text"
    }
  ],
  "assigned_categories": [
    {
      "id": 1,
      "account_id": 1,
      "tag_id": 1,
      "created_at": "text",
      "updated_at": "text"
    }
  ],
  "created_at": "text",
  "updated_at": "text"
}

Delete a specific tag

delete
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Tag id

Responses
200

tag deleted

application/json
idintegerRequired

Tag id

account_idintegerOptional

Account id

namestringOptional

Tag name

created_atstringRequired

Tag created at

updated_atstringRequired

Tag updated at

is_deletedbooleanRequired

True to indicate the tag is deleted

delete/api/v1/tags/{id}
DELETE /api/v1/tags/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

tag deleted

{
  "id": 1,
  "account_id": 1,
  "name": "text",
  "assigned_listings": [
    {
      "id": 1,
      "title": "text",
      "type": "text",
      "canvas_course_id": 1,
      "archived_at": "text"
    }
  ],
  "assigned_categories": [
    {
      "id": 1,
      "account_id": 1,
      "tag_id": 1,
      "created_at": "text",
      "updated_at": "text"
    }
  ],
  "created_at": "text",
  "updated_at": "text",
  "is_deleted": true
}

Delete multiple tags

delete
Authorizations
AuthorizationstringRequired
Body
idsinteger[]Required

Tag IDs to delete

Responses
200

tags deleted

application/json
delete/api/v1/tags/bulk
DELETE /api/v1/tags/bulk HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 11

{
  "ids": [
    1
  ]
}
200

tags deleted

{
  "tags": [
    {
      "id": 1,
      "account_id": 1,
      "name": "text",
      "assigned_listings": [
        {
          "id": 1,
          "title": "text",
          "type": "text",
          "canvas_course_id": 1,
          "archived_at": "text"
        }
      ],
      "assigned_categories": [
        {
          "id": 1,
          "account_id": 1,
          "tag_id": 1,
          "created_at": "text",
          "updated_at": "text"
        }
      ],
      "created_at": "text",
      "updated_at": "text",
      "is_deleted": true
    }
  ]
}

Get a specific user

get
Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Catalog user id

Responses
200

user found

application/json
get/api/v1/users/{id}
GET /api/v1/users/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

user found

{
  "user": {
    "id": 1,
    "root_account_id": 1,
    "canvas_user_id": 1,
    "registered_account_id": 1,
    "canvas_root_account_uuid": "text",
    "canvas_user_uuid": "text",
    "user_name": "text",
    "first_name": "text",
    "last_name": "text",
    "email_address": "text",
    "custom_fields": {},
    "created_at": "text",
    "updated_at": "text",
    "time_zone": "text",
    "merged_into_user_id": 1,
    "disable_alert_timeouts": true
  }
}

Update a specific user

put

Set clear_merged_into_user_id to true to resolve the "Current user has been deleted or merged. Please re-login" login error.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Catalog user id

Body
clear_merged_into_user_idbooleanOptional

Clear the merged_into_user_id field when true

custom_fieldsobjectOptional

Custom field values (strings or null); omitted keys are unchanged

Responses
200

user updated

application/json
put/api/v1/users/{id}
PUT /api/v1/users/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 53

{
  "clear_merged_into_user_id": true,
  "custom_fields": {}
}
200

user updated

{
  "user": {
    "id": 1,
    "root_account_id": 1,
    "canvas_user_id": 1,
    "registered_account_id": 1,
    "canvas_root_account_uuid": "text",
    "canvas_user_uuid": "text",
    "user_name": "text",
    "first_name": "text",
    "last_name": "text",
    "email_address": "text",
    "custom_fields": {},
    "created_at": "text",
    "updated_at": "text",
    "time_zone": "text",
    "merged_into_user_id": 1,
    "disable_alert_timeouts": true
  }
}

Delete a specific user with dependencies

delete

Deletes the user and dependencies. When only_orders_and_enrollments is true, deletes only orders, enrollments, payments, bulk invitations, and applicants — not the user or related account admins.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Catalog user id

Query parameters
only_orders_and_enrollmentsbooleanOptional

Delete only user dependencies, not the user itself

Responses
200

user (and/or dependencies) deleted

No content

delete/api/v1/users/{id}
DELETE /api/v1/users/{id} HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

user (and/or dependencies) deleted

No content

List users

get
Authorizations
AuthorizationstringRequired
Query parameters
registered_in_catalogbooleanOptional

true = Catalog-registered only; false = Canvas-registered only; omit for all

canvas_user_idintegerOptional

Canvas user id

created_at_fromstring · date-timeOptional

Created at from (UTC)

created_at_tostring · date-timeOptional

Created at to (UTC)

Responses
200

users listed

application/json
get/api/v1/users
GET /api/v1/users HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Accept: */*
200

users listed

{
  "users": [
    {
      "id": 1,
      "root_account_id": 1,
      "canvas_user_id": 1,
      "registered_account_id": 1,
      "canvas_root_account_uuid": "text",
      "canvas_user_uuid": "text",
      "user_name": "text",
      "first_name": "text",
      "last_name": "text",
      "email_address": "text",
      "custom_fields": {},
      "created_at": "text",
      "updated_at": "text",
      "time_zone": "text",
      "merged_into_user_id": 1,
      "disable_alert_timeouts": true
    }
  ]
}

Register a user

post
Authorizations
AuthorizationstringRequired
Body
user_namestringRequired

Full user name

first_namestringOptional
last_namestringOptional
email_addressstringRequired

E-mail address (also the login)

registered_account_idintegerOptional

Subcatalog to associate (defaults to the API key root account)

custom_fieldsobjectOptional

Custom field values

Responses
200

user registered

application/json
post/api/v1/users
POST /api/v1/users HTTP/1.1
Host: catalog.example.edu
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 127

{
  "user_name": "text",
  "first_name": "text",
  "last_name": "text",
  "email_address": "text",
  "registered_account_id": 1,
  "custom_fields": {}
}
200

user registered

{
  "user": {
    "id": 1,
    "root_account_id": 1,
    "canvas_user_id": 1,
    "registered_account_id": 1,
    "canvas_root_account_uuid": "text",
    "canvas_user_uuid": "text",
    "user_name": "text",
    "first_name": "text",
    "last_name": "text",
    "email_address": "text",
    "custom_fields": {},
    "created_at": "text",
    "updated_at": "text",
    "confirmation_url": "text",
    "terms_of_use": true,
    "locale": "text"
  }
}

Last updated

Was this helpful?