Consolidation
The figures only a group has: currency translation, non-controlling interest, joint ventures, the elimination adjustments, and the intercompany analysis behind them.
The endpoint
| Dataset | Path | Answers |
|---|---|---|
cta | /api/v1/organisations/{organisation}/consolidation/cta |
Currency translation, one line per company and account |
nci | …/consolidation/nci | Non-controlling interest, with the ownership records behind it |
journal-vouchers | …/consolidation/journal-vouchers | The group's share of profit of the companies it does not consolidate |
adjustments | …/consolidation/adjustments | The elimination and adjustment entries, with their lines |
intercompany | …/consolidation/intercompany | The intercompany pairs, their differences and the anomalies the detector raises |
Each needs a bearer token, a credential issued for the group, and the consolidation.read scope. A
dataset that is not one of the five answers 404.
A group is addressed by any company in it: the figures are the group's, so every answer names the group it
answered in group, whatever company the path named.
The parameters
Each dataset takes its own parameters. One a dataset does not take is refused by name rather than ignored, because it would look applied and change nothing.
| Dataset | Takes |
|---|---|
cta | period, scenario, basis,
flag, subsidiary_id |
nci, journal-vouchers | period, scenario,
basis, subsidiary_id |
adjustments | period, scenario |
intercompany | period, scenario, flag,
materiality |
| Parameter | What it does |
|---|---|
period | The month, Mon-YYYY such as Sep-2026. Answers the
company's reporting month when it is not given. |
scenario | Actual, Budget or Forecast.
Answers Actual when it is not given. |
basis | YTD or MTD. Answers YTD when it is
not given. |
flag | The accounting standard: local, ifrs,
aasb, us_gaap, uk_gaap, sfrs,
local_gaap. Answers local when it is not given. |
subsidiary_id | One company of the group, as
/organisations answers its id. |
materiality | An amount of 0 or more: what counts as a difference worth reporting.
Answers 0.5 when it is not given. |
Currency translation
GET …/consolidation/cta?period=Sep-2026
{
"dataset": "cta", "group": { "id": 14, "name": "Demo Group" },
"period": "Sep-2026", "scenario": "Actual", "basis": "YTD", "flag": "local",
"entities": [ { "id": 177, "name": "Demo Sales Company", "functional_currency": "SGD",
"presentation_currency": "USD" } ],
"lines": [
{ "entity_id": 177, "component": "Non-P&L Equity Translation", "account_id": 3967,
"account_name": "G-3000 - Share Capital", "amount": 219.85, "basis": "YTD",
"source_period": "Jan 2026 - Sep 2026", "line_key": "9cfb21b9be6f95ed230402a6acf57cd2" },
{ "entity_id": 177, "component": "Retained Earnings CTA", "account_id": 3969,
"account_name": "G-3100 - Retained Earnings", "amount": -25.94, "basis": "YTD",
"source_period": "Jan 2026 - Sep 2026", "line_key": "807dc2733ce2d04865fc6fc16c737c7e" }
],
"summary": { "entity_count": 1, "line_count": 6, "total_amount": 625.18 }
}
An amount is a debit less a credit, so a credit answers negative. source_period names the months
the figure was read over: a year to date covers the fiscal year so far, a month to date is that month.
line_key identifies a line across calls.
Non-controlling interest
GET …/consolidation/nci?period=Sep-2026
{
"dataset": "nci", "group": { "id": 14, "name": "Demo Group" },
"lines": [
{ "subsidiary_id": 177, "subsidiary_name": "Demo Sales Company",
"component": "NCI Share of Profit",
"period": "Jan 2026 - Sep 2026",
"formula": "pnl_movement × NCI% × average_fx (segmented by ownership period)",
"base": 510459.43, "nci_percent": 20, "nci_amount": 102091.89,
"posting_account_id": 3995, "account_name": "NCI - Share of Profit",
"offset_account_id": 3973, "offset_account_name": "Sales Revenue",
"line_key": "…", "nci_percent_ratio": 0.2 }
],
"summary": { "entity_count": 2, "line_count": 38, "debit_total": 316316.69,
"credit_total": 316316.69, "is_balanced": true, "posting_date": "2026-09-30",
"scenario": "Actual", "basis": "YTD", "movement_start": "2026-01-01" },
"ownerships": [
{ "id": 47, "subsidiary_id": 177, "subsidiary_name": "Demo Sales Company",
"parent_name": "Demo Group", "effective_date": "2024-10-01", "transaction_type": "ACQUIRE",
"transacted_percent": "80.0000", "cumulative_parent_percent": "80.0000",
"goodwill_amount": "5000.00", "consolidate": 1, "nci_percent": 20,
"transacted_percent_ratio": 0.8, "cumulative_parent_percent_ratio": 0.8,
"nci_percent_ratio": 0.2, "goodwill_or_gain": 5000 }
]
}
A line states the base it was computed from and the share applied to it, so a caller can check the figure
without re-deriving it. ownerships answers the ownership record each company's share comes
from.
journal-vouchers answers the same shape, for the companies the group holds but does not
consolidate: its lines are the group's own share of their profit, and its
summary.total_share_of_profit is their total.
The adjustments
GET …/consolidation/adjustments?period=Sep-2026
{
"dataset": "adjustments", "group": { "id": 14, "name": "Demo Group" },
"period": "Sep-2026", "scenario": "Actual",
"entries": [
{ "id": 32556, "reference": "NCI-AUTO-PNL-202609-ACTUAL-0042",
"description": "Auto NCI P&L Sep 2026 (Demo Service Company)",
"data_type": "nci_pnl", "type": "NCI P&L",
"from_organisation": "Demo Service Company", "to_organisation": "Demo Group",
"route_summary": "Demo Service Company -> Demo Group",
"debit_total": 12927.5, "credit_total": 12927.5, "net_total": -0,
"line_count": 18, "amount": 12927.5, "date_display": "30 Sep 2026",
"lines": [ { "account_id": 3973, "account": "G-4000 - Sales Revenue",
"description": "Auto NCI share of profit", "debit": 6191.8, "credit": 0,
"net": 6191.8 } ] }
],
"summary": [ { "data_type": "nci_pnl", "type": "NCI P&L", "entry_count": 2,
"line_count": 36, "amount": 37962.98 } ]
}
An entry's amount is its larger side, so a balanced entry reports one figure rather than two.
summary answers one row per entry type.
The intercompany analysis
GET …/consolidation/intercompany?period=Sep-2026&materiality=0.5
{
"dataset": "intercompany", "group": { "id": 14, "name": "Demo Group" },
"period": "Sep-2026", "scenario": "Actual", "flag": "local",
"pairs": [
{ "id": "posted-31854", "left_entity_id": null, "left_entity": "Demo Sales Company",
"right_entity_id": null, "right_entity": "Demo Service Company",
"pair": "Demo Sales Company / Demo Service Company",
"data_type": "elimination_inventory_transfer", "amount": 4300,
"sales": 4300, "purchases": 4300, "ar": 0, "ap": 0, "net_ic": 0, "net_difference": 0,
"confidence": "posted", "status": "posted" }
],
"entity_pairs": [
{ "entity": "Demo Sales Company", "counterparty": "Demo Service Company",
"sales": 47368, "purchases": 47368, "ar": 0, "ap": 0, "net_ic": 0 }
],
"anomalies": [
{ "rule": "RULE_3_BALANCE_RECIPROCITY", "severity": "warning", "entity_id": 14,
"account_code": "G-1300", "counterpart_entity_id": 177, "counterpart_account_code": "SA-IC-AP-SE",
"reporting_balance": 201366.13, "counterpart_reporting_balance": 37256.3838,
"net_difference": 238622.5138, "risk_level": "medium",
"explanation": "The likely intercompany pair does not fully offset in reporting currency." }
],
"summary": { "pair_count": 7, "pair_amount": 580635.78, "total_anomalies": 10 }
}
A pair is either posted - an elimination the group has recorded, whose two companies are named -
or detected, which the analysis found and nobody has posted yet. entity_pairs adds
the pairs up per counterparty, and anomalies lists what the detector flagged. A difference is
reported, never corrected: this read says what the two sides say, and the materiality it was
asked for decides what is worth a pair.
What is refused
| Answer | When |
|---|---|
404 not_found | The dataset is not one of the five, or the company is not one the credential was issued for. |
422 invalid_value | period is not a month, scenario is
not one, basis is neither YTD nor MTD, flag is not an accounting standard,
subsidiary_id is not a company id, or materiality is not an amount of 0 or
more. |
422 unknown_field | A parameter the dataset does not take; the answer names the ones it does. |
403 | The credential does not hold consolidation.read. |