Oracle Financials Cloud API Capabilities — GL, AP, AR, FA, Journal Import, Intercompany
TL;DR
- Bottom line: Oracle Fusion Cloud Financials exposes 100+ REST endpoints across GL, AP, AR, Cash Management, Expenses, and Collections — but high-volume or complex operations (journal import, intercompany, FA mass additions) require FBDI file uploads through the erpintegrations endpoint, not direct REST CRUD.
- Key limit: REST POST operations should be limited to 500 records per request; FBDI ZIP files max 250 MB; Oracle enforces fair-use throttling (no published hard rate limits) returning HTTP 429 when exceeded.
- Watch out for: Journal import is a two-step async process (upload FBDI CSV to UCM, then submit ESS job) — agents often recommend direct REST POST to a journals endpoint, which does not exist for bulk import.
- Best for: Real-time individual record operations (create/read/update AP invoices, query GL balances, manage AR receipts) under 500 records per request; use FBDI for anything above that threshold.
- Authentication: OAuth 2.0 Client Credentials via Oracle IDCS (3600s token lifetime, no refresh tokens — re-authenticate on expiry); Basic Auth over SSL also supported but not recommended for production.
System Profile
Oracle Fusion Cloud Financials (also branded Oracle Financials Cloud or Oracle Cloud ERP — Financials pillar) is Oracle's SaaS ERP financial suite. The REST API surface covers General Ledger, Accounts Payable, Accounts Receivable, Cash Management, Expenses, Collections, Tax, and related configuration objects. The API version is tied to Oracle's quarterly release cycle, with the REST resource version remaining at 11.13.18.05 across releases while new endpoints and actions are added each quarter. [src1]
This card covers Oracle Fusion Cloud Financials only — not Oracle E-Business Suite (on-premise, PL/SQL APIs), Oracle NetSuite (separate SaaS product with SuiteTalk/REST APIs), or Oracle Cloud Infrastructure (IaaS). Fixed Assets, Intercompany, and Subledger Accounting have limited REST coverage — bulk operations for these modules require FBDI. [src4]
| Property | Value |
|---|---|
| Vendor | Oracle |
| System | Oracle Fusion Cloud Financials (Release 25D / 26A) |
| API Surface | REST (primary), SOAP (legacy), FBDI (bulk) |
| Current API Version | 11.13.18.05 (resource version, stable across releases) |
| Editions Covered | Enterprise (single edition for cloud) |
| Deployment | Cloud (Oracle Cloud Infrastructure) |
| API Docs | Oracle Fusion Cloud Financials REST API |
| Status | GA — quarterly feature releases (25A through 26A+) |
API Surfaces & Capabilities
Oracle Financials Cloud offers three primary integration surfaces, each suited to different volume and latency requirements. [src1, src4]
| API Surface | Protocol | Best For | Max Records/Request | Rate Limit | Real-time? | Bulk? |
|---|---|---|---|---|---|---|
| REST API | HTTPS/JSON | Individual record CRUD, queries | 500 (POST) | Fair-use throttling (429) | Yes | No |
| FBDI | CSV/ZIP via UCM + ESS | Bulk data loads, migrations, journal import | 250 MB per ZIP | ESS job queue (serial) | No | Yes |
| SOAP Web Services | HTTPS/XML | Legacy integrations | Varies | Shared with REST | Yes | No |
| ERP Business Events | HTTPS/JSON (callback) | Event-driven outbound | N/A | Configurable | Yes | N/A |
| BI Publisher Reports | HTTPS/XML or CSV | Bulk data extraction | Report-dependent | ESS scheduler | No | Yes |
| ERP Integrations REST | HTTPS/JSON + file | FBDI uploads + ESS job submission | 1 file per request | ESS job queue | No | Yes |
Rate Limits & Quotas
Per-Request Limits
| Limit Type | Value | Applies To | Notes |
|---|---|---|---|
| Max records per POST | 500 | REST API (all modules) | Oracle recommends limiting to 500 for reliable processing |
| Max FBDI ZIP file size | 250 MB | UCM file upload | Split larger data sets into multiple files |
| Max response page size | 25 (default, configurable) | REST API GET | Use offset + limit for pagination |
| Concurrent ESS jobs | 1 per job type (serial) | FBDI import jobs | Multiple different job types can run in parallel |
| Max attachment size | 2 GB | REST API attachments | Per-file limit for document uploads |
Rolling / Daily Limits
| Limit Type | Value | Window | Edition Differences |
|---|---|---|---|
| REST API calls | No published hard limit | Fair-use | Dynamic throttling — returns 429 when threshold exceeded |
| ESS job submissions | No published hard limit | Per pod | Queued and serialized per job type |
| UCM file uploads | No published hard limit | Per pod | Practical limit driven by storage quota |
| BI Publisher report runs | No published hard limit | Per pod | Subject to ESS scheduler capacity |
Throttling Behavior
Oracle Fusion Cloud does not publish fixed API rate limits. Instead, it applies fair-use throttling at the pod level. When throttled, the API returns HTTP 429 with a Retry-After header. The threshold varies by pod load, time of day, and tenant configuration. There is no self-service way to check remaining quota — implement 429 handling with exponential backoff. [src3]
Authentication
| Flow | Use When | Token Lifetime | Refresh? | Notes |
|---|---|---|---|---|
| OAuth 2.0 Client Credentials | Server-to-server (recommended) | 3600 seconds | No (re-authenticate) | Register Confidential App in IDCS |
| Basic Auth over SSL | Testing, simple integrations | Session-based | N/A | Not recommended for production |
| SAML 2.0 Bearer Token | SSO-federated user-context | Session timeout | N/A | SAML assertion in HTTP header |
| JWT Bearer Token | Service account access | Configurable | N/A | JWT in HTTP header over SSL |
Authentication Gotchas
- Client Credentials flow does not provide refresh tokens — re-authenticate every 3600 seconds. IDCS admins can change the timeout. [src3]
- Integration user must have correct Oracle Financials duty roles — missing roles produce HTTP 403, not 401. [src2]
- IDCS token endpoint URL varies by data center region — wrong region endpoint returns connection errors, not auth errors. [src3]
- Basic Auth breaks silently with 401 when org-wide MFA enforcement is enabled. [src3]
Constraints
- GL journals cannot be created in bulk via REST — journal import requires FBDI file upload to UCM followed by ESS job submission via the erpintegrations endpoint. [src1, src4]
- Intercompany transactions have no REST API for creation — use FBDI template fin/intercompany/import. [src5]
- Fixed Assets mass additions require FBDI — REST covers queries and individual updates only. [src4]
- Subledger Accounting journal entries are generated by internal ESS processes — cannot be created via REST API. [src4]
- FBDI imports are asynchronous — no webhook callback out of the box; must poll for completion. [src4]
- REST API resource version 11.13.18.05 is stable across releases — new endpoints added silently without version bump. [src1]
- All REST API requests require HTTPS — HTTP not supported; self-signed certificates rejected in production. [src2]
Integration Pattern Decision Tree
START — User needs to integrate with Oracle Financials Cloud
|-- What's the financial module?
| |-- General Ledger (GL)
| | |-- Query balances/periods/ledgers? -> REST: GET /ledgerBalances
| | |-- Create individual journals (<10)? -> REST: POST /journalBatches
| | |-- Bulk journal import (>10)? -> FBDI: GlInterface.csv via erpintegrations
| |-- Accounts Payable (AP)
| | |-- Create/update invoices (<500)? -> REST: POST /invoices
| | |-- Bulk invoice import (>500)? -> FBDI or REST /payablesInterfaceInvoices
| | |-- Query invoices/payments/suppliers? -> REST: GET /invoices, /payablesPayments
| |-- Accounts Receivable (AR)
| | |-- Create/update transactions (<500)? -> REST: POST /receivablesInvoices
| | |-- Bulk AR import (>500)? -> FBDI: AutoInvoice import
| | |-- Apply receipts? -> REST: POST /standardReceiptApplications
| |-- Fixed Assets (FA)
| | |-- Query assets? -> REST: GET /assets
| | |-- Bulk asset creation? -> FBDI: FA Mass Additions
| |-- Intercompany -> FBDI: fin/intercompany/import
| |-- Cash Management -> REST: /cashBankAccounts, /cashBankAccountTransfers
|-- Integration pattern?
| |-- Real-time (<500 records) -> REST API
| |-- Batch/Bulk (>500 records) -> FBDI via erpintegrations
| |-- Event-driven (outbound) -> ERP Business Events + callback
| |-- Scheduled extraction -> BI Publisher reports via ESS
|-- Direction?
| |-- Inbound -> REST POST/PATCH or FBDI upload
| |-- Outbound -> REST GET or BI Publisher
| |-- Bidirectional -> REST + FBDI + BI Publisher
|-- Error tolerance?
|-- Zero-loss -> FBDI with job status polling + error report
|-- Best-effort -> REST with retry on 429/5xx
Quick Reference
Key REST Endpoints by Module
| Module | Resource | Endpoint Path | Operations | Notes |
|---|---|---|---|---|
| GL — Journals | journalBatches | /fscmRestApi/resources/11.13.18.05/journalBatches | GET, POST, PATCH | Child: journalHeaders, journalLines |
| GL — Balances | ledgerBalances | /fscmRestApi/resources/11.13.18.05/ledgerBalances | GET | Query by ledger, period, account |
| GL — Periods | accountingPeriods | /fscmRestApi/resources/11.13.18.05/accountingPeriods | GET, PATCH | Open/close periods |
| AP — Invoices | invoices | /fscmRestApi/resources/11.13.18.05/invoices | GET, POST, PATCH, DELETE | Full CRUD; child: lines, distributions |
| AP — Interface | payablesInterfaceInvoices | /fscmRestApi/resources/11.13.18.05/payablesInterfaceInvoices | GET, POST | Staging table; submit import action |
| AP — Payments | payablesPayments | /fscmRestApi/resources/11.13.18.05/payablesPayments | GET | Read-only payment details |
| AP — Suppliers | suppliers | /fscmRestApi/resources/11.13.18.05/suppliers | GET, POST, PATCH | Supplier master management |
| AR — Invoices | receivablesInvoices | /fscmRestApi/resources/11.13.18.05/receivablesInvoices | GET, POST, PATCH | Child: installments, distributions |
| AR — Credit Memos | receivablesCreditMemos | /fscmRestApi/resources/11.13.18.05/receivablesCreditMemos | GET, POST, PATCH | Credit memo transactions |
| AR — Receipts | standardReceipts | /fscmRestApi/resources/11.13.18.05/standardReceipts | GET, POST | Cash receipt creation |
| Cash Mgmt | cashBankAccounts | /fscmRestApi/resources/11.13.18.05/cashBankAccounts | GET, POST, PATCH | Bank account management |
| Collections | collectionsDelinquencies | /fscmRestApi/resources/11.13.18.05/collectionsDelinquencies | GET, POST, PATCH | Delinquency management |
| Expenses | expenseReports | /fscmRestApi/resources/11.13.18.05/expenseReports | GET, POST, PATCH | Submit action available |
| ERP Integration | erpintegrations | /fscmRestApi/resources/11.13.18.05/erpintegrations | GET, POST | FBDI upload + ESS job submission |
| Business Events | erpBusinessEvents | /fscmRestApi/resources/11.13.18.05/erpBusinessEvents | GET, PATCH | Enable/disable event subscriptions |
Step-by-Step Integration Guide
1. Authenticate via OAuth 2.0 Client Credentials
Register a Confidential Application in Oracle IDCS, obtain Client ID and Client Secret, then request an access token. [src3]
curl -X POST \
"https://{identity-domain}.identity.oraclecloud.com/oauth2/v1/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "{client_id}:{client_secret}" \
-d "grant_type=client_credentials&scope=urn:opc:resource:consumer::all"
Verify: Response contains "access_token" field and "expires_in": 3600
2. Query GL Ledger Balances
Use the ledgerBalances endpoint to retrieve account balances. [src1]
curl -X GET \
"https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/ledgerBalances?q=LedgerName=US%20Primary%20Ledger;AccountingPeriod=Mar-26" \
-H "Authorization: Bearer {access_token}"
Verify: Response contains "items" array with balance data
3. Create an AP Invoice
POST a new invoice with header and line details. [src6]
curl -X POST \
"https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/vnd.oracle.adf.resourceitem+json" \
-d '{"InvoiceNumber":"INV-2026-001","InvoiceAmount":5000,"BusinessUnit":"US1 Business Unit","Supplier":"Acme Corp"}'
Verify: HTTP 201 with InvoiceId populated
4. Upload FBDI for GL Journal Import
For bulk journal import: prepare CSV, ZIP, base64-encode, upload to UCM, submit ESS job. [src4, src5]
# Step 4a: Upload FBDI ZIP to UCM
curl -X POST ".../erpintegrations" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/vnd.oracle.adf.resourceitem+json" \
-d '{"OperationName":"importBulkData","DocumentContent":"{base64_zip}","ContentType":"zip","FileName":"GlInterface.zip","DocumentAccount":"fin$/journal$/import$"}'
# Step 4b: Submit Import Journals ESS Job
curl -X POST ".../erpintegrations" \
-d '{"OperationName":"submitESSJobRequest","JobPackageName":"/oracle/apps/ess/financials/generalLedger/programs/","JobDefName":"JournalImportLauncher","ESSParameters":"..."}'
Verify: Poll GET /erpintegrations/{RequestId} until RequestStatus = SUCCEEDED
5. Create an AR Invoice
POST a receivables invoice for customer billing. [src1]
curl -X POST \
"https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/receivablesInvoices" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/vnd.oracle.adf.resourceitem+json" \
-d '{"BusinessUnit":"US1 Business Unit","TransactionDate":"2026-03-09","TransactionType":"Invoice","BillToCustomerName":"GlobalTech Inc","CurrencyCode":"USD"}'
Verify: HTTP 201 with CustomerTransactionId populated
6. Handle Pagination
Oracle REST API returns paginated results with hasMore, offset, and limit parameters. [src2]
offset = 0
while True:
resp = requests.get(f"{base}/invoices", params={"offset": offset, "limit": 25, "onlyData": "true"}, headers=headers)
data = resp.json()
items.extend(data.get("items", []))
if not data.get("hasMore", False):
break
offset += 25
7. Implement Retry Logic for 429 Throttling
Oracle returns HTTP 429 when fair-use throttling kicks in. [src3]
import time
def oracle_api_call(url, headers, max_retries=5):
for attempt in range(max_retries):
resp = requests.get(url, headers=headers)
if resp.status_code == 429:
time.sleep(int(resp.headers.get("Retry-After", 2 ** attempt)))
continue
resp.raise_for_status()
return resp.json()
raise Exception(f"Max retries exceeded for {url}")
Code Examples
Python: Create AP Invoice with Error Handling
# Input: Oracle Fusion host, OAuth token, invoice data dict
# Output: Created invoice ID or error details
import requests # requests==2.31.0
def create_ap_invoice(host, token, invoice_data):
url = f"https://{host}/fscmRestApi/resources/11.13.18.05/invoices"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/vnd.oracle.adf.resourceitem+json"
}
resp = requests.post(url, headers=headers, json=invoice_data)
if resp.status_code == 201:
return {"success": True, "invoice_id": resp.json().get("InvoiceId")}
elif resp.status_code == 429:
return {"success": False, "error": "throttled", "retry_after": resp.headers.get("Retry-After", "60")}
else:
return {"success": False, "status": resp.status_code, "detail": resp.text}
JavaScript/Node.js: Query GL Balances
// Input: Oracle host, OAuth token, ledger name, period
// Output: Array of account balance objects
import fetch from 'node-fetch'; // [email protected]
async function getGLBalances(host, token, ledger, period) {
const url = new URL(`https://${host}/fscmRestApi/resources/11.13.18.05/ledgerBalances`);
url.searchParams.set('q', `LedgerName=${ledger};AccountingPeriod=${period}`);
url.searchParams.set('onlyData', 'true');
const resp = await fetch(url.toString(), {
headers: { 'Authorization': `Bearer ${token}` }
});
if (!resp.ok) throw new Error(`GL query failed: ${resp.status}`);
const data = await resp.json();
return data.items || [];
}
cURL: Test Authentication
# Step 1: Get token
curl -s -X POST \
"https://{idcs}.identity.oraclecloud.com/oauth2/v1/token" \
-u "{client_id}:{client_secret}" \
-d "grant_type=client_credentials&scope=urn:opc:resource:consumer::all"
# Step 2: Test against read-only endpoint
curl -s -X GET \
"https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/ledgersLov" \
-H "Authorization: Bearer {access_token}"
Data Mapping
GL Journal Import — FBDI Field Mapping (GlInterface Template)
| FBDI Column | GL Interface Field | Type | Required | Notes |
|---|---|---|---|---|
| Status | STATUS | String | Yes | Always "NEW" |
| Ledger Name | LEDGER_NAME | String | Yes | Must match configured ledger |
| Accounting Date | ACCOUNTING_DATE | Date | Yes | Format: YYYY/MM/DD |
| Currency Code | CURRENCY_CODE | String | Yes | ISO 4217 |
| Journal Category | USER_JE_CATEGORY_NAME | String | Yes | Must match defined category |
| Journal Source | USER_JE_SOURCE_NAME | String | Yes | Must match defined source |
| Segment1-30 | SEGMENT1-SEGMENT30 | String | Varies | Per chart of accounts |
| Entered Debit | ENTERED_DR | Number | Conditional | Debit in entered currency |
| Entered Credit | ENTERED_CR | Number | Conditional | Credit in entered currency |
Data Type Gotchas
- Oracle REST dates use ISO 8601 (YYYY-MM-DD) but FBDI uses YYYY/MM/DD — mixing formats causes silent import failures. [src1]
- FBDI CSV amounts must not include thousands separators — "5,000.50" fails validation silently. [src4]
- Account segments are validated against chart of accounts value sets — invalid segments reject the entire batch. [src4]
- Foreign currency amounts require conversion rate type and date — otherwise default corporate rate applies. [src1]
Error Handling & Failure Points
Common Error Codes
| Code | Meaning | Cause | Resolution |
|---|---|---|---|
| 400 | Bad Request | Invalid JSON, missing required fields | Check field names (case-sensitive), data types |
| 401 | Unauthorized | Invalid/expired access token | Re-authenticate via OAuth |
| 403 | Forbidden | Missing duty role or data access | Assign correct Financials roles to integration user |
| 404 | Not Found | Invalid endpoint or resource ID | Verify resource version and name |
| 409 | Conflict | Record locked or duplicate key | Retry with jitter |
| 429 | Too Many Requests | Fair-use throttling exceeded | Exponential backoff with Retry-After header |
| 500 | Internal Server Error | Transient server-side issue | Retry after 30-60 seconds |
Failure Points in Production
- FBDI upload succeeds but ESS job fails silently: The erpintegrations POST returns 200, but ESS job may fail due to validation errors. Fix:
Always poll job status and download error report. [src4] - Journal import rejects entire batch for one bad line: One invalid account segment rejects every line in that batch. Fix:
Pre-validate account combinations and split into smaller batches. [src4] - OAuth token expires mid-batch: Long FBDI imports span beyond 3600s token lifetime. Fix:
Re-authenticate before each poll request. [src3] - Content-Type header mismatch: Oracle requires
application/vnd.oracle.adf.resourceitem+jsonfor POST. Fix:Always use ADF Content-Type headers for write operations. [src2] - Concurrent ESS jobs of same type: Second job queues indefinitely or fails. Fix:
Serialize ESS submissions per job type; poll previous completion first. [src4] - Intercompany import with mismatched BUs: Requires both sending/receiving BUs to have intercompany enabled. Fix:
Verify intercompany setup for both BUs before importing. [src5]
Anti-Patterns
Wrong: Creating GL journals one-at-a-time via REST for bulk feeds
# BAD — creates N API calls for N journals, hits throttling
for journal in journals: # 10,000 journals
requests.post(f"{base}/journalBatches", json=journal, headers=headers)
Correct: Use FBDI for bulk journal import
# GOOD — single file upload + single ESS job for any volume
# Write all journals to GlInterface CSV, ZIP, base64-encode, upload via erpintegrations
requests.post(f"{base}/erpintegrations", json={
"OperationName": "importBulkData",
"DocumentContent": encoded_zip,
"FileName": "GlInterface.zip",
"DocumentAccount": "fin$/journal$/import$"
}, headers=headers)
Wrong: Using generic Content-Type for write operations
# BAD — application/json may fail silently for POST/PATCH
curl -X POST .../invoices -H "Content-Type: application/json" -d '{...}'
Correct: Use Oracle ADF Content-Type headers
# GOOD — Oracle requires ADF-specific Content-Type
curl -X POST .../invoices -H "Content-Type: application/vnd.oracle.adf.resourceitem+json" -d '{...}'
Wrong: Assuming REST covers all Financials operations
# BAD — this endpoint does not exist
requests.post(f"{base}/intercompanyTransactions", json=data, headers=headers)
# Returns 404
Correct: Use FBDI for modules without REST write support
# GOOD — FBDI template for intercompany
requests.post(f"{base}/erpintegrations", json={
"OperationName": "importBulkData",
"DocumentContent": encoded_zip,
"FileName": "IntercompanyImport.zip",
"DocumentAccount": "fin$/intercompany$/import$"
}, headers=headers)
Common Pitfalls
- Assuming published rate limits exist: Oracle does not publish fixed API quotas unlike Salesforce. Fix:
Implement exponential backoff with Retry-After from day one. [src3] - Using Basic Auth in production: Breaks when org-wide MFA enforcement is enabled. Fix:
Always use OAuth 2.0 Client Credentials for production. [src3] - Not pre-validating FBDI data: Imports fail with cryptic error reports for reference data mismatches. Fix:
Pre-validate via REST GET queries before preparing FBDI files. [src4] - Hardcoding 3600s token lifetime: IDCS admins can change token expiry. Fix:
Read expires_in from token response, refresh at 90% lifetime. [src3] - Mixing date formats: FBDI uses YYYY/MM/DD, REST uses YYYY-MM-DD. Fix:
Use format-specific serialization per API surface. [src1] - Not downloading ESS job error reports: Developers miss actual validation errors. Fix:
Always GET the job result file via downloadESSJobExecutionDetails. [src4]
Diagnostic Commands
# Test OAuth authentication
curl -s -X POST "https://{idcs}.identity.oraclecloud.com/oauth2/v1/token" \
-u "{client_id}:{client_secret}" \
-d "grant_type=client_credentials&scope=urn:opc:resource:consumer::all"
# List available ledgers (verifies connectivity + GL access)
curl -s "https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/ledgersLov?onlyData=true" \
-H "Authorization: Bearer {token}"
# Check ESS job status (after FBDI import)
curl -s "https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/erpintegrations/{RequestId}" \
-H "Authorization: Bearer {token}"
# Verify AP invoice exists
curl -s "https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices?q=InvoiceNumber={num}" \
-H "Authorization: Bearer {token}"
# List enabled Business Events
curl -s "https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/erpBusinessEvents?onlyData=true" \
-H "Authorization: Bearer {token}"
# Describe invoices resource (field metadata)
curl -s "https://{host}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices/describe" \
-H "Authorization: Bearer {token}"
Version History & Compatibility
| Release | Release Date | Status | Key Changes | Migration Notes |
|---|---|---|---|---|
| 26A | 2026-01 | Current | Payables Interface import action; AR completion via REST | Evaluate submitImportInvoices action |
| 25D | 2025-10 | Supported | New Cash Pool endpoints; Expense Policies | No breaking changes |
| 25C | 2025-07 | Supported | Receivables Credit Memos CRUD; Collections Strategies | New: receivablesCreditMemos |
| 25B | 2025-04 | Supported | Enhanced ledgerBalances query filters | No breaking changes |
| 25A | 2025-01 | Supported | Payables Interface Invoices resource | New: payablesInterfaceInvoices |
| 24D | 2024-10 | Supported | ERP Business Events enhancements | Evaluate event-driven patterns |
| 24C | 2024-07 | Supported | Baseline for current documentation | Minimum recommended version |
Oracle Fusion Cloud follows a quarterly release cadence (A/B/C/D per year). REST API resource version 11.13.18.05 has been stable for multiple years. Oracle provides a minimum 12-month notice before any breaking change via the What's New documentation. [src1]
When to Use / When Not to Use
| Use When | Don't Use When | Use Instead |
|---|---|---|
| Real-time AP invoice creation, <500 per batch | Bulk journal import (>100 journals) | FBDI via erpintegrations endpoint |
| Querying GL balances, AR aging, AP payment status | Creating intercompany transactions | FBDI template fin/intercompany/import |
| Managing suppliers, customers, bank accounts | Fixed Assets mass additions | FBDI FA Mass Additions template |
| Event-driven outbound notifications | Bulk data extraction (>10K records) | BI Publisher scheduled reports |
| AR receipt application and cash posting | Subledger Accounting journal creation | Create Accounting ESS job |
| Expense report submission | Data migration (>100K records) | FBDI with migration templates |
Important Caveats
- Oracle does not publish fixed API rate limits — fair-use throttling thresholds vary by pod, tenant size, and time of day. What works in testing may hit 429s during month-end close.
- REST API resource version (11.13.18.05) does not change with quarterly releases, but new endpoints are added silently. Always check the latest release documentation.
- FBDI is the only supported path for several critical operations (journal import, intercompany, FA mass additions, subledger accounting). REST-only patterns for these modules will fail.
- Test/sandbox instances may have different configurations, fewer open periods, and missing reference data compared to production.
- ESS jobs are serialized per job type — submitting concurrent Journal Import jobs causes queueing, not parallelism.
- Content-Type header requirements (ADF-specific headers) are non-negotiable — standard application/json causes silent failures on writes.
- API endpoint availability depends on which Oracle Cloud modules are licensed and opted in.