Access to Course API

Good morning,

I am trying to query courses via the HubSpot API. According to the documentation, all endpoints are available like any other standard object. However, despite having all scopes enabled, querying this endpoint returns:

“The scope needed for this API call isn’t available for public use. If you have questions, contact support or post in our developer forum”

This is the first time I’ve encountered this issue. Any ideas?

Thanks in advance.

Hey @Egoi, Happy Tuesday! :hugs:

Great question, thanks for asking the HubSpot Community!

I’d love to put you in touch with our Top Experts: Hi @Anton, @evaldas and @zach_threadint do you have suggestions to help @Egoi, please?

This documentation Using Object APIs - HubSpot docs (specifically the new objects note) might point you in the right direction in the meantime!

Thanks so much and have a wonderful day! :sun:
Bérangère

This doesn’t seem ti be a misconfiguration on your end. My read is that the crm.objects.courses.* scopes aren’t currently grantable to private apps, OAuth apps, or project apps. So any app-based token returns “The scope needed for this API call isn’t available for public use,” even with every scope enabled. (One tell: GET /crm/v3/schemas/courses does work from an app — it’s specifically the object/records scope that’s gated, not the schema.)

Depending on what you’re building, these options might help:

1. Your own portal, or a handful of known client portals (e.g. running an LMS). Use a Service Key (Development → Keys → Service keys). The courses scopes are grantable there, and the same request goes through:

curl "https://api.hubapi.com/crm/v3/objects/courses?limit=1" -H "Authorization: Bearer <service-key>"

I tested this end-to-end: an app token throws the error, a service key returns course records. You create one key per portal, so it scales fine to a bounded set of accounts. Caveats: service keys are in public beta, and they’re REST-data-only (no webhooks or UI-extension support).

2. A distributed / marketplace app (many portals, OAuth). A service key won’t help here, because it’s account-level and can’t be embedded in an app (every customer would have to create and hand you one), and OAuth can’t get the courses scope yet. Two paths:

  • If you need HubSpot’s native LMS / Commerce features (Student Dashboard, enrollment tracking, paid courses) you’re tied to the native Course object. I’d say contact HubSpot developer support to ask about courses API access for apps / any beta.
  • If you only need course-shaped data, a custom object is the pragmatic route: fully OAuth-accessible for public apps. Trade-offs: it’s Enterprise-tier only, and it won’t plug into the native LMS/Commerce surfaces (those are wired to the standard Course object specifically).

If you let me know which of these you’re building, I can point you at the exact scope setup.

Moderator note: While this solution may not address the original poster’s specific situation, it could be helpful for other community members facing similar challenges.

Hi @Egoi

I can see that the required scope is in the private app. Could you please recheck it from your end as well? I’ve attached a screenshot for reference. Screenshot by Lightshot

Additionally, I’ll share the documentation link in case it’s helpful - https://developers.hubspot.com/docs/api-reference/latest/crm/objects/courses/get-courses#required-s…

I hope this helps you out. Please mark it as Solution Accepted and upvote to help another Community member.

Thanks!

Moderator note: While this solution may not address the original poster’s specific situation, it could be helpful for other community members facing similar challenges.

Hey @Egoi, This error usually means the issue isn’t related to your app scopes.

A few things to check:

  1. Verify that Courses is actually enabled in your HubSpot portal. Some objects/features are still in private beta or limited availability.
  2. Confirm you’re using the correct CRM Object endpoint (for example, /crm/v3/objects/{objectType}) and the correct object type ID if required.
  3. If the endpoint still returns “The scope needed for this API call isn’t available for public use” even with all available scopes granted, it’s typically an indication that the API is not yet publicly accessible. The required scope is internal/private and cannot be added to public or private apps.
  4. In that case, your best option is to contact HubSpot Support (if you’re eligible) or post in the Developer Forum to confirm whether the Courses API has public access enabled for your account.

Based on the error message, this looks like a platform limitation rather than an authentication or permissions issue.

Hi @Egoi, I hope that you are well!

To add to what everybody shared (thank you!), you might need to activate the Courses object via the Data Model Builder in your HubSpot account settings before the API endpoints will work, even with the correct scopes (crm.objects.courses.read / crm.objects.courses.write) in place.

I hope this helps!

Have a lovely weekend!
Bérangère

Hi @Berangere, thanks for your reply. Course object is already enabled but keeps failing:

This is the response I´m getting when trying to use courses endpoint:

https://api.hubapi.com/crm/objects/2026-03/courses?limit=10

Scopes are already enabled.

Thank you.

Hi @Egoi and thanks for the additional information and screenshot!

It seems that the URL https://api.hubapi.com/crm/objects/2026-03/courses?limit=10 is malformed (the date part of it).

The correct endpoint for courses is:

GET https://api.hubapi.com/crm/v3/objects/0-410?limit=10

or equivalently:

GET https://api.hubapi.com/crm/v3/objects/courses?limit=10

Also, can you confirm that you have the crm.objects.courses.read scope enabled, that’s the specific scope required for the courses endpoint.

Let us know how it goes!

Bérangère

This post was created with the assistance of AI tools