Skip to main content

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 client
  • SyncBaseClient - Synchronous HTTP client
  • BaseClient - Base class for client implementations

Authentication

  • AuthKey - API key authentication (header or query parameter)
  • AuthBasic - HTTP Basic authentication
  • AuthBearer - Bearer token authentication
  • OAuth2 - Base OAuth2 authentication
  • OAuth2ClientCredentials - OAuth2 client credentials flow
  • OAuth2Password - OAuth2 resource owner password flow

Response Types

  • BinaryResponse - Binary content responses
  • StreamResponse - Streaming response handling
  • AsyncStreamResponse - Async streaming responses

Utilities

  • RequestOptions - Configure individual requests
  • QueryParams - Type-safe query parameter handling
  • ApiError - 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)

Source distribution for make-api-request 0.2.0
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)

Table of built distributions (wheels) for make-api-request 0.2.0
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page