Hi everyone! 
I’m happy to announce the release of paypal v0.2.0 on Hex.pm
paypal | Hex !
This release brings a long-awaited feature requested by the community,
along with significant modernization, improved security, and a revamped
HTTP stack.
──────
Highlights in v0.2.0
1. Full PayPal Subscriptions & Billing Plans API
As requested, we now have first-class support for PayPal’s recurring
billing and subscriptions ecosystem:
• Catalog Products (Paypal.Subscription.Product): Create, show, list, and
update digital, physical, or service products.
• Billing Plans (Paypal.Subscription.Plan): Define recurring billing cycles,
setup fees, trial periods, and pricing schemes.
• Subscriptions Lifecycle (Paypal.Subscription): Create subscriptions,
retrieve details, update, revise plans/quantities, suspend, reactivate,
cancel, capture outstanding balances, and list transaction histories.
# 1. Create a Product
{:ok, product} = Paypal.Subscription.Product.create(%{
name: "Video Streaming Pro",
type: :service,
description: "Monthly subscription for video streaming",
category: "SOFTWARE"
})
# 2. Create a Billing Plan
{:ok, plan} = Paypal.Subscription.Plan.create(%{
product_id: product.id,
name: "Monthly Pro Plan",
description: "Standard monthly billing plan",
status: :active,
billing_cycles: [
%{
frequency: %{"interval_unit" => "MONTH", "interval_count" => 1},
tenure_type: :regular,
sequence: 1,
total_cycles: 0,
pricing_scheme: %{
"fixed_price" => %{"currency_code" => "USD", "value" => "15.00"}
}
}
],
payment_preferences: %{
auto_bill_outstanding: true,
setup_fee_failure_action: :cancel,
payment_failure_threshold: 3
}
})
# 3. Create a Subscription
{:ok, subscription} = Paypal.Subscription.create(%{
plan_id: plan.id,
subscriber: %{
name: %{given_name: "Jane", surname: "Doe"},
email_address: "jane.doe@example.com"
},
application_context: %{
brand_name: "My SaaS",
locale: "en-US",
return_url: "https://example.com/subscription/return",
cancel_url: "https://example.com/subscription/cancel"
}
})
──────
2. Migration to Req & Security Improvements
• Switched from Tesla to Req https://github.com/wojtekmach/req: Streamlined
HTTP client configuration, cleaner error handling, and robust Finch pooling
out-of-the-box.
• Dependencies & Security: All dependencies have been audited and updated
(mix_audit clean with 0 vulnerabilities).
──────
3. Modern Elixir & Quality Standards
• Elixir & OTP support: Minimum requirements updated to Elixir ~> 1.17 and
OTP 27+.
• Code Quality & Type Safety:
• 100% clean mix check pipeline (compiler with --warnings-as-errors,
Credo, and strict Dialyzer type specs).
• 100% documentation coverage verified with Doctor.
• Test coverage exceeding 95% with full unit and Bypass integration
suites.
• License: Clarified under the standard MIT License.
──────
Links & Documentation
• Hex.pm: paypal | Hex
• HexDocs: Paypal v0.2.0 — Documentation
• GitHub: GitHub - altenwald/paypal: Paypal implementation for Elixir · GitHub
Feedback, issues, and contributions are very welcome!