# Karakeep Python API Client
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://badge.fury.io/py/karakeep-python-api)
A community-developed Python client for the [Karakeep](https://karakeep.app/) API.
**Disclaimer:** This is an unofficial, community-driven project. The developers of Karakeep were not consulted during its creation. Use at your own discretion.
## Table of Contents
- [Overview](#overview)
- [Current Status & Caveats](#current-status--caveats)
- [API Method Coverage](#api-method-coverage)
- [Installation](#installation)
- [Usage](#usage)
- [Environment Variables](#environment-variables)
- [Command Line Interface (CLI)](#command-line-interface-cli)
- [Python Library](#python-library)
- [Community Scripts](#community-scripts)
- [Development](#development)
- [License](#license)
## Overview
This library provides a Python interface (both a class and a command-line tool) to interact with a Karakeep instance's API. The author also developed [freshrss_to_karakeep](https://github.com/thiswillbeyourgithub/freshrss_to_karakeep), a Python script that periodically sends FreshRSS "favourite" articles to Karakeep (a bookmarking and read-it-later app, see [Karakeep on GitHub](https://github.com/karakeep-app/karakeep)).
The development process involved:
1. Starting with the official Karakeep OpenAPI specification: [karakeep-openapi-spec.json](https://github.com/karakeep-app/karakeep/blob/main/packages/open-api/karakeep-openapi-spec.json).
2. Generating Pydantic data models from the specification using [datamodel-code-generator](https://koxudaxi.github.io/datamodel-code-generator/).
3. Using [aider.chat](https://aider.chat), an AI pair programming tool, to write the `KarakeepAPI` client class, the Click-based CLI, and the initial Pytest suite.
## Current Status & Caveats
* **Experimental Methods:** The included Pytest suite currently only covers a subset of the available API methods (primarily 'get all' endpoints and client initialization). Methods *not* explicitly tested should be considered **experimental**.
* **Ongoing Development:** The author intends to improve and validate methods as they are needed for personal use cases. Contributions and bug reports are welcome!
## API Method Coverage
The following table lists the public methods available in the `KarakeepAPI` class.
* The "Pytest" column indicates whether the Python library method is covered by the automated test suite (`tests/test_karakeep_api.py`).
* The "CLI" column indicates whether the corresponding CLI command for that method is tested within the Pytest suite (typically via `subprocess`).
Methods or CLI commands marked with ❌ should be used with caution as their behavior has not been automatically verified within the test suite.
| Method Name | Pytest | CLI | Remarks |
| -------------------------------- | :----: | :--: | -------------------------------------------- |
| `get_all_bookmarks` | ✅ | ✅ | Tested with pagination. |
| `create_a_new_bookmark` | ✅ | ❌ | Pytest for `type="link"` via fixture and `type="asset"` via PDF test. CLI not directly tested. |
| `search_bookmarks` | ✅ | ✅ | Seems to be nondeterministic and fails if using more than 3 words |
| `get_a_single_bookmark` | ✅ | ❌ | |
| `delete_a_bookmark` | ✅ | ❌ | |
| `update_a_bookmark` | ✅ | ✅ | Tested for title updates. |
| `summarize_a_bookmark` | ❌ | ❌ | |
| `attach_tags_to_a_bookmark` | ✅ | ❌ | |
| `detach_tags_from_a_bookmark` | ✅ | ❌ | |
| `get_highlights_of_a_bookmark` | ❌ | ❌ | Works from the CLI; not yet added to Pytest. |
| `attach_asset` | ❌ | ❌ | |
| `replace_asset` | ❌ | ❌ | |
| `detach_asset` | ❌ | ❌ | |
| `get_all_lists` | ✅ | ✅ | |
| `create_a_new_list` | ✅ | ❌ | |
| `get_a_single_list` | ✅ | ❌ | |
| `delete_a_list` | ✅ | ❌ | |
| `update_a_list` | ❌ | ❌ | |
| `get_bookmarks_in_the_list` | ❌ | ❌ | |
| `add_a_bookmark_to_a_list` | ❌ | ❌ | |
| `remove_a_bookmark_from_a_list` | ❌ | ❌ | |
| `get_all_tags` | ✅ | ✅ | |
| `create_a_new_tag` | ❌ | ❌ | |
| `get_a_single_tag` | ✅ | ❌ | |
| `delete_a_tag` | ✅ | ❌ | |
| `update_a_tag` | ✅ | ❌ | No output validation due to [server bug](https://github.com/karakeep-app/karakeep/issues/1365). |
| `get_bookmarks_with_the_tag` | ❌ | ❌ | |
| `get_all_highlights` | ✅ | ✅ | Tested with pagination. |
| `create_a_new_highlight` | ❌ | ❌ | |
| `get_a_single_highlight` | ❌ | ❌ | |
| `delete_a_highlight` | ❌ | ❌ | Works from the CLI; not yet added to Pytest. |
| `update_a_highlight` | ❌ | ❌ | |
| `upload_a_new_asset` | ✅ | ❌ | Tested in PDF asset lifecycle test. |
| `get_a_single_asset` | ✅ | ❌ | Tested in PDF asset lifecycle test. |
| `get_current_user_info` | ✅ | ❌ | Pytest: Tested indirectly during client init. CLI not directly tested. |
| `get_current_user_stats` | ✅ | ✅ | |
## Installation
It is recommended to use `uv` for faster installation:
```bash
uv pip install karakeep-python-api
```
Alternatively, use standard `pip`:
```bash
pip install karakeep-python-api
```
## Usage
This package can be used as a Python library or as a command-line interface (CLI).
### Environment Variables
The client can be configured using the following environment variables:
* `KARAKEEP_PYTHON_API_ENDPOINT`: **Required**. The full URL of your Karakeep API, including the `/api/v1/` path (e.g., `https://karakeep.domain.com/api/v1/` or `https://try.karakeep.app/api/v1/`).
* `KARAKEEP_PYTHON_API_KEY`: **Required**. Your Karakeep API key (Bearer token).
* `KARAKEEP_PYTHON_API_VERIFY_SSL`: Set to `false` to disable SSL certificate verification (default: `true`).
* `KARAKEEP_PYTHON_API_VERBOSE`: Set to `true` to enable verbose debug logging for the client and CLI (default: `false`).
* `KARAKEEP_PYTHON_API_DISABLE_RESPONSE_VALIDATION`: Set to `true` to disable Pydantic validation of API responses. The client will return raw dictionary/list data instead of Pydantic models (default: `false`).
* `KARAKEEP_PYTHON_API_ENSURE_ASCII`: Set to `true` to escape non-ASCII characters in the JSON output (default: `false`, which means Unicode characters are kept).
### Command Line Interface (CLI)
The CLI dynamically generates commands based on the API methods. You need to provide your API key and endpoint either via environment variables (recommended) or command-line options.
**Basic Structure:**
```bash
python -m karakeep_python_api [GLOBAL_OPTIONS] <COMMAND> [COMMAND_OPTIONS]
```
**Getting Help:**
```bash
# General help and list of commands
python -m karakeep_python_api --help
# Help for a specific command
python -m karakeep_python_api get-all-bookmarks --help
```
**Examples:**
```bash
# List all tags (requires env vars set)
python -m karakeep_python_api get-all-tags
# Get the first page of bookmarks with a limit, overriding env vars if needed
# Note: The /api/v1/ path will be automatically appended if not present
python -m karakeep_python_api --base-url https://karakeep.domain.com/api/v1/ --api-key YOUR_API_KEY get-all-bookmarks --limit 10
# Get all lists and pipe the JSON output to jq to extract the first list
python -m karakeep_python_api get-all-lists | jq '.[0]'
# Create a new bookmark from a link (body provided as JSON string)
python -m karakeep_python_api create-a-new-bookmark --data '{"type": "link", "url": "https://example.com"}'
# Get all tags and ensure ASCII output (e.g., for compatibility with systems that don't handle Unicode well)
python -m karakeep_python_api --ascii get-all-tags
# Dump the raw OpenAPI spec used by the client
python -m karakeep_python_api --dump-openapi-specification
```
### Python Library
Import the `KarakeepAPI` class and instantiate it.
```python
import os
from karakeep_python_api import KarakeepAPI, APIError, AuthenticationError, datatypes
# Ensure required environment variables are set
# Example: os.environ["KARAKEEP_PYTHON_API_ENDPOINT"] = "https://karakeep.domain.com/api/v1/"
# Example: os.environ["KARAKEEP_PYTHON_API_KEY"] = "your_secret_api_key"
try:
# Initialize the client (reads from env vars by default)
client = KarakeepAPI(
# Optionally override env vars:
# api_endpoint="https://karakeep.domain.com/api/v1/",
# api_key="another_key",
# verbose=True,
# disable_response_validation=False
)
# Example: Get all lists
all_lists = client.get_all_lists()
if all_lists:
print(f"Retrieved {len(all_lists)} lists.")
# Access list properties (uses Pydantic models by default)
print(f"First list name: {all_lists[0].name}")
print(f"First list ID: {all_lists[0].id}")
else:
print("No lists found.")
# Example: Get first page of bookmarks
bookmarks_page = client.get_all_bookmarks(limit=5)
print(f"\nRetrieved {len(bookmarks_page.bookmarks)} bookmarks.")
if bookmarks_page.bookmarks:
print(f"First bookmark title: {bookmarks_page.bookmarks[0].title}")
if bookmarks_page.nextCursor:
print(f"Next page cursor: {bookmarks_page.nextCursor}")
except AuthenticationError as e:
print(f"Authentication failed: {e}")
except APIError as e:
print(f"An API error occurred: {e}")
except ValueError as e:
# Handles missing API key/endpoint during initialization
print(f"Configuration error: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
```
## Community Scripts
Community Scripts are a bunch of scripts made to solve specific issues. They are made by the community so don't hesitate to submit yours or open an issue if you have a bug. They also serve as example of how to use the API.
They can be found in the [./community_scripts](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts) folder. Don't hesitate to submit yours, the contribution guidelines are in the community_scripts directory README.md file.
| Community Script | Description | Documentation |
|----------------|--------------------------------------------------------------------------------------------------------------|---------------|
| **Karakeep-Time-Tagger** | Automatically adds time-to-read tags (`0-5m`, `5-10m`, etc.) to bookmarks based on content length analysis. Includes systemd service and timer files for automated periodic execution. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-time-tagger) |
| **Karakeep-List-To-Tag** | Converts a Karakeep list into tags by adding a specified tag to all bookmarks within that list. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-list-to-tag) |
| **Omnivore2Karakeep-Highlights** | Imports highlights from Omnivore export data to Karakeep, with intelligent position detection and bookmark matching. Supports dry-run mode for testing. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/omnivore2karakeep-highlights) |
| **Omnivore2Karakeep-Archived** | (Should not be needed anymore) Fixes the archived status of bookmarks imported from Omnivore by reading export data and updating Karakeep accordingly. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/omnivore2karakeep-archived) |
| **pocket2karakeep-archived** by [@youenchene](https://github.com/youenchene) | (Should not be needed anymore) Fixes the archived status of bookmarks imported from Pocket by reading export data and updating Karakeep accordingly. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/pocket2karakeep-archived) |
| **Karakeep-Archive-Before-Date** by [@youenchene](https://github.com/youenchene) | Allow you to archive all not archived post before a given date | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-archive-before-date) |
| **Freshrss-To-Karakeep** | Syncs some links from Freshrss to Karakeep | [`Link`](https://github.com/thiswillbeyourgithub/freshrss_to_karakeep) |
## Development
1. Clone the repository.
2. Create a virtual environment and activate it.
3. Install dependencies, including development tools (using `uv` recommended):
```bash
uv pip install -e ".[dev]"
```
4. Set the required environment variables (`KARAKEEP_PYTHON_API_ENDPOINT`, `KARAKEEP_PYTHON_API_KEY`) for running tests against a live instance.
5. Run tests:
```bash
pytest
```
## License
This project is licensed under the **GNU General Public License v3 (GPLv3)**. See the [LICENSE](LICENSE) file for details.
---
*This README was generated with assistance from [aider.chat](https://aider.chat).*
Raw data
{
"_id": null,
"home_page": "https://github.com/thiswillbeyourgithub/karakeep_python_api/",
"name": "karakeep-python-api",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "rss, karakeep, hoarder, data-hoarding, python, api, feeds, openapi",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/02/f1/2aff999d32b8c39f8bcf8dbbfb3750bbcd8fdfad34f6873eb70eeeb14d14/karakeep_python_api-1.2.3.tar.gz",
"platform": null,
"description": "# Karakeep Python API Client\n\n[](https://www.gnu.org/licenses/gpl-3.0)\n[](https://badge.fury.io/py/karakeep-python-api)\n\nA community-developed Python client for the [Karakeep](https://karakeep.app/) API.\n\n**Disclaimer:** This is an unofficial, community-driven project. The developers of Karakeep were not consulted during its creation. Use at your own discretion.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Current Status & Caveats](#current-status--caveats)\n- [API Method Coverage](#api-method-coverage)\n- [Installation](#installation)\n- [Usage](#usage)\n - [Environment Variables](#environment-variables)\n - [Command Line Interface (CLI)](#command-line-interface-cli)\n - [Python Library](#python-library)\n- [Community Scripts](#community-scripts)\n- [Development](#development)\n- [License](#license)\n\n## Overview\n\nThis library provides a Python interface (both a class and a command-line tool) to interact with a Karakeep instance's API. The author also developed [freshrss_to_karakeep](https://github.com/thiswillbeyourgithub/freshrss_to_karakeep), a Python script that periodically sends FreshRSS \"favourite\" articles to Karakeep (a bookmarking and read-it-later app, see [Karakeep on GitHub](https://github.com/karakeep-app/karakeep)).\n\nThe development process involved:\n\n1. Starting with the official Karakeep OpenAPI specification: [karakeep-openapi-spec.json](https://github.com/karakeep-app/karakeep/blob/main/packages/open-api/karakeep-openapi-spec.json).\n2. Generating Pydantic data models from the specification using [datamodel-code-generator](https://koxudaxi.github.io/datamodel-code-generator/).\n3. Using [aider.chat](https://aider.chat), an AI pair programming tool, to write the `KarakeepAPI` client class, the Click-based CLI, and the initial Pytest suite.\n\n## Current Status & Caveats\n\n* **Experimental Methods:** The included Pytest suite currently only covers a subset of the available API methods (primarily 'get all' endpoints and client initialization). Methods *not* explicitly tested should be considered **experimental**.\n* **Ongoing Development:** The author intends to improve and validate methods as they are needed for personal use cases. Contributions and bug reports are welcome!\n\n## API Method Coverage\n\nThe following table lists the public methods available in the `KarakeepAPI` class.\n* The \"Pytest\" column indicates whether the Python library method is covered by the automated test suite (`tests/test_karakeep_api.py`).\n* The \"CLI\" column indicates whether the corresponding CLI command for that method is tested within the Pytest suite (typically via `subprocess`).\nMethods or CLI commands marked with \u274c should be used with caution as their behavior has not been automatically verified within the test suite.\n\n| Method Name | Pytest | CLI | Remarks |\n| -------------------------------- | :----: | :--: | -------------------------------------------- |\n| `get_all_bookmarks` | \u2705 | \u2705 | Tested with pagination. |\n| `create_a_new_bookmark` | \u2705 | \u274c | Pytest for `type=\"link\"` via fixture and `type=\"asset\"` via PDF test. CLI not directly tested. |\n| `search_bookmarks` | \u2705 | \u2705 | Seems to be nondeterministic and fails if using more than 3 words |\n| `get_a_single_bookmark` | \u2705 | \u274c | |\n| `delete_a_bookmark` | \u2705 | \u274c | |\n| `update_a_bookmark` | \u2705 | \u2705 | Tested for title updates. |\n| `summarize_a_bookmark` | \u274c | \u274c | |\n| `attach_tags_to_a_bookmark` | \u2705 | \u274c | |\n| `detach_tags_from_a_bookmark` | \u2705 | \u274c | |\n| `get_highlights_of_a_bookmark` | \u274c | \u274c | Works from the CLI; not yet added to Pytest. |\n| `attach_asset` | \u274c | \u274c | |\n| `replace_asset` | \u274c | \u274c | |\n| `detach_asset` | \u274c | \u274c | |\n| `get_all_lists` | \u2705 | \u2705 | |\n| `create_a_new_list` | \u2705 | \u274c | |\n| `get_a_single_list` | \u2705 | \u274c | |\n| `delete_a_list` | \u2705 | \u274c | |\n| `update_a_list` | \u274c | \u274c | |\n| `get_bookmarks_in_the_list` | \u274c | \u274c | |\n| `add_a_bookmark_to_a_list` | \u274c | \u274c | |\n| `remove_a_bookmark_from_a_list` | \u274c | \u274c | |\n| `get_all_tags` | \u2705 | \u2705 | |\n| `create_a_new_tag` | \u274c | \u274c | |\n| `get_a_single_tag` | \u2705 | \u274c | |\n| `delete_a_tag` | \u2705 | \u274c | |\n| `update_a_tag` | \u2705 | \u274c | No output validation due to [server bug](https://github.com/karakeep-app/karakeep/issues/1365). |\n| `get_bookmarks_with_the_tag` | \u274c | \u274c | |\n| `get_all_highlights` | \u2705 | \u2705 | Tested with pagination. |\n| `create_a_new_highlight` | \u274c | \u274c | |\n| `get_a_single_highlight` | \u274c | \u274c | |\n| `delete_a_highlight` | \u274c | \u274c | Works from the CLI; not yet added to Pytest. |\n| `update_a_highlight` | \u274c | \u274c | |\n| `upload_a_new_asset` | \u2705 | \u274c | Tested in PDF asset lifecycle test. |\n| `get_a_single_asset` | \u2705 | \u274c | Tested in PDF asset lifecycle test. |\n| `get_current_user_info` | \u2705 | \u274c | Pytest: Tested indirectly during client init. CLI not directly tested. |\n| `get_current_user_stats` | \u2705 | \u2705 | |\n\n## Installation\n\nIt is recommended to use `uv` for faster installation:\n\n```bash\nuv pip install karakeep-python-api\n```\n\nAlternatively, use standard `pip`:\n\n```bash\npip install karakeep-python-api\n```\n\n## Usage\n\nThis package can be used as a Python library or as a command-line interface (CLI).\n\n### Environment Variables\n\nThe client can be configured using the following environment variables:\n\n* `KARAKEEP_PYTHON_API_ENDPOINT`: **Required**. The full URL of your Karakeep API, including the `/api/v1/` path (e.g., `https://karakeep.domain.com/api/v1/` or `https://try.karakeep.app/api/v1/`).\n* `KARAKEEP_PYTHON_API_KEY`: **Required**. Your Karakeep API key (Bearer token).\n* `KARAKEEP_PYTHON_API_VERIFY_SSL`: Set to `false` to disable SSL certificate verification (default: `true`).\n* `KARAKEEP_PYTHON_API_VERBOSE`: Set to `true` to enable verbose debug logging for the client and CLI (default: `false`).\n* `KARAKEEP_PYTHON_API_DISABLE_RESPONSE_VALIDATION`: Set to `true` to disable Pydantic validation of API responses. The client will return raw dictionary/list data instead of Pydantic models (default: `false`).\n* `KARAKEEP_PYTHON_API_ENSURE_ASCII`: Set to `true` to escape non-ASCII characters in the JSON output (default: `false`, which means Unicode characters are kept).\n\n### Command Line Interface (CLI)\n\nThe CLI dynamically generates commands based on the API methods. You need to provide your API key and endpoint either via environment variables (recommended) or command-line options.\n\n**Basic Structure:**\n\n```bash\npython -m karakeep_python_api [GLOBAL_OPTIONS] <COMMAND> [COMMAND_OPTIONS]\n```\n\n**Getting Help:**\n\n```bash\n# General help and list of commands\npython -m karakeep_python_api --help\n\n# Help for a specific command\npython -m karakeep_python_api get-all-bookmarks --help\n```\n\n**Examples:**\n\n```bash\n# List all tags (requires env vars set)\npython -m karakeep_python_api get-all-tags\n\n# Get the first page of bookmarks with a limit, overriding env vars if needed\n# Note: The /api/v1/ path will be automatically appended if not present\npython -m karakeep_python_api --base-url https://karakeep.domain.com/api/v1/ --api-key YOUR_API_KEY get-all-bookmarks --limit 10\n\n# Get all lists and pipe the JSON output to jq to extract the first list\npython -m karakeep_python_api get-all-lists | jq '.[0]'\n\n# Create a new bookmark from a link (body provided as JSON string)\npython -m karakeep_python_api create-a-new-bookmark --data '{\"type\": \"link\", \"url\": \"https://example.com\"}'\n\n# Get all tags and ensure ASCII output (e.g., for compatibility with systems that don't handle Unicode well)\npython -m karakeep_python_api --ascii get-all-tags\n\n# Dump the raw OpenAPI spec used by the client\npython -m karakeep_python_api --dump-openapi-specification\n```\n\n### Python Library\n\nImport the `KarakeepAPI` class and instantiate it.\n\n```python\nimport os\nfrom karakeep_python_api import KarakeepAPI, APIError, AuthenticationError, datatypes\n\n# Ensure required environment variables are set\n# Example: os.environ[\"KARAKEEP_PYTHON_API_ENDPOINT\"] = \"https://karakeep.domain.com/api/v1/\"\n# Example: os.environ[\"KARAKEEP_PYTHON_API_KEY\"] = \"your_secret_api_key\"\n\ntry:\n # Initialize the client (reads from env vars by default)\n client = KarakeepAPI(\n # Optionally override env vars:\n # api_endpoint=\"https://karakeep.domain.com/api/v1/\",\n # api_key=\"another_key\",\n # verbose=True,\n # disable_response_validation=False\n )\n\n # Example: Get all lists\n all_lists = client.get_all_lists()\n if all_lists:\n print(f\"Retrieved {len(all_lists)} lists.\")\n # Access list properties (uses Pydantic models by default)\n print(f\"First list name: {all_lists[0].name}\")\n print(f\"First list ID: {all_lists[0].id}\")\n else:\n print(\"No lists found.\")\n\n # Example: Get first page of bookmarks\n bookmarks_page = client.get_all_bookmarks(limit=5)\n print(f\"\\nRetrieved {len(bookmarks_page.bookmarks)} bookmarks.\")\n if bookmarks_page.bookmarks:\n print(f\"First bookmark title: {bookmarks_page.bookmarks[0].title}\")\n if bookmarks_page.nextCursor:\n print(f\"Next page cursor: {bookmarks_page.nextCursor}\")\n\n\nexcept AuthenticationError as e:\n print(f\"Authentication failed: {e}\")\nexcept APIError as e:\n print(f\"An API error occurred: {e}\")\nexcept ValueError as e:\n # Handles missing API key/endpoint during initialization\n print(f\"Configuration error: {e}\")\nexcept Exception as e:\n print(f\"An unexpected error occurred: {e}\")\n\n```\n\n## Community Scripts\n\nCommunity Scripts are a bunch of scripts made to solve specific issues. They are made by the community so don't hesitate to submit yours or open an issue if you have a bug. They also serve as example of how to use the API.\n\nThey can be found in the [./community_scripts](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts) folder. Don't hesitate to submit yours, the contribution guidelines are in the community_scripts directory README.md file.\n\n| Community Script | Description | Documentation |\n|----------------|--------------------------------------------------------------------------------------------------------------|---------------|\n| **Karakeep-Time-Tagger** | Automatically adds time-to-read tags (`0-5m`, `5-10m`, etc.) to bookmarks based on content length analysis. Includes systemd service and timer files for automated periodic execution. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-time-tagger) |\n| **Karakeep-List-To-Tag** | Converts a Karakeep list into tags by adding a specified tag to all bookmarks within that list. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-list-to-tag) |\n| **Omnivore2Karakeep-Highlights** | Imports highlights from Omnivore export data to Karakeep, with intelligent position detection and bookmark matching. Supports dry-run mode for testing. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/omnivore2karakeep-highlights) |\n| **Omnivore2Karakeep-Archived** | (Should not be needed anymore) Fixes the archived status of bookmarks imported from Omnivore by reading export data and updating Karakeep accordingly. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/omnivore2karakeep-archived) |\n| **pocket2karakeep-archived** by [@youenchene](https://github.com/youenchene) | (Should not be needed anymore) Fixes the archived status of bookmarks imported from Pocket by reading export data and updating Karakeep accordingly. | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/pocket2karakeep-archived) |\n| **Karakeep-Archive-Before-Date** by [@youenchene](https://github.com/youenchene) | Allow you to archive all not archived post before a given date | [`Link`](https://github.com/thiswillbeyourgithub/karakeep_python_api/tree/main/community_scripts/karakeep-archive-before-date) |\n| **Freshrss-To-Karakeep** | Syncs some links from Freshrss to Karakeep | [`Link`](https://github.com/thiswillbeyourgithub/freshrss_to_karakeep) |\n\n## Development\n\n1. Clone the repository.\n2. Create a virtual environment and activate it.\n3. Install dependencies, including development tools (using `uv` recommended):\n\n ```bash\n uv pip install -e \".[dev]\"\n ```\n4. Set the required environment variables (`KARAKEEP_PYTHON_API_ENDPOINT`, `KARAKEEP_PYTHON_API_KEY`) for running tests against a live instance.\n5. Run tests:\n\n ```bash\n pytest\n ```\n\n## License\n\nThis project is licensed under the **GNU General Public License v3 (GPLv3)**. See the [LICENSE](LICENSE) file for details.\n\n---\n\n*This README was generated with assistance from [aider.chat](https://aider.chat).*\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "Community python client for the Karakeep API.",
"version": "1.2.3",
"project_urls": {
"Homepage": "https://github.com/thiswillbeyourgithub/karakeep_python_api/"
},
"split_keywords": [
"rss",
" karakeep",
" hoarder",
" data-hoarding",
" python",
" api",
" feeds",
" openapi"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "36379d6f67a5e639d8f0e470c23f4308410d3c8e7a52372c8382de75ab2662a1",
"md5": "361c7b2ac9ec19010cf5ee57cefd0cb9",
"sha256": "b4360a40058e9b67c4e740b11685934f1ec50ed9de583301b319978c96984fe0"
},
"downloads": -1,
"filename": "karakeep_python_api-1.2.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "361c7b2ac9ec19010cf5ee57cefd0cb9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 51506,
"upload_time": "2025-07-09T14:38:57",
"upload_time_iso_8601": "2025-07-09T14:38:57.644892Z",
"url": "https://files.pythonhosted.org/packages/36/37/9d6f67a5e639d8f0e470c23f4308410d3c8e7a52372c8382de75ab2662a1/karakeep_python_api-1.2.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "02f12aff999d32b8c39f8bcf8dbbfb3750bbcd8fdfad34f6873eb70eeeb14d14",
"md5": "bf9ffd1d8b07b35391d1f8a5f2d3d390",
"sha256": "5344751208b3c5b70d5272471eb7cc74be44da09b4748108c3510e8246758163"
},
"downloads": -1,
"filename": "karakeep_python_api-1.2.3.tar.gz",
"has_sig": false,
"md5_digest": "bf9ffd1d8b07b35391d1f8a5f2d3d390",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 61487,
"upload_time": "2025-07-09T14:39:00",
"upload_time_iso_8601": "2025-07-09T14:39:00.718854Z",
"url": "https://files.pythonhosted.org/packages/02/f1/2aff999d32b8c39f8bcf8dbbfb3750bbcd8fdfad34f6873eb70eeeb14d14/karakeep_python_api-1.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 14:39:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "thiswillbeyourgithub",
"github_project": "karakeep_python_api",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "karakeep-python-api"
}