Oracle Financials Cloud API Capabilities — GL, AP, AR, FA, Journal Import, Intercompany

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

TL;DR

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]

PropertyValue
VendorOracle
SystemOracle Fusion Cloud Financials (Release 25D / 26A)
API SurfaceREST (primary), SOAP (legacy), FBDI (bulk)
Current API Version11.13.18.05 (resource version, stable across releases)
Editions CoveredEnterprise (single edition for cloud)
DeploymentCloud (Oracle Cloud Infrastructure)
API DocsOracle Fusion Cloud Financials REST API
StatusGA — 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 SurfaceProtocolBest ForMax Records/RequestRate LimitReal-time?Bulk?
REST APIHTTPS/JSONIndividual record CRUD, queries500 (POST)Fair-use throttling (429)YesNo
FBDICSV/ZIP via UCM + ESSBulk data loads, migrations, journal import250 MB per ZIPESS job queue (serial)NoYes
SOAP Web ServicesHTTPS/XMLLegacy integrationsVariesShared with RESTYesNo
ERP Business EventsHTTPS/JSON (callback)Event-driven outboundN/AConfigurableYesN/A
BI Publisher ReportsHTTPS/XML or CSVBulk data extractionReport-dependentESS schedulerNoYes
ERP Integrations RESTHTTPS/JSON + fileFBDI uploads + ESS job submission1 file per requestESS job queueNoYes

Rate Limits & Quotas

Per-Request Limits

Limit TypeValueApplies ToNotes
Max records per POST500REST API (all modules)Oracle recommends limiting to 500 for reliable processing
Max FBDI ZIP file size250 MBUCM file uploadSplit larger data sets into multiple files
Max response page size25 (default, configurable)REST API GETUse offset + limit for pagination
Concurrent ESS jobs1 per job type (serial)FBDI import jobsMultiple different job types can run in parallel
Max attachment size2 GBREST API attachmentsPer-file limit for document uploads

Rolling / Daily Limits

Limit TypeValueWindowEdition Differences
REST API callsNo published hard limitFair-useDynamic throttling — returns 429 when threshold exceeded
ESS job submissionsNo published hard limitPer podQueued and serialized per job type
UCM file uploadsNo published hard limitPer podPractical limit driven by storage quota
BI Publisher report runsNo published hard limitPer podSubject 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

FlowUse WhenToken LifetimeRefresh?Notes
OAuth 2.0 Client CredentialsServer-to-server (recommended)3600 secondsNo (re-authenticate)Register Confidential App in IDCS
Basic Auth over SSLTesting, simple integrationsSession-basedN/ANot recommended for production
SAML 2.0 Bearer TokenSSO-federated user-contextSession timeoutN/ASAML assertion in HTTP header
JWT Bearer TokenService account accessConfigurableN/AJWT in HTTP header over SSL

Authentication Gotchas

Constraints

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

