{"id":21741,"library":"pycronofy","title":"pycronofy","description":"Python library for the Cronofy calendar API, providing methods to manage calendars, events, availabilities, and account linking. Current version 2.0.7, actively maintained with monthly releases.","status":"active","version":"2.0.7","language":"python","source_language":"en","source_url":"https://github.com/cronofy/pycronofy","tags":["calendar","cronofy","api","oauth","scheduling"],"install":[{"cmd":"pip install pycronofy","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"HTTP client for API calls","package":"requests","optional":false},{"reason":"Date/time handling","package":"arrow","optional":true}],"imports":[{"note":"v2 renamed the package from pycronofy to cronofy","wrong":"from pycronofy import Cronofy","symbol":"Cronofy","correct":"from cronofy import Cronofy"},{"note":"","wrong":null,"symbol":"CronofyOAuth","correct":"from cronofy import CronofyOAuth"}],"quickstart":{"code":"from cronofy import Cronofy\n\nclient = Cronofy(client_id='YOUR_CLIENT_ID', client_secret='YOUR_CLIENT_SECRET')\nauth_url = client.get_authorize_url(redirect_uri='https://yourapp.com/callback')\nprint(auth_url)","lang":"python","description":"Initialize the client with your credentials and get an authorization URL."},"warnings":[{"fix":"Update import statements and pip install to 'cronofy'.","message":"Package name changed from 'pycronofy' to 'cronofy' in v2.0.0. Import path changed from 'from pycronofy import Cronofy' to 'from cronofy import Cronofy'.","severity":"breaking","affected_versions":">=2.0.0"},{"fix":"Replace client.list_calendars() with client.calendars().","message":"The method 'list_calendars' is deprecated; use 'calendars' instead.","severity":"deprecated","affected_versions":">=2.0.0"},{"fix":"Ensure the redirect_uri parameter matches the registered URI character-for-character.","message":"OAuth redirect URI must exactly match the one registered in your Cronofy app, including trailing slashes. Mismatch returns a 400 error.","severity":"gotcha","affected_versions":"all"},{"fix":"Use IANA timezone identifiers like 'UTC' or 'America/Los_Angeles'.","message":"Event creation requires a specific timezone format (e.g., 'America/New_York'). Using an invalid timezone may result in a 422 Unprocessable Entity error.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Install the 'cronofy' package and change imports to 'from cronofy import Cronofy'.","cause":"Package was renamed in v2, the correct import is from 'cronofy'.","error":"ImportError: cannot import name 'Cronofy' from 'pycronofy'"},{"fix":"Use client.calendars() instead of client.list_calendars().","cause":"The method was renamed to 'calendars' in v2.","error":"AttributeError: 'Cronofy' object has no attribute 'list_calendars'"},{"fix":"Double-check that the redirect_uri matches exactly (including trailing slash) what is registered in the Cronofy Developer Console.","cause":"Invalid redirect_uri or mismatched client credentials.","error":"HTTPError: 400 Client Error: Bad Request for url: https://api.cronofy.com/v1/oauth/authorize"},{"fix":"Use client.refresh_access_token(refresh_token) to obtain a new access token.","cause":"The OAuth access token has expired and needs to be refreshed.","error":"cronofy.exceptions.CronofyAuthenticationError: Access token expired"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}