canonical: https://jentic.com/apis/anthology.com/anthology

# Anthology Blackboard Learn REST API

Jentic publishes the only available OpenAPI specification for Blackboard Learn REST API, keeping it validated and agent-ready. Blackboard Learn (by Anthology) is a higher-education LMS whose REST API exposes 59 endpoints covering users, courses, course memberships, content, grades, announcements, assignments, terms, calendar events, and OAuth-based authorization. Each Learn instance is hosted on its own subdomain, so the base URL is the institution's Learn server with the public path /learn/api/public/v1 or /v3. Authentication uses OAuth 2.0 client-credentials issuing a bearer token, with HTTP basic for the token-exchange endpoint itself.

## For AI agents

Manage Blackboard Learn courses, users, memberships, content, and grades through 59 REST endpoints scoped to a per-institution Learn server. Suited to LMS automation agents that operate inside an instance.

## Scope

Does not handle proctoring, plagiarism detection, or video conferencing - use for Blackboard Learn course, user, content, and grade management only.

## Capabilities

- List, create, and update Blackboard Learn user accounts within an institution
- Enrol and unenrol users in courses by managing course memberships
- Read and write grade columns and per-student grade entries against assignments
- Publish and update course content items and announcements
- Look up academic terms and per-course calendar events
- Exchange OAuth client credentials for a bearer token used on subsequent calls

## Use cases

### Automated Roster Enrolment

Synchronise an institution's SIS roster with Blackboard Learn by calling POST /learn/api/public/v1/courses/{courseId}/users/{userId} for each student in a feed. Removed students are unenrolled with the matching DELETE call. Because Learn returns membership records keyed by external user ID, agents can run idempotent diffs and keep enrolments aligned without exporting CSVs.

Example prompt: Call PUT /learn/api/public/v1/courses/{courseId}/users/{userId} with the student's external ID and the role 'Student' for each row in the SIS feed

### Grade Posting from External Tools

Push grades from an external auto-grading service back into Blackboard Learn by reading the grade column via GET /learn/api/public/v1/courses/{courseId}/gradebook/columns and writing each student score with the corresponding grade endpoint. Learn handles weighting, late penalties, and gradebook visibility on its side, so the integrating service only sends raw scores plus a feedback note.

Example prompt: Find the target column via GET /learn/api/public/v1/courses/{courseId}/gradebook/columns, then PATCH each student's grade with the score and feedback

### Course Content Publishing

Automate content rollouts at the start of a term by listing existing items via GET /learn/api/public/v1/courses/{courseId}/contents and posting new content blocks for syllabus, readings, and assignments. Combined with announcements, this lets an LMS administrator scaffold dozens of courses from a template repo without clicking through the Learn UI.

Example prompt: Call POST /learn/api/public/v1/courses/{courseId}/contents with the syllabus item title and body, then post a kick-off announcement to the same course

### AI Agent LMS Operations via Jentic

An AI agent embedded in an institution's helpdesk or registrar workflow can drive Blackboard Learn through Jentic without managing the OAuth client secret directly. Jentic's intent search routes to the correct /learn/api/public/v1 endpoint with its full schema, and the OAuth credential is loaded from the vault at execution time so it never enters the agent's tool context.

Example prompt: Search Jentic for 'enrol a student in a Blackboard course', load PUT /learn/api/public/v1/courses/{courseId}/users/{userId}, and execute with the student's external ID and the target course

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /learn/api/public/v1/oauth2/token | Exchange client credentials for a bearer token |
| GET | /learn/api/public/v1/users | List Blackboard Learn users |
| GET | /learn/api/public/v3/courses | List courses on the Learn instance |
| GET | /learn/api/public/v1/courses/{courseId}/users | List users enrolled in a course |
| GET | /learn/api/public/v1/users/{userId}/courses | List courses a user is enrolled in |
| GET | /learn/api/public/v1/courses/{courseId}/contents | List content items in a course |
| GET | /learn/api/public/v1/system/version | Return the Learn instance version |

