---
updatedAt: 2026-05-28T15:59:25.000Z
agentTools:
  projectIndex: https://developers.qase.io/llms.txt
---

# Detach the external issues from the test cases

# OpenAPI definition

````json
{
  "openapi": "3.0.0",
  "info": {
    "title": "Qase.io TestOps API v1",
    "description": "Qase TestOps API v1 Specification.\n\n## Rate limiting\n\nRequests are rate limited per workspace (shared across all API tokens of the\nworkspace). The exact limit depends on your subscription plan.\n\nEvery response advertises the current limit state through headers:\n\n- `RateLimit` and `RateLimit-Policy` — IETF rate-limit headers describing the\n  active policies and how much of each one is left.\n- `X-RateLimit-Limit` — maximum number of requests allowed in the window.\n- `X-RateLimit-Remaining` — requests left in the current window.\n- `X-RateLimit-Reset` — Unix timestamp at which the window resets.\n\nTwo policies apply at the same time. `rpm` caps the sustained rate over 60\nseconds. `burst` caps a short spike over 10 seconds. A request is served only\nwhen both policies allow it.\n\nExample headers on a served request, for a plan with a 600 rpm limit:\n\n```\nRateLimit-Policy: \"rpm\";q=600;w=60, \"burst\";q=100;w=10\nRateLimit: \"rpm\";r=412;t=37, \"burst\";r=88;t=2\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 88\nX-RateLimit-Reset: 1756742400\n```\n\nIn `RateLimit-Policy`, `q` is the quota and `w` is the window in seconds. In\n`RateLimit`, `r` is the requests left and `t` is the seconds until that policy\nfrees a slot.\n\nThe `X-RateLimit-*` headers are a single-number mirror for older clients. They\nreport whichever of the two policies is closer to its limit, so they can show\nthe burst quota while a spike is in progress, as in the example above.\n\nWhen the limit is exceeded the API responds with `429 Too Many Requests`, a\n`Retry-After` header (seconds to wait before retrying), and the body:\n\n```\nRetry-After: 12\n```\n\n```json\n{\n  \"status\": false,\n  \"errorMessage\": \"API rate limit exceeded.\"\n}\n```\n",
    "termsOfService": "https://qase.io/terms",
    "version": "1.0.0",
    "contact": {
      "name": "Qase.io",
      "url": "https://qase.io",
      "email": "support@qase.io"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "https://github.com/qase-tms/specs/blob/master/LICENSE"
    }
  },
  "tags": [
    {
      "name": "cases"
    }
  ],
  "servers": [
    {
      "url": "https://api.qase.io/v1",
      "description": "The production API server."
    }
  ],
  "paths": {
    "/case/{code}/external-issue/detach": {
      "post": {
        "operationId": "case-detach-external-issue",
        "tags": [
          "cases"
        ],
        "summary": "Detach the external issues from the test cases",
        "parameters": [
          {
            "$ref": "#/components/parameters/Code"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TestCaseExternalIssues"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request."
          },
          "401": {
            "description": "Unauthorized."
          },
          "402": {
            "description": "Payment Required."
          },
          "403": {
            "description": "Forbidden."
          },
          "404": {
            "description": "Not Found."
          },
          "422": {
            "description": "Unprocessable Entity."
          },
          "429": {
            "description": "Too Many Requests."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "TestCaseExternalIssues": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "jira-cloud",
              "jira-server"
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "case_id": {
                  "type": "integer",
                  "format": "int64"
                },
                "external_issues": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "case_id",
                "external_issues"
              ]
            }
          }
        },
        "required": [
          "type",
          "links"
        ]
      },
      "Response": {
        "type": "object",
        "properties": {
          "status": {
            "type": "boolean"
          }
        }
      }
    },
    "securitySchemes": {
      "TokenAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "Token"
      }
    },
    "parameters": {
      "Code": {
        "name": "code",
        "in": "path",
        "description": "Code of project, where to search entities.",
        "required": true,
        "schema": {
          "type": "string",
          "minLength": 2,
          "maxLength": 10
        }
      }
    }
  },
  "security": [
    {
      "TokenAuth": []
    }
  ]
}
````