API changelog and change policy
Track Paybilt API changes, deprecations, effective dates, and required migrations.
This changelog records API and documentation changes that affect merchants. Only operations in the authoritative OpenAPI reference are merchant self-service operations. Internal and dashboard operations are context only; merchants cannot call them unless Paybilt adds them to that reference.
Change notice policy
Paybilt provides at least 90 calendar days' public notice before a merchant-impacting breaking change or deprecation takes effect. During that period, merchants can continue using the existing API while they update and test their integrations.
Each notice must identify:
- The announcement and effective dates.
- The affected API, method, and path.
- Whether the change is additive, a deprecation, breaking, documentation-only, or corrective.
- The requests or responses merchants must change.
- The replacement operation or fields and the steps required to migrate.
- The migration steps that can be tested in the sandbox, when published.
Paybilt can release additive changes that do not alter existing requests or responses without the 90-day notice window. The changelog still records them when merchants can use a new operation, field, or status. Paybilt can publish documentation corrections immediately when the corrected text matches the existing OpenAPI reference.
Paybilt may shorten the minimum notice window only for an actively exploited security issue, a legal or regulatory obligation, or a material risk to funds or platform integrity. When disclosure is safe and permitted, the changelog must state why the window changed, which merchant requests or responses are affected, what merchants must do, and the revised effective date.
Sandbox guarantees cover only scenarios explicitly published in the documentation. The presence of an internal or dashboard operation does not make it available in the sandbox or merchant API.
Required entry fields
Every merchant-impacting entry includes:
- Classification
- Status
- Announcement date
- Effective date
- Affected operations
- Merchant impact
- Migration
- Sandbox coverage
2026-10-19 — Hosted Checkout: when Checkout saves a returning shopper's details
- Classification: Documentation-only
- Status: Published
- Announcement date: 2026-10-19
- Effective date: 2026-10-19
- Affected operations: The
customer.emailandcustomer.billing_info.phonefields on Create Checkout Session. - Merchant impact: No API behavior changed. The guide said Checkout can save a shopper's details to a checkout profile, but not when it does. After an approved payment, Checkout saves or updates the profile when the shopper verified with a one-time code, or when the shopper is new and you sent their phone on the session. After an approved payout, it always does. Otherwise the shopper checks out as a guest, and nothing is saved.
- Migration: None. Prefill only contact details the shopper has verified with you: for a new shopper, a phone you send lets Checkout save their details without a one-time code.
- Sandbox coverage: No new sandbox scenarios.
See Returning customers and saved details.
2026-10-19 — Hosted Checkout: only the session's convenience_fee is charged, and refund_claimed marks a completed refund
- Classification: Corrective
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-19
- Affected operations: The
convenience_feefield on Create Checkout Session, Refund Session, and therefund_claimedandrefund_failurewebhooks. - Merchant impact: Documentation only. Hosted Checkout charges only the
convenience_feeyou send on the session. The guide said a fee configured for a payment method on your site could also apply when you left the field out or sent0, but sites used for Hosted Checkout don't have one. Checkout sendsrefund_claimedfor every refund method once the refund is approved or claimed, not only when a customer claims it. - Migration: To charge a fee, send
convenience_feeon the session; to charge none, leave it out or send0. Treat a session that becomesrefundedorpartial_refund, withrefund_claimed, as a completed refund. - Sandbox coverage: No new sandbox scenarios.
See Convenience fees and Refund a Checkout session.
2026-10-19 — Gateway: ACH is for payouts only, and RTP payouts are no longer available
- Classification: Corrective
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-14; ACH payout account numbers of up to 17 digits 2026-10-16
- Affected operations: Create ACH Payout, ACH payments (
POST /api/v2/payment/ach/), and RTP payouts (POST /api/v2/payout/rtp/). - Merchant impact: ACH payments and RTP payouts weren't available on any production site, and both routes now return HTTP
404. ACH payouts pay an individual's US bank account, with the bank account at the top level of the request, and accept account numbers of 1 to 17 digits, up from 12. Thecompany,account_info,transaction_descriptor, andsame_dayfields documented before don't apply to ACH payouts, and a request that includescompanyreturns1168. - Migration: Send ACH payouts with
encrypted_account_number,rsa_key_id,routing_number, andaccount_type(CHECKINGorSAVINGS) at the top level, and identify the recipient withfirst_nameandlast_name. Useservice_levelinstead ofsame_day. - Sandbox coverage: No new sandbox scenarios.
See ACH payouts.
2026-10-19 — Checkout SDK: verification flags can only keep or turn off your site's checks
- Classification: Corrective
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-19
- Affected operations: The
cvv_verification,avs_verification, and3ds_verificationclaims in the Checkout SDK session token. - Merchant impact: Documentation only. The guide said these flags turn checks on, but they can't add a check.
truekeeps a check your site has on and fails initialization with400invalid_requestwhen your site has it off,falseturns the check off for the session, and an omitted3ds_verificationuses your site's setting. - Migration: Send
trueonly for checks your site has on for the card transaction type, or ask Paybilt to turn the check on for your site. - Sandbox coverage: No new sandbox scenarios.
2026-10-19 — Gateway: Cancel Transaction rejects what it can't cancel, currency_code reports the processed currency, and site blacklists cover payouts
- Classification: Corrective
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-14; Cancel Transaction 2026-10-16
- Affected operations: Cancel Transaction, the
currency_codefield on Gateway create requests and responses, and payment and payout creates checked against your site blacklist. - Merchant impact: Cancel Transaction now returns HTTP
400for a transaction it can't cancel; before, it returned200and the transaction never changed. Create responses report the currency Paybilt processed the transaction in, not thecurrency_codeyou sent. Your site blacklist now blocks payouts as well as payments, applies whether or notblacklist_enabledis on, and no whitelist overrides it. - Migration: Handle
1801and1802from Cancel Transaction, and readerrorsas a list. Take the currency from the response, not your request. Remove customers from your site blacklist if they should still receive payouts. - Sandbox coverage: No new sandbox scenarios.
Details
- Only Interac e-Transfer request-money and send-money transactions and bill payments in
pending,sent, orconfirmingcan be cancelled, when the bank processing them supports it. ACH transactions return1175, other methods return1801, and a transaction whose bank hasn't returned a reference yet returns1802. See Cancel an eligible transaction and Resolve cancellation errors. - A
currency_codeyou send is ignored. Create responses, refunds, and callbacks reportUSDfor ACH, RTP, Reward Card payouts, and USD sites, andCADfor everything else. Card 3-D Secure authenticates in the same currency. See Amounts, fees, and currency. - Refunds, captures, and chargebacks aren't checked against your site blacklist. A new 10-digit North American phone number, or an 11-digit one that starts with
1, is stored in E.164 format, such as+14165550123, and lookup and removal match a number with or without+1.blacklist_enablednow only turns on the blacklist operations.
2026-10-19 — Hosted Checkout sessions expire with a webhook, and failure screens link to failed_return_url
- Classification: Additive
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-13
- Affected operations: Hosted Checkout sessions created with Create Checkout Session, the
session_expiredwebhook, and the hosted page's failure and expired screens. - Merchant impact: A session that passes its
expires_attime now moves toexpired, and Checkout sendssession_expired. Before, only an unclaimed Interac e-Transfer payout did. When a session ends with a final status that isn't approved, the failure screen now shows a "Return to merchant name" button that goes tofailed_return_url; before, the hosted page never used it. - Migration: Handle
session_expiredin your Checkout webhook receiver, and send a new firstudfsvalue when you create a new session for the order. Setfailed_return_urlto a page that doesn't assume the payment succeeded; without it, the button goes toreturn_url. - Sandbox coverage: No new sandbox scenarios.
Details
- Within about 15 minutes after
expires_at, Checkout moves apending,processing, orprocessing_softsession toexpiredand sendssession_expired. An Interac e-Transfer request the shopper hasn't completed is cancelled first. A session whose payment or payout can no longer be cancelled keeps its status. See Session expiry and Checkout webhooks. - Opening an expired session's link shows "This checkout link has expired", with a button to
return_urlor your site URL. Failures the shopper can retry still show Try again. See Return behavior and Failure screens.
2026-10-19 — Hosted Checkout reference corrections: donations, legacy card routes, and payout events
- Classification: Corrective
- Status: Released
- Announcement date: 2026-10-19
- Effective date: 2026-10-19
- Affected operations: Hosted Checkout Create Checkout Session and draft sessions,
PUT /checkout-session/donation-amount,POST /sdk/credit-card,POST /sdk/pre-auth, and Checkout payout webhooks. - Merchant impact: No API behavior changed. Donation sessions haven't launched, so the guides and the API reference no longer describe them: the
donationsession type,donation_config,appearance,metadata, andPUT /checkout-session/donation-amountare gone.POST /sdk/credit-cardandPOST /sdk/pre-authare no longer listed, because only an older SDK that's being retired calls them. The webhook catalog no longer listspayout_initiatedorpayout_approved, which Checkout never sends. - Migration: Don't create donation sessions until Paybilt announces them. Use a documented SDK, such as the Checkout SDK, rather than calling the card routes directly. Treat
payout_claimedas the completed payout. - Sandbox coverage: No new sandbox scenarios.
Details
- An Interac e-Transfer payout sends
payout_request_approved,payout_sent,payout_claimed, andsession_complete, in that order. A payout request that fails before any money is sent returns the session topendingwith a Try again button; an e-Transfer that fails, is declined, or is cancelled after it was sent cancels the session. See Payout sessions. - The
preferredflag doesn't choose the method the hosted page shows first; your site's preferred-method setting does. It still decides whether the e-Transfer checks run at creation. See Method order. - The 25,000 CAD e-Transfer cap excludes tax and runs only at creation, so tax can take a session over it, and a payment rejected for that reason shows a generic failure screen. See Interac e-Transfer in Checkout.
2026-10-13 — Hosted Checkout rejects per-method fees and wallet subscriptions, and closes returned payouts
- Classification: Breaking
- Status: Released
- Announcement date: 2026-10-13
- Effective date: 2026-10-13
- Affected operations: Hosted Checkout Create Checkout Session and session updates, wallet payments on the hosted page, and hosted payout sessions and their webhooks.
- Merchant impact: Two kinds of request that Checkout used to accept now fail with
422: asession_methodsentry with its ownconvenience_fee, and asubscriptionsession that listsapple_payorgoogle_pay. Both behaved incorrectly before. The per-method fee could be charged to a card without being shown to the shopper, and a wallet payment in a subscription session charged once and never created the subscription. A returned payout now closes its session instead of reopening it for another claim. These changes took effect without the 90-day notice window because the earlier behavior could charge shoppers a fee they weren't shown, start subscriptions that never renewed, or pay a recipient twice. - Migration: Remove
convenience_feefromsession_methodsentries and set the fee once in the session-levelconvenience_fee. Don't listapple_payorgoogle_payinsubscriptionsessions; offercredit_card,digital_cheque, oretransfer_request_moneyinstead. After a returned payout, create a new payout session to pay the recipient again. - Sandbox coverage: No new sandbox scenarios.
Details
- Set fees with the session-level
convenience_feeonly. A per-method fee fails with422, and the error message readsPer-method convenience_fee is not supported; use the session-level convenience_fee. See Hosted Checkout. - Subscription sessions can't list wallets. The request fails with
422, with a message such asapple_pay is not a valid subscription method.See Hosted Checkout and Wallet payments. - A returned payout sets the session to
failedfordirect_depositandinstant_direct_deposit, and tocancelledfor every other method. A failed, declined, or cancelled payout still returns the session topendingso the recipient can claim again, except foretransfer_send_money, which moves tocancelled. A session that's already final is never reopened. See Payout sessions and Checkout webhooks.
2026-10-13 — Corrections to Gateway callbacks, e-Transfer limits, and payouts
- Classification: Corrective
- Status: Published
- Announcement date: 2026-10-13
- Effective date: 2026-10-13
- Affected operations: Gateway callbacks and the dashboard resend; Interac e-Transfer creates; Bill Payment, Visa Direct and Mastercard Send, and Reward Card payouts;
currency_codein create responses; saved-card purchases, pre-authorizations, and card verification. - Merchant impact: No API behavior changed. Paybilt's Gateway team answered the questions our earlier corrections left open, and we updated the guides and API reference to match. If you built from the earlier text, you may run fulfillment twice for a resent callback, or wait on a transaction that won't finish.
- Migration: If you de-duplicate Gateway callbacks on
stage, switch totxn,tx_action, andstatus. If you keep an8007transaction open waiting for it to finish, create a new transaction instead. - Sandbox coverage: No new sandbox scenarios.
Gateway
- De-duplicate callbacks on
txn,tx_action, andstatus, and make each update idempotent. A resent delivery arrives with a newstage, so the key the guides recommended,txnplusstage, lets a resend run fulfillment again. See Gateway webhooks and callbacks. - A transaction blocked with
pl_erroris final, including the pending-transaction limit8007. To take the payment, create a new transaction with a newudfs[0]. Real-Time Deep Integration previously said an8007flow could still finish. See Interac e-Transfer. - A Bill Payment is complete at
tx_action=payoutwithstatus=approved, which means the bank accepted the payment. No settlement status follows, and the callback code5104isn't sent. See Bill payments. - The Visa Direct and Mastercard Send process call ignores
ntf_url,udfs, the amount, and customer details; they come from the create call. See Card payouts. - After a Reward Card
pg_error, the API can't tell you whether the card was loaded. Give Paybilt support thetxidbefore you pay the recipient again. See Reward cards. - Reward Card payouts report
currency_codeasUSD, like ACH, RTP, and USD sites. Other transactions use CAD, and their create response echoes thecurrency_codeyou sent. See Amounts, fees, and currency. - A saved-card purchase or pre-authorization needs the
emailthe card was saved under, and a different email returns1131. Card verification can leave outemail, and Paybilt looks the card up within your site. The API reference previously said that leaving outemailalways returns1131. See Use a stored card.
2026-10-08 — Corrections to webhooks, callbacks, Checkout SDK events, and e-Transfer
- Classification: Corrective
- Status: Published
- Announcement date: 2026-10-08
- Effective date: 2026-10-08
- Affected operations: Hosted Checkout sessions, session tokens, and webhooks; Checkout SDK callbacks and configuration, and the classic SDK events; Gateway Interac e-Transfer, Visa Direct and Mastercard Send payouts, merchant auth tokens, reports, statements, and callbacks; and the Gateway sandbox tools.
- Merchant impact: No API behavior changed. We corrected guides that described behavior differently from how Paybilt handles it, and corrected the API reference to match. If you built from the earlier text, you may be handling some webhooks, callbacks, or errors incorrectly, and some e-Transfer creates may be rejected.
- Migration: Check your integration against the corrections below. Most change how you handle results. The e-Transfer
udfsrequirement and the card payout process call change how you build requests. - Sandbox coverage: No new sandbox scenarios. The e-Transfer sandbox recipes are corrected; see the Interac e-Transfer corrections below.
Hosted Checkout and Checkout SDK
- Answer Checkout webhooks with
200within 5 seconds. Checkout retries only when connecting times out or the connection drops mid-request. A refused connection, a slower response, or any status other than200isn't retried, so after an outage, list deliveries with Get Callbacks and resend missed ones with Trigger Webhook. See Checkout webhooks. payment_status_updated,payout_initiated, andpayout_approvedaren't currently sent; handlepayout_claimedinstead. A session that reaches its expiry time sends no event, andsession_openedcan arrive more than once per session. See Checkout webhooks.- On events driven by a payout status change,
merchant_sidcan hold an identifier other than your site ID, so match them bysession_id. Automatic deliveries don't carryX-Transaction-ID; readsession_details.transaction_detailsinstead. - Create Checkout Session returns no session token. If
short_urlis an empty string, useurl. Checkout ignoressupport_urlandsupport_emailsent at creation; the support link comes from your site settings. See Hosted Checkout. - A superseded session token stays valid for 30 seconds by default, not 10. See Checkout authentication.
- In the Checkout SDK,
onReadyalso fires after a failed initialization, right afteronError. Enable your Pay button only if noonErrorcame first. See Checkout SDK configuration. - The SDK form language comes only from the session token, so a remount can't change it. In React,
useCheckoutSDK()connects only to a checkout that mounted before the calling component rendered. See React. - Gateway callbacks and reports show the SDK's
metadataandconfig.udfsaskey:valuestrings inudfs. See Checkout SDK configuration. - In the classic SDK, dispatch
OneClickReloadafterOneClickDestroybefore you start a new payment. The SDK then dispatchesOneClickInitagain, so keep that listener registered. See One-Click SDK (classic). - The hosted and SDK checkouts show Apple Pay in supported browsers besides Safari, such as Chrome on a desktop computer. The wallet's billing contact replaces any
billing_infoyou send, and its shipping contact, when present, replacesshipping_info. See Wallet payments. - The API reference now shows the one token type each Checkout operation accepts. It previously also offered the merchant token on session operations.
Gateway
- Visa Direct and Mastercard Send payouts take two calls. The create call returns
status=approvedwith the recipient's saved cards but moves no money; the process call pays out. The create responseamountis net of the convenience fee. See Payouts. - A create request that fails validation returns HTTP
400withstatus: invalidand nosuccessfield, so don't rely onsuccessalone. See Errors. - The merchant auth token operations return HTTP
200withstatus: falsewhen they fail, except when the request body isn't a JSON object. Checkstatus. See Generate a merchant auth token. - A callback's
codecan benull, so branch ontx_actionandstatus. Captures and voids have their own codes, and fraud review uses5005and6016. See Error code reference. - The callback
timestampis when the status changed, in UTC with no time zone suffix, and retries keep it.first_nameandlast_namecan appear for any payment method. See Gateway webhooks and callbacks. - Report
typestake exact values such aspayment,refund, andpayout, and an unknown value returns no rows.transaction_listincludes only transactions already finalized in accounting. List Statements needs bothstart_dateandend_date, and the range matches each statement's issue date. See Reconciliation playbook. - When your site validates email addresses, Paybilt rejects domains that don't accept mail, such as
example.com. The API reference examples now use addresses that pass. See Getting started. limits_enabledturns the limits API on or off, but your limits apply to transactions either way.phone_validationandzip_validationapply only to KYC uploads, and the e-Transfer auto-cancel and auto-decline delays are in seconds. See Site flags reference.
Interac e-Transfer
- Every e-Transfer create requires
udfs, including request money and Standard. See Interac e-Transfer. - A declined authorization ends with
status=declined, with code6015for a payment and6101for a payout. The authorization deadline applies only to payments and is counted in seconds; a held payout waits until you decide. See e-Transfer authorization. - In the sandbox, the email tools complete a Standard payment only when
messagematches the payment'sdescription, and the OutOfBand tool needs a site that auto-accepts out-of-band deposits. See Sandbox recipes.
2026-10-07 — Create Checkout Session request fields in the API reference
- Classification: Documentation-only
- Status: Published
- Announcement date: 2026-10-07
- Effective date: 2026-10-07
- Affected operations: Hosted Checkout
POST /checkout-session(Create Checkout Session) - Merchant impact: No API behavior changed. The API reference now lists each Create Checkout Session request field, including the
session_info.session_methodsoptions,express_checkout,three_ds, and the donation fields, instead of showing a free-form object. Its field descriptions and examples follow the rules in Hosted Checkout. - Migration: None.
- Sandbox coverage: No new sandbox scenarios.
2026-10-07 — Corrections to request fields, statuses, and callbacks
- Classification: Corrective
- Status: Published
- Announcement date: 2026-10-07
- Effective date: 2026-10-07
- Affected operations: Gateway payment, payout, card, wallet, Konek, bank, Interac e-Transfer, Transaction lookup, and callback operations; Hosted Checkout sessions, payouts, refunds, and webhooks; Checkout SDK configuration; and Billing operations through the Gateway's subscription proxy.
- Merchant impact: No API behavior changed. We compared the guides with how Paybilt processes each request field and corrected the guides where they left out or misstated required fields, defaults, statuses, and callbacks. If you built from the earlier text, some requests may be rejected or some results handled incorrectly. We've corrected the API reference to match. If a guide and the API reference still disagree, follow the guide.
- Migration: Check your integration against the corrections below. If you used the earlier Billing path or the earlier Hosted Checkout sandbox host, switch to the ones listed here. The other items change how you build requests or handle results.
- Sandbox coverage: No new sandbox scenarios. The Hosted Checkout sandbox is
https://checkout-sandbox.paybilt.com; earlier guides showed a sandbox host that doesn't exist.
Billing
- Send Billing requests to
/api/v3/subscriptions. The/api/v2/subscriptionspath reaches a legacy subscription service with a different request contract. See Billing quickstart. - Send
Content-Type: application/jsonand a JSON body on everyPOST,PUT,PATCH, andDELETErequest, including operations that take no fields. With a scoped token,GET,HEAD, andOPTIONSrequests needsubscriptions:readand every other method needssubscriptions:write. - Create Customer requires
email,first_name, andlast_name. - Send a unique
reference_idwith Create Subscription, and resend the same value after a timeout. Billing doesn't support anIdempotency-Keyheader. See Billing subscriptions. - A price's
collection_methoddoesn't change how renewals are collected, andrecurring.trial_period_daysdoesn't start a trial. Sendtrial_endto start one. - Billing sends subscription webhooks only to the URLs in the subscription's
event_listeners. Subscriptions created through the Checkout SDK have none, so track their renewals from your server. See Checkout SDK subscriptions.
Hosted Checkout and Checkout SDK
- Use
https://checkout-sandbox.paybilt.comin the sandbox, with REST paths under/api/v2. See Environments. - Payout sessions and every
/merchant/*operation need a Payments capability token. See Checkout authentication. - e-Transfer sessions need
checkout_items, and creation fails when a CAD cart is over 25,000. See Interac e-Transfer in Checkout. - List
apple_payandgoogle_paytogether withcredit_card. Checkout removes them when card payments aren't enabled for your site. See Hosted Checkout. - Hosted Checkout doesn't offer Konek. To offer Konek without building the consent flow, use the Checkout SDK. See Konek payments.
payout_claimedis sent when the Gateway reports the payout asapprovedorclaimed. Hosted payout sessions don't sendpayout_approvedorpayout_initiated. See Checkout webhooks.- A Checkout refund without an
amount, or withnullor0, refunds the whole remaining balance. See Refunds and cancellations. - In the classic Checkout SDK, always pass
fieldsandheaderTitles, even as empty objects. Without them the form doesn't render. See One-Click SDK (classic).
Gateway
- Paybilt charges the sum of
items(quantitytimesunit_price) plusshipping_costplus any convenience fee. A top-levelamounton a payment is ignored. See Payments. - Standard ACH payments require
transaction_descriptor, a top-levelaccount_type, and a top-levelrouting_number. Standard ACH payouts requirecompanyand rejectaccount_type. See Bank payments and Payouts. - Send a Konek capture only after the consent reaches
TOKENIZED. The capture returns its final result in the response:approved, ordeclinedwith code7501. If it returnspending, orpg_errorwith code7507, check the transaction status before you capture again. See Konek payments. - A card payment held for fraud review has
status: fraud_review. See Transaction lifecycle. - To find a transaction by your own reference, search Transaction lookup with
{"filters": {"udfs": "<udfs[0] value>"}}. See Cross-capability identifiers. - An Interac e-Transfer create can return HTTP
403with atxidwhen a risk check or revalidation stops it. Store thetxidand handle its status. See Interac e-Transfer. - If an e-Transfer payout's
account_iddoesn't match a usable account saved for your site, Paybilt sends a regular e-Transfer to the recipient'semail. See Interac e-Transfer payouts. - An e-Transfer payout that sends
account_infoneeds all four of its fields:rsa_key_idas an integer, the RSA-encryptedencrypted_account_number, and the 5-digittransit_numberand 3-digitinstitute_numberas strings. See Account-to-account delivery. - Customer limits apply by
emailonly, and limits saved for aphonenumber aren't applied. See Error code reference. - Webhook signatures cover the body without
hmac_signature, serialized with keys sorted at every level, no spaces, and non-ASCII characters left unescaped. Numbers keep their stored form, such as25.0. See Gateway webhooks and callbacks.
2026-08-07 — Documentation governance baseline
- Classification: Documentation-only
- Status: Published
- Announcement date: 2026-08-07
- Effective date: 2026-08-07
- Affected operations: None
- Merchant impact: No API behavior changed. This entry establishes the public notice and documentation governance policy.
- Migration: None
- Sandbox coverage: Not applicable