## Key resources

- **Users** — Create, list, update, and delete Learn user accounts
- **Courses** — Manage course records and metadata
- **Course Memberships** — Enrol and unenrol users in courses with role assignments
- **Content** — Publish and update course content items
- **Grades** — Manage grade columns and per-student grade entries
- **Announcements** — Post and manage course-level announcements
- **Terms** — Look up academic terms used to scope courses
- **Calendar** — Read course calendar events and assignments
- **OAuth** — Exchange client credentials for a bearer token

## Why Jentic

- **Setup:** Wiring the Blackboard Learn REST API by hand means running the OAuth2 token exchange, carrying the bearer token, and targeting your own Learn server host across each path yourself. Through Jentic you install once, import Blackboard Learn from the API Directory, store the OAuth credentials once, and your agent calls it.
- **Permission scoping:** Blackboard Learn puts the course and user id in the URL path (/courses/{courseId}/users, /users/{userId}/courses), so a rule can pin your agent to one course or user: it can read that course's users and contents and nothing else. You choose the operations it may call, so enrolment or grade changes are not included unless you add them.
- **Credential handling:** Your Blackboard Learn OAuth client secret and bearer token are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list users in a Blackboard course' or 'get a course roster', and Jentic returns the matching Learn operation with its input schema so the agent calls the right endpoint without navigating the reference docs manually.

## Related APIs

- **Schoology API** — Schoology is another K-12 and higher-ed LMS with similar course, enrolment, and grade primitives.
- **Moodle API** — Moodle is the open-source LMS with comparable course and user management endpoints.
- **Salesforce API** — Salesforce often holds the student/applicant CRM record that feeds Learn enrolment.

## FAQ

### Why is there no official OpenAPI spec for Blackboard Learn REST API?

Anthology publishes Blackboard Learn API documentation at developer.anthology.com but does not provide a downloadable OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Blackboard Learn via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Blackboard Learn REST API use?

Blackboard Learn uses OAuth 2.0 client credentials. Call POST /learn/api/public/v1/oauth2/token with HTTP basic auth using the integration's client ID and secret to receive a bearer token, then send that token in the Authorization header on subsequent calls. Through Jentic the client secret and bearer token are stored in the encrypted vault and never injected into the agent's prompt context.

### Can I enrol students in a course with the Blackboard Learn REST API?

Yes. PUT /learn/api/public/v1/courses/{courseId}/users/{userId} creates or updates a course membership with the desired role. Pair with the corresponding DELETE call to unenrol. Memberships can be queried via GET /learn/api/public/v1/courses/{courseId}/users.

### What are the rate limits for the Blackboard Learn REST API?

The OpenAPI spec does not declare explicit rate limits. Each Learn instance is hosted per institution, so throughput depends on the institution's deployment. Back off on 429 responses and check the institution's Learn admin for any documented per-integration ceiling.

### How do I post grades to Blackboard Learn through Jentic?

Run pip install jentic, then search Jentic for 'post a grade to a Blackboard course'. Jentic returns the matching grade-column endpoint with its schema. Execute with the column ID, student ID, and score; Learn applies weighting and visibility rules on its side.

### What is the base URL for the Blackboard Learn REST API?

The base URL is the institution's own Learn server (templated as https://{server} in the spec). Each integration must substitute the institution's Learn hostname before calling /learn/api/public/v1 or /v3 paths.

### Can I limit what my agent is allowed to do with the Blackboard Learn REST API?

Yes. Because you run Jentic One yourself, your own rules decide which Blackboard Learn operations and credentials the agent may use. Since the API puts the course and user IDs in the URL path (for example /courses/{courseId}/users and /users/{userId}/courses), a rule can pin the agent to one course or user, letting it read that course's users and contents and nothing else. You choose the operations it may call, so enrolment or grade changes are excluded unless you explicitly add them.
