{
  "info": {
    "name": "TestRail API (v2)",
    "description": "TestRail test case management / QA API v2. Per-instance host (TestRail Cloud https://{instance}.testrail.io or self-hosted Server). Every call is routed through TestRail's index.php front controller, so the base is https://{{instance}}.testrail.io/index.php?/api/v2 and a method is appended, e.g. .../index.php?/api/v2/get_run/1. Additional filters are appended with '&', e.g. get_runs/1&is_completed=0. Auth is HTTP Basic: username is your TestRail email, password is your account password or an API key from My Settings. Set the 'instance', 'email', and 'apiKey' collection variables before running.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "basic",
    "basic": [
      { "key": "username", "value": "{{email}}", "type": "string" },
      { "key": "password", "value": "{{apiKey}}", "type": "string" }
    ]
  },
  "variable": [
    { "key": "instance", "value": "example", "type": "string" },
    { "key": "baseUrl", "value": "https://{{instance}}.testrail.io/index.php?/api/v2", "type": "string" },
    { "key": "email", "value": "", "type": "string" },
    { "key": "apiKey", "value": "", "type": "string" }
  ],
  "item": [
    {
      "name": "Runs",
      "item": [
        {
          "name": "Get runs for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_runs/1" },
            "description": "Returns a list of test runs for a project (excludes runs inside a plan). Bulk endpoint, up to 250 records per page. Append filters with & (e.g. /get_runs/1&is_completed=0&limit=50)."
          }
        },
        {
          "name": "Get run",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_run/1" },
            "description": "Returns an existing test run with pass/fail/blocked counts."
          }
        },
        {
          "name": "Add run",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Automated run\",\n  \"include_all\": true\n}" },
            "url": { "raw": "{{baseUrl}}/add_run/1" },
            "description": "Creates a new test run in project 1. Set include_all=false and pass case_ids to scope to specific cases."
          }
        },
        {
          "name": "Update run",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Renamed run\"\n}" },
            "url": { "raw": "{{baseUrl}}/update_run/1" },
            "description": "Updates an existing test run (same fields as add_run except suite_id)."
          }
        },
        {
          "name": "Close run",
          "request": {
            "method": "POST",
            "header": [],
            "url": { "raw": "{{baseUrl}}/close_run/1" },
            "description": "Closes a test run and archives its tests and results. Cannot be undone."
          }
        },
        {
          "name": "Delete run",
          "request": {
            "method": "POST",
            "header": [],
            "url": { "raw": "{{baseUrl}}/delete_run/1" },
            "description": "Deletes an existing test run."
          }
        }
      ]
    },
    {
      "name": "Results",
      "item": [
        {
          "name": "Get results for a run",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_results_for_run/1" },
            "description": "Returns test results for a run. Bulk endpoint, up to 250 records per page."
          }
        },
        {
          "name": "Get results for a case in a run",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_results_for_case/1/1" },
            "description": "Returns results for a run (1) and case (1) combination."
          }
        },
        {
          "name": "Add result for a test",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"status_id\": 1,\n  \"comment\": \"Passed via automation\",\n  \"elapsed\": \"30s\"\n}" },
            "url": { "raw": "{{baseUrl}}/add_result/1" },
            "description": "Adds a result to test 1. status_id 1=Passed, 2=Blocked, 3=Untested, 4=Retest, 5=Failed."
          }
        },
        {
          "name": "Add results for cases (bulk)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"results\": [\n    { \"case_id\": 1, \"status_id\": 1 },\n    { \"case_id\": 2, \"status_id\": 5, \"comment\": \"Assertion failed\" }\n  ]\n}" },
            "url": { "raw": "{{baseUrl}}/add_results_for_cases/1" },
            "description": "Preferred bulk endpoint for automation to report many results into run 1 in one call (reduces rate-limited requests)."
          }
        }
      ]
    },
    {
      "name": "Cases",
      "item": [
        {
          "name": "Get cases for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_cases/1" },
            "description": "Returns test cases for project 1. Bulk endpoint, up to 250 records per page; filter by suite_id/section_id with &."
          }
        },
        {
          "name": "Get case",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_case/1" },
            "description": "Returns an existing test case."
          }
        },
        {
          "name": "Add case",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Verify login\"\n}" },
            "url": { "raw": "{{baseUrl}}/add_case/1" },
            "description": "Creates a new test case in section 1."
          }
        },
        {
          "name": "Update case",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Verify login (updated)\"\n}" },
            "url": { "raw": "{{baseUrl}}/update_case/1" },
            "description": "Updates an existing test case."
          }
        },
        {
          "name": "Delete case",
          "request": {
            "method": "POST",
            "header": [],
            "url": { "raw": "{{baseUrl}}/delete_case/1" },
            "description": "Deletes an existing test case."
          }
        }
      ]
    },
    {
      "name": "Tests",
      "item": [
        {
          "name": "Get tests for a run",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_tests/1" },
            "description": "Returns the tests (case instances) in run 1. Bulk endpoint, up to 250 records per page."
          }
        },
        {
          "name": "Get test",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_test/1" },
            "description": "Returns an existing test."
          }
        }
      ]
    },
    {
      "name": "Plans",
      "item": [
        {
          "name": "Get plans for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_plans/1" },
            "description": "Returns test plans for project 1. Bulk endpoint, up to 250 records per page."
          }
        },
        {
          "name": "Add plan",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Release 1.0 test plan\"\n}" },
            "url": { "raw": "{{baseUrl}}/add_plan/1" },
            "description": "Creates a new test plan in project 1, optionally with entries."
          }
        },
        {
          "name": "Add plan entry",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"suite_id\": 1,\n  \"include_all\": true\n}" },
            "url": { "raw": "{{baseUrl}}/add_plan_entry/1" },
            "description": "Adds one or more runs to plan 1 as an entry, optionally across configurations."
          }
        },
        {
          "name": "Close plan",
          "request": {
            "method": "POST",
            "header": [],
            "url": { "raw": "{{baseUrl}}/close_plan/1" },
            "description": "Closes plan 1 and archives its runs and results."
          }
        }
      ]
    },
    {
      "name": "Projects",
      "item": [
        {
          "name": "Get projects",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_projects" },
            "description": "Returns the list of available projects."
          }
        },
        {
          "name": "Get project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_project/1" },
            "description": "Returns an existing project."
          }
        },
        {
          "name": "Add project",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"New project\",\n  \"suite_mode\": 1\n}" },
            "url": { "raw": "{{baseUrl}}/add_project" },
            "description": "Creates a new project (admin required)."
          }
        }
      ]
    },
    {
      "name": "Suites & Sections",
      "item": [
        {
          "name": "Get suites for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_suites/1" },
            "description": "Returns a list of test suites for project 1."
          }
        },
        {
          "name": "Get sections for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_sections/1" },
            "description": "Returns a list of sections for project 1 and optional suite (append &suite_id=)."
          }
        }
      ]
    },
    {
      "name": "Milestones",
      "item": [
        {
          "name": "Get milestones for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_milestones/1" },
            "description": "Returns a list of milestones for project 1."
          }
        }
      ]
    },
    {
      "name": "Configurations",
      "item": [
        {
          "name": "Get configurations for a project",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_configs/1" },
            "description": "Returns configuration groups and configurations for project 1."
          }
        }
      ]
    },
    {
      "name": "Users",
      "item": [
        {
          "name": "Get users",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_users" },
            "description": "Returns a list of users."
          }
        },
        {
          "name": "Get user by email",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/get_user_by_email&email=user@example.com" },
            "description": "Returns a user by email address. Filters are appended with & after the index.php query string."
          }
        }
      ]
    }
  ]
}
