> ## Documentation Index
> Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK changelog

> Changelog for Waffo Node.js, Java, Go, Python, and PHP SDK releases.

<Note>
  This page tracks releases of the **Waffo SDK packages** (Node.js / Java / Go / Python / PHP). For the **Waffo API** version history, see [API version history](/docs/en/developer-docs/tools-and-references/references/changelog).
</Note>

## Node.js SDK (@waffo/waffo-node)

<Steps>
  <Step title="v3.1.0 (2026-09-04) — Latest">
    * Added typed `topupInfo` request and response fields to `subscription().update()` for charging a current-period add-on while preserving the subscription billing schedule
  </Step>

  <Step title="v3.0.1 (2026-08-04)">
    * Updated the `X-SDK-VERSION` request header to `waffo-node/3.0.1`
    * `merchantConfig().inquiry()` and `payMethodConfig().inquiry()` now accept an omitted `merchantId`; the SDK uses the `merchantId` configured on the Waffo client
  </Step>

  <Step title="v3.0.0 (2026-07-29)">
    * **Breaking change**: `CreateOrderParams.paymentTokenData` and `InquiryMerchantConfigData.totalDailyLimit` / `remainingDailyLimit` / `transactionLimit` are now `string`, matching API JSON-string fields. Parse the JSON string in your app when you need a structured value
    * Removed the unusable `PaymentTokenData` interface that only typed the old object form
    * Schema validation now checks OpenAPI field types, not just field names
  </Step>

  <Step title="v2.7.0 (2026-07-28)">
    * `PayMethodDetail` now exposes `payMethodType`, `currency`, `orderAmountMin`, `orderAmountMax`, and `refundAllowed`
    * `currentStatus` is optional when real-time availability is unavailable
  </Step>

  <Step title="v2.6.0 (2026-07-17)">
    * Added wallet address inquiry, x402 order data, promotion fields, and typed x402 payment Webhook data
    * Kept deprecated legacy order and subscription fields/types available while aligning the active wire contract with the latest OpenAPI specification
    * Release validation now fails when the shared schema field vector is stale
  </Step>

  <Step title="v2.5.1 (2026-07-06)">
    * Fixed compatibility so `subscription().create()` remains backward compatible when `subscriptionManagementUrl` is omitted
    * Keeps `subscriptionManagementUrl` supported, but no longer rejects existing payloads before sending the API call
  </Step>

  <Step title="v2.5.0 (2026-05-13)">
    * Added `subscription().update()` to update subscription amounts, trial amounts, and scheduled amounts
    * Added `scheduledAmounts` to `ProductInfo` for subscription create, change, update, and inquiry flows
    * Added typed fields for subscription extension info, token card data, card BIN data, and product details
    * Automatically injects the current time when `Order().Capture()` omits `captureRequestedAt`
  </Step>

  <Step title="v2.4.0 (2026-03-14)">
    * Type alignment: all SDK type fields are consistent with the openapi.json definitions
    * Fixed endpoint paths for `merchantConfig` and `payMethodConfig`
    * Added the `captureRequestedAt` field to `CaptureOrderParams`
    * Added the `captureMode` field to `PaymentInfo`
    * Added Capture E2E tests and Schema field validation tests
  </Step>

  <Step title="v2.3.4 (2026-03-10)">
    * Made `RefundOrderParams.requestedAt` optional; the SDK will automatically inject the current UTC time
  </Step>

  <Step title="v2.3.3 (2026-03-03)">
    * Fixed `RefundOrderParams` field names and types to align with openapi.json
    * Renamed `notifyUrl` to `refundNotifyUrl`
    * Added refund Webhook E2E tests
  </Step>

  <Step title="v2.3.2 (2026-03-02)">
    * Added handling for the `SUBSCRIPTION_CHANGE_NOTIFICATION` Webhook event
  </Step>

  <Step title="v2.3.1 (2026-03-01)">
    * **Important fix**: `buildSuccessResponse()` returns `{"message":"success"}` instead of `{"status":"success"}`
  </Step>

  <Step title="v2.3.0 (2026-02-24)">
    * Automatically inject timestamps: when not provided, `orderRequestedAt` and `requestedAt` will be set automatically
  </Step>
</Steps>

***

## Java SDK (waffo-java)

