Greenfield: Build a Minimal General Ledger in Oracle Fusion
You only need this guide if your Oracle Fusion instance has no General Ledger yet — a bare/greenfield environment or a fresh test pod (no ledger, chart of accounts, calendar, or open periods). If you already run GL, skip this and go straight to the connection guide.
This builds the smallest GL that lets the Apideck oracle-fusion connector read and create journal entries: a 3-segment chart of accounts (Company + Cost Center + Account), a monthly calendar, one USD ledger, data access for the integration user, and one open period.
Before Section D below, do connection-guide Steps 1–2 (create the integration user, assign its roles, and run the two security scheduled processes — Send Pending LDAP Requests, then Import User and Role Application Security Data) — Section D needs that user to exist. When you finish the build, return to the connection guide and complete Steps 4–8.
⚠️ Why three segments and not two. A chart of accounts cannot be restructured once its ledger has posted journals — Oracle will not let you add a segment afterwards. A 2-segment chart has no tracking dimension, so the connector's Tracking Segment Value Set Code setting has nothing to point at: without that setting the
tracking-categoriesresource is refused with a400(only a value set with no values returns an empty list). The third segment costs one extra value set and one extra segment now, and cannot be added later.
ℹ️ Status: this guide was written while building a live Fusion pod (release 11.13.18.05), and every gotcha called out inline is one that actually bit during that build. Two things are stated from Oracle's documentation rather than from a live run: the Section C fallback for a release that demands a legal entity, and the cost-centre segment's own rows in Section A, which mirror the two segments that were walked.
Prerequisites for this build
- A user (or your own login) with setup privileges — Application Implementation Consultant or Financial Application Administrator. The runtime integration role (General Accounting Manager) is not sufficient to create chart-of-accounts structures: those are setup tasks, and the value-set REST resource returns
403for a pure accounting role. Do this build in the UI with a setup-privileged browser session. - The Financials functional offering enabled (Setup and Maintenance → Setup: Financials).
- All tasks below are reached from Setup and Maintenance → Setup: Financials → Search → Tasks with Show = All Tasks.
Design used throughout: a 3-segment COA — Company (primary balancing) + Cost Center (the tracking dimension) + Account (natural account) — a monthly 2026 calendar, one USD Standard-Accrual ledger. Legal Entity and balancing-segment-value assignment are skipped (optional for a journal-only ledger — see Section C).
Section A — Chart of Accounts
A1. Create the value sets — task Manage Chart of Accounts Value Sets
Open the task, then in Search Results click + (Create) — do not type into the Search filter fields. Create three value sets:
| Field | Value set 1 | Value set 2 | Value set 3 |
|---|---|---|---|
| Value Set Code | APIDECK_COMPANY | APIDECK_COSTCENTER | APIDECK_ACCOUNT |
| Description | Apideck company / balancing segment | Apideck cost centre segment | Apideck natural account segment |
| Module | General Ledger | General Ledger | General Ledger |
| Validation Type | Independent | Independent | Independent |
| Value Data Type | Character | Character | Character |
| Value Subtype | Text | Text | Text |
| Maximum Length | 2 | 3 | 4 |
APIDECK_COSTCENTER is the value set the connector's Tracking Segment Value Set Code setting will point at.
Leave Security enabled unchecked and Min/Max Value blank. Save and Close each.
A2. Create the COA structure — task Manage Chart of Accounts Structures
This page lists key flexfields (no + here). Click Search, select the row Accounting Flexfield (GL#), then click Manage Structures → + (Create).
Structure header:
- Structure Code / Name:
APIDECK_COA - Description:
Apideck 3-segment COA - Delimiter:
.(period) - Enabled: ✅ — then Save (this activates the Segments +).
Add three segments (Segments region → +):
| Field | Segment 1 | Segment 2 | Segment 3 |
|---|---|---|---|
| Segment Code | COMPANY | COSTCENTER | ACCOUNT |
| Name | Company | Cost Center | Account |
| Sequence Number | 1 | 2 | 3 |
| Prompt | Company | Cost Center | Account |
| Short Prompt | Co | CC | Acct |
| Display Width | 2 | 3 | 4 |
| Column Name | SEGMENT1 | SEGMENT2 | SEGMENT3 |
| Default Value Set Code | APIDECK_COMPANY | APIDECK_COSTCENTER | APIDECK_ACCOUNT |
| Segment Label (move to Selected) | Primary Balancing Segment | Cost Center Segment | Natural Account Segment |
Only Primary Balancing Segment and Natural Account Segment are strictly mandatory. Assign Cost Center Segment to segment 2 anyway, as the reference build did: it is what marks that segment as the tracking dimension, and it costs nothing to set now against re-opening the structure later.
Save and Close each segment, then Save and Close the structure. Confirm the structure shows Enabled.
A3. Create the structure instance — task Manage Chart of Accounts Structure Instances
Click Search → select Accounting Flexfield (GL#) → Manage Structure Instances → + (Create):
- Structure Instance Code / Name:
APIDECK_COA - Description:
Apideck COA instance - Enabled: ✅
- Dynamic combination creation allowed: ✅ (required) — lets Oracle auto-create account combinations when a journal is imported.
- Structure Name:
APIDECK_COA
The Segment Instances table auto-populates with COMPANY/APIDECK_COMPANY, COSTCENTER/APIDECK_COSTCENTER and ACCOUNT/APIDECK_ACCOUNT. Save and Close.
A4. Deploy the accounting flexfield
Back on Manage ... Structure Instances (or Structures): Search → select Accounting Flexfield (GL#) → Deploy Flexfield. Wait until the deployment reaches SUCCEEDED (≈1–3 min). Do not proceed until it succeeds — value-set values and ledgers cannot be created against an undeployed flexfield.
A5. Add the value-set values — task Manage Chart of Accounts Value Set Values
Select each value set → Manage Values → + for each row.
APIDECK_COMPANY:
| Value | Description | Enabled | Summary | Allow Posting |
|---|---|---|---|---|
01 | Apideck Test Company | ✅ | No | Yes |
APIDECK_COSTCENTER:
| Value | Description | Enabled | Summary | Allow Posting |
|---|---|---|---|---|
000 | No Cost Center | ✅ | No | Yes |
100 | Operations | ✅ | No | Yes |
At least one value is required, or no account combination can be built. These are also the values the connector's tracking-categories resource will return.
APIDECK_ACCOUNT (this value set shows an Account Type column because it is the natural-account segment):
| Value | Description | Account Type | Enabled | Summary | Allow Posting |
|---|---|---|---|---|---|
1110 | Cash | Asset | ✅ | No | Yes |
3100 | Retained Earnings | Owner's Equity | ✅ | No | Yes |
4000 | Revenue | Revenue | ✅ | No | Yes |
5000 | Expense | Expense | ✅ | No | Yes |
Leave Third Party Control Account and Reconcile at No. Save and Close. (1110 + 4000 are enough to post a balanced journal, e.g. Dr 1110 / Cr 4000; 3100 is used as the ledger's Retained Earnings account in Section C.)
Section B — Accounting Calendar — task Manage Accounting Calendars
Click + (Create) and set:
- Name:
APIDECK_CAL - Description:
Apideck monthly calendar 2026— use the year you will actually post in; 2026 is this build's example, and the calendar generated below covers that one year only - Start Date:
01-Jan-2026(same: the 1st of January of your chosen year) - Period Frequency: Monthly
- Adjusting Period Frequency: None
- Period Name Format → Format:
MMMYY calendar year, Separator:-→ First Period previews asJan-26.
A warning (GL-782278) notes no adjustment period is defined — for a test/minimal ledger this is fine; click Yes to continue. Click Next, confirm 12 periods (Jan-26 … Dec-26) are generated, then Save and Close.
⚠️ This generates one year of periods. A journal dated outside it cannot be imported, and the connector's
accounting_periodonly accepts theMon-YYnaming this format produces (Jan-26). Keep the Period Name Format exactly as above, and extend the calendar before you post into a later year.
Section C — Primary Ledger + Ledger Options
Legal Entity, Assign Legal Entities, and Assign Balancing Segment Values are optional for a journal-only ledger — the Primary Ledger screen has no Legal Entity field, and (validated live) Review and Submit Accounting Configuration completes with zero legal entities. This guide skips them. (If a future Oracle release ever blocks submission demanding a legal entity, create one minimal Legal Entity via the Legal Entity Configurator and re-submit — a cheap fallback.)
Note: with zero legal entities the connector's
subsidiariesresource returns an empty list, and Receivables invoices cannot be set up — create a legal entity if you plan to use either (see the Receivables setup guide).
C1. Create the ledger — task Manage Primary Ledgers
+ (Create) → Create Primary Ledger:
| Field | Value |
|---|---|
| Name | Apideck Test Ledger |
| Description | Apideck test ledger USD |
| Chart of Accounts | the APIDECK_COA instance |
| Accounting Calendar | APIDECK_CAL |
| Currency | USD |
| Accounting Method | Standard Accrual |
Save and Close. The ledger appears in the list with an in-process (clock) status — this is expected; it becomes complete after Section C3.
C2. Specify Ledger Options — task Specify Ledger Options
Search the task, then in Select Scope choose the radio Specify Ledger Options, and in Primary Ledger pick Select and Add (the dropdown does not list ledgers directly — use Select and Add to search for Apideck Test Ledger), then Apply and Go to Task.
Set the required (⭐) fields — the rest keep their defaults:
| Field | Value |
|---|---|
| First Opened Period | Jan-26 |
| Accounting Method | Standard Accrual (usually pre-filled) |
| Journal Language ⭐ | American English |
| Retained Earnings Account ⭐ | 01.000.3100 (enter via the account picker: Company 01, Cost Center 000, Account 3100; auto-created via dynamic combination creation) |
Leave Average Balances off (it is irreversible once saved and not needed). Leave Suspense / Reconciliation / Intercompany / Sequencing (No sequencing) / Reversal at defaults. Save and Close.
C3. Review and Submit — task Review and Submit Accounting Configuration
Search the task → Select Scope (radio Review and Submit Accounting Configuration → Select and Add → Apideck Test Ledger → Apply and Go to Task). The page shows Legal Entities: no data (expected) and the ledger with a green ✓ status. Click Submit.
A confirmation appears — "The Create Accounting Configuration process NNNNN has been submitted" — launching the ESS job that builds the balances cube and auto-creates an implicit full Read-Write Data Access Set named after the ledger. Wait ~1–2 minutes for it to complete; the ledger then shows in ledgersLOV and is ready for the data-access grant (Section D).
Scope of this GL: this minimal ledger supports the connector's journal-entries, ledger-accounts, tracking-categories and company-info resources.
subsidiariesreturns an empty list until a legal entity exists.Invoices and invoice-items are supported by the connector, but neither works on this ledger alone: both need Oracle Receivables setup this guide does not cover — a business unit, a Receivables transaction source, a customer with a bill-to site, payment terms, an open Receivables period, and AutoAccounting rules — plus the connector's Receivables Business Unit and Receivables Transaction Source settings. See the Receivables setup guide. Bills, payments and bank feeds are not implemented by the connector.
Section D — Data access + open period
D1. Grant the integration user Read-Write data access — task Manage Data Access for Users
Prerequisite: the integration user from connection-guide Steps 1–2 must already exist, hold its role, and both security scheduled processes must have run (
Send Pending LDAP Requests, thenImport User and Role Application Security Data) — the Role LOV below only lists roles the user is already assigned.
- Radio Users without Data Access → + Create.
- User Name = the integration user the connector authenticates as — the connection-guide Step 1 user, whose User Name is exactly the OAuth Client ID (the plain User Name, not the email). Data access granted to any other user has no effect on the connection.
- Role =
General Accounting Manager· Security Context =Data Access Set· Security Context Value = the ledger's auto-created full-RW set (named after the ledger, e.g.Apideck Test Ledger) → Save.
Gotchas (validated live):
- The Role LOV only lists roles the user is assigned AND that are synced for data security. If your role doesn't appear (empty LOV even for
%Accounting%): first confirm it's assigned in Security Console → Users →<user>→ Roles, then run theRetrieve Latest LDAP Changesscheduled process (Tools → Scheduled Processes → Schedule New Process) and wait for Succeeded, then retry. A freshly created ledger + role assignment needs that sync before the role is selectable here. If the role still does not appear after that sync, runSend Pending LDAP Requestsand thenImport User and Role Application Security Data— a role assignment is not live for a REST caller untilSend Pending LDAP Requestshas completed. - Grants are applied asynchronously, so reads returning empty in the first minutes after granting are expected. Run
Send Pending LDAP Requestsand thenImport User and Role Application Security Data, allow a few minutes after the second succeeds, and if reads are still empty after that, more time will not change it.
D2. Open the target period — task Open First Period (scheduled process Open General Ledger Periods)
- Run Open First Period; set Data Access Set + Ledger or Ledger Set = your ledger and Accounting Period = the period to open → Submit → wait Succeeded.
- The submitting user needs Read-Write data access to the ledger (grant it as in D1), otherwise the Data Access Set / Ledger dropdowns are empty. After granting yourself access, sign out and sign back in so the session picks up the new grant (the dropdowns stay empty until you re-login).
- Journal import fails with
EP01/EP02if the journal's accounting date is not in an open period. Open the period matching the accounting date of the journals you will post.
The
accountingPeriodStatusLOVREST resource lists the current period onward by default — a period you opened in the past won't appear there but is still open (verify with?q=LedgerId=<id>;ClosingStatus=O).
After the build
If you have not already done connection-guide Steps 1–2, do them now (Section D1 requires the integration user to exist with its role assigned and the security-data import run). Then return to the connection guide and complete Steps 4–8.
To retrieve the IDs used in the Apideck connection (or to script/test setups):
Run these with a separate administrator or setup account — never with the integration user. Repeated failed Basic sign-ins can lock it, breaking every connector call while token requests continue to succeed.
BASE=https://{host}.fa.{datacenter}.oraclecloud.com/fscmRestApi/resources/11.13.18.05
# Ledger:
curl -u "<user>:<password>" "$BASE/ledgersLOV?onlyData=true&limit=5"
# Data Access Set for that ledger:
curl -u "<user>:<password>" "$BASE/dataAccessSetLedgersLOV?onlyData=true&finder=ledgerIdAttrRowFinder;LedgerId={LedgerId}"