# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).

## 2.1.2 - 2026-03-18

### 🐛 Fixed

- [#1703](https://github.com/edgarrmondragon/citric/issues/1703) Removed `one_time_pw` from `UserDetails` typed dict since it's only exposed by mistake in older LimeSurvey versions and it's a security bug

## 2.1.1 - 2026-02-27

### 📚 Documentation

- [#1685](https://github.com/edgarrmondragon/citric/issues/1685) Fixed `versionadded` directives

## 2.1.0 - 2026-02-22

### ✨ Added

- [#1676](https://github.com/edgarrmondragon/citric/issues/1676) New `Question`, `QuestionL10n`, and `AnswerOption` classes for composing LimeSurvey questions as Python objects and importing them via `client.import_question(q.to_lsq(), ...)`

### 🛠️ Refactored

- [#1633](https://github.com/edgarrmondragon/citric/issues/1633) Use `Path.write_bytes` where possible

### 📚 Documentation

- [#1666](https://github.com/edgarrmondragon/citric/issues/1666) Expose `/llms.txt` file

- [#1667](https://github.com/edgarrmondragon/citric/issues/1667) Put contributing documents in a dropdown to declutter the sidenav

### 📦 Packaging

- [#1503](https://github.com/edgarrmondragon/citric/issues/1503) Dropped support for Python 3.9

## 2.0.0 - 2025-10-17

### ✨ Added

- [#1328](https://github.com/edgarrmondragon/citric/issues/1328) Added `user_id` and `username` parameters to `list_users` method

- [#1329](https://github.com/edgarrmondragon/citric/issues/1329) Added `mandatory`, `new_question_title`, `new_question_text` and `new_question_help` parameters to `import_question` method

- [#1369](https://github.com/edgarrmondragon/citric/issues/1369) Added a `get_summary_stat` method to get a specific survey stat

- [#1546](https://github.com/edgarrmondragon/citric/issues/1546) Official support for Python 3.14 and 3.15

- [#1548](https://github.com/edgarrmondragon/citric/issues/1548) Support updating answers using the REST API

- [#1549](https://github.com/edgarrmondragon/citric/issues/1549) Made the `RESTClient` public

### 🔄 Changed

- [#1372](https://github.com/edgarrmondragon/citric/issues/1372) Fixed typo `ExporAdditionalOptions` -> `ExportAdditionalOptions`

### 🐛 Fixed

- [#1351](https://github.com/edgarrmondragon/citric/issues/1351) Added missing fields and removed bad ones from schema of uploaded files response

- [#1445](https://github.com/edgarrmondragon/citric/issues/1445) Use 6.6.0+ `v1/auth` REST endpoints

### 🛠️ Refactored

- [#1354](https://github.com/edgarrmondragon/citric/issues/1354) Remove LimeSurvey version compatibility helpers and rely and good method documentation

- [#1547](https://github.com/edgarrmondragon/citric/issues/1547) Use `enum.StrEnum` to get enum members with the correct `repr()` value

### 📚 Documentation

- [#1423](https://github.com/edgarrmondragon/citric/issues/1423) Update code sample for custom session attributes to set custom headers

### 🏷️ Typing

- [#1374](https://github.com/edgarrmondragon/citric/issues/1374) Annotate the participant fields in the response from `list_participants`

- [#1375](https://github.com/edgarrmondragon/citric/issues/1375) Remove `TYPE_CHECKING` guards in modules that define types

### 📦 Packaging

- [#1371](https://github.com/edgarrmondragon/citric/issues/1371) Removed license trove classifier and rely on PEP 639 (https://peps.python.org/pep-0639/)

- [#1375](https://github.com/edgarrmondragon/citric/issues/1375) Make `typing-extensions` a runtime dependency

- [#1501](https://github.com/edgarrmondragon/citric/issues/1501) Dropped support for Python 3.8

## 1.4.0 - 2025-03-11

### ✨ Added

- [#1285](https://github.com/edgarrmondragon/citric/issues/1285) The `additional_options` parameter for the `export_responses` and `save_responses` methods of the RPC client

## 1.3.0 - 2025-01-22

### ✨ Added

- [#1242](https://github.com/edgarrmondragon/citric/issues/1242) Added survey group ID input parameter to `list_surveys`

### 📚 Documentation

- [#1227](https://github.com/edgarrmondragon/citric/issues/1227) Document usage in R with reticulate

### 🏷️ Typing

- [#1230](https://github.com/edgarrmondragon/citric/issues/1230) Add type annotations for quota language settings and test those attributes

- [#1245](https://github.com/edgarrmondragon/citric/issues/1245) Richer annotation for the return type of `list_surveys`

### 📦 Packaging

- [#1236](https://github.com/edgarrmondragon/citric/issues/1236) Use PEP 639

## 1.2.0 - 2024-11-29

### Added

- [#1218](https://github.com/edgarrmondragon/citric/issues/1218) Support the new quota action options in LimeSurvey 6.6.7+

## 1.1.0 - 2024-10-29

### Added

- [#1153](https://github.com/edgarrmondragon/citric/issues/1153) Added `name` and `description` parameters to `import_group` RPC method
- [#1190](https://github.com/edgarrmondragon/citric/issues/1190) Added a new `RESTClient` method to refresh the session token
- [#1201](https://github.com/edgarrmondragon/citric/issues/1201) Official support for Python 3.13

### Refactored

- [#1189](https://github.com/edgarrmondragon/citric/issues/1189) Test and document new top-level question attributes from LimeSurvey 6.6.3+

### Documentation

- [#1199](https://github.com/edgarrmondragon/citric/issues/1199) Updated the contributing guide to reflect current workflow

## 1.0.1 - 2024-06-12

### Fixed

- [#1101](https://github.com/edgarrmondragon/citric/issues/1101) Bump min `requests` to `2.25.1` (released 2020-12-16)

### Documentation

- [#1152](https://github.com/edgarrmondragon/citric/issues/1152) Fixed links to LimeSurvey API docs

## 1.0.0 - 2024-02-12

### Added

- [#1079](https://github.com/edgarrmondragon/citric/issues/1079) Added `get_db_version` method to RPC client
- [#1092](https://github.com/edgarrmondragon/citric/issues/1092) Added a `Session.call` method to allow calling RPC methods without any error handling to get the raw response

### Removed

- [#1093](https://github.com/edgarrmondragon/citric/issues/1093) Removed the `Session._headers` attribute

### Documentation

- [#1057](https://github.com/edgarrmondragon/citric/issues/1057) Documented `conda install` option
- [#1092](https://github.com/edgarrmondragon/citric/issues/1092) Linked unimplemented methods to `Session.call` examples

## 0.10.0 - 2023-11-29

### Added

- [#994](https://github.com/edgarrmondragon/citric/issues/994) Experimental support for the new REST API
- [#1016](https://github.com/edgarrmondragon/citric/issues/1016) Support `DestSurveyID` parameter in RPC method `copy_survey`
- [#1026](https://github.com/edgarrmondragon/citric/issues/1026) Support `userActivationSettings` parameter in RPC method `activate_survey`

### Fixed

- [#1026](https://github.com/edgarrmondragon/citric/issues/1026) Update `types.YesNo` to include inherited (`I`) values

### Documentation

- [#1035](https://github.com/edgarrmondragon/citric/issues/1035) Document how to disable TLS certificate verification

## 0.9.0 - 2023-10-11

### Added

- [#944](https://github.com/edgarrmondragon/citric/issues/944) Add `Client.get_server_version`
- [#1005](https://github.com/edgarrmondragon/citric/issues/1005) Official support for Python 3.12

### Documentation

- [#934](https://github.com/edgarrmondragon/citric/issues/934) Report status of integration tests against multiple LimeSurvey versions
- [#964](https://github.com/edgarrmondragon/citric/issues/964) Fix GitHub archive URLs in integration test docs
- [#996](https://github.com/edgarrmondragon/citric/issues/996) Document current version in docs site

## 0.8.0 - 2023-08-22

### Added

- [#793](https://github.com/edgarrmondragon/citric/issues/793) Implement `invite_participants` in client

### Changed

- [#617](https://github.com/edgarrmondragon/citric/issues/617) Drop support for Python 3.7

### Refactored

- [#918](https://github.com/edgarrmondragon/citric/issues/918) Use latest `typing` features where possible
- [#935](https://github.com/edgarrmondragon/citric/issues/935) Use `__all__` to expose public API

### Documentation

- [#930](https://github.com/edgarrmondragon/citric/issues/930) Update duckdb notebook example
- [#934](https://github.com/edgarrmondragon/citric/issues/934) Document integration test status in readme
- [#940](https://github.com/edgarrmondragon/citric/issues/940) Fix edit button

## 0.7.2 - 2023-06-21

### Refactored

- [#894](https://github.com/edgarrmondragon/citric/issues/894) Add a `USER_AGENT` attribute to the `Session` class

## 0.7.1 - 2023-06-03

### Documentation

- [#876](https://github.com/edgarrmondragon/citric/issues/876) Update contributing documentation

## 0.7.1-b3 - 2023-06-01

### Documentation

- [#866](https://github.com/edgarrmondragon/citric/issues/866) Add missing methods to RPC coverage page
- [#868](https://github.com/edgarrmondragon/citric/issues/868) Fix a couple of typos

## 0.7.1-b2 - 2023-05-12

### Fixed

- [#849](https://github.com/edgarrmondragon/citric/issues/849) Remove some upper bound version constraints

## 0.7.1-b1 - 2023-04-11

### Fixed

- [#803](https://github.com/edgarrmondragon/citric/issues/803) Remove warnings for LimeSurvey 6.0 features

## 0.7.0 - 2023-03-31

### Added

- [#492](https://github.com/edgarrmondragon/citric/issues/492) Implement `cpd_importParticipants` in client

### Fixed

- [#774](https://github.com/edgarrmondragon/citric/issues/774) Remove direct dependency on `typing-extensions`

## 0.6.0 - 2023-03-21

### Added

- [#295](https://github.com/edgarrmondragon/citric/issues/295) Implement `set_quota_properties` in client
- [#552](https://github.com/edgarrmondragon/citric/issues/552) Implement `get_available_site_settings` in client
- [#765](https://github.com/edgarrmondragon/citric/issues/765) Use `TypedDict` for more precise `**kwargs` typing

## 0.5.0 - 2023-03-13

### Added

- [#748](https://github.com/edgarrmondragon/citric/issues/748) Support custom JSON encoders
- [#745](https://github.com/edgarrmondragon/citric/issues/745) Annotate some responses with `TypedDict`

## 0.4.5 - 2023-03-03

### Fixed

- [#732](https://github.com/edgarrmondragon/citric/issues/732) Improve error message when RPC response is not valid JSON

## 0.4.4 - 2023-02-03

### Refactored

- [#683](https://github.com/edgarrmondragon/citric/issues/683) Use `pathlib.Path` where possible
- [#687](https://github.com/edgarrmondragon/citric/issues/687) Use a dedicated `RPCInterfaceNotEnabledError` exception when a disabled JSON Interface is detected

## 0.4.3 - 2023-01-18

### Fixed

- [#659](https://github.com/edgarrmondragon/citric/issues/659) Use a correct UTC datetime as the default end value in `export_timeline`

## 0.4.2 - 2022-12-20

### Changed

- [#642](https://github.com/edgarrmondragon/citric/issues/642) Remove upper bound constrain on `importlib-metadata`

### Fixed

- [#643](https://github.com/edgarrmondragon/citric/issues/643) Fixed a few type annotations

## 0.4.1 - 2022-12-10

### Fixed

- [#634](https://github.com/edgarrmondragon/citric/issues/634) Pass `attributes` to `activate_tokens` RPC call

## 0.4.0 - 2022-12-05

### Added

- [#582](https://github.com/edgarrmondragon/citric/issues/582) Stable support for Python 3.11
- [#586](https://github.com/edgarrmondragon/citric/issues/586) Experimental support for Python 3.12

### Changed

- [#607](https://github.com/edgarrmondragon/citric/issues/607) Use keyword-only arguments for `add_participants` and `list_participants`

### Refactor

- [#626](https://github.com/edgarrmondragon/citric/issues/626) Refactor returns of the type `if: ... else: return ...`

## 0.3.0 - 2022-07-24

### Added

- [#498](https://github.com/edgarrmondragon/citric/issues/498) Implement `get_fieldmap` in client

## 0.2.0 - 2022-06-20

### Added

- [#475](https://github.com/edgarrmondragon/citric/issues/475) Implement `update_response` in client

### Fixed

- [#477](https://github.com/edgarrmondragon/citric/issues/477) Reduce number of calls to `list_questions` from `add_responses`

## 0.1.0 - 2022-06-17

### Added

- [#213](https://github.com/edgarrmondragon/citric/issues/213) Implement `delete_question` in client

## 0.0.14 - 2022-05-18

### Added

- [#430](https://github.com/edgarrmondragon/citric/issues/430) Implement `upload_file` in client

## 0.0.13 - 2022-05-02

### Added

- [#435](https://github.com/edgarrmondragon/citric/pull/435) Add `get_uploaded_file_objects` to Client

## 0.0.12 - 2022-03-24

### Added

- [#208](https://github.com/edgarrmondragon/citric/pull/208) Implement `delete_language` in client

## 0.0.11 - 2022-03-14

### Added

- [#296](https://github.com/edgarrmondragon/citric/pull/296) Implement `set_group_properties`, `set_language_properties`, `set_participant_properties`, `set_question_properties`, `set_survey_properties` in client

## 0.0.10 - 2022-02-17

### Added

- [#192](https://github.com/edgarrmondragon/citric/pull/192) Implement `copy_survey` in client
- [#190](https://github.com/edgarrmondragon/citric/pull/190) Implement `import_group` in client
- [#196](https://github.com/edgarrmondragon/citric/pull/196) Implement `list_groups` in client
- [#194](https://github.com/edgarrmondragon/citric/pull/194) Implement `delete_group` in client
- [#207](https://github.com/edgarrmondragon/citric/pull/207) Implement `add_language` in client
- [#210](https://github.com/edgarrmondragon/citric/pull/210) Implement `add_survey` in client
- [#231](https://github.com/edgarrmondragon/citric/pull/231) Implement `get_`\*\_properties in client
- [#240](https://github.com/edgarrmondragon/citric/pull/237) Implement `export_statistics`, `save_statistics` and `save_responses` in client
- [#241](https://github.com/edgarrmondragon/citric/pull/241) Implement `get_summary` in client
- [#240](https://github.com/edgarrmondragon/citric/pull/240) Implement `export_timeline` in client

### Fixed

- [#215](https://github.com/edgarrmondragon/citric/pull/215) Address code smells and other issues

## 0.0.9 - 2022-02-05

### Added

- [#155](https://github.com/edgarrmondragon/citric/pull/155) Experimental support Python 3.11
- [#165](https://github.com/edgarrmondragon/citric/pull/165) Test in Windows and MacOS

### Removed

- [#151](https://github.com/edgarrmondragon/citric/pull/151) Drop support for Python 3.6

## 0.0.8 - 2022-02-03

### Added

- [#148](https://github.com/edgarrmondragon/citric/pull/148) Implement `add_group` in client
- [#148](https://github.com/edgarrmondragon/citric/pull/148) Implement `import_question` in client

## 0.0.7 - 2022-01-28

### Fixed

- [#143](https://github.com/edgarrmondragon/citric/pull/143) Remove explicit check for enabled RPC interface

## 0.0.6 - 2022-01-26

### Added

- [#140](https://github.com/edgarrmondragon/citric/pull/140) Support Auth Plugins

## 0.0.5 - 2021-12-20

### Changed

- [#117](https://github.com/edgarrmondragon/citric/pull/117) Removed `read_file` and `write_file` methods in favor of support for arbitrary binary file-like objects. Implemented `get_uploaded_files` in client.

## 0.0.4 - 2021-12-17

### Changed

- [#114](https://github.com/edgarrmondragon/citric/pull/114) Replaced `requests_session_factory` argument with `requests_session` in `citric.Session`

## 0.0.3 - 2021-11-11

### Added

- [#93](https://github.com/edgarrmondragon/citric/pull/93) Implement `list_users` in client

## 0.0.2 - 2021-11-11

### Added

- New client methods:

  - `delete_response`
  - `list_survey_groups`

### Changed

- Return bytes from export methods

## 0.0.1 - 2021-11-11

### Added

- New client methods:

  - `activate_survey`
  - `activate_tokens`
  - `add_participants`
  - `add_response`
  - `delete_participants`
  - `delete_survey`
  - `download_files`
  - `export_responses`
  - `export_responses_by_token`
  - `get_participant_properties`
  - `get_response_ids`
  - `get_site_settings`
  - `get_survey_properties`
  - `import_survey`
  - `list_participants`
  - `list_questions`
  - `list_surveys`
