fawaterak
Unofficial Python SDK for the Fawaterak API.
This project is not affiliated with, endorsed by, or sponsored by Fawaterak. It is a community-maintained, unofficial SDK written by independent developers. The maintainers have no business relationship with the company Fawaterak. Use this library at your own risk.
Status
This project is in early development (0.2.0). The foundational OAuth/HTTP
layers and the core transaction client (payment methods, create/fetch/list
transactions) are implemented. Webhooks, e-invoicing, refunds, and tokenization
are still on the roadmap.
Features
- Explicit configuration via constructor arguments or environment variables.
- OAuth2 token management (
client_credentials+refresh_tokenflows) with automatic caching and expiry-aware renewal. - Thread-safe token refresh so concurrent callers do not issue duplicate
/oauth/tokenrequests. - Central HTTP client with bearer-token injection, transport-level retries, and Fawaterak-specific error mapping.
- Exception hierarchy for network, authentication, validation, and transient API errors.
FawaterakClientwithget_payment_methods,create_transaction,get_transaction, andlist_transactionscovering the core transaction flow.- Two transaction modes — hosted checkout (
result.url) and direct payment (result.payment_data), with a discriminatedPaymentResultunion for card redirects, reference codes (Fawry/Aman/Masary), and mobile wallets. - Typed dataclass models (
Customer,CartItem,TransactionData,Page, etc.) that serialize to the exact API payload shapes.
Installation
pip install fawaterak
Or with uv:
uv add fawaterak
Quick start
from fawaterak import Config, FawaterakClient
conf = Config.resolve(
client_id="your-client-id",
client_secret="your-client-secret",
environment="staging", # or "production"
)
client = FawaterakClient(config=conf)
methods = client.get_payment_methods()
print([method.name_en for method in methods])
Configuration
Config.resolve() accepts explicit arguments and falls back to environment
variables. Explicit arguments always win.
| Setting | Environment variable | Required |
|---|---|---|
client_id |
FAWATERAK_CLIENT_ID |
Yes |
client_secret |
FAWATERAK_CLIENT_SECRET |
Yes |
environment |
FAWATERAK_ENV |
Yes* |
base_url |
— | Yes* |
vendor_api_key |
FAWATERAK_VENDOR_API_KEY |
No |
* Either environment (staging or production) or a direct base_url must
be provided.
Usage
Hosted checkout
Omit payment_method_id to create a payment link and redirect the customer to
the Fawaterak-hosted checkout page.
from fawaterak import CartItem, Customer, RedirectionUrls
result = client.create_transaction(
currency="EGP",
customer=Customer(
first_name="Ahmed",
last_name="Ali",
email="ahmed@example.com",
),
cart_items=[CartItem(name="Order total", price=100.0, quantity=1)],
cart_total=100.0,
redirection_urls=RedirectionUrls(
success_url="https://yoursite.com/success",
fail_url="https://yoursite.com/fail",
),
)
# result is a HostedCheckoutResult
redirect_url = result.url
Direct payment
Pass a payment_method_id from get_payment_methods() to pay with a specific
method. The response returns provider-specific data in result.payment_data.
result = client.create_transaction(
currency="EGP",
customer=Customer(first_name="Ahmed", last_name="Ali"),
cart_items=[CartItem(name="Order total", price=100.0, quantity=1)],
cart_total=100.0,
payment_method_id=3, # e.g. Fawry
)
from fawaterak import (
CardPaymentResult,
MobileWalletResult,
ReferenceCodeResult,
)
payment = result.payment_data
if isinstance(payment, ReferenceCodeResult):
print(payment.reference_number)
elif isinstance(payment, CardPaymentResult):
print(payment.redirect_to)
elif isinstance(payment, MobileWalletResult):
print(payment.iso_qr)
Fetch and list transactions
from datetime import date
transaction = client.get_transaction("550e8400-e29b-41d4-a716-446655440000")
print(transaction.status_text)
page = client.list_transactions(
start_date=date(2026, 1, 1),
end_date=date(2026, 1, 31),
per_page=15,
)
for item in page.data:
print(item.transaction_id, item.status_text)
Development
This project uses uv for dependency management.
# Install dependencies
uv sync --all-extras --dev
# Run tests
uv run pytest
# Run live integration tests against staging (requires real credentials)
uv run pytest -m integration
# Run linters and type checker
uv run ruff check .
uv run ruff format --check .
uv run ty check .
License
This project is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0+). See LICENSE for the full text.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fawaterak-0.2.0.tar.gz.
File metadata
- Download URL: fawaterak-0.2.0.tar.gz
- Upload date:
- Size: 35.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fff49ad355d937ce4b127ecfe7a9914d6b9fafc213709f11440577148a3553a
|
|
| MD5 |
63ded36a006a97f51846273a73221407
|
|
| BLAKE2b-256 |
d1498928ec1ea1a1c634f4a1c4f9c563f2fd46e00bf9f6a9a910a030800d9ab3
|
File details
Details for the file fawaterak-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fawaterak-0.2.0-py3-none-any.whl
- Upload date:
- Size: 38.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6597b9097a884aeaef82dbdf5fc75f1b3a668a3becc75ec34ee05a9e5d273121
|
|
| MD5 |
ec387e5088864284162a0abbd81fc17c
|
|
| BLAKE2b-256 |
96d3db40c65416e0f61b281992cf6046d608574ddd740ac2df2cd3e12d5fcf44
|