Account Migration - Yes Bank Moratorium

Update your setup to work with our new banking partners.


temporarily disabled Customer Identifiers from March 6-18, 2020. Razorpay onboarded a new partner bank and issued same Customer Identifier numbers with updated IFSC RATN0VAAPIS. Customers needed to use same account number but switch IFSC. Post-moratorium, pre-March 6, 2020 Customer Identifiers appear with updated IFSC, it would now appear as shown below:

Yes Bank Moratorium

Your customers can make payments using the account number and either of the IFSCs:

  • RATN0VAAPIS
  • YESB0CMSNOC

New Customer Identifiers

Post March 6, 2020, IFSC for all newly issued Customer Identifiers will be RATN0VAAPIS.

Your Customer Identifier integration will likely work in one of the following ways:

  • By mapping your customers/orders to Razorpay Customer Identifier IDs.
  • By mapping your customers/orders to Razorpay customer IDs.
  • By mapping your customers/orders to Customer Identifiers.
  • By mapping your customers/orders to your own reference identifiers, which you passed in the notes array of your Customer Identifier creation request.

In each of these cases, the Razorpay virtual_account.credited webhook is responsible for informing your server about which order to fulfill. Once migrated, the sample payload will change.

{
"entity": "event",
"account_id": "acc_BFQ7uQEaa7j2z7",
"event": "virtual_account.credited",
"contains": [
"payment",
"virtual_account",
"bank_transfer"
],
"payload": {
"payment": {
"entity": {
"id": "pay_DETA2KrOlhqQzF",
"entity": "payment",
"amount": 61900,
"currency": "INR",
"status": "captured",
"order_id": null,
"invoice_id": null,
"international": false,
"method": "bank_transfer",
"amount_refunded": 0,
"amount_transferred": 0,
"refund_status": null,
"captured": true,
"description": "NA",
"card_id": null,
"bank": null,
"wallet": null,
"vpa": null,
"email": "gaurav.kumar@example.com",
"contact": "+919000090000",
"customer_id": "cust_BtQNqzmBlAXyTY",
"notes": [],
"fee": 731,
"tax": 112,
"error_code": null,
"error_description": null,
"created_at": 1567675983
}
},
"virtual_account": {
"entity": {
"id": "va_DET8z3wBxfPB5L",
"name": "Acme Corp",
"entity": "virtual_account",
"status": "active",
"description": "Virtual Account to test webhook",
"amount_expected": null,
"notes": {
"internal_order_id": "12345"
},
"amount_paid": 0,
"customer_id": "cust_BtQNqzmBlAXyTY",
"receivers": [
{
"id": "ba_DET8z5Z5ghv4hW",
"entity": "bank_account",
"ifsc": "YESB0CMSN5C",
"bank_name": "Yes Bank",
"name": "Acme Corp",
"notes": [],
"account_number": "2223330012341234"
}
],
"close_by": null,
"closed_at": null,
"created_at": 1567675923
}
},
"bank_transfer": {
"entity": {
"id": "bt_DETA2KSUJ3uCM9",
"entity": "bank_transfer",
"payment_id": "pay_DETA2KrOlhqQzF",
"mode": "NEFT",
"bank_reference": "156767598340",
"amount": 61900,
"payer_bank_account": {
"id": "ba_DETA2UuuKtKLR1",
"entity": "bank_account",
"ifsc": "KKBK0000007",
"bank_name": "Kotak Mahindra Bank",
"name": "Saurav Kumar",
"account_number": "765432123456789"
},
"virtual_account_id": "va_DET8z3wBxfPB5L"
}
}
},
"created_at": 1567675983
}

The webhook payload for the migrated Customer Identifiers will look like this.

{
"entity": "event",
"account_id": "acc_BFQ7uQEaa7j2z7",
"event": "virtual_account.credited",
"contains": [
"payment",
"virtual_account",
"bank_transfer"
],
"payload": {
"payment": {
"entity": {
"id": "pay_DETA2KrOlhqQzF",
"entity": "payment",
"amount": 61900,
"currency": "INR",
"status": "captured",
"order_id": null,
"invoice_id": null,
"international": false,
"method": "bank_transfer",
"amount_refunded": 0,
"amount_transferred": 0,
"refund_status": null,
"captured": true,
"description": "NA",
"card_id": null,
"bank": null,
"wallet": null,
"vpa": null,
"email": "gaurav.kumar@example.com",
"contact": "+919000090000",
"customer_id": "cust_BtQNqzmBlAXyTY",
"notes": [],
"fee": 731,
"tax": 112,
"error_code": null,
"error_description": null,
"created_at": 1567675983
}
},
"virtual_account": {
"entity": {
"id": "va_DET8z3wBxfPB5L",
"name": "Acme Corp",
"entity": "virtual_account",
"status": "active",
"description": "Virtual Account to test webhook",
"amount_expected": null,
"notes": {
"internal_order_id": "12345"
},
"amount_paid": 0,
"customer_id": "cust_BtQNqzmBlAXyTY",
"receivers": [
{
"id": "ba_DET8z5Z5ghv4hW",
"entity": "bank_account",
"ifsc": "YESB0CMSN5C",
"bank_name": "Yes Bank",
"name": "Acme Corp",
"notes": [],
"account_number": "2223330012341234"
},
{
"id": "ba_EPf3KwRHCgEnum",
"entity": "bank_account",
"ifsc": "RATN0VAAPIS",
"bank_name": "RBL Bank",
"name": "Acme Corp",
"notes": [],
"account_number": "2223330012341234"
}
],
"close_by": null,
"closed_at": null,
"created_at": 1567675923
}
},
"bank_transfer": {
"entity": {
"id": "bt_DETA2KSUJ3uCM9",
"entity": "bank_transfer",
"payment_id": "pay_DETA2KrOlhqQzF",
"mode": "NEFT",
"bank_reference": "156767598340",
"amount": 61900,
"payer_bank_account": {
"id": "ba_DETA2UuuKtKLR1",
"entity": "bank_account",
"ifsc": "KKBK0000007",
"bank_name": "Kotak Mahindra Bank",
"name": "Saurav Kumar",
"account_number": "765432123456789"
},
"virtual_account_id": "va_DET8z3wBxfPB5L"
}
}
},
"created_at": 1567675983
}

As you can see, while a new bank account receiver block has been added to the receivers array of the Customer Identifier, all considered reconciliation IDs are still present in the Razorpay webhook, in the same location.

Notably, since the old receiver is still a part of the webhook, your server will still be correctly notified of the Customer Identifier that received the payment, and of the order on your end that needs to be fulfilled.

This means as long as your integration uses one of the 4 considered identifiers for payment reconciliation, it does not require any changes.


Was this page helpful?