Blog
Two different metal connectors and a small adapter on an illuminated workbench.

October 9, 20263 min readАдминистратор

Releasing payment changes across APIs, webhooks and reports

Version APIs, webhooks, SDKs and reports together, test compatibility and define what a rollback can actually undo.

A finance operator adds a useful report column. The next morning, automated reconciliation imports fees into the amount field. Nobody changed the payment API or released the website, yet the money workflow changed. This is a useful starting point for versioning: an integration contract is wider than the payment request endpoint.

A change can affect the SDK, API version, event format, account settings, report columns or your interpretation of statuses. If the team controls only application code, some releases happen outside its view. The following process makes those changes visible and testable.

Four contracts with your data

The first contract covers what the application sends and which responses it understands. The second covers asynchronous events and authenticity checks. The third covers financial report records. The fourth is what your product treats as the business result of those records. A change to one may leave the others technically functional while altering their meaning.

Stripe supports API-request version selection and separately configured webhook-endpoint versions. See Stripe’s versioning rules. An SDK-updated checkbox therefore does not establish that every consumer receives the expected structure. Record the configuration actually used by each channel, rather than only the dependency versions in the repository.

Adyen distinguishes compatible changes from changes requiring a new API version, while its libraries follow their own versioning scheme. See Adyen’s rules. Read the provider’s actual contract. An additional permitted field and a changed meaning for an existing field have different consequences for your parser.

Make unknown business values visible

In a teaching system, the parser understands three statuses and a fourth arrives. One dangerous response is to treat it as successful so processing continues. Another is to discard the row and present finance with a clean report. The proposed policy preserves the permitted record, identifies the unsupported value and routes it for review without an automatic financial effect.

An unknown optional field may justify different behaviour: ignoring it can be correct under the documented contract. Failing on every new field is therefore too crude as well. Distinguish structural extensions, unknown business states, missing required fields and changed amount formats. Give each a specific test.

A financial CSV is an API too

Adyen warns that changing report columns or their order can affect automated processing. See the Payment accounting report configuration. Treat those settings as part of the controlled integration even when someone changes them through a dashboard.

The parser should validate expected headers and required fields rather than assuming the amount is always in column eight. Check currency, sign, scale, record counts and control totals where available. A correct header does not protect against a field’s changed meaning, so include examples of actual record types in an authorised test set.

The report owner needs to know which systems consume it. Prepare a sample, verify consumers and agree the switch time before changing it. Preserve the previous configuration where supported. Asking finance to rearrange columns manually every morning only hides the incompatibility.

Rehearse and define the rollback boundary

Build a small set of synthetic or appropriately de-identified cases: payment, decline, partial refund, hold, delayed event and unknown status. Run old and new parsers without external financial actions. Compare resulting obligations, amounts and exception queues, not merely whether the import finished successfully.

Where parallel calculation is possible, let the new version compute an observational result without charging or paying anyone. Explain differences before expanding the rollout. Define stopping conditions: missing records, wrong currency, unexplained amounts or a change in whether an order may be fulfilled.

Reverting code does not reverse a refund already created or automatically restore a dashboard setting. For each changed component, identify the rollback method, its limitations and the treatment of operations already processed. If reversal is unsupported, describe a forward correction honestly instead of promising a magic rollback button.

Close the upgrade after its first complete affected cycle, including reporting and reconciliation, rather than after the first HTTP 200. Keep a short change record: what changed, which outcomes were compared, who authorised expansion and what still requires observation.

Sources

  1. 1.docs.stripe.com/api/versioning
  2. 2.docs.adyen.com/development-resources/versioning
  3. 3.docs.adyen.com/reporting/invoice-reconciliation/payment-accounting-report

Comments · 0

No comments yet — be the first.

Log in · log in to leave a comment.