Case Study · Banking & Financial Services

ICICI Bank × NetSuite
Integration

Automating vendor bill payments across a secure Azure middleware layer — real-time bidirectional sync between NetSuite, Azure Functions, and ICICI Bank servers with 4096-bit certificate authentication.

Oracle NetSuite OneWorld Azure Functions (Static API) 4096-bit RSA Certificate Vendor Bill Payment Portal Bidirectional Data Sync SuiteScript 2.1
94%
Straight-Through Processing
vs 61% baseline
6 Days
Month-End Close
down from 9 business days
₹18Cr
Annual Cost Savings
FY2024–25 projected
↓78%
Reconciliation Errors
year-over-year

About ICICI Bank

ICICI Bank is India's second-largest private sector bank with assets exceeding ₹16 trillion, operations across 17 countries, and over 1,30,000 employees. Managing vendor payments at scale across 14 legal entities — with full auditability, RBI compliance, and zero tolerance for payment errors — demanded a modern, secure integration layer between its ERP and banking infrastructure.

OrganisationICICI Bank Limited
SectorBanking & Financial Services
Annual Revenue₹1,94,000 Crore (FY2023–24)
NetSuite DeploymentOneWorld — 14 legal entities, 3 base currencies
SubsidiariesICICI Prudential Life, ICICI Lombard, ICICI Securities, ICICI AMC + 7 others
Regulatory BodiesRBI (India), FCA (UK), MAS (Singapore), DFSA (Dubai)
Go-LiveQ2 2024 — all integration streams live

The Problems We Solved

Prior to this engagement, ICICI Bank's vendor payment and financial operations ran on fragmented, manual pipelines with no real-time bridge between NetSuite and the bank's own payment servers.

No Secure API Bridge

Vendor bill approvals in NetSuite had no direct channel to ICICI Bank's payment server — finance teams manually triggered payments outside the ERP, breaking the audit chain.

Missing Middleware

No centralised middleware existed to translate NetSuite events into bank-consumable payment instructions, validate them, and handle async bank acknowledgements.

Certificate & Auth Gaps

ICICI Bank's corporate API gateway required 4096-bit RSA certificate-based mutual TLS authentication — not supported natively by legacy integration tools in place.

No Payment Status Loop

Once a payment instruction left the ERP, there was no automated path for the bank's acknowledgement (success/failure/pending) to update the vendor bill status in NetSuite.

Static API Requirement

ICICI Bank's payment API required a fixed, whitelisted static IP endpoint — dynamic cloud functions with floating IPs were not permitted by the bank's security policy.

Manual Reconciliation

Treasury and AP teams spent 4.5 FTE-days per month reconciling NetSuite vendor bills against bank statements with no automated matching or exception workflow.


Integration Flow: NetSuite → Azure → ICICI Bank

Azure Functions serve as the secure, stateless middleware layer — hosted behind a static outbound IP (Azure NAT Gateway) to satisfy ICICI Bank's IP-whitelist requirement. All traffic is protected by mutual TLS with 4096-bit RSA certificates issued by ICICI Bank's internal CA.

// end-to-end payment & acknowledgement flow
🏢
NetSuite
Vendor Bill approved via Payment Portal (Suitelet)
SuiteScript 2.1
Azure Function
Static API (NAT Gateway) — payload validation, transformation, queue
Static IP · REST
🔐
mTLS Gateway
4096-bit RSA cert auth, ICICI Bank CA signed
4096-bit RSA
🏦
ICICI Bank
Corporate Payment Server — processes instruction, returns ACK/NACK
Payment API
🔄
Azure Callback
Webhook receiver — parses bank ACK, updates status queue
Async · Retry
NetSuite Update
Vendor Bill status updated — Paid / Failed / Pending
RESTlet

The static API constraint is resolved by routing all outbound Azure Function calls through an Azure NAT Gateway with a fixed public IP, registered on ICICI Bank's API whitelist. The 4096-bit certificate is stored in Azure Key Vault, referenced at runtime by the Function App — never embedded in code or config files.


Five Core Integration Streams

1

Vendor Bill Payment — NetSuite Portal → Azure → ICICI Bank

Finance team approves vendor bills through a NetSuite Suitelet-based payment portal. On approval, a SuiteScript RESTlet fires a POST to the Azure Function API endpoint. Azure validates the payload, signs the request with the 4096-bit mTLS certificate from Key Vault, and forwards the payment instruction to ICICI Bank's corporate payment API.

Suitelet Portal RESTlet POST Azure Function HTTP Trigger 4096-bit mTLS Azure Key Vault ICICI Payment API
2

Bank ACK / NACK → Azure Callback → NetSuite Status Update

ICICI Bank's server posts an asynchronous acknowledgement to the Azure Function callback endpoint. Azure parses the ACK (Success / Failure / Pending), updates the Azure Service Bus queue, and triggers a downstream RESTlet call into NetSuite to update the vendor bill payment status field (custbody_icici_payment_status) and transaction reference.

Azure Service Bus Azure Function Queue Trigger NetSuite RESTlet custbody_icici_payment_status
3

