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

DatasetPathAnswers
cta/api/v1/organisations/{organisation}/consolidation/cta Currency translation, one line per company and account
nci…/consolidation/nciNon-controlling interest, with the ownership records behind it
journal-vouchers…/consolidation/journal-vouchersThe group's share of profit of the companies it does not consolidate
adjustments…/consolidation/adjustmentsThe elimination and adjustment entries, with their lines
intercompany…/consolidation/intercompanyThe 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.

DatasetTakes
ctaperiod, scenario, basis, flag, subsidiary_id
nci, journal-vouchersperiod, scenario, basis, subsidiary_id
adjustmentsperiod, scenario
intercompanyperiod, scenario, flag, materiality
ParameterWhat it does
periodThe month, Mon-YYYY such as Sep-2026. Answers the company's reporting month when it is not given.
scenarioActual, Budget or Forecast. Answers Actual when it is not given.
basisYTD or MTD. Answers YTD when it is not given.
flagThe accounting standard: local, ifrs, aasb, us_gaap, uk_gaap, sfrs, local_gaap. Answers local when it is not given.
subsidiary_idOne company of the group, as /organisations answers its id.
materialityAn 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

AnswerWhen
404 not_foundThe dataset is not one of the five, or the company is not one the credential was issued for.
422 invalid_valueperiod 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_fieldA parameter the dataset does not take; the answer names the ones it does.
403The credential does not hold consolidation.read.