{ "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\": \"\"\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"] } } } ] } ] }