{"id":222,"library":"infobip-api-python-client","title":"Infobip","description":"Official Python client for Infobip communications APIs (SMS, WhatsApp, Email, Voice). Current version is 6.0.0 (Jan 2026). Requires Python >=3.9. Auto-generated from OpenAPI spec — every major version contains breaking changes. Requires account-specific base URL (not a generic endpoint). Two separate packages exist: the official infobip-api-python-client and the community infobip-api-python-sdk.","status":"active","version":"6.0.0","language":"python","source_language":"en","source_url":"https://github.com/infobip/infobip-api-python-client","tags":["sms","whatsapp","email","voice","messaging","communications","cpaas"],"install":[{"cmd":"pip install infobip-api-python-client","lang":"bash","label":"Official Infobip client (recommended)"},{"cmd":"pip install infobip-api-python-sdk","lang":"bash","label":"Community SDK (alternative, different API style)"}],"dependencies":[{"reason":"Required. Installed automatically.","package":"urllib3","optional":false},{"reason":"Required. Installed automatically.","package":"python-dateutil","optional":false},{"reason":"Required. Installed automatically.","package":"pydantic","optional":false}],"imports":[{"note":"Infobip uses account-specific base URLs. Every account gets a unique subdomain like xxxxx.api.infobip.com. Using a generic URL causes authentication failures. Find yours in the Infobip API Resource Hub dashboard.","wrong":"# Using generic Infobip URL instead of account-specific URL:\nconfiguration = Configuration(\n    host='https://api.infobip.com'  # wrong — fails auth\n)","symbol":"infobip_api_client","correct":"from infobip_api_client.api.sms_api import SmsApi\nfrom infobip_api_client.api_client import ApiClient, Configuration\nfrom infobip_api_client.models import SmsAdvancedTextualRequest, SmsDestination, SmsTextualMessage\n\n# Account-specific base URL required — not a generic URL\nconfiguration = Configuration(\n    host='https://ACCOUNT_BASE_URL.api.infobip.com',  # from Infobip dashboard\n    api_key={'APIKeyHeader': 'App YOUR_API_KEY'}\n)\n\nwith ApiClient(configuration) as api_client:\n    api_instance = SmsApi(api_client)\n    request = SmsAdvancedTextualRequest(\n        messages=[SmsTextualMessage(\n            destinations=[SmsDestination(to='+14155551234')],\n            from_='InfoSMS',\n            text='Hello World!'\n        )]\n    )\n    response = api_instance.send_sms_message(sms_advanced_textual_request=request)"}],"quickstart":{"code":"from infobip_api_client.api.sms_api import SmsApi\nfrom infobip_api_client.api_client import ApiClient, Configuration\nfrom infobip_api_client.models import (\n    SmsAdvancedTextualRequest,\n    SmsDestination,\n    SmsTextualMessage\n)\n\n# Get base_url from: app.infobip.com → API Keys\nconfiguration = Configuration(\n    host='https://XXXXX.api.infobip.com',\n    api_key={'APIKeyHeader': 'App YOUR_API_KEY'}\n)\n\nwith ApiClient(configuration) as api_client:\n    sms_api = SmsApi(api_client)\n    \n    request = SmsAdvancedTextualRequest(\n        messages=[\n            SmsTextualMessage(\n                destinations=[SmsDestination(to='+14155551234')],\n                from_='InfoSMS',\n                text='Hello from Infobip!'\n            )\n        ]\n    )\n    \n    response = sms_api.send_sms_message(\n        sms_advanced_textual_request=request\n    )\n    print(response.messages[0].message_id)","lang":"python","description":"Send SMS via Infobip. Account-specific base URL is mandatory."},"warnings":[{"fix":"Pin the version in requirements.txt. Read the CHANGELOG before upgrading: https://github.com/infobip/infobip-api-python-client/releases","message":"Every major version of infobip-api-python-client contains breaking changes. The library is auto-generated from OpenAPI spec — model names, method signatures, and endpoint paths change between versions. Code written for v3 will not work on v5 or v6.","severity":"breaking","affected_versions":"all major versions"},{"fix":"Find your base URL at app.infobip.com under API Keys or the API Resource Hub. Format: https://XXXXX.api.infobip.com","message":"Account-specific base URL is required. Using a generic URL like https://api.infobip.com causes authentication failures. Each Infobip account has a unique subdomain assigned at account creation.","severity":"breaking","affected_versions":"all"},{"fix":"Update to the v3 SMS methods (send_sms_message) and v4 email methods. Check the CHANGELOG for exact method name changes.","message":"SMS API endpoint changed: /sms/3/messages (V3) replaced /sms/2/text/advanced (V2) in v5.x. Email API /email/4/messages (V4) replaced /email/3/send (V3). Old endpoint paths and corresponding SDK methods are removed.","severity":"breaking","affected_versions":">= 5.0"},{"fix":"Pin infobip-api-python-client<6.0 for Python 3.8 environments.","message":"Python 3.8 support dropped in v6.0. Minimum is now Python 3.9.","severity":"breaking","affected_versions":">= 6.0"},{"fix":"Always use https:// in the host URL. Remove any http:// base URLs from configuration.","message":"HTTPS enforcement added in v6.0. Passing http:// as the host URL now raises ValueError at configuration time.","severity":"breaking","affected_versions":">= 6.0"},{"fix":"Use infobip-api-python-client for the latest official API coverage. The community SDK (infobip-api-python-sdk) is unmaintained and missing recent endpoints.","message":"Two separate packages exist: infobip-api-python-client (official, auto-generated, breaking changes each major) and infobip-api-python-sdk (community, different API style, last updated 2023). They have different import patterns and are not interchangeable.","severity":"gotcha","affected_versions":"all"},{"fix":"Ensure Pydantic v2.x (e.g., 'pydantic>=2') is installed. If Pydantic v1.x is present, it must be uninstalled first (e.g., 'pip uninstall pydantic' then 'pip install pydantic>=2') to resolve the conflict. Using a clean virtual environment is recommended.","message":"infobip-api-python-client v6.0.0+ requires Pydantic v2.x. An 'ImportError: cannot import name 'validate_call' from 'pydantic'' will occur if Pydantic v1.x is present in the environment.","severity":"breaking","affected_versions":">= 6.0"},{"fix":"Ensure that your environment includes the necessary build tools. For Alpine Linux, install 'build-base' (e.g., 'apk add build-base'). For Debian/Ubuntu, install 'build-essential' (e.g., 'apt-get install build-essential').","message":"Some transitive dependencies of infobip-api-python-client (e.g., 'regex') require system build tools like 'gcc' to compile C extensions during installation. This commonly occurs in minimal environments like Alpine Linux, leading to a build failure.","severity":"breaking","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T11:59:31.754Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Ensure the correct package is installed using `pip install infobip-api-python-client` and verify that import statements correctly reference `infobip_api_client` (e.g., `from infobip_api_client.api_client import ApiClient`).","cause":"The `infobip-api-python-client` package is either not installed, or there's a typo in the import statement, or developers might be trying to import from the incorrect package (e.g., confusing it with `infobip-api-python-sdk`).","error":"ModuleNotFoundError: No module named 'infobip_api_client'"},{"fix":"Correctly import and alias the `ApiClient` class using `from infobip_api_client.api_client import ApiClient as InfobipApiClient`.","cause":"This error typically occurs when the `ApiClient` class is imported without aliasing it as `InfobipApiClient`, or the alias is misspelled, preventing the code from recognizing the name.","error":"NameError: name 'InfobipApiClient' is not defined"},{"fix":"Initialize the `Configuration` object with your account-specific `host` (base URL) and `api_key` from your Infobip account, for example: `client_config = Configuration(host=\"<YOUR_BASE_URL>\", api_key=\"<YOUR_API_KEY>\")`.","cause":"The `Configuration` object, essential for client setup, requires both a specific `host` (your Infobip base URL) and an `api_key` for authentication, and these were not provided during initialization.","error":"ValueError: Missing required parameter `host` or `api_key` when initializing Configuration."},{"fix":"Update your host URL to use `https://` instead of `http://` (e.g., `https://<YOUR_BASE_URL>`). The SDK will automatically prefix URLs without a protocol with `https://`.","cause":"Starting with version 6.0.0, the `infobip-api-python-client` library strictly enforces the use of HTTPS for the API host URL, and explicitly providing an `http://` URL will raise this error.","error":"ValueError: Host URL must be HTTPS."},{"fix":"Remove the `api_key_prefix` parameter from your `Configuration` initialization, as it is no longer required or supported when providing the `api_key` and `host` directly.","cause":"This `AttributeError` is a common symptom of breaking changes introduced in version 6.0.0 of the library, specifically the deprecation and removal of the `api_key_prefix` attribute from the `Configuration` object.","error":"AttributeError: 'Configuration' object has no attribute 'api_key_prefix'"}],"ecosystem":"pypi","meta_description":null,"install_score":80,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":10.39,"mem_mb":50.8,"disk_size":"42.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.29,"mem_mb":50.8,"disk_size":"42M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":14.3,"mem_mb":49.9,"disk_size":"47.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":12.38,"mem_mb":49.9,"disk_size":"47M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":10.35,"mem_mb":49.6,"disk_size":"38.7M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":10.45,"mem_mb":49.6,"disk_size":"38M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.43,"mem_mb":48.1,"disk_size":"38.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.95,"mem_mb":48.1,"disk_size":"38M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.23,"mem_mb":52.4,"disk_size":"41.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.57,"mem_mb":52.4,"disk_size":"42M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}