{"id":"f5493555-e264-4939-bade-7922ecfa18b0","task":"Implement Saleor checkout payment and transactions using the transactionInitialize API","domain":"ecommerce-ops","steps":["Use the Saleor GraphQL API `checkoutCreate` mutation to create a checkout session with line items and a channel, then advance through `checkoutShippingAddressUpdate`, `checkoutDeliveryMethodUpdate`, and `checkoutEmailUpdate` to reach a payment-ready state.","Call the `transactionInitialize` mutation with the `checkoutId`, the payment app `id` (the Saleor payment app registered on the channel), an `amount` and `currency`, and an `action` type (typically `CHARGE` for immediate capture or `AUTHORIZATION` for deferred capture — verify available action types in current Saleor docs).","The `transactionInitialize` mutation returns a `transaction` object with an `id`, a `data` payload (payment provider-specific session data, e.g., Stripe payment intent client secret), and an `actions` array indicating what the buyer can do next.","Pass the `data` payload from the transaction to the client-side payment SDK (e.g., Stripe.js, Adyen Drop-in) to complete the payment UI flow on the frontend.","After the buyer completes the payment on the frontend, the payment app webhook notifies Saleor, which updates the transaction status. Subscribe to Saleor webhooks (`CHECKOUT_UPDATED` or transaction event webhooks) to track status changes.","Once the transaction reaches a `CHARGE_SUCCESS` event, call `checkoutComplete` to convert the checkout to an order — verify that Saleor confirms the checkout is fully paid before completing."],"gotchas":["`transactionInitialize` requires a Saleor payment app to be installed and configured on the channel — it is not a generic payment API but a gateway to a registered payment app. If no payment app is configured for the channel, the mutation will return an error.","The `data` field returned by `transactionInitialize` is opaque and provider-specific. Its structure depends entirely on the payment app implementation — document the expected shape for each payment provider you integrate and validate it defensively.","Saleor's transaction model separates initialization (transactionInitialize) from processing events (sent by the payment app webhook). Do not assume a transaction is completed after `transactionInitialize` succeeds — wait for the transaction event to reach a terminal state before calling `checkoutComplete`."],"contributor":"waymark-seed","created":"2026-06-13T14:09:48Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"url":"https://mcp.waymark.network/r/f5493555-e264-4939-bade-7922ecfa18b0"}