Files
encoach_be_odoo19/EnCoach_API.postman_collection.json
Talal Sharabi f5b627256f EnCoach Odoo 19 custom modules
Full backend implementation with custom Odoo modules:
- encoach_api: Core API, user management, JWT auth
- encoach_exam: Exam generation (reading, writing, listening, speaking)
- encoach_evaluate: AI-powered evaluation (writing, speaking)
- encoach_training: Training tips and walkthrough
- encoach_storage: File storage management
- encoach_payment: Stripe, PayPal, Paymob integration
- encoach_mail: Email notifications

Made-with: Cursor
2026-03-14 16:46:46 +04:00

1693 lines
44 KiB
JSON

{
"info": {
"name": "EnCoach Odoo 19 API",
"description": "Complete API collection for the EnCoach IELTS platform running on Odoo 19 — 90+ endpoints.\n\n**Setup:**\n1. Run the \"Register\" then \"Login\" request first.\n2. The login response token is auto-saved to the `token` variable.\n3. All authenticated requests use `Bearer {{token}}`.\n\n**Folders:** Auth, Registration Codes, Users, Exams, Classrooms, Assignments, Sessions, Stats, AI Evaluation, AI Generation, AI Media, Training, Entities & Roles, Discounts, Approval Workflows, Subscriptions & Payments, Tickets, Storage, Grading.\n\n**Base URL:** `http://127.0.0.1:8069`",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"variable": [
{
"key": "baseUrl",
"value": "http://127.0.0.1:8069"
},
{
"key": "token",
"value": ""
}
],
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{token}}",
"type": "string"
}
]
},
"item": [
{
"name": "Auth",
"item": [
{
"name": "Register",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"email\": \"testuser@example.com\",\n \"password\": \"Test1234\",\n \"name\": \"Test User\",\n \"type\": \"student\",\n \"code\": \"\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/register",
"host": ["{{baseUrl}}"],
"path": ["api", "register"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"var json = pm.response.json();",
"if (json.token) {",
" pm.collectionVariables.set('token', json.token);",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Login",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"credential\": \"testuser@example.com\",\n \"password\": \"Test1234\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/login",
"host": ["{{baseUrl}}"],
"path": ["api", "login"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"var json = pm.response.json();",
"if (json.token) {",
" pm.collectionVariables.set('token', json.token);",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Logout",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"url": {
"raw": "{{baseUrl}}/api/logout",
"host": ["{{baseUrl}}"],
"path": ["api", "logout"]
}
}
},
{
"name": "Reset Password",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"email\": \"testuser@example.com\",\n \"password\": \"NewPass1234\",\n \"token\": \"<reset_token>\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/reset",
"host": ["{{baseUrl}}"],
"path": ["api", "reset"]
}
}
},
{
"name": "Send Reset Verification",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"email\": \"testuser@example.com\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/reset/sendVerification",
"host": ["{{baseUrl}}"],
"path": ["api", "reset", "sendVerification"]
}
}
}
]
},
{
"name": "Registration Codes",
"item": [
{
"name": "Validate Code",
"request": {
"auth": { "type": "noauth" },
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/code/SAMPLE-CODE",
"host": ["{{baseUrl}}"],
"path": ["api", "code", "SAMPLE-CODE"]
}
}
},
{
"name": "Batch Create Users",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"users\": [\n { \"email\": \"user1@example.com\", \"name\": \"User One\", \"type\": \"student\" },\n { \"email\": \"user2@example.com\", \"name\": \"User Two\", \"type\": \"student\" }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/batch_users",
"host": ["{{baseUrl}}"],
"path": ["api", "batch_users"]
}
}
},
{
"name": "Make User (Admin)",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"email\": \"newuser@example.com\",\n \"name\": \"New User\",\n \"password\": \"TempPass123\",\n \"type\": \"student\",\n \"isVerified\": true\n}"
},
"url": {
"raw": "{{baseUrl}}/api/make_user",
"host": ["{{baseUrl}}"],
"path": ["api", "make_user"]
}
}
}
]
},
{
"name": "Users",
"item": [
{
"name": "Get Current User",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/user",
"host": ["{{baseUrl}}"],
"path": ["api", "user"]
}
}
},
{
"name": "Update User Profile",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Updated Name\",\n \"phone\": \"+1234567890\",\n \"nativeLanguage\": \"Arabic\",\n \"country\": \"Egypt\",\n \"learningGoal\": \"IELTS Band 7\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/users/update",
"host": ["{{baseUrl}}"],
"path": ["api", "users", "update"]
}
}
},
{
"name": "List Users",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/users/list?search=&type=student&page=1&limit=20",
"host": ["{{baseUrl}}"],
"path": ["api", "users", "list"],
"query": [
{ "key": "search", "value": "" },
{ "key": "type", "value": "student" },
{ "key": "entityID", "value": "", "disabled": true },
{ "key": "page", "value": "1" },
{ "key": "limit", "value": "20" }
]
}
}
},
{
"name": "Get User by ID",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/users/5",
"host": ["{{baseUrl}}"],
"path": ["api", "users", "5"]
}
}
},
{
"name": "User Controller Action",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"action\": \"transfer\",\n \"userIds\": [5],\n \"fromGroupId\": 1,\n \"toGroupId\": 2\n}"
},
"url": {
"raw": "{{baseUrl}}/api/users/controller",
"host": ["{{baseUrl}}"],
"path": ["api", "users", "controller"]
}
}
},
{
"name": "Get User Balance",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/users/balance",
"host": ["{{baseUrl}}"],
"path": ["api", "users", "balance"]
}
}
}
]
},
{
"name": "Exams",
"item": [
{
"name": "List Exams",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam?module=reading&page=1&limit=20",
"host": ["{{baseUrl}}"],
"path": ["api", "exam"],
"query": [
{ "key": "module", "value": "reading" },
{ "key": "createdBy", "value": "", "disabled": true },
{ "key": "isPublished", "value": "", "disabled": true },
{ "key": "entityID", "value": "", "disabled": true },
{ "key": "page", "value": "1" },
{ "key": "limit", "value": "20" }
]
}
}
},
{
"name": "Create Exam",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"label\": \"Sample Reading Exam\",\n \"access\": \"public\",\n \"variant\": \"full\",\n \"min_timer\": 60,\n \"is_diagnostic\": false,\n \"shuffle\": false,\n \"difficulty\": [\"B1\", \"B2\"],\n \"parts\": [\n {\n \"name\": \"Part 1\",\n \"exercises\": [\n {\n \"type\": \"multiple_choice\",\n \"questions\": [\n { \"text\": \"What is the main idea?\", \"options\": [\"A\", \"B\", \"C\", \"D\"], \"answer\": \"A\" }\n ]\n }\n ]\n }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/reading",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading"]
}
}
},
{
"name": "Get Exam",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/reading/1",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", "1"]
}
}
},
{
"name": "Update Exam",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"label\": \"Updated Exam Title\",\n \"access\": \"private\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/reading/1",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", "1"]
}
}
},
{
"name": "Delete Exam",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/exam/reading/1",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", "1"]
}
}
},
{
"name": "Import Exam",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "exercises", "type": "file", "src": "" },
{ "key": "solutions", "type": "file", "src": "", "disabled": true }
]
},
"url": {
"raw": "{{baseUrl}}/api/exam/reading/import/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", "import", ""]
}
}
},
{
"name": "List Avatars",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/avatars",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "avatars"]
}
}
}
]
},
{
"name": "Classrooms",
"item": [
{
"name": "List Groups",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/groups?participant=&admin=&entityID=",
"host": ["{{baseUrl}}"],
"path": ["api", "groups"],
"query": [
{ "key": "participant", "value": "", "disabled": true },
{ "key": "admin", "value": "", "disabled": true },
{ "key": "entityID", "value": "", "disabled": true }
]
}
}
},
{
"name": "Create Group",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"IELTS Prep Class A\",\n \"entityID\": null,\n \"participants\": []\n}"
},
"url": {
"raw": "{{baseUrl}}/api/groups",
"host": ["{{baseUrl}}"],
"path": ["api", "groups"]
}
}
},
{
"name": "Update Group",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Updated Group Name\",\n \"participants\": [5]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/groups/1",
"host": ["{{baseUrl}}"],
"path": ["api", "groups", "1"]
}
}
},
{
"name": "Delete Group",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/groups/1",
"host": ["{{baseUrl}}"],
"path": ["api", "groups", "1"]
}
}
}
]
},
{
"name": "Assignments",
"item": [
{
"name": "List Assignments",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/assignments?page=1&limit=20",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments"],
"query": [
{ "key": "groupId", "value": "", "disabled": true },
{ "key": "createdBy", "value": "", "disabled": true },
{ "key": "status", "value": "", "disabled": true },
{ "key": "participant", "value": "", "disabled": true },
{ "key": "isArchived", "value": "", "disabled": true },
{ "key": "page", "value": "1" },
{ "key": "limit", "value": "20" }
]
}
}
},
{
"name": "Create Assignment",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Weekly Reading Test\",\n \"examId\": 1,\n \"groupId\": 1,\n \"startDate\": \"2026-03-15T09:00:00\",\n \"endDate\": \"2026-03-15T11:00:00\",\n \"duration\": 120\n}"
},
"url": {
"raw": "{{baseUrl}}/api/assignments",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments"]
}
}
},
{
"name": "Update Assignment",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Updated Assignment\",\n \"startDate\": \"2026-03-16T09:00:00\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/assignments/1",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1"]
}
}
},
{
"name": "Delete Assignment",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/assignments/1",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1"]
}
}
},
{
"name": "Start Assignment",
"request": {
"method": "POST",
"url": {
"raw": "{{baseUrl}}/api/assignments/1/start",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1", "start"]
}
}
},
{
"name": "Release Assignment",
"request": {
"method": "POST",
"url": {
"raw": "{{baseUrl}}/api/assignments/1/release",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1", "release"]
}
}
},
{
"name": "Archive Assignment",
"request": {
"method": "POST",
"url": {
"raw": "{{baseUrl}}/api/assignments/1/archive",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1", "archive"]
}
}
},
{
"name": "Unarchive Assignment",
"request": {
"method": "POST",
"url": {
"raw": "{{baseUrl}}/api/assignments/1/unarchive",
"host": ["{{baseUrl}}"],
"path": ["api", "assignments", "1", "unarchive"]
}
}
}
]
},
{
"name": "Sessions",
"item": [
{
"name": "Save Session",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"examId\": 1,\n \"module\": \"reading\",\n \"answers\": {},\n \"startedAt\": \"2026-03-13T09:00:00\",\n \"completedAt\": \"2026-03-13T10:00:00\",\n \"assignmentId\": null\n}"
},
"url": {
"raw": "{{baseUrl}}/api/sessions",
"host": ["{{baseUrl}}"],
"path": ["api", "sessions"]
}
}
},
{
"name": "Delete Session",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/sessions/1",
"host": ["{{baseUrl}}"],
"path": ["api", "sessions", "1"]
}
}
}
]
},
{
"name": "Stats",
"item": [
{
"name": "Save Stats",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"sessionId\": 1,\n \"module\": \"reading\",\n \"score\": { \"correct\": 30, \"total\": 40, \"missing\": 0 },\n \"result\": {},\n \"examId\": 1,\n \"assignmentId\": null\n}"
},
"url": {
"raw": "{{baseUrl}}/api/stats",
"host": ["{{baseUrl}}"],
"path": ["api", "stats"]
}
}
},
{
"name": "Get Stat by ID",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/stats/1",
"host": ["{{baseUrl}}"],
"path": ["api", "stats", "1"]
}
}
},
{
"name": "Statistical Query",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"userId\": 5,\n \"module\": \"reading\",\n \"dateFrom\": \"2026-01-01\",\n \"dateTo\": \"2026-12-31\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/statistical",
"host": ["{{baseUrl}}"],
"path": ["api", "statistical"]
}
}
}
]
},
{
"name": "AI Evaluation",
"item": [
{
"name": "Evaluate Writing",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"sessionId\": 1,\n \"exerciseId\": \"ex1\",\n \"question\": \"Describe the chart below.\",\n \"answer\": \"The chart shows a significant increase in...\",\n \"task\": 1\n}"
},
"url": {
"raw": "{{baseUrl}}/api/evaluate/writing",
"host": ["{{baseUrl}}"],
"path": ["api", "evaluate", "writing"]
}
}
},
{
"name": "Evaluate Speaking",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "userId", "value": "5", "type": "text" },
{ "key": "sessionId", "value": "1", "type": "text" },
{ "key": "exerciseId", "value": "ex1", "type": "text" },
{ "key": "task", "value": "1", "type": "text" },
{ "key": "question_0", "value": "Describe your hometown.", "type": "text" },
{ "key": "audio_0", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/evaluate/speaking",
"host": ["{{baseUrl}}"],
"path": ["api", "evaluate", "speaking"]
}
}
},
{
"name": "Evaluate Interactive Speaking",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "userId", "value": "5", "type": "text" },
{ "key": "sessionId", "value": "1", "type": "text" },
{ "key": "exerciseId", "value": "ex1", "type": "text" },
{ "key": "task", "value": "2", "type": "text" },
{ "key": "question_0", "value": "Tell me about a hobby you enjoy.", "type": "text" },
{ "key": "audio_0", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/evaluate/interactiveSpeaking",
"host": ["{{baseUrl}}"],
"path": ["api", "evaluate", "interactiveSpeaking"]
}
}
},
{
"name": "Poll Evaluation Status (path params)",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/evaluate/1/ex1",
"host": ["{{baseUrl}}"],
"path": ["api", "evaluate", "1", "ex1"]
}
}
},
{
"name": "Poll Evaluation Status (query params - legacy)",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/evaluate/status?sessionId=1&exerciseId=ex1",
"host": ["{{baseUrl}}"],
"path": ["api", "evaluate", "status"],
"query": [
{ "key": "sessionId", "value": "1" },
{ "key": "exerciseId", "value": "ex1" }
]
}
}
}
]
},
{
"name": "AI Generation",
"item": [
{
"name": "Generate Reading Passage",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/reading/1?topic=climate+change&word_count=800",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", "1"],
"query": [
{ "key": "topic", "value": "climate+change" },
{ "key": "word_count", "value": "800" }
]
}
}
},
{
"name": "Generate Reading Exercises",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"text\": \"The passage text goes here...\",\n \"exercises\": [\"multiple_choice\", \"true_false\"],\n \"difficulty\": [\"B1\", \"B2\"]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/reading/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "reading", ""]
}
}
},
{
"name": "Generate Listening Dialog",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/listening/1?topic=university+enrollment&difficulty=B1",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "listening", "1"],
"query": [
{ "key": "topic", "value": "university+enrollment" },
{ "key": "difficulty", "value": "B1" }
]
}
}
},
{
"name": "Generate Listening Exercises",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"text\": \"Dialog transcript here...\",\n \"exercises\": [\"form_completion\", \"multiple_choice\"],\n \"difficulty\": [\"B1\"]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/listening/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "listening", ""]
}
}
},
{
"name": "Generate Writing Task",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/writing/1?topic=urbanization&difficulty=B2",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "writing", "1"],
"query": [
{ "key": "topic", "value": "urbanization" },
{ "key": "difficulty", "value": "B2" }
]
}
}
},
{
"name": "Generate Speaking Task",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/speaking/1?topic=hobbies&difficulty=B1",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "speaking", "1"],
"query": [
{ "key": "topic", "value": "hobbies" },
{ "key": "first_topic", "value": "", "disabled": true },
{ "key": "second_topic", "value": "", "disabled": true },
{ "key": "difficulty", "value": "B1" }
]
}
}
},
{
"name": "Generate Level Test",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"exercises\": [\"grammar\", \"vocabulary\"],\n \"difficulty\": [\"A2\", \"B1\", \"B2\"]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/level/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "level", ""]
}
}
},
{
"name": "Writing Task with Image (Vision)",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "file", "type": "file", "src": "" },
{ "key": "difficulty", "value": "B2", "type": "text" }
]
},
"url": {
"raw": "{{baseUrl}}/api/exam/writing/1/attachment",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "writing", "1", "attachment"]
}
}
},
{
"name": "Get Pre-built Level Exam",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/level/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "level", ""]
}
}
},
{
"name": "Get UTAS Level Exam",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/level/utas",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "level", "utas"]
}
}
},
{
"name": "Import Level Exam",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "exercises", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/exam/level/import/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "level", "import", ""]
}
}
},
{
"name": "Generate Custom Level Exam",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"spec\": {\n \"exercises\": [\"grammar\", \"vocabulary\", \"reading_comprehension\"],\n \"difficulty\": [\"B1\", \"B2\", \"C1\"]\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/level/custom/",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "level", "custom", ""]
}
}
}
]
},
{
"name": "AI Media",
"item": [
{
"name": "Generate Listening MP3",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"conversation\": [\n { \"speaker\": \"A\", \"text\": \"Hello, how can I help you?\" },\n { \"speaker\": \"B\", \"text\": \"I'd like to enroll in a course.\" }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/listening/media",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "listening", "media"]
}
}
},
{
"name": "Transcribe Audio to Dialog",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "audio", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/exam/listening/transcribe",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "listening", "transcribe"]
}
}
},
{
"name": "Generate Instructions MP3",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"text\": \"You will hear a conversation between two students. Listen and answer questions 1 to 5.\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/listening/instructions",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "listening", "instructions"]
}
}
},
{
"name": "Start Avatar Video",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"text\": \"Tell me about your favorite hobby and why you enjoy it.\",\n \"avatar\": \"avatar_code_here\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/speaking/media",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "speaking", "media"]
}
}
},
{
"name": "Poll Video Status",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/speaking/media/vid_12345",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "speaking", "media", "vid_12345"]
}
}
},
{
"name": "List Speaking Avatars",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/exam/speaking/avatars",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "speaking", "avatars"]
}
}
},
{
"name": "Transcribe Audio (General)",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "audio", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/transcribe",
"host": ["{{baseUrl}}"],
"path": ["api", "transcribe"]
}
}
}
]
},
{
"name": "Training",
"item": [
{
"name": "Generate Training Plan",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"userID\": 5,\n \"stats\": [\n { \"module\": \"reading\", \"score\": 6.5 },\n { \"module\": \"writing\", \"score\": 5.0 }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/training",
"host": ["{{baseUrl}}"],
"path": ["api", "training"]
}
}
},
{
"name": "Get Training by ID",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/training/1",
"host": ["{{baseUrl}}"],
"path": ["api", "training", "1"]
}
}
},
{
"name": "Get Contextual Tips",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"context\": \"reading\",\n \"question\": \"How to improve skimming?\",\n \"answer\": \"Student attempted skimming but missed key details.\",\n \"correct_answer\": \"Focus on first and last sentences of each paragraph.\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/training/tips",
"host": ["{{baseUrl}}"],
"path": ["api", "training", "tips"]
}
}
},
{
"name": "Get Walkthroughs",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/training/walkthrough",
"host": ["{{baseUrl}}"],
"path": ["api", "training", "walkthrough"]
}
}
}
]
},
{
"name": "Entities & Roles",
"item": [
{
"name": "List Entities",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/entities?page=1&limit=20",
"host": ["{{baseUrl}}"],
"path": ["api", "entities"],
"query": [
{ "key": "page", "value": "1" },
{ "key": "limit", "value": "20" }
]
}
}
},
{
"name": "Create Entity",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Test University\",\n \"label\": \"TU\",\n \"licenses\": 50,\n \"expiryDate\": \"2027-01-01T00:00:00\",\n \"paymentCurrency\": \"USD\",\n \"paymentPrice\": 999.99\n}"
},
"url": {
"raw": "{{baseUrl}}/api/entities",
"host": ["{{baseUrl}}"],
"path": ["api", "entities"]
}
}
},
{
"name": "Update Entity",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Updated University\",\n \"licenses\": 100\n}"
},
"url": {
"raw": "{{baseUrl}}/api/entities/1",
"host": ["{{baseUrl}}"],
"path": ["api", "entities", "1"]
}
}
},
{
"name": "Delete Entity",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/entities/1",
"host": ["{{baseUrl}}"],
"path": ["api", "entities", "1"]
}
}
},
{
"name": "List Roles",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/roles",
"host": ["{{baseUrl}}"],
"path": ["api", "roles"],
"query": [
{ "key": "entityID", "value": "", "disabled": true }
]
}
}
},
{
"name": "Create Role",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Department Head\",\n \"entityId\": 1\n}"
},
"url": {
"raw": "{{baseUrl}}/api/roles",
"host": ["{{baseUrl}}"],
"path": ["api", "roles"]
}
}
},
{
"name": "Update Role",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"name\": \"Updated Role Name\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/roles/1",
"host": ["{{baseUrl}}"],
"path": ["api", "roles", "1"]
}
}
},
{
"name": "Delete Role",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/roles/1",
"host": ["{{baseUrl}}"],
"path": ["api", "roles", "1"]
}
}
},
{
"name": "List Permissions",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/permissions",
"host": ["{{baseUrl}}"],
"path": ["api", "permissions"]
}
}
}
]
},
{
"name": "Discounts",
"item": [
{
"name": "List Discounts",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/discounts",
"host": ["{{baseUrl}}"],
"path": ["api", "discounts"]
}
}
},
{
"name": "Create Discount",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"code\": \"SAVE20\",\n \"percentage\": 20,\n \"expiryDate\": \"2026-12-31\",\n \"maxUses\": 100\n}"
},
"url": {
"raw": "{{baseUrl}}/api/discounts",
"host": ["{{baseUrl}}"],
"path": ["api", "discounts"]
}
}
},
{
"name": "Update Discount",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"percentage\": 30,\n \"maxUses\": 200\n}"
},
"url": {
"raw": "{{baseUrl}}/api/discounts/1",
"host": ["{{baseUrl}}"],
"path": ["api", "discounts", "1"]
}
}
},
{
"name": "Delete Discount",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/discounts/1",
"host": ["{{baseUrl}}"],
"path": ["api", "discounts", "1"]
}
}
}
]
},
{
"name": "Approval Workflows",
"item": [
{
"name": "List Workflows",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/approval-workflows",
"host": ["{{baseUrl}}"],
"path": ["api", "approval-workflows"]
}
}
},
{
"name": "Create Workflow",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"examId\": 1,\n \"status\": \"pending\",\n \"modules\": [\"reading\", \"writing\"],\n \"steps\": [{\"step\": 1, \"reviewer\": \"admin\"}]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/approval-workflows",
"host": ["{{baseUrl}}"],
"path": ["api", "approval-workflows"]
}
}
},
{
"name": "Update Workflow",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"status\": \"approved\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/approval-workflows/1",
"host": ["{{baseUrl}}"],
"path": ["api", "approval-workflows", "1"]
}
}
},
{
"name": "Delete Workflow",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/approval-workflows/1",
"host": ["{{baseUrl}}"],
"path": ["api", "approval-workflows", "1"]
}
}
}
]
},
{
"name": "Subscriptions & Payments",
"item": [
{
"name": "List Packages",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/packages",
"host": ["{{baseUrl}}"],
"path": ["api", "packages"],
"query": [
{ "key": "entityID", "value": "", "disabled": true }
]
}
}
},
{
"name": "Stripe Checkout",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"packageId\": 1,\n \"successUrl\": \"http://localhost:3000/success\",\n \"cancelUrl\": \"http://localhost:3000/cancel\",\n \"discountCode\": \"\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/stripe",
"host": ["{{baseUrl}}"],
"path": ["api", "stripe"]
}
}
},
{
"name": "PayPal Create Order",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"packageId\": 1,\n \"discountCode\": \"\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/paypal",
"host": ["{{baseUrl}}"],
"path": ["api", "paypal"]
}
}
},
{
"name": "PayPal Approve",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"orderId\": \"PAYPAL-ORDER-ID\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/paypal/approve",
"host": ["{{baseUrl}}"],
"path": ["api", "paypal", "approve"]
}
}
},
{
"name": "Paymob Payment",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"packageId\": 1,\n \"discountCode\": \"\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/paymob",
"host": ["{{baseUrl}}"],
"path": ["api", "paymob"]
}
}
},
{
"name": "Stripe Webhook",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" },
{ "key": "Stripe-Signature", "value": "t=1234567890,v1=signature_here" }
],
"body": {
"mode": "raw",
"raw": "{\n \"type\": \"checkout.session.completed\",\n \"data\": {\n \"object\": {\n \"id\": \"cs_test_123\",\n \"client_reference_id\": \"5\",\n \"metadata\": { \"package_id\": \"1\", \"user_id\": \"5\" },\n \"amount_total\": 2999,\n \"currency\": \"usd\",\n \"payment_intent\": \"pi_test_123\"\n }\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/api/stripe/webhook",
"host": ["{{baseUrl}}"],
"path": ["api", "stripe", "webhook"]
}
}
},
{
"name": "Paymob Webhook",
"request": {
"auth": { "type": "noauth" },
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"obj\": {\n \"id\": 12345,\n \"success\": true,\n \"amount_cents\": 2999,\n \"currency\": \"EGP\",\n \"order\": { \"id\": 1, \"merchant_order_id\": \"encoach_5_1\" }\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/api/paymob/webhook?hmac=computed_hmac_here",
"host": ["{{baseUrl}}"],
"path": ["api", "paymob", "webhook"],
"query": [
{ "key": "hmac", "value": "computed_hmac_here" }
]
}
}
}
]
},
{
"name": "Tickets",
"item": [
{
"name": "List Tickets",
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/api/tickets?page=1&limit=20",
"host": ["{{baseUrl}}"],
"path": ["api", "tickets"],
"query": [
{ "key": "status", "value": "", "disabled": true },
{ "key": "page", "value": "1" },
{ "key": "limit", "value": "20" }
]
}
}
},
{
"name": "Create Ticket",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"subject\": \"Cannot submit writing exam\",\n \"description\": \"When I click submit the page freezes and nothing happens.\",\n \"type\": \"bug\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/tickets",
"host": ["{{baseUrl}}"],
"path": ["api", "tickets"]
}
}
},
{
"name": "Update Ticket",
"request": {
"method": "PATCH",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"status\": \"in_progress\",\n \"description\": \"Updated description with more details.\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/tickets/1",
"host": ["{{baseUrl}}"],
"path": ["api", "tickets", "1"]
}
}
},
{
"name": "Delete Ticket",
"request": {
"method": "DELETE",
"url": {
"raw": "{{baseUrl}}/api/tickets/1",
"host": ["{{baseUrl}}"],
"path": ["api", "tickets", "1"]
}
}
}
]
},
{
"name": "Storage",
"item": [
{
"name": "Upload File",
"request": {
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{ "key": "file", "type": "file", "src": "" }
]
},
"url": {
"raw": "{{baseUrl}}/api/storage",
"host": ["{{baseUrl}}"],
"path": ["api", "storage"]
}
}
},
{
"name": "Delete File",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"id\": 1\n}"
},
"url": {
"raw": "{{baseUrl}}/api/storage/delete",
"host": ["{{baseUrl}}"],
"path": ["api", "storage", "delete"]
}
}
}
]
},
{
"name": "Grading",
"item": [
{
"name": "Grade Multiple Answers",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"text\": \"The passage about climate change...\",\n \"questions\": [\n { \"id\": \"q1\", \"text\": \"What is the main cause?\" },\n { \"id\": \"q2\", \"text\": \"Name two effects.\" }\n ],\n \"answers\": [\n { \"id\": \"q1\", \"value\": \"greenhouse gases\" },\n { \"id\": \"q2\", \"value\": \"flooding and droughts\" }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/grading/multiple",
"host": ["{{baseUrl}}"],
"path": ["api", "grading", "multiple"]
}
}
},
{
"name": "Grade Summary",
"request": {
"method": "POST",
"header": [
{ "key": "Content-Type", "value": "application/json" }
],
"body": {
"mode": "raw",
"raw": "{\n \"sections\": [\n {\n \"module\": \"reading\",\n \"score\": { \"correct\": 30, \"total\": 40 }\n },\n {\n \"module\": \"listening\",\n \"score\": { \"correct\": 28, \"total\": 40 }\n }\n ]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/exam/grade/summary",
"host": ["{{baseUrl}}"],
"path": ["api", "exam", "grade", "summary"]
}
}
}
]
}
]
}