LMS
to SIS Integration Workflow
Short answer: NC Self-Service itself — the
student/employee portal you use via Banner (often called Self-Service Banner /
SSB9) — does not generally expose a user-accessible public API in the
way Canvas does.
Here’s the context:
📌 What Canvas provides
·
Canvas LMS (used in North Carolina higher ed) has a widely used REST API and supports
integrations (access tokens, webhooks, LTI, etc.),
and that API is intended for developers to build tools and automations for users.
Canvas’s API is documented and accessible to users and developers with
appropriate permissions.
📌 What “Self-Service” normally refers to
·
In many NC colleges and universities, “Self-Service”
refers to the Banner Self-Service portal (e.g., Self-Service Banner
9). This is a set of authenticated web applications built on Ellucian Banner for students, faculty, and staff to view
and manage academic and administrative tasks (course registration, grades,
personal info, payroll, etc.).
·
It’s a web front-end, not a developer platform.
📌 Does Banner Self-Service provide a user
API?
·
No public or user-accessible API is part of Self-Service
Banner itself. Self-Service Banner modules are web
UIs sitting on top of the Banner ERP/Student Information System (SIS). They are
designed for interactive use via a browser, not for direct programmatic access
by end users.
·
Any API access to the underlying data generally comes from the
Banner system’s integration layer, not the Self-Service portal itself.
Institutions can use Ellucian’s integration tools
(like Ellucian Ethos APIs, Banner Web Services, or
middleware platforms) to programmatically access Banner data for authorized
systems — but these are institutional APIs (for developers with admin
rights or integration privileges), not something a typical user can simply use
out-of-the-box.
📌 Practical implications
·
Canvas API: Available for developers
(students/teachers/IT) to build and integrate apps, automate tasks, etc.
·
Self-Service Banner: No direct user-accessible API. If your
campus or IT department needs programmatic access to Self-Service data/actions,
they generally must use:
o Ellucian Ethos or other Banner integration/web
services (configured by Banner administrators),
o Or
institution-specific APIs or middleware (often protected and not public).
📌 Summary
|
System |
Has public/user
API? |
|
Canvas LMS |
✅ Yes (developer API) |
|
Self-Service Banner (SSB) |
❌ No public/user API |
If you’re asking because you want to automate or integrate
some Self-Service functions (like getting schedules, grades, enrollment info,
etc.), let me know — I can outline how most Banner systems support integrations
(e.g., Ethos APIs, Web Services) and what your institution’s IT group would
typically need to configure.
I am interested in writing code that would
pull the date of a quiz (placed into Canvas by administration). What I need to
do is pull the date the quiz was taken and put the same date into Self-Service
Banner (SSB) for the same class and the same student. Currently teachers are do this leading to many errors (no reflection on the
teachers).
Great — this is a very solvable integration problem, but it
requires going through the institutional integration layer, not the
Self-Service UI.
You’re essentially trying to:
Pull quiz completion dates from Canvas → write them
into Banner (so they appear in SSB) for the same student + same course.
That’s a classic LMS ↔ SIS integration workflow.
✅ 1. Pulling the Quiz
Date from Canvas
This part is straightforward. Canvas provides APIs for:
·
Quiz submissions
·
Assignment submissions
·
Submission timestamps (submitted_at)
·
User IDs
·
Course IDs
Depending on whether you're using Classic Quizzes or New
Quizzes, you'd use:
GET /api/v1/courses/:course_id/quizzes/:quiz_id/submissions
or
GET
/api/v1/courses/:course_id/assignments/:assignment_id/submissions
The key field you want is:
"submitted_at": "2026-02-10T14:03:22Z"
You’ll likely:
·
Pull all submissions for a quiz
·
Match Canvas user IDs to Banner IDs
·
Extract the submission date
This part is very doable with Python or similar.
❗ 2. Writing to
Self-Service Banner (The Critical Part)
Here’s the important distinction:
You cannot write directly to “Self-Service Banner.”
SSB is just the front end.
You must write to Banner itself through one of these:
Option A — Ellucian
Ethos API (Modern & Recommended)
Most NC institutions running Banner 9 use Ethos
Integration.
Ethos provides REST APIs to:
·
Update student records
·
Insert academic activity data
·
Post attendance or participation dates (if configured)
This is the cleanest and safest method.
Option B — Banner Web Services (SOAP or
REST)
Older but still common.
Banner exposes:
·
Student registration services
·
Grade services
·
Academic history services
These require:
·
Admin credentials
·
Institutional IT approval
·
Integration configuration
Option C — Direct Database Insert (⚠️
Not Recommended)
Technically possible if you have:
·
Oracle DB access
·
Knowledge of Banner tables (e.g., SFRSTCR, SHRTCKN, etc.)
But:
·
Risky
·
Can break audit trails
·
Often violates governance rules
·
Almost always prohibited without ERP admin approval
🧠 The Real Question
Before writing code, clarify:
Where in Banner does that “quiz date” live?
Is it:
·
Attendance date?
·
Participation verification?
·
Census reporting?
·
Academic engagement date?
·
A custom field your institution added?
Banner doesn’t have a generic “quiz completion date” field by
default.
So your workflow must be:
1.
Identify the exact Banner field or process being updated.
2.
Ask IT which API/service writes to it.
3.
Use that service programmatically.
🔄 Typical Architecture for What You Want
Most institutions would implement something like this:
Canvas API →
Integration Script (Python) → Ethos API → Banner → SSB
displays data
Your script would:
1.
Authenticate to Canvas
2.
Pull quiz submissions
3.
Map Canvas User ID → Banner PIDM
4.
Transform timestamp to required Banner date format
5.
POST to Ethos/Banner endpoint
6.
Log success/failure
🔐 Permissions & Governance
You will almost certainly need:
·
Canvas API token (admin-level if pulling all students)
·
Banner integration credentials
·
IT approval (this touches official student records)
Because you’re modifying SIS data, this falls under:
·
FERPA
·
Institutional audit compliance
·
Possibly state reporting rules
⚙️
Technical Example (High Level Python Sketch)
import requests
# 1. Get Canvas quiz
submissions
canvas_url =
"https://school.instructure.com/api/v1/..."
headers =
{"Authorization": "Bearer YOUR_TOKEN"}
response = requests.get(canvas_url,
headers=headers)
submissions = response.json()
for submission in
submissions:
banner_id = map_canvas_to_banner(submission["user_id"])
quiz_date = submission["submitted_at"]
# 2. Send to
Banner via Ethos
banner_payload =
{
"studentId": banner_id,
"courseReference": "202630-MAT-101-01",
"participationDate": quiz_date
}
requests.post("https://ethos-api.school.edu/endpoint",
json=banner_payload,
headers=banner_auth)
🎯 What You Should Do Next
To move forward safely:
1.
Contact your Banner/Ellucian
administrator.
2.
Ask:
“Is there an Ethos API or Banner web service endpoint we can
use to write academic participation dates programmatically?”
3.
Confirm:
o The exact Banner
field being updated
o The expected
payload format
o Authentication
method (OAuth2? API key? Certificate?)
🏁 Bottom Line
|
Task |
Difficulty |
|
Pull quiz dates from Canvas |
Easy |
|
Write to Banner safely |
Medium–Complex (requires IT partnership) |
|
Write directly to SSB |
Not possible |
If you’d like, tell me:
·
Are you faculty, IT staff, or administration?
·
Do you know if your institution uses Ethos?
·
What exactly the date represents in Banner (attendance?
participation?)
With that, I can give you a much more concrete technical plan
tailored to how NC institutions typically configure Banner.
The date we need to update in Banner is
attendance
Perfect — that helps a lot.
If the field in Banner is attendance, then what you’re
really trying to automate is:
Canvas quiz submission date → Banner Attendance record
(for that CRN + student)
That is very doable — but it depends heavily on how your
institution records attendance in Banner.
Step 1: Clarify How
Attendance Is Stored in Your Banner
Banner doesn’t have just one universal “attendance” field. Institutions
typically use one of these:
Common Banner Attendance Configurations
1.
Attendance Tracking (SAAADMS / SFAALST / related tables)
o Used for
census/participation verification
o Often tied to
financial aid compliance
2.
Faculty Grade Entry + Attendance Hours
o Less common
3.
Academic Engagement / Last Date of Attendance
o Frequently used for
Title IV compliance
o Stored in academic
history tables
4.
Custom Attendance Module
o Some NC
institutions have custom forms
You need to confirm:
·
Is this daily attendance?
·
Or first date of attendance (census verification)?
·
Or last date of attendance?
These are handled differently in Banner.
Step 2: The Correct
Way to Write Attendance
You cannot write directly to SSB.
You must write to Banner via one of:
✅ Best Option: Ellucian
Ethos API
If your school uses Ethos Integration:
You would POST attendance data to the appropriate resource (often
academic-events, student-course-attendances, or similar — naming varies by
version).
Your IT department would:
·
Enable the resource
·
Grant API credentials
·
Provide OAuth authentication
This is the clean, audit-safe way.
⚠️ Older Option: Banner Web
Services (SOAP)
Some schools still use Banner 8-style web services for:
·
Attendance
·
Academic participation
·
Registration updates
This works but is less modern.
❌ Not Recommended: Direct Database
Insert
You technically could insert into attendance-related
tables, but:
·
You would bypass business logic
·
You could break financial aid reporting
·
You could create audit violations
·
IT will almost certainly forbid it
Do not go this route unless you are Banner ERP admin.
Step 3: Technical
Architecture for Your Use Case
Here’s what a clean integration looks like:
Canvas →
Python Integration Script → Ethos API → Banner → SSB displays
attendance
Your script logic would be:
1.
Pull quiz submissions from Canvas
2.
Extract:
o Canvas user ID
o Course ID
o submitted_at date
3.
Map:
o Canvas user →
Banner PIDM
o Canvas course →
Banner CRN
4.
Transform timestamp to Banner-required format
5.
POST attendance record to Banner API
6.
Log success/failure
Step 4: The Hardest
Part — ID Mapping
This is usually where integrations fail.
You must reliably map:
|
Canvas |
Banner |
|
user_id |
PIDM or Banner ID |
|
course_id |
CRN |
|
term |
Banner term code |
Many schools solve this by:
·
Using SIS ID fields in Canvas
·
Storing Banner ID as sis_user_id
·
Storing CRN in sis_course_id
If your Canvas is properly SIS-integrated (most NC schools
are), this part is manageable.
Step 5: Important
Compliance Note (Very Important)
Attendance in Banner is often tied to:
·
Financial aid disbursement
·
State reporting
·
Title IV eligibility
·
Census reporting
So your automation must:
·
Log every write
·
Avoid overwriting existing attendance unintentionally
·
Handle corrections carefully
·
Be approved by Registrar/Financial Aid
This is not just technical — it’s regulatory.
Step 6: Smart
Implementation Strategy
Here’s how I would approach this if I were building it at an
NC institution:
Phase 1 — Read Only
·
Pull quiz submissions
·
Generate a report comparing:
o Canvas quiz date
o Banner attendance
date
·
Identify mismatches
Phase 2 — Controlled Pilot
·
Write attendance only for one department
·
Log every transaction
·
Email summary report daily
Phase 3 — Full
Automation
·
Scheduled job (nightly)
·
Error reporting dashboard
·
Retry logic for failures
What I Need From
You
To give you a concrete technical design, I need:
1.
Are you IT staff or faculty?
2.
Do you know if your institution uses Ethos?
3.
Is this:
o First date of
attendance?
o Daily attendance?
o Last date of
attendance?
Because those three are implemented very differently in
Banner.
Big Picture
Technically:
·
Canvas side = easy
·
Banner side = controlled and permission-based
·
The integration = very achievable with the right API access
Organizationally:
·
You’ll need Registrar + IT partnership
If you’d like, I can next:
·
Outline a full production-ready architecture
·
Or give you a sample Python integration structure
·
Or explain how attendance is typically stored in Banner tables
(if you’re comfortable at that level)
Just tell me your role and your current access level.
For census
Excellent — that narrows this down a lot.
For census, what Banner cares about is typically:
Academic Attendance / Academic Engagement Verification at
census date
(Used for Financial Aid / Title IV reporting)
This is not daily attendance. It is usually a one-time
participation confirmation per CRN per student.
🔎 What “Census Attendance” Usually Means in Banner
At most Banner schools, census attendance is recorded as one
of:
1.
Attendance indicator (Present/Not Attended)
2.
Academic Engagement indicator
3.
Last Date of Attendance (if dropped)
4.
Participation verification flag
The actual data often lives in:
·
SFRSTCR (registration record)
·
Attendance verification tables tied to faculty grading
·
Or institutional custom attendance tracking forms
Your Registrar can tell you exactly which.
🎯 What You’re Trying To Automate
You want:
If a student submitted a census quiz in Canvas
→ Mark them as “Attended” in Banner for that CRN
That’s very reasonable — and many institutions are moving
this direction.
🧱 Correct
Architecture for Census Automation
You should implement this flow:
Canvas API →
Integration Script → Banner Ethos API → Census Attendance Update
NOT:
·
Screen scraping SSB
·
Direct DB writes
·
Manual imports
🛠 Step-By-Step Technical Plan
Step 1 — Pull Census Quiz Submissions from
Canvas
You’ll call:
GET /api/v1/courses/:course_id/assignments/:assignment_id/submissions
You check:
·
submitted_at is not null
·
Submission date ≤ census date
·
(Optional) score > 0
That gives you:
·
Canvas SIS User ID
·
Canvas SIS Course ID (usually contains CRN)
·
Submission timestamp
Step 2 — Match IDs
This is critical.
Most NC institutions sync Banner → Canvas using SIS
imports, so:
|
Canvas Field |
Should Contain |
|
sis_user_id |
Banner ID |
|
sis_course_id |
Term + CRN |
|
enrollment_term_id |
Banner term |
If your Canvas is properly configured, you do not need
a manual mapping table.
Step 3 — Write to Banner
You will need one of:
✅ Ellucian
Ethos API (Preferred)
Ask IT:
“Is there an Ethos resource for updating census attendance or
academic engagement status for a student registration record?”
Many schools expose:
·
Student Course Registrations
·
Academic Engagement
·
Attendance Verification resources
Your script will:
·
Authenticate (OAuth2)
·
PATCH or POST attendance status
·
Log transaction ID
⚠️ If No Ethos
Some institutions still:
·
Run census via Faculty Grade Entry
·
Use Banner Web Services (SOAP)
·
Run batch PL/SQL jobs fed by CSV
If Ethos isn’t available, you may need:
·
A nightly CSV export
·
Automated secure upload
·
Banner job to process attendance flags
That’s institution-specific.
🧠 Important
Census Logic Rules
For compliance, your automation should:
✔ Only mark
attendance if quiz submitted before census cutoff
✔ Never overwrite a
manually marked “Never Attended” without review
✔ Log every update
✔ Be idempotent
(running twice should not double-update)
🧪 Smart
Implementation Strategy
Before writing to Banner:
Phase 1 — Comparison Report
Generate a daily report:
| Student | CRN | Canvas Quiz Submitted | Banner Attendance |
Mismatch? |
Send to Registrar.
This builds trust.
Phase 2 — Limited Pilot
Only auto-mark:
·
Students currently marked “No Attendance”
·
Where Canvas shows verified submission
Keep audit logs.
⚠️
Regulatory Warning (Important)
Census attendance ties directly to:
·
Pell Grant eligibility
·
State funding
·
Return-to-Title-IV calculations
So this must be:
·
Registrar-approved
·
Financial Aid-approved
·
Fully logged
You are modifying official academic records.
📌 Questions I Need Answered
To give you a precise design:
1.
Does your institution use Ellucian
Ethos?
2.
Do faculty currently mark census attendance inside:
o Faculty Grade
Entry?
o An Attendance
Verification module?
3.
Is the census quiz standardized across all courses?
🏁 Bottom Line
Technically: ✔ Very feasible
Organizationally: ⚠ Requires IT + Registrar
Safely done via: Ethos API or Banner Web Service
Never via: Direct DB writes or SSB automation