Oracle FBDI Deep Dive -- File Format, UCM Upload, Job Scheduling, Error Handling & Templates

Type: ERP Integration System: Oracle Fusion Cloud ERP (Release 25D / 26A) Confidence: 0.88 Sources: 7 Verified: 2026-03-09 Freshness: 2026-03-09

TL;DR

System Profile

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).

PropertyValue
VendorOracle
SystemOracle Fusion Cloud ERP, Release 25D / 26A
API SurfaceFile-based (FBDI), SOAP (ErpIntegrationService), REST (ERP Integration API)
Current Release26A (January 2026); quarterly update cycle
Editions CoveredEnterprise (all Oracle Fusion Cloud ERP editions include FBDI)
DeploymentCloud (Oracle-managed SaaS)
API DocsFBDI for Financials (25D)
StatusGA (Generally Available)

API Surfaces & Capabilities

Oracle Fusion Cloud ERP provides three primary inbound data integration surfaces. FBDI is the file-based bulk option.

API SurfaceProtocolBest ForMax Records/RequestRate LimitReal-time?Bulk?
FBDI (File-Based Data Import)File upload (CSV in ZIP)Data migration, batch loadsHundreds of thousands per fileESS concurrencyNoYes
ErpIntegrationService (SOAP)HTTPS/XMLAutomating FBDI uploadsSame as FBDIESS job queueNoYes
ERP Integration REST APIHTTPS/JSONAutomating FBDI from OIC/middlewareSame as FBDIESS job queueNoYes
Oracle REST API (CRUD)HTTPS/JSONIndividual record operations500 records/payloadThrottled per tenantYesNo
Oracle SOAP APIHTTPS/XMLLegacy integrationsVaries by serviceThrottled per tenantYesNo
Business Events (outbound)REST callbackEvent-driven notificationsN/A (push-based)Event queue limitsYesN/A

Rate Limits & Quotas

Per-Request Limits

Limit TypeValueApplies ToNotes
Max recommended ZIP file size250 MBFBDI upload to UCMSplit larger data sets into multiple files
Max CSV rows per fileNo hard limitFBDI CSV filesPractical limit ~500K rows before ESS timeout
Base64 payload size (API)~333 MB (250 MB * 4/3)ErpIntegrationService importBulkDataBase64 encoding increases payload by ~33%
Max concurrent ESS jobsTenant-dependent (typically 8-16)Enterprise Scheduler ServiceShared across all scheduled processes
UCM file retentionConfigurable (default 30 days)UCM content serverAuto-purge; download error logs before purge

Rolling / Daily Limits

Limit TypeValueWindowEdition Differences
ESS job queue depthTenant-dependentRollingHigher-tier tenants get more concurrent slots
FBDI imports per moduleNo explicit daily limitN/AConstrained by ESS concurrency and processing time
API calls (REST/SOAP)Throttled per tenantPer minuteFair-use throttling; no published hard number
UCM storageIncluded in subscriptionN/AAuto-purge configurable

Authentication

FlowUse WhenToken LifetimeRefresh?Notes
Oracle ERP Cloud UI (SSO)Manual FBDI uploads via browserSession-basedN/ANavigate to Tools > File Import and Export
Basic Auth (SOAP)ErpIntegrationService API callsPer requestNoNot recommended for production
OAuth 2.0 (JWT)Automated FBDI via OIC or middlewareConfigurableYesRecommended for server-to-server
OAuth 2.0 (Client Credentials)System-to-system automationConfigurableYesRequires Oracle IDCS or OCI IAM
SAML 2.0Federated SSO for UI uploadsSession-basedN/AFor identity federation

Authentication Gotchas

Constraints

Integration Pattern Decision Tree

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

Quick Reference

Most Common FBDI Templates by Module

ModuleTemplate NameUCM Account PathInterface TableESS Job Name
General LedgerJournal Importfin/generalLedger/importGL_INTERFACEImport Journals
Accounts PayablePayables Standard Invoice Importfin/payables/importAP_INVOICES_INTERFACEImport Payables Invoices
Accounts ReceivableAutoInvoice Importfin/receivables/importRA_INTERFACE_LINES_ALLAutoInvoice Import
Fixed AssetsMass Additions Importfin/assets/importFA_MASS_ADDITIONSPost Mass Additions
Cash ManagementBank Statement Importfin/cashManagement/importCE_STATEMENT_HEADERS_INTLoad and Import Bank Statements
ProcurementSupplier Importprc/supplier/importPOZ_SUPPLIERS_INTImport Suppliers
ProcurementPurchase Order Importprc/PurchaseOrder/importPO_HEADERS_INTERFACEImport Purchase Orders
Budgetary ControlBudget Importfin/budgetaryControl/importGL_BUDGET_INTERFACELoad Budgets
SCMItem Importscm/item/importEGP_SYSTEM_ITEMS_INTERFACEImport Items
SCMInventory Transactionsscm/inventory/importMTL_TRANSACTIONS_INTERFACEProcess Inventory Transactions
Project ManagementProject Importprj/ProjectManagement/importPJF_PROJECTS_INTERFACEImport Projects
IntercompanyIntercompany Transaction Importfin/intercompany/importFUN_INTERFACE_HEADERSImport Intercompany Transactions

FBDI File Structure

