pybliometrics is a Python library that provides a programmatic interface to Elsevier's Scopus, ScienceDirect, and SciVal APIs, enabling large-scale retrieval of bibliometric data such as publication metadata, citation counts, author profiles, journal metrics, and research analytics. The library is designed for researchers and developers in scientometrics, offering structured access to API responses via named tuples and properties, with built-in caching, automatic pagination, rate limiting, and API key rotation to handle quotas and server errors gracefully. The architecture follows a layered design: a set of superclasses (Base, Retrieval, Search) in pybliometrics/superclasses handle common concerns like configuration loading, file-based caching, HTTP request management, and pagination. Domain-specific modules under pybliometrics/scopus, pybliometrics/sciencedirect, and pybliometrics/scival implement concrete API endpoints by subclassing these superclasses and defining endpoint-specific parameters, views, and parsing logic. Utility modules in pybliometrics/utils provide configuration creation, content retrieval, JSON parsing helpers, and validation functions used across the library. Key entry points include the init() function for first-time setup and the numerous API wrapper classes (e.g., AbstractRetrieval, AuthorSearch, ScopusSearch, ArticleRetrieval, AuthorMetrics). Data flows from user-provided identifiers or query parameters through the superclass request pipeline, which checks the local cache, makes HTTP requests to Elsevier APIs if needed, parses the JSON responses into named tuples, and returns structured data. External dependencies are limited to requests, tqdm (for progress bars), and Python standard library modules; the library is fully dependent on Elsevier's API availability and schema. The codebase demonstrates solid engineering practices with clear separation of concerns, consistent error handling via custom exceptions, and a property-based access pattern that gracefully handles missing data. However, it is tightly coupled to the exact JSON structure of Elsevier's APIs, making it vulnerable to upstream changes, and the test suite relies on live API calls, which limits automated testing without credentials. Overall, it is a well-crafted, domain-specific library that effectively solves the problem of programmatic bibliometric data access.