ModuleResourceEndpoint PathOperationsNotes
GL — JournalsjournalBatches/fscmRestApi/resources/11.13.18.05/journalBatchesGET, POST, PATCHChild: journalHeaders, journalLines
GL — BalancesledgerBalances/fscmRestApi/resources/11.13.18.05/ledgerBalancesGETQuery by ledger, period, account
GL — PeriodsaccountingPeriods/fscmRestApi/resources/11.13.18.05/accountingPeriodsGET, PATCHOpen/close periods
AP — Invoicesinvoices/fscmRestApi/resources/11.13.18.05/invoicesGET, POST, PATCH, DELETEFull CRUD; child: lines, distributions
AP — InterfacepayablesInterfaceInvoices/fscmRestApi/resources/11.13.18.05/payablesInterfaceInvoicesGET, POSTStaging table; submit import action
AP — PaymentspayablesPayments/fscmRestApi/resources/11.13.18.05/payablesPaymentsGETRead-only payment details
AP — Supplierssuppliers/fscmRestApi/resources/11.13.18.05/suppliersGET, POST, PATCHSupplier master management
AR — InvoicesreceivablesInvoices/fscmRestApi/resources/11.13.18.05/receivablesInvoicesGET, POST, PATCHChild: installments, distributions
AR — Credit MemosreceivablesCreditMemos/fscmRestApi/resources/11.13.18.05/receivablesCreditMemosGET, POST, PATCHCredit memo transactions
AR — ReceiptsstandardReceipts/fscmRestApi/resources/11.13.18.05/standardReceiptsGET, POSTCash receipt creation
Cash MgmtcashBankAccounts/fscmRestApi/resources/11.13.18.05/cashBankAccountsGET, POST, PATCHBank account management
CollectionscollectionsDelinquencies/fscmRestApi/resources/11.13.18.05/collectionsDelinquenciesGET, POST, PATCHDelinquency management
ExpensesexpenseReports/fscmRestApi/resources/11.13.18.05/expenseReportsGET, POST, PATCHSubmit action available
ERP Integrationerpintegrations/fscmRestApi/resources/11.13.18.05/erpintegrationsGET, POSTFBDI upload + ESS job submission
Business EventserpBusinessEvents/fscmRestApi/resources/11.13.18.05/erpBusinessEventsGET, PATCHEnable/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 ColumnGL Interface FieldTypeRequiredNotes
StatusSTATUSStringYesAlways "NEW"
Ledger NameLEDGER_NAMEStringYesMust match configured ledger
Accounting DateACCOUNTING_DATEDateYesFormat: YYYY/MM/DD
Currency CodeCURRENCY_CODEStringYesISO 4217
Journal CategoryUSER_JE_CATEGORY_NAMEStringYesMust match defined category
Journal SourceUSER_JE_SOURCE_NAMEStringYesMust match defined source
Segment1-30SEGMENT1-SEGMENT30StringVariesPer chart of accounts
Entered DebitENTERED_DRNumberConditionalDebit in entered currency
Entered CreditENTERED_CRNumberConditionalCredit in entered currency

Data Type Gotchas

Error Handling & Failure Points

Common Error Codes

CodeMeaningCauseResolution
400Bad RequestInvalid JSON, missing required fieldsCheck field names (case-sensitive), data types
401UnauthorizedInvalid/expired access tokenRe-authenticate via OAuth
403ForbiddenMissing duty role or data accessAssign correct Financials roles to integration user
404Not FoundInvalid endpoint or resource IDVerify resource version and name
409ConflictRecord locked or duplicate keyRetry with jitter
429Too Many RequestsFair-use throttling exceededExponential backoff with Retry-After header
500Internal Server ErrorTransient server-side issueRetry after 30-60 seconds

Failure Points in Production

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

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

ReleaseRelease DateStatusKey ChangesMigration Notes
26A2026-01CurrentPayables Interface import action; AR completion via RESTEvaluate submitImportInvoices action
25D2025-10SupportedNew Cash Pool endpoints; Expense PoliciesNo breaking changes
25C2025-07SupportedReceivables Credit Memos CRUD; Collections StrategiesNew: receivablesCreditMemos
25B2025-04SupportedEnhanced ledgerBalances query filtersNo breaking changes
25A2025-01SupportedPayables Interface Invoices resourceNew: payablesInterfaceInvoices
24D2024-10SupportedERP Business Events enhancementsEvaluate event-driven patterns
24C2024-07SupportedBaseline for current documentationMinimum 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 WhenDon't Use WhenUse Instead
Real-time AP invoice creation, <500 per batchBulk journal import (>100 journals)FBDI via erpintegrations endpoint
Querying GL balances, AR aging, AP payment statusCreating intercompany transactionsFBDI template fin/intercompany/import
Managing suppliers, customers, bank accountsFixed Assets mass additionsFBDI FA Mass Additions template
Event-driven outbound notificationsBulk data extraction (>10K records)BI Publisher scheduled reports
AR receipt application and cash postingSubledger Accounting journal creationCreate Accounting ESS job
Expense report submissionData migration (>100K records)FBDI with migration templates

Important Caveats

Related Units