All notable changes to this project are documented in this file.
The format is based on Common Changelog.
0.3.0 - 2026-05-22
Changed
- Breaking: remove library application configuration as public API.
Stripe.client/0no longer readsconfig :tiger_stripe; construct clients withStripe.client(api_key)or read credentials from your own application before calling TigerStripe. - Breaking: stop auto-starting
Stripe.Finch. AddStripeto your application's supervision tree, or passfinch: MyApp.Finchwhen using an existing Finch pool. - Breaking: move test stubbing to an explicit client transport. Tests that use
Stripe.Test.stub/1should construct clients withStripe.Test.client/2or passtransport: Stripe.Test.transport(). - Compute
unameonce at compile time for the client user-agent instead of shelling out on every request. - Generate concrete service success specs from each operation's actual response object — e.g.
Stripe.Resources.PaymentMethod.t(),Stripe.ListObject.t(),Stripe.SearchResult.t()— instead ofterm(). Operations with a polymorphic union or non-JSON response keepterm(). - Update the Igniter installer to generate an application-owned Stripe wrapper module and add the default Finch pool to the supervision tree.
Added
- Add a migration guide:
guides/migrating-0.2-to-0.3.md.
Fixed
- Return
{:error, %Stripe.Error{}}for malformed webhook signature timestamps instead of raising on hostile input.
0.2.0 - 2026-04-25
Changed
- Breaking: remove generated child modules for nested Stripe response, params, and event data shapes. Top-level resources, params, services, and event modules remain public; nested shapes are now local
@typealiases and deserialize to atom-key maps. - Breaking: replace generated
__inner_types__/0metadata with internal__nested_fields__/0metadata used by the deserializer. - Breaking: remove stale preview resources that are no longer emitted by the current vendored Stripe OpenAPI spec and Ruby SDK fixture:
Stripe.Resources.Reserve.Hold,Stripe.Resources.Reserve.Plan,Stripe.Resources.Reserve.Release,Stripe.Resources.UPI,Stripe.Resources.UPIHandleRedirectOrDisplayQrCode, andStripe.Resources.UPIQRCode. - Reduce the generated public module surface so clean compiles in consuming apps do not pay for thousands of nested JSON-shape modules.
- Preserve top-level resource structs and recursively cast known nested response shapes to atom-key maps while preserving unknown Stripe fields as string keys.
Added
- Add a migration guide:
guides/migrating-0.1-to-0.2.md.
0.1.11 - 2026-04-16
Added
- Add
Stripe.Resources.Reserve.Hold,Stripe.Resources.Reserve.Plan, andStripe.Resources.Reserve.Releaseresources, plus their event types (reserve.hold.created,reserve.hold.updated,reserve.plan.created,reserve.plan.disabled,reserve.plan.expired,reserve.plan.updated,reserve.release.created) - Add
Stripe.Resources.UPI,Stripe.Resources.UPIHandleRedirectOrDisplayQrCode, andStripe.Resources.UPIQRCoderesources
Changed
- Sync OpenAPI spec to v2239 — field and parameter updates across V1 and V2 APIs (229 files, +2117/-466)
0.1.10 - 2026-03-03
Changed
- Sync OpenAPI spec to v2186 (API version
2026-01-28.clover) — spec content unchanged from v2169, no generated code differences
0.1.9 - 2026-02-17
Changed
- Exclude code generator and
mix stripe.generatetask from hex package — the package is regenerated weekly from the latest Stripe OpenAPI spec, so end users only need the generated output; contributors who need immediate regeneration can usemix stripe.generatefrom the repo. This also drops therustyjsontransitive dependency
0.1.8 - 2026-02-16
Changed
- Bump RustyJSON to 0.3.9
- Eliminate dynamic atom creation in code generator to follow Elixir best practices
Fixed
- Fix generated typespecs for deeply nested parameter modules — previously only first-level children were emitted, leaving ~960 Dialyzer warnings for missing types
- Normalize error returns in
WebhookPlugso thewithchain handles a single consistent shape
0.1.7 - 2026-02-12
Fixed
- Fix generator to produce strongly typed maps for
additionalPropertiesfields (e.g.,Price.currency_optionsnow resolves to%{String.t() => CurrencyOptions.t()}instead ofmap()) - Fix parameter generator to produce strongly typed maps for nested request parameters (e.g.
Coupon.createcurrency_optionsnow resolves to%{String.t() => CurrencyOptions.t()}instead ofmap()) - Fix generator to support
oneOfunions (polymorphism), enabling future support for disjoint types in V2 events
0.1.6 - 2026-02-11
Fixed
- Remove dead
resolve_params_class/1override lookup —params_overrides()is empty, so the pattern match was flagged as unreachable by both Dialyzer and Elixir's type checker (d07dbf5)
0.1.5 - 2026-02-11
Fixed
- Add missing
:contextfield to all thin event structs —fetch_related_object/2referencesMap.get(event, :context)but the field was absent from the generated struct, producing 18 compiler warnings on Elixir 1.18+ and silently dropping authentication context (0305b53)
0.1.4 - 2026-02-11
Fixed
- Fix inner type deserialization for modules not yet loaded by the BEAM —
function_exported?/3does not trigger auto-loading, so__inner_types__was silently skipped for nested structs likeInvoiceLineItem.Parent.SubscriptionItemDetails, returning raw string-keyed maps instead of typed structs (Code.ensure_loaded!/1is now called before the check)
0.1.3 - 2026-02-10
Typespecs across all 307 resource modules now reference actual struct types instead of map(), improving Dialyzer coverage, IDE autocomplete, and LLM-generated code accuracy.
Changed
- Generate precise typespecs for resource structs — inner types now show
Period.t()instead ofmap(), cross-resource refs resolve toStripe.Resources.Invoice.t()(9c2c859) - Document string-key vs atom-key convention in
usage-rules.md— request params use string keys, response structs use atom keys (9c2c859)
Fixed
Fix 36 expandable fields typed as
map()instead ofString.t() | Resource.t()— unions likeanyOf: [string, customer, deleted_customer]now resolve correctly (9c2c859)
0.1.2 - 2026-02-10
Added
- Add
Stripe.Deserializer.from_json/1for decoding JSON strings into typed structs (b0b2acf) - Add 500 typed inner modules for nested API objects (e.g.
Charge.BillingDetails,Price.Recurring,InvoiceLineItem.Period) replacing untypedmap()(a81f7bf) - Add field override mechanism for API fields missing from the OpenAPI spec (a81f7bf)
- Add integration test suite against stripe-mock for field coverage validation (a81f7bf)
Fixed
- Fix
Charge.invoicereturningnil— field was absent from generated struct because the OpenAPI spec omits it (a81f7bf) - Fix nested object deserialization losing type information — inner types now recurse through
__inner_types__at all nesting depths (a81f7bf)
0.1.1 - 2025-02-07
Fixed
- Fix
event.datadeserialization:Webhook.construct_event/4now returnsevent.dataas a typed%EventData{}struct instead of a raw string-keyed map (1d30ea8)
0.1.0 - 2025-02-06
Initial release.
Added
- Add full V1 + V2 API coverage (561 endpoints across 190 service modules)
- Add typed Elixir structs for 307 resource types with inner type deserialization
- Add auto-paging pagination for V1 lists, search results, and V2 lists
- Add webhook signature verification via
Webhook.construct_event/4 - Add
WebhookPlugfor Plug/Phoenix integration - Add OAuth support (
authorize_url,token,deauthorize) - Add multipart file uploads and streaming response support
- Add per-event typed modules (21 event types with nested data structs)
- Add process-scoped test stubs via
Stripe.Test - Add retry with exponential backoff, jitter, and idempotency keys
- Add telemetry events for request lifecycle observability
- Add Finch HTTP client with connection pooling (Mint + NimblePool)