fin/generalLedger/import for journals). Using the wrong path causes silent failures.Oracle FBDI is a built-in bulk data import framework within Oracle Fusion Cloud ERP (formerly Oracle Cloud Applications). It spans all major modules -- Financials, Procurement, Supply Chain Management, Project Management, and HCM. FBDI uses pre-built Excel (XLSM) templates that contain macros to generate properly formatted CSV files, which are then packaged into ZIP archives and uploaded to Oracle Universal Content Management (UCM) for processing by Enterprise Scheduler Service (ESS) jobs. This card covers FBDI across all Oracle Fusion Cloud ERP modules, focusing on the Financials and Procurement templates. It does NOT cover ADFdi (ADF Desktop Integrator) or Oracle Data Management Framework (HCM bulk loads).
| Property | Value |
|---|---|
| Vendor | Oracle |
| System | Oracle Fusion Cloud ERP, Release 25D / 26A |
| API Surface | File-based (FBDI), SOAP (ErpIntegrationService), REST (ERP Integration API) |
| Current Release | 26A (January 2026); quarterly update cycle |
| Editions Covered | Enterprise (all Oracle Fusion Cloud ERP editions include FBDI) |
| Deployment | Cloud (Oracle-managed SaaS) |
| API Docs | FBDI for Financials (25D) |
| Status | GA (Generally Available) |
Oracle Fusion Cloud ERP provides three primary inbound data integration surfaces. FBDI is the file-based bulk option.
| API Surface | Protocol | Best For | Max Records/Request | Rate Limit | Real-time? | Bulk? |
|---|---|---|---|---|---|---|
| FBDI (File-Based Data Import) | File upload (CSV in ZIP) | Data migration, batch loads | Hundreds of thousands per file | ESS concurrency | No | Yes |
| ErpIntegrationService (SOAP) | HTTPS/XML | Automating FBDI uploads | Same as FBDI | ESS job queue | No | Yes |
| ERP Integration REST API | HTTPS/JSON | Automating FBDI from OIC/middleware | Same as FBDI | ESS job queue | No | Yes |
| Oracle REST API (CRUD) | HTTPS/JSON | Individual record operations | 500 records/payload | Throttled per tenant | Yes | No |
| Oracle SOAP API | HTTPS/XML | Legacy integrations | Varies by service | Throttled per tenant | Yes | No |
| Business Events (outbound) | REST callback | Event-driven notifications | N/A (push-based) | Event queue limits | Yes | N/A |
| Limit Type | Value | Applies To | Notes |
|---|---|---|---|
| Max recommended ZIP file size | 250 MB | FBDI upload to UCM | Split larger data sets into multiple files |
| Max CSV rows per file | No hard limit | FBDI CSV files | Practical limit ~500K rows before ESS timeout |
| Base64 payload size (API) | ~333 MB (250 MB * 4/3) | ErpIntegrationService importBulkData | Base64 encoding increases payload by ~33% |
| Max concurrent ESS jobs | Tenant-dependent (typically 8-16) | Enterprise Scheduler Service | Shared across all scheduled processes |
| UCM file retention | Configurable (default 30 days) | UCM content server | Auto-purge; download error logs before purge |
| Limit Type | Value | Window | Edition Differences |
|---|---|---|---|
| ESS job queue depth | Tenant-dependent | Rolling | Higher-tier tenants get more concurrent slots |
| FBDI imports per module | No explicit daily limit | N/A | Constrained by ESS concurrency and processing time |
| API calls (REST/SOAP) | Throttled per tenant | Per minute | Fair-use throttling; no published hard number |
| UCM storage | Included in subscription | N/A | Auto-purge configurable |
| Flow | Use When | Token Lifetime | Refresh? | Notes |
|---|---|---|---|---|
| Oracle ERP Cloud UI (SSO) | Manual FBDI uploads via browser | Session-based | N/A | Navigate to Tools > File Import and Export |
| Basic Auth (SOAP) | ErpIntegrationService API calls | Per request | No | Not recommended for production |
| OAuth 2.0 (JWT) | Automated FBDI via OIC or middleware | Configurable | Yes | Recommended for server-to-server |
| OAuth 2.0 (Client Credentials) | System-to-system automation | Configurable | Yes | Requires Oracle IDCS or OCI IAM |
| SAML 2.0 | Federated SSO for UI uploads | Session-based | N/A | For identity federation |
START -- User needs to bulk-import data into Oracle Fusion Cloud ERP
+-- Is this real-time (<1s)?
| +-- YES --> STOP. FBDI is batch-only. Use Oracle REST API or SOAP API instead.
| +-- NO --> Continue
+-- What's the data volume?
| +-- < 100 records --> Consider REST API (simpler, no file handling)
| +-- 100-500,000 records --> FBDI sweet spot (single file, single ESS job)
| +-- > 500,000 records --> Split into multiple FBDI files (<= 250 MB each)
+-- One-time or recurring?
| +-- One-time migration --> Manual FBDI (template + UI upload)
| +-- Recurring --> Automate with ErpIntegrationService or OIC
+-- Which module?
| +-- GL --> Journal Import (fin/generalLedger/import)
| +-- AP --> Invoice Import (fin/payables/import)
| +-- AR --> AutoInvoice (fin/receivables/import)
| +-- Procurement --> Supplier/PO Import
| +-- Assets --> Mass Additions (fin/assets/import)
| +-- SCM --> Item/Inventory Import
+-- Error tolerance?
+-- Zero-loss --> Pre-validate + check ESS logs + resubmit failures
+-- Best-effort --> Upload, check summary counts only
| Module | Template Name | UCM Account Path | Interface Table | ESS Job Name |
|---|---|---|---|---|
| General Ledger | Journal Import | fin/generalLedger/import | GL_INTERFACE | Import Journals |
| Accounts Payable | Payables Standard Invoice Import | fin/payables/import | AP_INVOICES_INTERFACE | Import Payables Invoices |
| Accounts Receivable | AutoInvoice Import | fin/receivables/import | RA_INTERFACE_LINES_ALL | AutoInvoice Import |
| Fixed Assets | Mass Additions Import | fin/assets/import | FA_MASS_ADDITIONS | Post Mass Additions |
| Cash Management | Bank Statement Import | fin/cashManagement/import | CE_STATEMENT_HEADERS_INT | Load and Import Bank Statements |
| Procurement | Supplier Import | prc/supplier/import | POZ_SUPPLIERS_INT | Import Suppliers |
| Procurement | Purchase Order Import | prc/PurchaseOrder/import | PO_HEADERS_INTERFACE | Import Purchase Orders |
| Budgetary Control | Budget Import | fin/budgetaryControl/import | GL_BUDGET_INTERFACE | Load Budgets |
| SCM | Item Import | scm/item/import | EGP_SYSTEM_ITEMS_INTERFACE | Import Items |
| SCM | Inventory Transactions | scm/inventory/import | MTL_TRANSACTIONS_INTERFACE | Process Inventory Transactions |
| Project Management | Project Import | prj/ProjectManagement/import | PJF_PROJECTS_INTERFACE | Import Projects |
| Intercompany | Intercompany Transaction Import | fin/intercompany/import | FUN_INTERFACE_HEADERS | Import Intercompany Transactions |
| Component | Format | Description |
|---|---|---|
| XLSM Template | Excel with macros | Pre-built by Oracle; contains Instructions tab + data entry tab(s) |
| CSV File(s) | Comma-separated values | Generated by XLSM macro; one CSV per interface table |
| ZIP Archive | ZIP compression | Contains one or more CSV files; uploaded to UCM |
| Properties File (API) | Key-value pairs | Contains JobName and ParameterList for automation |
Navigate to Oracle documentation or My Oracle Support to download the XLSM template for your specific import type. [src1]
# Navigate in Oracle ERP Cloud UI:
# Navigator > Tools > File Import and Export
# OR download from Oracle docs for your release
Verify: Open XLSM in Excel -- confirm "Instructions and CSV Generation" tab with "Generate CSV File" button.
Fill in the data entry tab(s) with your source data. Mandatory columns vary by template. [src4]
# Journal Import (GL_INTERFACE) mandatory columns:
# STATUS = "NEW", LEDGER_ID, ACCOUNTING_DATE (YYYY/MM/DD),
# USER_JE_SOURCE_NAME, USER_JE_CATEGORY_NAME, CURRENCY_CODE,
# ENTERED_DR or ENTERED_CR, SEGMENT1..SEGMENTn
Verify: Row count matches source. Debits and credits balance.
Click "Generate CSV File" on the Instructions tab. This macro creates a ZIP with correctly named CSVs. [src1]
# In Excel (macros enabled):
# 1. Go to "Instructions and CSV Generation" tab
# 2. Click "Generate CSV File"
# 3. Save the generated ZIP (e.g., JournalImport.zip)
Verify: Unzip and confirm CSV filenames match expected names.
Upload via File Import and Export tool with the correct UCM account path. [src4]
# Navigator > Tools > File Import and Export > Upload
# Select correct Account:
# GL Journals: fin/generalLedger/import
# AP Invoices: fin/payables/import
# Suppliers: prc/supplier/import
Verify: File appears with "Uploaded" status. Document ID is generated.
Submit the ESS job to load CSV data into interface tables. [src4]
# Tools > Scheduled Processes > Schedule New Process
# Search: "Load Interface File for Import"
# Select Import Process + Data File
# Click "Submit"
Verify: ESS job shows "Succeeded". Check log for record counts.
Move data from interface tables to transaction tables. [src4]
# For GL: search "Import Journals"
# For AP: search "Import Payables Invoices"
# For Suppliers: search "Import Suppliers"
# Set module-specific parameters, then Submit
Verify: ESS job "Succeeded" or "Warning". Check output for imported/rejected counts.
Download ESS logs and query interface tables for rejected records. [src3]
# Download Log + Output files from completed ESS job
# Query interface tables BEFORE purge:
# GL: SELECT * FROM GL_INTERFACE WHERE STATUS = 'E'
# AP: SELECT * FROM AP_INTERFACE_REJECTIONS
Verify: Error count is zero or all errors are corrected and resubmitted.
# Input: CSV ZIP file, Oracle ERP Cloud credentials, job parameters
# Output: ESS job request ID for tracking import status
import requests
import base64
ERP_BASE_URL = "https://your-instance.fa.us6.oraclecloud.com"
USERNAME = "integration_user"
PASSWORD = "integration_password"
with open("JournalImport.zip", "rb") as f:
file_content = base64.b64encode(f.read()).decode("utf-8")
payload = {
"OperationName": "importBulkData",
"DocumentContent": file_content,
"ContentType": "zip",
"FileName": "JournalImport.zip",
"JobName": "/oracle/apps/ess/financials/generalLedger/programs/JournalImportLauncher",
"ParameterList": "1001,2026-03-09,ALL,N,N,N",
"JobOptions": "ExtractFileType=ALL,InterfaceDetails=2"
}
response = requests.post(
f"{ERP_BASE_URL}/fscmRestApi/resources/latest/erpintegrations",
json=payload,
auth=(USERNAME, PASSWORD),
headers={"Content-Type": "application/json"},
timeout=300
)
if response.status_code == 201:
result = response.json()
print(f"Import submitted. ESS Request ID: {result.get('ReqstId')}")
else:
print(f"Error {response.status_code}: {response.text}")
// Input: CSV ZIP file path, Oracle ERP Cloud credentials
// Output: ESS job request ID
const fs = require('fs');
const https = require('https');
const ERP_HOST = 'your-instance.fa.us6.oraclecloud.com';
const base64Content = fs.readFileSync('JournalImport.zip').toString('base64');
const soapEnvelope = `<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:typ="http://xmlns.oracle.com/apps/financials/commonModules/shared/model/erpIntegrationService/types/">
<soapenv:Body>
<typ:importBulkData>
<typ:document>
<typ:Content>${base64Content}</typ:Content>
<typ:FileName>JournalImport.zip</typ:FileName>
<typ:ContentType>zip</typ:ContentType>
</typ:document>
<typ:jobName>/oracle/apps/ess/financials/generalLedger/programs/JournalImportLauncher</typ:jobName>
<typ:parameterList>1001,2026-03-09,ALL,N,N,N</typ:parameterList>
<typ:jobOptions>ExtractFileType=ALL,InterfaceDetails=2</typ:jobOptions>
</typ:importBulkData>
</soapenv:Body>
</soapenv:Envelope>`;
const auth = Buffer.from('username:password').toString('base64');
const req = https.request({
hostname: ERP_HOST,
path: '/fscmService/ErpIntegrationService',
method: 'POST',
headers: {
'Content-Type': 'text/xml;charset=UTF-8',
'Authorization': `Basic ${auth}`,
'SOAPAction': 'importBulkData'
}
}, (res) => {
let data = '';
res.on('data', (chunk) => { data += chunk; });
res.on('end', () => console.log('Response:', data));
});
req.write(soapEnvelope);
req.end();
# Step 1: Upload FBDI file and trigger import
curl -s -X POST \
"https://YOUR_INSTANCE.fa.us6.oraclecloud.com/fscmRestApi/resources/latest/erpintegrations" \
-u "username:password" \
-H "Content-Type: application/json" \
-d '{"OperationName":"importBulkData","DocumentContent":"BASE64_CONTENT","ContentType":"zip","FileName":"JournalImport.zip","JobName":"/oracle/apps/ess/financials/generalLedger/programs/JournalImportLauncher","ParameterList":"1001,2026-03-09,ALL,N,N,N","JobOptions":"ExtractFileType=ALL,InterfaceDetails=2"}'
# Step 2: Check ESS job status
curl -s -X GET \
"https://YOUR_INSTANCE.fa.us6.oraclecloud.com/fscmRestApi/resources/latest/erpintegrations?finder=ESSJobStatusRF;requestId=12345678" \
-u "username:password" -H "Accept: application/json"
| Template | CSV Column | Interface Table Column | Type | Required | Gotcha |
|---|---|---|---|---|---|
| Journal Import | STATUS | GL_INTERFACE.STATUS | VARCHAR2 | Yes | Must be "NEW" |
| Journal Import | LEDGER_ID | GL_INTERFACE.LEDGER_ID | NUMBER | Yes | Numeric ID, not ledger name |
| Journal Import | ACCOUNTING_DATE | GL_INTERFACE.ACCOUNTING_DATE | DATE | Yes | Format: YYYY/MM/DD |
| Journal Import | ENTERED_DR / ENTERED_CR | GL_INTERFACE.ENTERED_DR/CR | NUMBER | Yes | One per line, not both |
| AP Invoice | INVOICE_NUM | AP_INVOICES_INTERFACE.INVOICE_NUM | VARCHAR2 | Yes | Unique per supplier per year |
| AP Invoice | INVOICE_AMOUNT | AP_INVOICES_INTERFACE.INVOICE_AMOUNT | NUMBER | Yes | Must equal sum of line amounts |
| Supplier | VENDOR_NAME | POZ_SUPPLIERS_INT.VENDOR_NAME | VARCHAR2 | Yes | Must be unique in system |
YYYY/MM/DD (forward slashes), NOT YYYY-MM-DD. [src4].) as decimal separator regardless of locale. European comma-decimal formats fail. [src3]001 differs from 1. [src4]| Error / Status | Meaning | Cause | Resolution |
|---|---|---|---|
| ESS Status: ERROR | Import job failed entirely | Invalid format, wrong UCM path, parameter mismatch | Check ESS log; verify ZIP structure and UCM path |
| ESS Status: WARNING | Partial import success | Some records rejected validation | Download output; correct and resubmit rejected records |
| GL_INTERFACE.STATUS = 'E' | Journal line rejected | Invalid account, closed period, unbalanced entry | Query GL_INTERFACE for error details |
| AP_INTERFACE_REJECTIONS | Invoice line rejected | Invalid supplier, missing fields, duplicate invoice | Query rejection table for reason codes |
| UCM upload returns 0 | File upload to UCM failed | Wrong path, too large, permission issue | Verify UCM path and integration user roles |
| ReqstId=0 from importBulkData | ErpIntegrationService failed | UCM upload failure within service call | Check permissions, verify Base64 encoding |
| "No data found" in child job | CSV not found in ZIP | CSV filenames don't match expected names | Regenerate ZIP using XLSM macro |
| INVALID_ACCOUNTING_PERIOD | Period not open | Accounting date in closed period | Open the period or change date |
Create a lookup table mapping each template to its exact UCM path. [src4]Always use XLSM macro or match exact Oracle filenames. [src3]Download ESS output files immediately after job completion. [src4]Use standard RFC 4648 Base64 without line breaks. [src5]Throttle to 2-3 concurrent FBDI jobs per module. [src6]Set UTF-8 encoding in programmatic CSV generation. [src3]# BAD -- creating ZIP manually with arbitrary CSV filenames
zip manual_upload.zip my_journals.csv
# ESS job says "No data found" -- filename doesn't match Oracle's format
# GOOD -- use official template or match exact filenames:
# GL Journals: GlInterface.csv
# AP Invoices: ApInvoicesInterface.csv + ApInvoiceLinesInterface.csv
# Suppliers: PozSuppliersInt.csv + PozSupplierSitesInt.csv
# BAD -- submitting 5 journal imports simultaneously
for f in files:
threading.Thread(target=submit_fbdi, args=(f,)).start()
# Result: interface table locking, data corruption
# GOOD -- sequential within module, parallel across modules
threading.Thread(target=import_sequential, args=(gl_files, "GL")).start()
threading.Thread(target=import_sequential, args=(ap_files, "AP")).start()
# GL and AP use different interface tables -- no locking
# BAD -- blindly uploading without pre-validation
generate_csv(raw_data)
upload_and_import()
# Result: 30% rejection rate, hours of debugging
# GOOD -- validate accounts, periods, amounts before CSV generation
errors = validate_all_rows(data)
if not errors:
generate_csv(data)
upload_and_import()
else:
report_errors(errors)
Explicitly format dates with forward slashes. [src4]Hardcode STATUS = 'NEW' as first column. [src4]Split into 50K-100K record files; submit sequentially. [src6]Always set GROUP_ID to a unique batch identifier. [src4]Automate ESS log download immediately after job completion. [src4]Always download the template for your specific release (25D vs 26A). [src1]# Check FBDI import ESS job status via REST API
curl -s -X GET \
"https://YOUR_INSTANCE.fa.us6.oraclecloud.com/fscmRestApi/resources/latest/erpintegrations?finder=ESSJobStatusRF;requestId=YOUR_REQUEST_ID" \
-u "username:password" -H "Accept: application/json"
# Download ESS job execution details (log + output)
curl -s -X POST \
"https://YOUR_INSTANCE.fa.us6.oraclecloud.com/fscmRestApi/resources/latest/erpintegrations" \
-u "username:password" -H "Content-Type: application/json" \
-d '{"OperationName":"downloadESSJobExecutionDetails","ReqstId":"YOUR_REQUEST_ID","FileType":"all"}'
# Verify ErpIntegrationService WSDL accessibility
curl -s -o /dev/null -w "%{http_code}" \
"https://YOUR_INSTANCE.fa.us6.oraclecloud.com/fscmService/ErpIntegrationService?WSDL" \
-u "username:password"
# Expected: 200
# SQL queries for interface table errors (run before purge):
# GL: SELECT * FROM GL_INTERFACE WHERE STATUS = 'E' AND GROUP_ID = :id
# AP: SELECT * FROM AP_INTERFACE_REJECTIONS WHERE PARENT_TABLE = 'AP_INVOICES_INTERFACE'
| Release | Date | Status | Key Changes | Notes |
|---|---|---|---|---|
| 26A | 2026-01 | Current | New procurement FBDI templates; sustainability activity import | Quarterly update |
| 25D | 2025-10 | Supported | Enhanced error reporting in ESS output | -- |
| 25C | 2025-07 | Supported | New bank statement reconciliation template | -- |
| 25B | 2025-04 | Supported | Performance improvements for large-volume imports | -- |
| 25A | 2025-01 | Supported | ERP Integration REST API enhancements | -- |
| 24D | 2024-10 | Supported | Additional SCM FBDI templates | -- |
| Use When | Don't Use When | Use Instead |
|---|---|---|
| Bulk data migration (1K-1M+ records) | Real-time operations (<1s latency) | Oracle REST API |
| Periodic batch interfaces (daily journals, weekly syncs) | Small-volume individual operations (<100 records) | Oracle REST API or SOAP API |
| Data volumes exceed REST limits (>500 records/payload) | Outbound data extraction | BI Publisher, OTBI, REST API queries |
| Module requires FBDI (no REST equivalent) | Real-time event notifications | Oracle Business Events + webhooks |
| One-time setup data loads (CoA, opening balances) | Continuous bidirectional sync | Oracle Integration Cloud with CDC |
| Budget imports and period-end adjustments | Ad-hoc queries or lookups | Oracle REST API or BI Publisher |