<Steps>
  <Step title="v3.1.0 (2026-09-04) — Latest">
    * Added typed `topupInfo` request and response fields to `subscription().update()` for charging a current-period add-on while preserving the subscription billing schedule
  </Step>

  <Step title="v3.0.0 (2026-07-29)">
    * **Breaking change**: `CreateOrderParams.paymentTokenData`, `PaymentInfo.payMethodProperties`, `PaymentInfo.cashierAppearance`, and `InquiryMerchantConfigData.totalDailyLimit` / `remainingDailyLimit` / `transactionLimit` are now `String`, matching API JSON-string fields
    * Removed the unusable `PaymentTokenData`, `PayMethodProperties`, and `CashierAppearance` classes that only typed the old object forms; `SubscriptionPaymentInfo` already used `String` for the matching fields
    * Schema validation now checks OpenAPI field types. Enums count as strings, and failure-reason fields with custom Jackson deserialization are explicit exemptions
  </Step>

  <Step title="v2.0.0 (2026-07-28)">
    * `SubscriptionPaymentInfo.cashierLanguage` and `SubscriptionPaymentInfoResponse.cashierLanguage` now use `String` and support API-supported IETF BCP 47 language tags
    * `PayMethodDetail` now exposes `payMethodType`, `currency`, `orderAmountMin`, `orderAmountMax`, and `refundAllowed`; `currentStatus` can be null
    * Retained and expanded `CashierLanguage` convenience constants to the current 22 language codes; they are a convenience snapshot, not a local SDK input allowlist
    * When upgrading, convert enum arguments to strings or `.getValue()`; if you only replace the JAR, remove old cached or shaded copies and run a clean rebuild
  </Step>

  <Step title="v1.5.0 (2026-07-17)">
    * Added wallet address inquiry, x402 order data, promotion fields, and typed x402 payment Webhook data
    * Kept deprecated legacy order and subscription fields/types available while aligning the active wire contract with the latest OpenAPI specification
    * Release validation now fails when the shared schema field vector is stale
  </Step>

  <Step title="v1.4.1 (2026-07-06)">
    * Compatibility release that keeps `subscriptionManagementUrl` optional
    * Aligns SDK schema and E2E gates for `payMethodDetails`
  </Step>

  <Step title="v1.4.0 (2026-06-02)">
    * Parses `orderFailedReason`, `refundFailedReason`, and subscription `failedReason` when callbacks send objects or JSON strings
    * Preserves existing failure reason access and keeps plain-string failure descriptions
  </Step>

  <Step title="v1.3.0 (2026-05-13)">
    * Added `subscription().update()` to update subscription amounts, trial amounts, and scheduled amounts
    * Added `SubscriptionScheduledAmount`, `SubscriptionUpdateProductInfo`, `UpdateSubscriptionParams`, and `UpdateSubscriptionData`
    * Added typed fields for subscription extension info, token card data, card BIN data, and product details
  </Step>

  <Step title="v1.2.0 (2026-03-14)">
    * Type alignment: all SDK type fields are consistent with the openapi.json definitions
    * Fixed Java 8 compatibility issues
    * Added Capture E2E tests and Schema field validation tests
  </Step>

  <Step title="v1.1.2 (2026-03-10)">
    * Automatically inject `RefundOrderParams.requestedAt`
    * Added `SUBSCRIPTION_CHANGE_NOTIFICATION` Webhook handling
    * Fixed `RefundOrderParams` field alignment issues
  </Step>

  <Step title="v1.1.1 (2026-03-01)">
    * **Important fix**: `buildSuccessResponse()` returns `{"message":"success"}` instead of `{"status":"SUCCESS"}`
  </Step>

  <Step title="v1.1.0 (2026-02-24)">
    * Automatically inject timestamps
    * Changed `CancelOrderParams.orderRequestedAt` type from String to Instant
  </Step>
</Steps>

***

## Go SDK (waffo-go)