ComponentFormatDescription
XLSM TemplateExcel with macrosPre-built by Oracle; contains Instructions tab + data entry tab(s)
CSV File(s)Comma-separated valuesGenerated by XLSM macro; one CSV per interface table
ZIP ArchiveZIP compressionContains one or more CSV files; uploaded to UCM
Properties File (API)Key-value pairsContains JobName and ParameterList for automation

Step-by-Step Integration Guide

1. Download the correct FBDI template

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.

2. Populate the template with source data

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.

3. Generate the CSV ZIP file

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.

4. Upload the ZIP file to UCM

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.

5. Run "Load Interface File for Import" ESS job

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.

6. Run the module-specific import ESS job

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.

7. Review errors and reprocess failures

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.

Code Examples

Python: Automate FBDI upload via ERP Integration REST API

# 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}")

JavaScript/Node.js: Automate FBDI upload via SOAP ErpIntegrationService

// 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();

cURL: Upload FBDI and check status

# 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"

Data Mapping

FBDI CSV Column Mapping for Common Templates

TemplateCSV ColumnInterface Table ColumnTypeRequiredGotcha
Journal ImportSTATUSGL_INTERFACE.STATUSVARCHAR2YesMust be "NEW"
Journal ImportLEDGER_IDGL_INTERFACE.LEDGER_IDNUMBERYesNumeric ID, not ledger name
Journal ImportACCOUNTING_DATEGL_INTERFACE.ACCOUNTING_DATEDATEYesFormat: YYYY/MM/DD
Journal ImportENTERED_DR / ENTERED_CRGL_INTERFACE.ENTERED_DR/CRNUMBERYesOne per line, not both
AP InvoiceINVOICE_NUMAP_INVOICES_INTERFACE.INVOICE_NUMVARCHAR2YesUnique per supplier per year
AP InvoiceINVOICE_AMOUNTAP_INVOICES_INTERFACE.INVOICE_AMOUNTNUMBERYesMust equal sum of line amounts
SupplierVENDOR_NAMEPOZ_SUPPLIERS_INT.VENDOR_NAMEVARCHAR2YesMust be unique in system

Data Type Gotchas

Error Handling & Failure Points

Common Error Codes

Error / StatusMeaningCauseResolution
ESS Status: ERRORImport job failed entirelyInvalid format, wrong UCM path, parameter mismatchCheck ESS log; verify ZIP structure and UCM path
ESS Status: WARNINGPartial import successSome records rejected validationDownload output; correct and resubmit rejected records
GL_INTERFACE.STATUS = 'E'Journal line rejectedInvalid account, closed period, unbalanced entryQuery GL_INTERFACE for error details
AP_INTERFACE_REJECTIONSInvoice line rejectedInvalid supplier, missing fields, duplicate invoiceQuery rejection table for reason codes
UCM upload returns 0File upload to UCM failedWrong path, too large, permission issueVerify UCM path and integration user roles
ReqstId=0 from importBulkDataErpIntegrationService failedUCM upload failure within service callCheck permissions, verify Base64 encoding
"No data found" in child jobCSV not found in ZIPCSV filenames don't match expected namesRegenerate ZIP using XLSM macro
INVALID_ACCOUNTING_PERIODPeriod not openAccounting date in closed periodOpen the period or change date

Failure Points in Production

Anti-Patterns

Wrong: Uploading raw CSV files without XLSM-generated ZIP

# 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

Correct: Use the XLSM template macro to generate the ZIP

# GOOD -- use official template or match exact filenames:
# GL Journals:  GlInterface.csv
# AP Invoices:  ApInvoicesInterface.csv + ApInvoiceLinesInterface.csv
# Suppliers:    PozSuppliersInt.csv + PozSupplierSitesInt.csv

Wrong: Running concurrent FBDI imports for the same module

# BAD -- submitting 5 journal imports simultaneously
for f in files:
    threading.Thread(target=submit_fbdi, args=(f,)).start()
# Result: interface table locking, data corruption

Correct: Serialize within module, parallelize across modules

# 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

Wrong: Not validating data before upload

# BAD -- blindly uploading without pre-validation
generate_csv(raw_data)
upload_and_import()
# Result: 30% rejection rate, hours of debugging

Correct: Pre-validate against Oracle business rules

# 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)

Common Pitfalls

Diagnostic Commands

# 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'

Version History & Compatibility

ReleaseDateStatusKey ChangesNotes
26A2026-01CurrentNew procurement FBDI templates; sustainability activity importQuarterly update
25D2025-10SupportedEnhanced error reporting in ESS output--
25C2025-07SupportedNew bank statement reconciliation template--
25B2025-04SupportedPerformance improvements for large-volume imports--
25A2025-01SupportedERP Integration REST API enhancements--
24D2024-10SupportedAdditional SCM FBDI templates--

When to Use / When Not to Use

Use WhenDon't Use WhenUse 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 extractionBI Publisher, OTBI, REST API queries
Module requires FBDI (no REST equivalent)Real-time event notificationsOracle Business Events + webhooks
One-time setup data loads (CoA, opening balances)Continuous bidirectional syncOracle Integration Cloud with CDC
Budget imports and period-end adjustmentsAd-hoc queries or lookupsOracle REST API or BI Publisher

Important Caveats

Related Units