make-api-request
A modern Python HTTP client library with built-in authentication and response handling.
Features
- 🚀 Modern async/sync support - Built on httpx with full async/await support
- 🔐 Built-in authentication - Support for API keys, Basic auth, Bearer tokens, and OAuth2
- 📦 Type-safe - Full type hints with Pydantic models
- 🔄 Flexible responses - Handle JSON, binary, and streaming responses
- 🛡️ Error handling - Comprehensive API error handling with detailed context
- ⚡ Performance - Efficient request building and response parsing
Installation
pip install make-api-request
Or with Poetry:
poetry add make-api-request
Quick Start
Basic Usage
import asyncio
from make_api_request import AsyncBaseClient
async def main():
client = AsyncBaseClient("https://api.example.com")
# Simple GET request
response = await client.get("/users")
print(response)
asyncio.run(main())
With Authentication
from make_api_request import AsyncBaseClient, AuthBearer
async def main():
# Bearer token authentication
auth = AuthBearer("your-token-here")
client = AsyncBaseClient(
"https://api.example.com",
auths={"bearer": auth}
)
response = await client.get("/protected-endpoint")
print(response)
asyncio.run(main())
Synchronous Usage
from make_api_request import SyncBaseClient, AuthKey
# API key authentication
auth = AuthKey("x-api-key", "your-api-key")
client = SyncBaseClient(
"https://api.example.com",
auths={"api_key": auth}
)
response = client.get("/users")
print(response)
Authentication Types
API Key Authentication
from make_api_request import AuthKey
# Header-based API key
auth = AuthKey("x-api-key", "your-api-key")
# Query parameter API key
auth = AuthKey("api_key", "your-api-key", location="query")
Bearer Token
from make_api_request import AuthBearer
auth = AuthBearer("your-jwt-token")
Basic Authentication
from make_api_request import AuthBasic
auth = AuthBasic("username", "password")
OAuth2
from make_api_request import OAuth2ClientCredentials
auth = OAuth2ClientCredentials(
token_url="https://auth.example.com/token",
client_id="your-client-id",
client_secret="your-client-secret"
)
Advanced Usage
Custom Request Options
from make_api_request import RequestOptions
options = RequestOptions(
timeout=30.0,
headers={"Custom-Header": "value"},
max_retries=3
)
response = await client.get("/endpoint", options=options)
Binary Responses
# Download a file
binary_response = await client.get("/download/file.pdf")
if isinstance(binary_response, BinaryResponse):
with open("file.pdf", "wb") as f:
f.write(binary_response.content)
Streaming Responses
async with client.stream("GET", "/large-dataset") as response:
async for chunk in response.iter_content():
process_chunk(chunk)
Error Handling
from make_api_request import ApiError
try:
response = await client.get("/might-fail")
except ApiError as e:
print(f"API Error: {e.status_code}")
print(f"Response body: {e.body}")
print(f"Full response: {e.response}")
API Reference
Client Classes
AsyncBaseClient- Asynchronous HTTP clientSyncBaseClient- Synchronous HTTP clientBaseClient- Base class for client implementations
Authentication
AuthKey- API key authentication (header or query parameter)AuthBasic- HTTP Basic authenticationAuthBearer- Bearer token authenticationOAuth2- Base OAuth2 authenticationOAuth2ClientCredentials- OAuth2 client credentials flowOAuth2Password- OAuth2 resource owner password flow
Response Types
BinaryResponse- Binary content responsesStreamResponse- Streaming response handlingAsyncStreamResponse- Async streaming responses
Utilities
RequestOptions- Configure individual requestsQueryParams- Type-safe query parameter handlingApiError- Comprehensive API error information
Development
Setup
git clone <repository-url>
cd make-api-request-py
poetry install
Run Tests
poetry run pytest
Code Quality
# Format code
poetry run black .
# Lint
poetry run ruff check .
# Type checking
poetry run mypy make_api_request/
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Metadata
Release files for make-api-request 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| make_api_request-0.2.0.tar.gz | 18.0 kB | With provenance | Details for make_api_request-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| make_api_request-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for make_api_request-0.2.0-py3-none-any.whl |
Total release size: 38.0 kB
Release files / make_api_request-0.2.0.tar.gz
| Download URL | make_api_request-0.2.0.tar.gz |
|---|---|
| Size | 18.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b806c0e32184f56a96f5eb42c17465f4a355e3032e1ff2b81d6107caca15ab97
|
|
BLAKE2b-256 checksum How to use checksums |
ce43f4abee0f2af8d4b066f79e07d662f7714c1d37210000c8f9394f0640c826
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2025.
Transparency logRelease files / make_api_request-0.2.0-py3-none-any.whl
| Download URL | make_api_request-0.2.0-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e06efc8433f0a7fabc78fe120f18ee04b87c4ad364782148039fc704cafc2f46
|
|
BLAKE2b-256 checksum How to use checksums |
27d5f06b370d1bb56f5433373334a3f54bdeaaafd2d97da3b1b250f9a5203eb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2025.
Transparency logSecurity for make-api-request 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for make_api_request-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.