<Steps>
  <Step title="v2.1.0 (2026-09-04) — Latest">
    * Added typed `TopupInfo` request and response fields to `Subscription().Update()` for charging a current-period add-on while preserving the subscription billing schedule
  </Step>

  <Step title="v2.0.1 (2026-07-29)">
    * Corrected the Go v2 module path to `github.com/waffo-com/waffo-go/v2`, as required by Go modules for v2 and later
    * The `v2.0.0` tag used the v1 module path and cannot resolve through the Go proxy. Use `v2.0.1`
  </Step>

  <Step title="v2.0.0 (2026-07-29)">
    * **Breaking change**: `order.CreateOrderParams.PaymentTokenData` and `merchant.InquiryMerchantConfigData.TotalDailyLimit` / `RemainingDailyLimit` / `TransactionLimit` are now `string`, matching API JSON-string fields
    * Removed the unusable `order.PaymentTokenData` struct that only typed the old object form
    * Schema validation now checks OpenAPI field types, not just JSON tag names
  </Step>

  <Step title="v1.6.0 (2026-07-28)">
    * `PayMethodDetail` now exposes `PayMethodType`, `Currency`, `OrderAmountMin`, `OrderAmountMax`, and optional `RefundAllowed`
    * `CurrentStatus` can be empty when real-time availability is unavailable
  </Step>

  <Step title="v1.5.0 (2026-07-17)">
    * Added wallet address inquiry, x402 order data, promotion fields, and typed x402 payment Webhook data
    * Kept deprecated legacy order and subscription fields/types available while aligning the active wire contract with the latest OpenAPI specification
    * Release validation now fails when the shared schema field vector is stale
  </Step>

  <Step title="v1.4.1 (2026-07-06)">
    * Compatibility release that keeps `SubscriptionManagementURL` optional
    * Aligns SDK schema and E2E gates for `payMethodDetails`
  </Step>

  <Step title="v1.4.0 (2026-05-13)">
    * Added `Subscription().Update()` to update subscription amounts, trial amounts, and scheduled amounts
    * Added `ScheduledAmount` support for subscription create, change, update, and inquiry flows
    * Added typed fields for subscription extension info, token card data, card BIN data, and product details
    * Automatically injects the current time when `Order().Capture()` omits `CaptureRequestedAt`
    * Expanded schema field validation for required fields and nested subscription/order structures
  </Step>

  <Step title="v1.3.2 (2026-05-12)">
    * Parses JSON-string `orderFailedReason`, `refundFailedReason`, and subscription `failedReason` callback payloads
    * Added failed callback tests for payment, refund, and subscription Webhook handling
    * Refund E2E flows now use DANA, and sandbox prerequisites now fail or skip explicitly
  </Step>

  <Step title="v1.3.1 (2026-03-16)">
    * Fixed Go module proxy cache issues
  </Step>

  <Step title="v1.3.0 (2026-03-14)">
    * Type alignment: all SDK type fields are consistent with the openapi.json definitions
    * Fixed endpoint paths for `merchantConfig` and `payMethodConfig`
    * Added `RefundStatus`, `OrderStatus`, and `SubscriptionStatus` constants
    * Added Capture E2E tests and Schema field validation tests
  </Step>

  <Step title="v1.2.2 (2026-03-03)">
    * Fixed `RefundOrderParams` fields to align with openapi.json
    * Added refund Webhook E2E tests
  </Step>

  <Step title="v1.2.1 (2026-03-01)">
    * **Important fix**: `BuildSuccessResponse()` returns `{"message":"success"}` instead of `{"status":"success"}`
  </Step>

  <Step title="v1.2.0 (2026-02-24)">
    * Automatically inject timestamps
  </Step>
</Steps>

***

## Python SDK (waffo)

<Steps>
  <Step title="v0.5.0b0 (2026-09-04) — Latest">
    * Added typed `topup_info` request and response fields to `subscription().update()` for charging a current-period add-on while preserving the subscription billing schedule
    * Schema drift validation now compares OpenAPI field types, not just field names; generated models already matched the contract, so no model changes were needed
  </Step>

  <Step title="v0.4.0b0 (2026-07-28)">
    * `PayMethodDetail` now exposes `pay_method_type`, `currency`, `order_amount_min`, `order_amount_max`, and `refund_allowed`
    * `current_status` is optional when real-time availability is unavailable
  </Step>

  <Step title="v0.3.0b0 (2026-07-17)">
    * Added wallet address inquiry, x402 order data, promotion fields, and x402 Webhook payload coverage
    * Wallet inquiry parameters now allow `merchantInfo` to be omitted when the SDK injects it from configuration
    * Deprecated generated model names and legacy order/subscription fields remain available for source compatibility
    * Schema drift validation now detects a stale shared schema field vector
  </Step>

  <Step title="v0.2.0b1 (2026-07-06)">
    * Compatibility release that keeps `subscriptionManagementUrl` optional
    * Aligns SDK schema and E2E gates for `payMethodDetails`
  </Step>

  <Step title="v0.2.0b0 (2026-05-13)">
    * Added `subscription.update()` to update subscription amounts, trial amounts, and scheduled amounts
    * Added scheduled amount models across subscription create, change, update, and inquiry fields
    * Expanded order capture timestamp auto-injection and schema field validation coverage
  </Step>

  <Step title="v0.1.0b0 (2026-05-09)">
    * Published the first Python beta release
    * Added support for payments, refunds, subscriptions, merchant configuration, payment method configuration, and Webhook signature verification
  </Step>
</Steps>

***

## PHP SDK (waffo/waffo-php)

<Steps>
  <Step title="v0.3.0 (2026-09-04) — Latest">
    * Added typed `topupInfo` request and response models to `subscription()->update()` for charging a current-period add-on while preserving the subscription billing schedule
  </Step>

  <Step title="v0.2.0 (2026-08-27)">
    * Added support for PHP 8.0+
  </Step>

  <Step title="v0.1.0 (2026-08-22)">
    * Published the initial PHP SDK beta with order, refund, subscription, merchant configuration, payment method configuration, Wallet, and Webhook capabilities
    * Added OpenAPI-generated DTOs, shared vector tests, executable README examples, package validation, and real sandbox E2E archive support
  </Step>
</Steps>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.