{"id":13589776,"url":"https://github.com/ruarxive/apibackuper","last_synced_at":"2026-03-08T16:37:08.988Z","repository":{"id":57410832,"uuid":"287476458","full_name":"ruarxive/apibackuper","owner":"ruarxive","description":"Python library and cmd tool to backup API calls","archived":false,"fork":false,"pushed_at":"2024-07-16T07:22:56.000Z","size":92,"stargazers_count":14,"open_issues_count":14,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-11T19:48:38.820Z","etag":null,"topics":["api","archival","backup","preservation"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruarxive.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-14T07:53:07.000Z","updated_at":"2024-07-08T08:24:55.000Z","dependencies_parsed_at":"2023-10-15T00:10:47.994Z","dependency_job_id":"783fbdb0-2bc2-46ca-acc6-af113da9cb4b","html_url":"https://github.com/ruarxive/apibackuper","commit_stats":{"total_commits":18,"total_committers":3,"mean_commits":6.0,"dds":0.4444444444444444,"last_synced_commit":"530aac53d6e07251146b6e0316baaadb8e2f0d02"},"previous_names":["datacoon/apibackuper"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruarxive%2Fapibackuper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruarxive%2Fapibackuper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruarxive%2Fapibackuper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruarxive%2Fapibackuper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruarxive","download_url":"https://codeload.github.com/ruarxive/apibackuper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223314351,"owners_count":17125062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","archival","backup","preservation"],"created_at":"2024-08-01T16:00:34.304Z","updated_at":"2025-12-13T16:01:54.222Z","avatar_url":"https://github.com/ruarxive.png","language":"Python","funding_links":[],"categories":["Other Digital Objects"],"sub_categories":["Public Data API"],"readme":"---\r\ntitle: apibackuper \\-- a command-line tool to archive/backup API calls\r\n---\r\n\r\napibackuper is a command line tool to archive/backup API calls. It\\'s\r\ngoal to download all data behind REST API and to archive it to local\r\nstorage. This tool designed to backup API data, so simple as possible.\r\n\r\n::: contents\r\n:::\r\n\r\n::: section-numbering\r\n:::\r\n\r\n# History\r\n\r\nThis tool was developed optimize backup/archival procedures for Russian\r\ngovernment information from E-Budget portal budget.gov.ru and some other\r\ngovernment IT systems too. Examples of tool usage could be found in\r\n\\\"examples\\\" directory\r\n\r\n# Main features\r\n\r\n-   Any GET/POST iterative API supported\r\n-   Allows to estimate time required to backup API\r\n-   Stores data inside ZIP container\r\n-   Supports export of backup data as JSON lines, gzip, or parquet files\r\n-   **YAML and INI configuration formats** - choose the format that works best for you\r\n-   Authentication support (Basic, Bearer, API Key, OAuth2)\r\n-   Rate limiting to prevent API throttling\r\n-   Retry mechanisms for handling errors\r\n-   SSL certificate verification control\r\n-   Python scripts support for custom data extraction\r\n-   Comprehensive error handling with helpful messages\r\n-   Documentation\r\n-   Test coverage\r\n\r\n# Installation\r\n\r\n## Linux\r\n\r\nMost Linux distributions provide a package that can be installed using\r\nthe system package manager, for example:\r\n\r\n``` bash\r\n# Debian, Ubuntu, etc.\r\n$ apt install apibackuper\r\n```\r\n\r\n``` bash\r\n# Fedora\r\n$ dnf install apibackuper\r\n```\r\n\r\n``` bash\r\n# CentOS, RHEL, ...\r\n$ yum install apibackuper\r\n```\r\n\r\n``` bash\r\n# Arch Linux\r\n$ pacman -S apibackuper\r\n```\r\n\r\n## Windows, etc.\r\n\r\nA universal installation method (that works on Windows, Mac OS X, Linux,\r\nвЂ¦, and always provides the latest version) is to use pip:\r\n\r\n``` bash\r\n# Make sure we have an up-to-date version of pip and setuptools:\r\n$ pip install --upgrade pip setuptools\r\n\r\n$ pip install --upgrade apibackuper\r\n```\r\n\r\n(If `pip` installation fails for some reason, you can try\r\n`easy_install apibackuper` as a fallback.)\r\n\r\n## Python version\r\n\r\nPython version 3.6 or greater is required.\r\n\r\n# Quickstart\r\n\r\nThis example is about backup of Russian certificate authorities. List of\r\nthem published at e-trust.gosuslugi.ru and available via undocumented\r\nAPI.\r\n\r\n``` bash\r\n$ apibackuper create etrust\r\n$ cd etrust\r\n```\r\n\r\nEdit `apibackuper.yaml` (or `apibackuper.cfg` for INI format) as:\r\n\r\n**YAML format (recommended):**\r\n\r\n``` yaml\r\nsettings:\r\n  initialized: true\r\n  name: etrust\r\n\r\nproject:\r\n  description: E-Trust UC list\r\n  url: https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/list\r\n  http_mode: POST\r\n  work_modes: full,incremental,update\r\n  iterate_by: page\r\n\r\nparams:\r\n  page_size_param: recordsOnPage\r\n  page_size_limit: 100\r\n  page_number_param: page\r\n\r\ndata:\r\n  total_number_key: total\r\n  data_key: data\r\n  item_key: РеестровыйНомер\r\n  change_key: СтатусАккредитации.ДействуетС\r\n\r\nstorage:\r\n  storage_type: zip\r\n```\r\n\r\n**INI format (alternative):**\r\n\r\n``` ini\r\n[settings]\r\ninitialized = True\r\nname = etrust\r\n\r\n[project]\r\ndescription = E-Trust UC list\r\nurl = https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/list\r\nhttp_mode = POST\r\nwork_modes = full,incremental,update\r\niterate_by = page\r\n\r\n[params]\r\npage_size_param = recordsOnPage\r\npage_size_limit = 100\r\npage_number_param = page\r\n\r\n[data]\r\ntotal_number_key = total\r\ndata_key = data\r\nitem_key = РеестровыйНомер\r\nchange_key = СтатусАккредитации.ДействуетС\r\n\r\n[storage]\r\nstorage_type = zip\r\n```\r\n\r\nAdd file `params.json` with parameters used with POST requests:\r\n\r\n``` json\r\n{\"page\":1,\"orderBy\":\"id\",\"ascending\":false,\"recordsOnPage\":100,\"searchString\":null,\"cities\":null,\"software\":null,\"cryptToolClasses\":null,\"statuses\":null}\r\n```\r\n\r\nExecute command \\\"estimate\\\" to see how long data will be collected and\r\nhow much space needed\r\n\r\n``` bash\r\n$ apibackuper estimate full\r\n```\r\n\r\nOutput:\r\n\r\n``` bash\r\nTotal records: 502\r\nRecords per request: 100\r\nTotal requests: 6\r\nAverage record size 32277.96 bytes\r\nEstimated size (json lines) 16.20 MB\r\nAvg request time, seconds 66.9260\r\nEstimated all requests time, seconds 402.8947\r\n```\r\n\r\nExecute command \\\"run\\\" to collect the data. Result stored in\r\n\\\"storage.zip\\\"\r\n\r\n``` bash\r\n$ apibackuper run full\r\n```\r\n\r\nExport data from storage. The format is automatically detected from the file extension, or you can specify it explicitly:\r\n\r\n``` bash\r\n# Export as JSON lines (auto-detected from .jsonl extension)\r\n$ apibackuper export etrust.jsonl\r\n\r\n# Export as gzip-compressed JSON lines\r\n$ apibackuper export etrust.jsonl.gz\r\n\r\n# Export as Parquet format (requires pandas and pyarrow)\r\n$ apibackuper export etrust.parquet\r\n\r\n# Explicitly specify format\r\n$ apibackuper export --format jsonl etrust.jsonl\r\n```\r\n\r\n# Configuration\r\n\r\napibackuper supports both **YAML** and **INI** configuration formats. YAML is recommended for better readability and structure. The tool automatically detects `apibackuper.yaml` or `apibackuper.yml` files first, then falls back to `apibackuper.cfg` if no YAML file is found.\r\n\r\n## Configuration Format\r\n\r\n### YAML Format (Recommended)\r\n\r\n``` yaml\r\nsettings:\r\n  initialized: true\r\n  name: \u003cname\u003e\r\n  splitter: .\r\n\r\nproject:\r\n  description: \u003cdescription\u003e\r\n  url: \u003curl\u003e\r\n  http_mode: GET  # or POST\r\n  work_modes: full,incremental,update\r\n  iterate_by: page  # or skip\r\n\r\nparams:\r\n  page_size_param: \u003cpage size param\u003e\r\n  page_size_limit: \u003cpage size limit\u003e\r\n  page_number_param: \u003cpage number\u003e\r\n  count_skip_param: \u003ckey to iterate in skip mode\u003e\r\n\r\ndata:\r\n  total_number_key: \u003ctotal number key\u003e\r\n  data_key: \u003cdata key\u003e\r\n  item_key: \u003citem key\u003e\r\n  change_key: \u003cchange key\u003e\r\n\r\nfollow:\r\n  follow_mode: \u003ctype of follow mode\u003e\r\n  follow_pattern: \u003curl prefix to follow links\u003e\r\n  follow_data_key: \u003cfollow data item key\u003e\r\n  follow_param: \u003cfollow param\u003e\r\n  follow_item_key: \u003cfollow item key\u003e\r\n\r\nfiles:\r\n  fetch_mode: \u003cfile fetch mode\u003e\r\n  root_url: \u003cfile root url\u003e\r\n  keys: \u003ckeys with file data\u003e\r\n  storage_mode: \u003cfile storage mode\u003e\r\n\r\nstorage:\r\n  storage_type: zip\r\n  compression: true\r\n\r\nauth:\r\n  type: basic  # or bearer, apikey, oauth2\r\n  username: \u003cusername\u003e\r\n  password: \u003cpassword\u003e\r\n  # Alternative: password_file: \u003cpath to file with password\u003e\r\n\r\nrate_limit:\r\n  enabled: true\r\n  requests_per_second: \u003cnumber\u003e\r\n  requests_per_minute: \u003cnumber\u003e\r\n  requests_per_hour: \u003cnumber\u003e\r\n  burst_size: 5\r\n\r\nrequest:\r\n  timeout: 120\r\n  connect_timeout: 30\r\n  read_timeout: 120\r\n  verify_ssl: true  # Set to false to disable SSL certificate verification\r\n  user_agent: \"apibackuper/1.0.11\"\r\n  max_redirects: 5\r\n  allow_redirects: true\r\n```\r\n\r\n### INI Format (Alternative)\r\n\r\n``` ini\r\n[settings]\r\ninitialized = True\r\nname = \u003cname\u003e\r\nsplitter = .\r\n\r\n[project]\r\ndescription = \u003cdescription\u003e\r\nurl = \u003curl\u003e\r\nhttp_mode = \u003cGET or POST\u003e\r\nwork_modes = \u003ccombination of full,incremental,update\u003e\r\niterate_by = \u003cpage or skip\u003e\r\n\r\n[params]\r\npage_size_param = \u003cpage size param\u003e\r\npage_size_limit = \u003cpage size limit\u003e\r\npage_number_param = \u003cpage number\u003e\r\ncount_skip_param = \u003ckey to iterate in skip mode\u003e\r\n\r\n[data]\r\ntotal_number_key = \u003ctotal number key\u003e\r\ndata_key = \u003cdata key\u003e\r\nitem_key = \u003citem key\u003e\r\nchange_key = \u003cchange key\u003e\r\n\r\n[follow]\r\nfollow_mode = \u003ctype of follow mode\u003e\r\nfollow_pattern = \u003curl prefix to follow links\u003e\r\nfollow_data_key = \u003cfollow data item key\u003e\r\nfollow_param = \u003cfollow param\u003e\r\nfollow_item_key = \u003cfollow item key\u003e\r\n\r\n[files]\r\nfetch_mode = \u003cfile fetch mode\u003e\r\nroot_url = \u003cfile root url\u003e\r\nkeys = \u003ckeys with file data\u003e\r\nstorage_mode = \u003cfile storage mode\u003e\r\n\r\n[storage]\r\nstorage_type = zip\r\ncompression = True\r\n\r\n[auth]\r\ntype = basic\r\nusername = \u003cusername\u003e\r\npassword = \u003cpassword\u003e\r\n# Alternative: password_file = \u003cpath to file with password\u003e\r\n\r\n# For Bearer token:\r\n# type = bearer\r\n# token = \u003ctoken\u003e\r\n# Alternative: token_file = \u003cpath to file with token\u003e\r\n\r\n# For API Key:\r\n# type = apikey\r\n# api_key = \u003capi_key\u003e\r\n# api_key_header = X-API-Key\r\n\r\n# For OAuth2:\r\n# type = oauth2\r\n# token = \u003caccess_token\u003e\r\n# auth_url = \u003ctoken_endpoint\u003e\r\n# refresh_token = \u003crefresh_token\u003e\r\n\r\n[rate_limit]\r\nrequests_per_second = \u003cnumber\u003e\r\nrequests_per_minute = \u003cnumber\u003e\r\nrequests_per_hour = \u003cnumber\u003e\r\nburst_size = 5\r\n\r\n[request]\r\ntimeout = 120\r\nconnect_timeout = 30\r\nread_timeout = 120\r\nverify_ssl = True\r\nuser_agent = apibackuper/1.0.11\r\nmax_redirects = 5\r\nallow_redirects = True\r\n```\r\n\r\n## settings\r\n\r\n-   name - short name of the project\r\n-   splitter - value of field splitter. Needed for rare cases when \\'.\\'\r\n    is part of field name. For example for OData requests and\r\n    \\'@odata.count\\' field\r\n\r\n## project\r\n\r\n-   description - text that explains what for is this project\r\n-   url - API endpoint url\r\n-   http_mode - one of HTTP modes: GET or POST\r\n-   work_modes - type of operations: full - archive everything,\r\n    incremental - add new records only, update - collect changed data\r\n    only\r\n-   iterate_by - type of iteration of records. By \\'page\\' - default,\r\n    page by page or by \\'skip\\' if skip value provided\r\n\r\n## params\r\n\r\n-   page_size_param - parameter with page size\r\n-   page_size_limit - limit of records provided by API\r\n-   page_number_param = parameter with page number\r\n-   count_skip_param - parameter for \\'skip\\' type of iteration\r\n\r\n## data\r\n\r\n-   total_number_key - key in data with total number of records\r\n-   data_key - key in data with list of records\r\n-   item_key - key in data with unique identifier of the record. Could\r\n    be group of keys separated with comma\r\n-   change_key - key in data that indicates that record changed. Could\r\n    be group of keys separated with comma\r\n\r\n## follow\r\n\r\n-   follow_mode - mode to follow objects. Could be \\'url\\' or \\'item\\'.\r\n    If mode is \\'url\\' than follow_pattern not used\r\n-   follow_pattern - url pattern / url prefix for followed objects. Only\r\n    for mode \\'item\\'\\'\r\n-   follow_data_key - if object/objects are inside array, key of this\r\n    array\r\n-   follow_param - parameter used in \\'item\\' mode\r\n-   follow_item_key - item key\r\n\r\n## files\r\n\r\n-   fetch_mode - file fetch mode. Could be \\'prefix\\' or \\'id\\'. Prefix\r\n-   root_url - root url / prefix for files\r\n-   keys - list of keys with urls/file id\\'s to search for files to save\r\n-   storage_mode - a way how files stored in storage/files.zip. By\r\n    default \\'filepath\\' and files storaged same way as they presented\r\n    in url\r\n\r\n## storage\r\n\r\n-   storage_type - type of local storage. \\'zip\\' is local zip file is\r\n    default one\r\n-   compression - if True than compressed ZIP file used, less space\r\n    used, more CPU time processing data\r\n\r\n## auth\r\n\r\nAuthentication configuration for protected APIs. Supports multiple authentication methods:\r\n\r\n-   type - authentication type: \\'basic\\', \\'bearer\\', \\'apikey\\', or \\'oauth2\\'\r\n-   For Basic Auth:\r\n    -   username - username for basic authentication\r\n    -   password - password (or use password_file to read from file)\r\n-   For Bearer Token:\r\n    -   token - bearer token (or use token_file to read from file)\r\n-   For API Key:\r\n    -   api_key - API key value\r\n    -   api_key_header - header name for API key (default: \\'X-API-Key\\')\r\n-   For OAuth2:\r\n    -   token - access token (or use token_file to read from file)\r\n    -   auth_url - OAuth2 token endpoint URL\r\n    -   refresh_token - refresh token for automatic token renewal\r\n\r\n## rate_limit\r\n\r\nRate limiting configuration to prevent API throttling:\r\n\r\n-   enabled - enable/disable rate limiting (default: true)\r\n-   requests_per_second - maximum requests per second\r\n-   requests_per_minute - maximum requests per minute\r\n-   requests_per_hour - maximum requests per hour\r\n-   burst_size - burst capacity for token bucket algorithm (default: 5)\r\n\r\n## request\r\n\r\nHTTP request configuration:\r\n\r\n-   timeout - total request timeout in seconds (default: 120)\r\n-   connect_timeout - connection timeout in seconds (default: 30)\r\n-   read_timeout - read timeout in seconds (default: 120)\r\n-   verify_ssl - verify SSL certificates (default: true). Set to false if you encounter SSL certificate verification errors. The tool will provide helpful error messages if SSL verification fails.\r\n-   user_agent - custom user agent string (default: \"apibackuper/1.0.11\")\r\n-   max_redirects - maximum number of redirects to follow (default: 5)\r\n-   allow_redirects - whether to follow redirects (default: true)\r\n-   proxies - proxy configuration (format: \"http=http://proxy:8080,https=https://proxy:8080\")\r\n\r\n# Usage\r\n\r\nSynopsis:\r\n\r\n``` bash\r\n$ apibackuper [flags] [command] inputfile\r\n```\r\n\r\nSee also `apibackuper --help`.\r\n\r\n## Examples\r\n\r\n### Basic Usage\r\n\r\nCreate a new project:\r\n\r\n``` bash\r\n$ apibackuper create budgettofk\r\n```\r\n\r\nEstimate execution time and data size. Should be called in project dir or project dir provided via -p parameter:\r\n\r\n``` bash\r\n$ apibackuper estimate full -p budgettofk\r\n```\r\n\r\nOutput:\r\n\r\n``` bash\r\nTotal records: 12282\r\nRecords per request: 500\r\nTotal requests: 25\r\nAverage record size 1293.60 bytes\r\nEstimated size (json lines) 15.89 MB\r\nAvg request time, seconds 1.8015\r\nEstimated all requests time, seconds 46.0536\r\n```\r\n\r\nRun the backup. Should be called in project dir or project dir provided via -p parameter:\r\n\r\n``` bash\r\n$ apibackuper run full\r\n```\r\n\r\nExport data from project:\r\n\r\n``` bash\r\n# Auto-detect format from extension\r\n$ apibackuper export hhemployers.jsonl -p hhemployers\r\n\r\n# Export as Parquet\r\n$ apibackuper export data.parquet -p hhemployers\r\n\r\n# Explicitly specify format\r\n$ apibackuper export --format jsonl output.jsonl -p hhemployers\r\n```\r\n\r\nGet project information:\r\n\r\n``` bash\r\n# Text format\r\n$ apibackuper info -p hhemployers\r\n\r\n# JSON format\r\n$ apibackuper info --json -p hhemployers\r\n```\r\n\r\nFollow each object of downloaded data and make additional requests:\r\n\r\n``` bash\r\n$ apibackuper follow continue\r\n```\r\n\r\nDownload all files associated with API objects:\r\n\r\n``` bash\r\n$ apibackuper getfiles\r\n```\r\n\r\nValidate project configuration:\r\n\r\n``` bash\r\n$ apibackuper validate-config -p hhemployers\r\n```\r\n\r\n### Example Projects\r\n\r\nThe `examples/` directory contains several working examples:\r\n\r\n- **budgetreg** - Registry of budget organizations from budget.gov.ru\r\n- **budgetrgz** - Registry of budget tasks from budget.gov.ru\r\n- **budgettofk** - List of Federal treasury branches from budget.gov.ru\r\n- **budgetsclassif** - Budget classification codes from budget.gov.ru\r\n- **etrust** - Russian certificate authorities from e-trust.gosuslugi.ru (POST API)\r\n- **esklp** - ESKLP registration data (with SSL verification disabled)\r\n- **fpreceivers** - Receivers of subsidies and contracts from spending.gov.ru\r\n- **hhemployers** - Russian companies employers from hh.ru\r\n- **subsidies** - Registry of government subsidies from budget.gov.ru\r\n- **sozd** - Russian State Duma bills extractor with custom Python scripts\r\n\r\n### Example: Handling SSL Certificate Issues\r\n\r\nIf you encounter SSL certificate verification errors, you'll see a helpful error message:\r\n\r\n```\r\nError: SSL certificate verification failed for URL https://example.com/api.\r\nUpdate the project configuration [request] section to set 'verify_ssl = False'\r\nor provide a path to a trusted certificate bundle.\r\n```\r\n\r\nTo fix this, add a `request` section to your config:\r\n\r\n**YAML:**\r\n``` yaml\r\nrequest:\r\n  verify_ssl: false\r\n```\r\n\r\n**INI:**\r\n``` ini\r\n[request]\r\nverify_ssl = False\r\n```\r\n\r\n### Example: Using Authentication\r\n\r\n**YAML format:**\r\n``` yaml\r\nauth:\r\n  type: bearer\r\n  token: your_token_here\r\n  # Or use a file for security:\r\n  # token_file: /path/to/token.txt\r\n```\r\n\r\n**INI format:**\r\n``` ini\r\n[auth]\r\ntype = bearer\r\ntoken = your_token_here\r\n# Or use a file:\r\n# token_file = /path/to/token.txt\r\n```\r\n\r\n### Example: Rate Limiting\r\n\r\n**YAML format:**\r\n``` yaml\r\nrate_limit:\r\n  enabled: true\r\n  requests_per_second: 10\r\n  requests_per_minute: 600\r\n  requests_per_hour: 36000\r\n  burst_size: 5\r\n```\r\n\r\n**INI format:**\r\n``` ini\r\n[rate_limit]\r\nrequests_per_second = 10\r\nrequests_per_minute = 600\r\nrequests_per_hour = 36000\r\nburst_size = 5\r\n```\r\n\r\n# Advanced\r\n\r\n## Authentication\r\n\r\napibackuper supports multiple authentication methods to work with protected APIs:\r\n\r\n### Basic Authentication\r\n```ini\r\n[auth]\r\ntype = basic\r\nusername = myuser\r\npassword = mypassword\r\n# Or use a file for security:\r\n# password_file = /path/to/password.txt\r\n```\r\n\r\n### Bearer Token\r\n```ini\r\n[auth]\r\ntype = bearer\r\ntoken = your_bearer_token_here\r\n# Or use a file:\r\n# token_file = /path/to/token.txt\r\n```\r\n\r\n### API Key\r\n```ini\r\n[auth]\r\ntype = apikey\r\napi_key = your_api_key_here\r\napi_key_header = X-API-Key  # Optional, default is X-API-Key\r\n```\r\n\r\n### OAuth2\r\n```ini\r\n[auth]\r\ntype = oauth2\r\ntoken = your_access_token\r\nauth_url = https://api.example.com/oauth/token\r\nrefresh_token = your_refresh_token\r\n```\r\n\r\n## Rate Limiting\r\n\r\nConfigure rate limiting to avoid API throttling and respect API limits:\r\n\r\n```ini\r\n[rate_limit]\r\nrequests_per_second = 10\r\nrequests_per_minute = 100\r\nrequests_per_hour = 1000\r\nburst_size = 5\r\n```\r\n\r\nThe rate limiter uses a token bucket algorithm for per-second limits and sliding windows for per-minute and per-hour limits.\r\n\r\n## Latest Updates\r\n\r\nSee [HISTORY.md](HISTORY.md) for detailed changelog. Recent updates include:\r\n\r\n- **Version 1.0.11**: \r\n  - Added **YAML configuration format support** alongside existing INI format\r\n  - Added authentication support (Basic, Bearer, API Key, OAuth2)\r\n  - Added rate limiting functionality to prevent API throttling\r\n  - Added request configuration section (timeouts, SSL verification, proxies)\r\n  - Improved SSL error handling with helpful error messages\r\n  - Enhanced export functionality with Parquet format support\r\n  - Improved error handling and retry mechanisms\r\n- **Version 1.0.8**: Added Python scripts support for HTML data extraction\r\n- **Version 1.0.7**: Improved continue mode support for both \"run\" and \"follow\" commands\r\n- **Version 1.0.6**: Added retry mechanisms with configurable delays and retry counts\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruarxive%2Fapibackuper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruarxive%2Fapibackuper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruarxive%2Fapibackuper/lists"}