{
  "info": {
    "name": "Classmarker — mcp.ai",
    "description": "REST API for the Classmarker MCP. Set {{apiKey}} to a workspace key (sk_live_…) created at https://mcp.ai/settings/api-keys.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.mcp.ai/api/classmarker",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "sk_live_...",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "classmarker_create_access_list_item",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/access/list/item",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "access",
            "list",
            "item"
          ]
        },
        "description": "Tool to add one or more access codes to an access list. Use after obtaining a valid access_list_id to grant exam access.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"codes\": \"\",\n  \"access_list_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_create_category",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/category",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "category"
          ]
        },
        "description": "Tool to create a new question category. Use after confirming the parent category ID.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"category_name\": \"\",\n  \"parent_category_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_create_group",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/group",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "group"
          ]
        },
        "description": "Tool to create a new group. Use when you need to organize users into a specific group after planning your user structure.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"\",\n  \"description\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_create_question",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/question",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "question"
          ]
        },
        "description": "Tool to create a new question with specified text, type, and category in ClassMarker. Supports multiplechoice, multipleresponse, truefalse, and essay question types.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"points\": 0,\n  \"options\": {},\n  \"question\": \"\",\n  \"category_id\": 0,\n  \"grade_style\": \"\",\n  \"question_type\": \"\",\n  \"random_answers\": false,\n  \"correct_options\": \"\",\n  \"correct_feedback\": \"\",\n  \"incorrect_feedback\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_create_user",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/user",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "user"
          ]
        },
        "description": "Tool to create a new user in ClassMarker. Use after gathering user details to provision accounts. Provide user info and optional group assignments. Returns the complete API response.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"email\": \"\",\n  \"is_admin\": false,\n  \"password\": \"\",\n  \"group_ids\": \"\",\n  \"last_name\": \"\",\n  \"first_name\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_access_list_item",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/access/list/item",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "access",
            "list",
            "item"
          ]
        },
        "description": "Removes one or more access codes from a ClassMarker access list. Access lists are used to control exam access by requiring users to provide unique identifiers (e.g., email addresses, employee IDs, stu",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"codes\": \"\",\n  \"access_list_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_api_key",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/api/key",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "api",
            "key"
          ]
        },
        "description": "Tool to delete an API key by its ID. Use when you need to revoke an API key immediately.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"api_key_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_group",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/group",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "group"
          ]
        },
        "description": "Tool to delete a group by its ID. Use when you need to remove a group from ClassMarker.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"group_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_test_link",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/test/link",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "test",
            "link"
          ]
        },
        "description": "Deletes a specific link assignment from a test/exam in ClassMarker. Links are unique URLs that provide access to tests. This action is idempotent - deleting a non-existent link returns success. Use th",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"link_id\": 0,\n  \"test_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_user",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/user",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "user"
          ]
        },
        "description": "Tool to delete a specific user by ID. Use when you need to remove a user from ClassMarker after verifying the user's identity.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"user_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_delete_webhook",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/delete/webhook",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "delete",
            "webhook"
          ]
        },
        "description": "Deletes a webhook listener from your ClassMarker account. This action removes a webhook configuration that was previously set up to receive real-time exam results. The ClassMarker API is idempotent - ",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"webhook_id\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_group_details",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/group/details",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "group",
            "details"
          ]
        },
        "description": "Retrieve detailed information about a specific group by ID. Returns group name and assigned tests. Note: This fetches all accessible groups and filters for the specified group_id, as ClassMarker API d",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"group_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_initial_finished_after_timestamp",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/initial/finished/after/timestamp",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "initial",
            "finished",
            "after",
            "timestamp"
          ]
        },
        "description": "Compute the initial finishedAfterTimestamp for paginating ClassMarker test results. Use this action when you need to retrieve recent test results for the first time and don't have a previous 'next_fin",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_question",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/question",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "question"
          ]
        },
        "description": "Tool to retrieve a specific question by its ID. Use when you need detailed information of a question after confirming the question_id.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"question_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_recent_results_group_exam",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/recent/results/group/exam",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "recent",
            "results",
            "group",
            "exam"
          ]
        },
        "description": "Tool to fetch recent test results for a specific group and exam. Use after determining a UNIX timestamp to retrieve only results finished after that time for the group and exam.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"limit\": 0,\n  \"test_id\": 0,\n  \"group_id\": 0,\n  \"finishedAfterTimestamp\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_recent_results_link_exam",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/recent/results/link/exam",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "recent",
            "results",
            "link",
            "exam"
          ]
        },
        "description": "Fetch recent exam results for a specific link and test combination. Use CLASSMARKER_GET_ALL_GROUPS_LINKS_EXAMS first to obtain valid link_id and test_id values. This endpoint returns paginated results",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"limit\": 0,\n  \"link_id\": 0,\n  \"test_id\": 0,\n  \"finishedAfterTimestamp\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_test_details",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/test/details",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "test",
            "details"
          ]
        },
        "description": "Retrieves detailed information for a specific test (exam) including its name and all assignment contexts. Returns a list of groups and/or links where the test is assigned, with their IDs, names, and U",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"test_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_get_user_details",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/user/details",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "user",
            "details"
          ]
        },
        "description": "Tool to retrieve detailed information about a specific user. Use after you have the user's ID and need the full user profile.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"user_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_categories",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/categories",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "categories"
          ]
        },
        "description": "Retrieves all question categories organized in a hierarchical structure. Returns parent categories with their nested sub-categories. Use this to browse available categories before creating questions o",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_certificates",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/certificates",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "certificates"
          ]
        },
        "description": "Tool to list all certificates. Use when you need to retrieve all certificates available in the account.",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_questions",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/questions",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "questions"
          ]
        },
        "description": "Retrieve a paginated list of questions from your question bank. Returns up to 200 questions per page. Use the optional 'page' parameter to navigate through multiple pages. Each question includes type,",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"page\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_recent_results_for_groups",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/recent/results/for/groups",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "recent",
            "results",
            "for",
            "groups"
          ]
        },
        "description": "Retrieve recent exam results for all groups in your ClassMarker account. Returns results from the last 2 weeks by default, or from a specified timestamp (must be within 3 months). Use this to fetch us",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"limit\": 0,\n  \"finishedAfterTimestamp\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_recent_results_for_links",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/recent/results/for/links",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "recent",
            "results",
            "for",
            "links"
          ]
        },
        "description": "Retrieves recent test results from ALL links accessible to your API key. Returns results completed after a specified timestamp (defaults to 2 weeks ago). Supports pagination for large result sets (max",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"limit\": 0,\n  \"finishedAfterTimestamp\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_users",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/users",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "users"
          ]
        },
        "description": "Tool to list all users. Use when you need to retrieve every user in your account after confirming authentication.",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_list_webhooks",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/webhooks",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "webhooks"
          ]
        },
        "description": "Tool to retrieve all configured webhooks. Use when you need to programmatically list your webhook configurations.",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_put_category",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/put/category",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "put",
            "category"
          ]
        },
        "description": "Tool to update an existing sub-category. Use when you need to rename or move a sub-category after confirming its IDs.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"category_id\": 0,\n  \"category_name\": \"\",\n  \"parent_category_id\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_put_parent_category",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/put/parent/category",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "put",
            "parent",
            "category"
          ]
        },
        "description": "Tool to update an existing parent category. Use after confirming the parent category ID.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"verify_only\": false,\n  \"parent_category_id\": 0,\n  \"parent_category_name\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "classmarker_put_question",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/put/question",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "put",
            "question"
          ]
        },
        "description": "Updates an existing question in the ClassMarker question bank. IMPORTANT CONSTRAINTS: - Cannot change the question_type of an existing question (must match original) - random_answers is only valid for",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"points\": 0,\n  \"options\": {},\n  \"question\": \"\",\n  \"category_id\": 0,\n  \"grade_style\": \"\",\n  \"question_id\": 0,\n  \"verify_only\": false,\n  \"question_type\": \"\",\n  \"random_answers\": false,\n  \"correct_options\": \"\",\n  \"correct_feedback\": \"\",\n  \"incorrect_feedback\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    }
  ]
}