EduNova API v1
Laravel Sanctum authentication · Role and course permissions · JSON responses
Authentication
Send a POST request to /api/v1/auth/login with email, password, and device_name. Use the returned token in Authorization: Bearer TOKEN. All request bodies use JSON. Validation failures return status 422 with an errors object.
For enrollment, payments, exam submissions, and offline sync, send an Idempotency-Key header containing a unique UUID. A retry with the same key and request returns the saved response. A changed request with that key returns 409.
This is a live route reference. Request fields, examples, and integration notes are included in the project documentation.
| SL | Method | Endpoint | Action |
|---|---|---|---|
| 1 | GET | /api/v1/health | api.health |
| 2 | GET | /api/v1/docs | api.docs |
| 3 | GET | /api/v1/openapi.json | api.openapi |
| 4 | GET | /api/v1/categories | api.categories |
| 5 | GET | /api/v1/courses | api.courses.index |
| 6 | GET | /api/v1/courses/{course} | api.courses.show |
| 7 | GET | /api/v1/courses/{course}/sections | api.curriculum |
| 8 | GET | /api/v1/mobile/config | api.config |
| 9 | GET | /api/v1/mobile/minimum-version | api.version |
| 10 | POST | /api/v1/auth/login | api.login |
| 11 | POST | /api/v1/auth/register | api.register |
| 12 | POST | /api/v1/auth/password/email | api.password.email |
| 13 | POST | /api/v1/auth/password/reset | api.password.reset |
| 14 | POST | /api/v1/admissions | api.admissions |
| 15 | POST | /api/v1/contact | api.contact |
| 16 | POST | /api/v1/certificates/verify | api.certificates.verify |
| 17 | POST | /api/v1/webhooks/payments | api.webhooks.payments |
| 18 | POST | /api/v1/auth/logout | api.logout |
| 19 | GET | /api/v1/profile | api.profile |
| 20 | PUT | /api/v1/profile | api.profile.update |
| 21 | DELETE | /api/v1/account | api.deactivate |
| 22 | POST | /api/v1/privacy/requests | api.privacy |
| 23 | GET | /api/v1/auth/sessions | api.sessions |
| 24 | GET | /api/v1/notifications | api.notifications |
| 25 | PUT | /api/v1/notification-preferences | api.preferences |
| 26 | POST | /api/v1/notifications/{notification}/read | api.notification.read |
| 27 | POST | /api/v1/devices | api.devices.store |
| 28 | DELETE | /api/v1/devices/{device}/session | api.devices.revoke |
| 29 | POST | /api/v1/devices/{device}/sync | api.sync |
| 30 | POST | /api/v1/enrollments | api.enrollments.store |
| 31 | POST | /api/v1/courses/{course}/enrollments | api.enroll |
| 32 | GET | /api/v1/courses/{course}/classes | api.classes |
| 33 | GET | /api/v1/courses/{course}/completion | api.completion |
| 34 | GET | /api/v1/lessons/{lesson} | api.lesson.show |
| 35 | PUT | /api/v1/lessons/{lesson}/progress | api.progress |
| 36 | POST | /api/v1/lessons/{lesson}/notes | api.notes |
| 37 | POST | /api/v1/lessons/{lesson}/bookmarks | api.bookmarks |
| 38 | GET | /api/v1/resources/{resource}/signed-download | api.resource.signed-download |
| 39 | GET | /api/v1/resources/{resource}/download | api.resource.download |
| 40 | GET | /api/v1/resources/{resource}/signed-url | api.resource.signed |
| 41 | GET | /api/v1/downloads/manifest | api.download.manifest |
| 42 | POST | /api/v1/assignments/{assignment}/submissions | api.assignment.submit |
| 43 | PUT | /api/v1/submissions/{submission}/grade | api.submission.grade |
| 44 | GET | /api/v1/submissions/files/{file} | api.submission.file |
| 45 | GET | /api/v1/assessments/{assessment}/eligibility | api.eligibility |
| 46 | POST | /api/v1/assessments/{assessment}/attempts | api.attempt.start |
| 47 | GET | /api/v1/attempts/{attempt} | api.attempt.show |
| 48 | PUT | /api/v1/attempts/{attempt}/answers | api.attempt.answer |
| 49 | POST | /api/v1/attempts/{attempt}/submit | api.attempt.submit |
| 50 | GET | /api/v1/attempts/{attempt}/results | api.attempt.results |
| 51 | PUT | /api/v1/attempts/{attempt}/grade | api.attempt.grade |
| 52 | POST | /api/v1/attempts/{attempt}/publish | api.attempt.publish |
| 53 | GET | /api/v1/invoices/{invoice} | api.invoice |
| 54 | POST | /api/v1/invoices/{invoice}/payments | api.payment.record |
| 55 | POST | /api/v1/payments/{payment}/refunds | api.refund |
| 56 | POST | /api/v1/refunds/{refund}/approve | api.refund.approve |
| 57 | POST | /api/v1/enrollments/{enrollment}/certificate | api.certificate.issue |
| 58 | GET | /api/v1/classes/{session}/recording | api.class.recording |
| 59 | GET | /api/v1/availability | api.availability.index |
| 60 | POST | /api/v1/availability | api.availability.store |
| 61 | DELETE | /api/v1/availability/{availability} | api.availability.destroy |
| 62 | POST | /api/v1/classes/{session}/attendance | api.attendance |
| 63 | POST | /api/v1/classes/{session}/qr | api.attendance.qr |
| 64 | POST | /api/v1/classes/{session}/check-in | api.check-in |
| 65 | POST | /api/v1/classes/{session}/join | api.class.join |
| 66 | POST | /api/v1/messages | api.messages.send |
| 67 | POST | /api/v1/discussions/{discussion}/replies | api.discussion.reply |
| 68 | POST | /api/v1/support/tickets | api.ticket.store |
| 69 | POST | /api/v1/support/tickets/{ticket}/replies | api.ticket.reply |
| 70 | GET | /api/v1/admin/metrics | api.metrics |
| 71 | GET | /api/v1/reports/{kind}/{format} | api.export |
| 72 | GET | /api/v1/manage/{resource} | api.resources.index |
| 73 | POST | /api/v1/manage/{resource} | api.resources.store |
| 74 | GET | /api/v1/manage/{resource}/{record} | api.resources.show |
| 75 | PUT | /api/v1/manage/{resource}/{record} | api.resources.update |
| 76 | PATCH | /api/v1/manage/{resource}/{record} | api.resources.update |
| 77 | DELETE | /api/v1/manage/{resource}/{record} | api.resources.destroy |