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

# Statuses and lifecycle

> EmployeeStatus values and employee-record transitions

The record's `status` field reflects the stage of the employee's employment cycle.
The values are the `EmployeeStatus` enum. Handle it robustly against unknown values:
the set may grow additively.

## EmployeeStatus values

| Status                       | Meaning                                                  |
| ---------------------------- | -------------------------------------------------------- |
| `EMPLOYEE_STATUS_HIRED`      | Hired; the record is created and onboarding is launched. |
| `EMPLOYEE_STATUS_ACCEPTED`   | The hire has been accepted by the employee.              |
| `EMPLOYEE_STATUS_ONBOARDING` | Onboarding is underway before starting work.             |
| `EMPLOYEE_STATUS_ACTIVE`     | Actively working.                                        |
| `EMPLOYEE_STATUS_LEAVE`      | On leave or temporarily absent.                          |
| `EMPLOYEE_STATUS_ON_HOLD`    | Work is suspended.                                       |
| `EMPLOYEE_STATUS_TERMINATED` | The employment relationship has ended (terminated).      |

<Warning>
  The internal statuses `CREATED` (a hire draft) and `DELETED` are **never** returned
  through the Developer API — they are filtered out of every read. You will not encounter
  them in responses.
</Warning>

<Frame caption="The typical path of a record: hire → work → leave/hold → termination">
  ```mermaid theme={null}
  %%{init: {'theme':'neutral'}}%%
  stateDiagram-v2
      [*] --> HIRED: hire
      HIRED --> ACCEPTED
      ACCEPTED --> ONBOARDING
      ONBOARDING --> ACTIVE
      ACTIVE --> LEAVE: leave/absence
      LEAVE --> ACTIVE: return
      ACTIVE --> ON_HOLD: suspend
      ON_HOLD --> ACTIVE: resume
      ACTIVE --> TERMINATED: terminate
      LEAVE --> TERMINATED
      ON_HOLD --> TERMINATED
      TERMINATED --> [*]
  ```
</Frame>

The diagram shows the typical movement, not a strict state machine. Do not rely on a
specific order of transitions — go by the current `status` value.

## Filtering by status

The list is filtered with the `status` parameter. For multiple values **repeat the
parameter** — a comma does not separate them:

```bash theme={null}
curl -H "X-API-Key: ddp_YOUR_KEY" \
  "https://app.doodocs.kz/api/developer/v1/employees?status=EMPLOYEE_STATUS_ACTIVE&status=EMPLOYEE_STATUS_LEAVE"
```

An unknown value in `status` gives `DEVELOPER.INVALID_STATUS`.

<Note>
  `status` is an employment status, not the state of an account in the application. An
  employee in `EMPLOYEE_STATUS_ACTIVE` may have been invited to the application but not
  yet accepted the invitation. The API does not surface this distinction, and the
  `status` filter will not separate such employees out — do not read `ACTIVE` as "uses
  the application."
</Note>

## Next

<Columns cols={2}>
  <Card title="Employee model" icon="user" href="/en/guides/employees/model">
    Record fields and the access model.
  </Card>

  <Card title="Employee graph" icon="diagram-project" href="/en/guides/employees/graph">
    Employee relationships and traversal via `expand`.
  </Card>

  <Card title="Webhooks" icon="bell" href="/en/api-reference/webhooks">
    React to changes without polling.
  </Card>
</Columns>
