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

# DPDP: Timers

> List active DPDP compliance timers for DSR SLAs (90 days), breach notifications (CERT-In 6h, DPBI 72h), and retention/erasure windows. Filter by status and approaching deadlines.

<Info>
  **Overview:** [India DPDP](/api-reference/dpdp-overview) | **Concept:** [India DPDP guide](/concepts/india-dpdp) | **SDK:** [Python DPDP](/sdk/python/dpdp) | **Credits:** 0 (free)
</Info>

Lists all active compliance timers for the authenticated organization. Timers are auto-created by events emitted via [`/emit`](/api-reference/dpdp-emit) and track regulatory deadlines for DSR SLAs, breach notifications, and data retention.

```mermaid theme={null}
flowchart LR
    DSR["emit: dsr.received"] --> T1["dsr_sla timer<br/>S.13 response window"]
    Breach["emit: breach.detected"] --> T2["breach notification timers<br/>CERT-In + Data Protection Board"]
    Retention["emit: retention.started"] --> T3["pre_erasure_notice<br/>+ erasure_execution"]
    T1 --> List["GET /timers<br/>filter by status, type, approaching_days"]
    T2 --> List
    T3 --> List
```

## Query parameters

<ParamField query="status" type="string">
  Filter by status: `"active"` or `"overdue"`.
</ParamField>

<ParamField query="type" type="string">
  Filter by timer type (e.g., `"dsr_sla"`, `"certin_notification"`, `"dpbi_detailed_report"`).
</ParamField>

<ParamField query="approaching_days" type="integer">
  Return only active timers with deadline within this many days.
</ParamField>

## Timer types

| Type                      | Created By                | Deadline            | Regulation              |
| ------------------------- | ------------------------- | ------------------- | ----------------------- |
| `dsr_sla`                 | `dsr.received` event      | 90 days             | Rule 14(3)              |
| `certin_notification`     | `breach.detected` event   | 6 hours             | CERT-In Directions 2022 |
| `dpbi_initial_intimation` | `breach.detected` event   | Immediate           | DPDP Act                |
| `dpbi_detailed_report`    | `breach.detected` event   | 72 hours            | Rule 7                  |
| `pre_erasure_notice`      | `retention.started` event | retention\_days - 2 | S.8(7)                  |
| `erasure_execution`       | `retention.started` event | retention\_days     | S.8(7)                  |

## Request

```bash theme={null}
curl -s "https://api.responsibleailabs.ai/railscore/v1/compliance/dpdp/timers?status=active&approaching_days=15" \
  -H "Authorization: Bearer YOUR_RAIL_API_KEY"
```

## Response

```json theme={null}
{
  "result": {
    "timers": [
      {
        "timer_id": "tmr_abcd1234",
        "type": "dsr_sla",
        "request_id": "dsr_456",
        "user_id": "u_hashed_abc",
        "org_id": "org_xyz",
        "started_at": "2026-05-10T10:00:00+00:00",
        "deadline": "2026-08-08T10:00:00+00:00",
        "days_remaining": 86,
        "status": "active",
        "alert_at": "2026-07-14T10:00:00+00:00"
      }
    ],
    "summary": {
      "total_active": 173,
      "overdue": 2,
      "approaching_15_days": 12
    }
  },
  "credits_consumed": 0
}
```

<ResponseField name="result.timers" type="array">
  Array of timer objects matching the query filters.
</ResponseField>

<ResponseField name="result.timers[].timer_id" type="string">
  Unique timer identifier (prefixed with `tmr_`).
</ResponseField>

<ResponseField name="result.timers[].type" type="string">
  Timer type from the table above.
</ResponseField>

<ResponseField name="result.timers[].deadline" type="string">
  ISO-8601 deadline. After this time, the timer status changes to `"overdue"`.
</ResponseField>

<ResponseField name="result.timers[].days_remaining" type="number">
  Days until deadline. Negative values indicate overdue timers.
</ResponseField>

<ResponseField name="result.timers[].status" type="string">
  `"active"` or `"overdue"`.
</ResponseField>

<ResponseField name="result.timers[].alert_at" type="string">
  ISO-8601 timestamp for when an early warning should be triggered (typically 75% through the SLA window).
</ResponseField>

<ResponseField name="result.summary" type="object">
  Aggregate counts: `total_active`, `overdue`, and timers approaching within the queried window.
</ResponseField>
