> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scrubbe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Problems API — track and resolve recurring issue records

> Create and manage problem records that group related incidents around a shared root cause, driving structured long-term remediation across your services.

A problem is a persistent or recurring issue whose underlying root cause has not yet been eliminated. Where incidents represent individual service disruptions, problem records aggregate related incidents and drive longer-term remediation work. Linking incidents to a problem gives your team a single place to track the known error, document a workaround, and monitor progress toward a permanent fix.

<Note>
  All endpoints require `Authorization: Bearer <token>`.
</Note>

**Base path:** `https://your-api-domain.com/api/v1/problems`

***

## Create a problem

`POST /`

<ParamField body="title" type="string" required>
  Short title for the problem (e.g. `"Intermittent database connection timeouts under load"`).
</ParamField>

<ParamField body="description" type="string" required>
  Full description of the known issue and its observable symptoms.
</ParamField>

<ParamField body="rootCause" type="string">
  Known or suspected root cause. Can be updated as investigation progresses.
</ParamField>

<ParamField body="workaround" type="string">
  Temporary mitigation to reduce impact while the root cause is being addressed.
</ParamField>

<ParamField body="serviceArea" type="string">
  The affected service or team area.
</ParamField>

<ParamField body="priority" type="string">
  Priority: `LOW`, `MEDIUM`, `HIGH`, or `CRITICAL`.
</ParamField>

<ParamField body="relatedIncidentIds" type="string[]">
  IDs of incidents caused by or related to this problem.
</ParamField>

<ParamField body="assignedToEmail" type="string">
  Email of the engineer responsible for resolving the problem.
</ParamField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://your-api-domain.com/api/v1/problems \
    -H "Authorization: Bearer <token>" \
    -H "Content-Type: application/json" \
    -d '{
      "title": "Intermittent database connection timeouts under load",
      "description": "Connection pool exhaustion occurs during traffic spikes above 3000 rps, causing timeouts for 5-10% of requests.",
      "rootCause": "Connection pool max size set too low for current traffic levels",
      "workaround": "Manually restart connection pool service during spikes",
      "serviceArea": "database",
      "priority": "HIGH",
      "relatedIncidentIds": ["INC-20260501-0012", "INC-20260515-0028"],
      "assignedToEmail": "dba@example.com"
    }'
  ```

  ```python Python theme={null}
  import requests

  resp = requests.post(
      "https://your-api-domain.com/api/v1/problems",
      headers={"Authorization": "Bearer <token>"},
      json={
          "title": "Intermittent database connection timeouts under load",
          "description": "Connection pool exhaustion occurs during traffic spikes above 3000 rps.",
          "rootCause": "Connection pool max size set too low for current traffic levels",
          "workaround": "Manually restart connection pool service during spikes",
          "serviceArea": "database",
          "priority": "HIGH",
          "relatedIncidentIds": ["INC-20260501-0012", "INC-20260515-0028"],
          "assignedToEmail": "dba@example.com",
      },
  )
  print(resp.json())
  ```
</CodeGroup>

**Response**

```json theme={null}
{
  "success": true,
  "message": "Problem created",
  "data": {
    "id": "PRB-20260522-0003",
    "title": "Intermittent database connection timeouts under load",
    "priority": "HIGH",
    "status": "OPEN",
    "relatedIncidentIds": ["INC-20260501-0012", "INC-20260515-0028"],
    "createdAt": "2026-05-22T11:00:00Z"
  }
}
```

***

## List problems

Returns a paginated list of problem records ordered by creation date descending.

`GET /`

<ParamField query="page" type="number" default="1">Page number.</ParamField>
<ParamField query="limit" type="number" default="20">Items per page (max 100).</ParamField>
<ParamField query="status" type="string">Filter by status: `OPEN`, `IN_PROGRESS`, `KNOWN_ERROR`, or `RESOLVED`.</ParamField>
<ParamField query="priority" type="string">Filter by priority: `LOW`, `MEDIUM`, `HIGH`, or `CRITICAL`.</ParamField>

```http theme={null}
GET /api/v1/problems?status=OPEN&priority=HIGH
Authorization: Bearer <token>
```

***

## Get a problem

`GET /:id`

<ParamField path="id" type="string" required>
  The problem ID.
</ParamField>

***

## Update a problem

Accepts the same fields as `POST /`. Only provided fields are updated. Use this endpoint to progress status, document the root cause once confirmed, or link additional related incidents.

`PUT /:id`

<ParamField path="id" type="string" required>
  The problem ID.
</ParamField>

```bash cURL theme={null}
curl -X PUT https://your-api-domain.com/api/v1/problems/PRB-20260522-0003 \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "KNOWN_ERROR",
    "rootCause": "Connection pool max_connections capped at 100; needs 250 for current load"
  }'
```

***

## Delete a problem

`DELETE /:id`

<ParamField path="id" type="string" required>
  The problem ID to delete.
</ParamField>

<Note>
  Problems with status `RESOLVED` are retained for historical analysis. Deletion is irreversible — use `RESOLVED` status to close out a problem without losing the record or its linked incidents.
</Note>