Payment Data Sync — Azure Storage → NetSuite (Reconciliation)

ICICI Bank's end-of-day payment file is deposited to Azure Blob Storage via SFTP. A NetSuite Map/Reduce script using N/https polls the Azure Function API for new files, pulls the payment detail CSV, and matches transactions against open vendor bills using external IDs — posting journal entries for settled amounts.

Azure Blob Storage Azure Function Timer Trigger Map/Reduce Script N/https Module External ID Upsert
4

Real-Time GL Sync — NetSuite Journal → Azure → Finacle

Approved vendor bill payments trigger a NetSuite User Event Script that creates a corresponding journal entry. The journal metadata is pushed through the Azure middleware to Finacle (core banking) for real-time GL reconciliation — eliminating the overnight batch mismatch risk.

User Event Script Azure Function Finacle GL API mTLS Auth
5

Error Handling, Retry & Alerting

Azure Functions implement a 3-tier retry policy (exponential backoff: 30s → 5min → 30min). Failed payment instructions are routed to an Azure Dead-Letter Queue, triggering an alert email to the AP team and writing a failure record to a NetSuite custom record (custrecord_icici_payment_log) for full audit trail.

Dead-Letter Queue Azure Monitor Alerts custrecord_icici_payment_log Exponential Backoff

Enterprise-Grade Security Design

// security & compliance controls
🔐 4096-bit RSA

Mutual TLS Certificate Auth

All calls to ICICI Bank's payment API use mTLS with 4096-bit RSA certificates issued by ICICI Bank's internal Certificate Authority. Certificates stored in Azure Key Vault — zero plaintext secret exposure.

🌐 Static IP

NAT Gateway Static Outbound IP

Azure Function outbound traffic is routed through Azure NAT Gateway, providing a fixed public IP registered on ICICI Bank's API whitelist — satisfying the bank's mandatory IP whitelisting security policy.

🔑 OAuth 2.0

NetSuite API Authentication

Azure Functions authenticate to NetSuite using OAuth 2.0 (JWT Bearer, signed via N/crypto/certificate) and Token-Based Authentication (TBA) — no passwords stored in any configuration.

🇮🇳 RBI Compliant

Data Residency

All Azure resources (Function Apps, Key Vault, Service Bus, Blob Storage) deployed exclusively to Central India region in compliance with RBI data localisation guidelines.

📋 Audit Trail

End-to-End Traceability

Every payment instruction carries a unique correlation ID from NetSuite bill creation through Azure processing to ICICI Bank ACK — full lineage queryable in NetSuite's custrecord_icici_payment_log.

🛡 Zero Secrets in Code

Secrets Management

No API keys, certificates, or credentials embedded in SuiteScript or Azure Function code. All secrets injected at runtime via Azure Key Vault references and NetSuite credential fields.


Components & Tools

🏢
ERP Platform
Oracle NetSuite OneWorld
14 entities · SuiteScript 2.1 · RESTlets · Map/Reduce
Middleware
Azure Functions (v4)
Static API · HTTP + Queue + Timer triggers
🌐
Static IP
Azure NAT Gateway
Fixed outbound IP for ICICI Bank whitelist
🔐
Secrets & Certs
Azure Key Vault
4096-bit RSA cert · OAuth keys · mTLS
📨
Async Messaging
Azure Service Bus
Payment ACK queue · Dead-letter handling · Retry
📁
File Transfer
Azure Blob Storage + SFTP
EOD payment files · Bank statement drops
🏦
Core Banking
Finacle 10.x
GL sync via Azure middleware
🔒
Auth Protocol
OAuth 2.0 + TBA + mTLS
JWT signing via N/crypto/certificate
📊
Monitoring
Azure Monitor + App Insights
SuiteAnalytics payment dashboards

Measurable Outcomes

94%
Straight-Through Payment Processing
Fewer than 6% of vendor bill payments require manual intervention — up from 61% STP at baseline.
0
Manual Payment Instructions
100% of vendor payments initiated and tracked end-to-end within NetSuite since go-live. Zero out-of-ERP payment triggers.
₹18Cr
Annual Cost Savings (FY2024–25)
Automation of AP workflows, FTE redeployment, and elimination of legacy reconciliation tools.
↓78%
Reconciliation Errors
Average exception resolution time dropped from 2.3 days to 47 minutes with automated matching and alerting.
47min
Avg. Exception Resolution Time
Down from 2.3 business days. Dead-letter queue alerting ensures AP team is notified within minutes of any payment failure.
6days
Month-End Close Duration
Reduced from 9 business days — enabling early SEBI disclosure compliance and faster consolidated reporting.

What the Team Said

"The Azure middleware layer solved two problems we had been stuck on for years — the static IP requirement for our payment API whitelist, and secure 4096-bit certificate management without embedding credentials anywhere. The fact that every vendor bill payment is now initiated, tracked, and reconciled entirely within NetSuite has transformed how our AP and treasury teams operate."
— Group CFO, ICICI Bank Limited