API Changelog
Stay up-to-date with the latest changes on our APIs
Upcoming changes
We'll be enforcing the reference
parameter on the Initiate TransferAPI and Bulk TransferAPI endpoints.
September 2025
Added PayAttitude as a payment channel to the channels
array. This allows Nigerian merchants to accept payments via PayAttitude on the checkout.
August 2025
Added the fields
accountAcceptsDebits
,accountAcceptsCredits
,accountOpenForMoreThanThreeMonths
,accountHolderMatch
, andaccountOpen
to the Validate AccountAPI response for South African merchants. These parameters give you more information about the status of the account, allowing you to make better decisions based on the validation results.Visa QR Code is no longer supported as a payment channel in Nigeria. However, QR Code payment is still available in South Africa.
June 2025
Added Ghana as a supported country for the Dedicated Virtual Account (DVA) payment channel.
Added Cote d'Ivoire Mobile Money payment channels. Merchants can now get paid via card, MTN Mobile Money, Orange Money and Wave in Cote d'Ivoire.
April 2025
Published the new Flutter SDK to the Developer Tools section. The new SDK allows you to securely collect card payments on your Flutter apps.
March 2025
Nigerian merchants now have Inbound Transfer Approvals, which helps them approve or reject inbound transfers to Paystack-Titan virtual accounts. This works with both Pay with Transfer (PwT) and Dedicated Virtual Account (DVA) transactions.
February 2025
Added Virtual Terminal to the docs as well as the Virtual TerminalAPI to the API reference.
December 2024
Added M-Pesa Paybill (MPPAYBILL
) and M-Pesa Till (MPTILL
) for mobile money Transfers in Kenya. This is in addition to the existing support for M-Pesa mobile numbers.
November 2024
Added a new parameter
update_existing_subscription
, to the Update PlanAPI endpoint. This parameter allows you to determine whether to change existing subscriptions or keep them as they are. Setting this parameter totrue
updates all the existing subscriptions with the new details.Added the
supported_bank_providers
parameter that allows you to specify the banks you want in the Pay with Bank channel.
May 2024
Published the new Android and iOS SDKs with their guides. The new SDKs come with improved performance and support for 3D Secure 2.0. The SDKs allow you to securely collect card payments on your mobile apps.
February 2024
Added new request and response parameter to the List BankAPI endpoint for South African merchants.
You can now add the
enabled_for_verification
query param to the List BankAPI endpoint to filter banks that are supported for account verification in South Africa. You need to combine it with either thecurrency
orcountry
filter.The response returned contains a
supported_types
parameter that indicates the type(s) of account that can be verified.
January 2024
We added
scan-to-pay
as a QR provider for the Charge endpoint. This is in line with MasterPass rebranding to Scan to Pay. We still supportmasterpass
, but we recommend usingscan-to-pay
, particularly for merchants currently usingmasterpass
.We added a new endpoint for deactivating authorizations. Previously, the Deactivate AuthorizationAPI endpoint had its path pointing to
/customer/deactivate_authorization
. The new endpoint now points to/customer/authorization/deactivate
.Both endpoints achieve the same purpose but we recommend switching to the
/customer/authorization/deactivate
if you've previously integrated the/customer/deactivate_authorization
.
November 2023
We added two endpoints to CustomerAPI endpoint.
Initialize Authorization: The Initialize AuthorizationAPI endpoint allows you create a reusable authorization for recurring payment. At the moment, the endpoint only supports direct debit.
Verify Authorization: The Verify AuthorizationAPI endpoint allows you to verify the status of the authorization you created using the Initialize AuthorizationAPI endpoint.
October 2023
The Initiate Bulk ChargeAPI endpoint now allows you to use the same authorization code more than once as long as each code comes with a unique reference. We still return a 400
error if you pass duplicate authorization codes without unique references.
September 2023
We added the Pay with Transfer (PwT) channel to the Create ChargeAPI endpoint. You can now tie an account number to a transaction for a limited period, allowing your customers to complete a transaction from their banking apps. The changes made are:
The Create ChargeAPI endpoint now takes a
bank_transfer
object that allows you set the configuration for the account to create. You can learn more on the Pay with Transfer section.We added a
bank.transfer.rejected
event which is sent when a customer sends an incorrect amount or when the customer has been flagged by our fraud system
August 2023
We added ghipss
as a supported recipient type to the transfer recipientAPI endpoint. With this addition, Ghanaian merchants can now send money to bank accounts by creating recipients with their customer's bank details.
April 2023
We now return transfer references for bulk transfers. Previously, the response of the Bulk TransferAPI request didn't come with either your custom or our generated reference
. We've fixed this, making it easier for you to track your transfers.
March 2023
In order to remain compliant with our product offerings, we sunsetted one of our legacy integration rails that has no support for 3DS 2.0. The check authorization endpoint is powered by this rail and as a result, we deprecated the endpoint.
June 2022
We now make use of an unsigned 64-bit integer to represent transaction IDs. Merchants who store or make use of the transaction IDs need to ensure it is represented as an unsigned 64-bit integer. Here are some recommendations for some common tech stacks:
Tech Stack | Data Type | Reference |
---|---|---|
MySQL | unsigned bigint | MySQL doc |
PostgreSQL | bigint | PostgreSQL doc |
Java | long | Oracle doc |
C# | unsigned long | Microsoft doc |
C/C++ | unsigned long long | Microsoft doc |
Golang | uint64 | Golang doc |
Kotlin | ulong | Kotlin doc |
Swift | uint64 | Swift doc |
We also made some changes to the Customer ValidationAPI:
We added a
reason
parameter to thecustomeridentification.failed
webhook event. Merchants can use this parameter to find out the cause of a failed customer validation.We added
middle_name
as an optional parameter to the Customer ValidationAPI. You can add this as an extra parameter when validating a customer's details.
May 2022
We added an endpoint to Requery Dedicated Virtual AccountsAPI. Merchants can use this endpoint to check a virtual account for new transactions that haven't been processed yet. Calling this endpoint will trigger a background requery process, and if any pending transactions are found, the transaction will be created, and the webhook notification will be sent to your server.
February 2022
We added first_name
, last_name
and phone
to the request body of the Create Dedicated Virtual AccountAPI. Merchants can use these parameters to update an existing customer's record and create a dedicated virtual account in one API call.
December 2021
We updated the statuses of refunds to better capture the state of a refund:
pending
: The refund initiated, waiting for response from the processor.processing
: The refund has been received by the processor.processed
: The refund has successfully been processed by the processor.failed
: The refund cannot be processed. Your account is credited with refund amount.
When a refund is initiated for a transaction, the transaction's status previously showed reversed
regardless of whether the refund had been processed. We're now better reflecting the status of a transaction with the following:
reversal pending
: The refund is pending or still processing.reversed
: The refund has been successfully processed.success
: The refund failed and your account is credited with the refund amount.
We now send webhook events to monitor the state of a refund:
- refund.pending
- refund.processing
- refund.processed
- refund.failed
Check out the Refunds documentation to learn more about refunds and how to automate your refunds.
November 2021
We added three new statuses to the SubscriptionAPI:
non-renewing
: The subscription is still active but won't be charged on the next payment date and will be marked as completed.attention
: The subscription is still active, but there was an issue while trying to charge the customer's card. The issue can be an expired card, insufficient funds, etc. We'll attempt charging the card again on the next payment date.cancelled
: The subscription has been cancelled.
Check the list of subscriptions statuses to learn more.
October 2021
We deprecated support for BVN type on the Customer ValidationAPI. Going forward, we advise against using the type: "bvn"
and value
parameter in the request body in favour of Bank Account validation for existing and new customers.
September 2021
We added account_number
to the request body of the Customer ValidationAPI. This will require merchants to make use of Bank Account validation for existing and new customers.