---
id: object/codeunit/561
type: object
title: Codeunit 561 "IC Data Exchange API"
summary: Codeunit 561 "IC Data Exchange API" in Base Application (Microsoft.Intercompany.DataExchange). 31 public procedures, 13 events, 2 event subscribers. Present since at least BC23, still in BC30, changed in BC25, BC28.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "28"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: c54bb913efc275ddde7d382835abe9b0bb43c653e9e153fbe31312b240fe3c37
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Intercompany/DataExchange/ICDataExchangeAPI.Codeunit.al
    title: src/Layers/W1/BaseApp/Finance/Intercompany/DataExchange/ICDataExchangeAPI.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/10631
    - change/bcapps/10488
object_type: codeunit
object_id: 561
name: IC Data Exchange API
namespace: Microsoft.Intercompany.DataExchange
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "25"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 76
  events: 13
  subscribers: 2
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 1
  calls: 4
  called_by: 4
  implements: 1
---

# Codeunit 561 "IC Data Exchange API"

> Codeunit 561 "IC Data Exchange API" in Base Application (Microsoft.Intercompany.DataExchange). 31 public procedures, 13 events, 2 event subscribers. Present since at least BC23, still in BC30, changed in BC25, BC28.

Base Application · Microsoft.Intercompany.DataExchange · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Intercompany/DataExchange/ICDataExchangeAPI.Codeunit.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| Permissions | tabledata "IC Inbox Transaction" = i, tabledata "IC Inbox Jnl. Line" = i, tabledata "IC Inbox Purchase Header" = i, tabledata "IC Inbox Purchase Line" = i, tabledata "IC Inbox Sales Header" = i, tabledata "IC Inbox Sales Line" = i, tabledata "IC Inbox/Outbox Jnl. Line Dim." = i, tabledata "IC Docume... |

## Events published

- `OnPopulateTransactionDataFromICOutgoingNotification(IndividualObject: JsonObject; var Success: Boolean)` (internal): Internal event for populating transaction data from intercompany outgoing notifications.
  - subscribers: [Codeunit 561 "IC Data Exchange API"](../codeunit/561.md) HandledOnPopulate
- `OnPostICPurchaseHeaderToICPartnerInboxOnBeforeBufferICInboxPurchaseHeaderInsert(var BufferICInboxPurchaseHeader: Record "Buffer IC Inbox Purch Header"; TempICPartnerICInboxPurchaseHeader: Record "IC Inbox Purchase Header" temporary; ICPartner: Record "IC Partner"; RegisteredPartner: Record "IC Partner" temporary)` (integration): Integration event raised before inserting buffer IC inbox purchase header data.
- `OnPostICSalesHeaderToICPartnerInboxOnBeforeBufferICInboxSalesHeaderInsert(var BufferICInboxSalesHeader: Record "Buffer IC Inbox Sales Header"; TempICPartnerICInboxSalesHeader: Record "IC Inbox Sales Header" temporary; ICPartner: Record "IC Partner"; RegisteredPartner: Record "IC Partner" temporary)` (integration): Integration event raised before inserting buffer IC inbox sales header data.
- `OnPostICSalesLineToICPartnerInboxOnBeforeBufferICInboxSalesLineInsert(var BufferICInboxSalesLine: Record "Buffer IC Inbox Sales Line"; TempICPartnerICInboxSalesLine: Record "IC Inbox Sales Line" temporary; ICPartner: Record "IC Partner")` (integration)
- `OnPopulateICInboxTransactionFromJsonOnBeforeInsert(var ICInboxTransaction: Record "IC Inbox Transaction"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxJournalLineFromJsonOnBeforeInsert(var ICInboxJournalLine: Record "IC Inbox Jnl. Line"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxPurchaseLineFromJsonOnBeforeInsert(var ICInboxPurchaseLine: Record "IC Inbox Purchase Line"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxSalesHeaderFromJsonOnBeforeInsert(var ICInboxSalesHeader: Record "IC Inbox Sales Header"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxSalesLineFromJsonOnBeforeInsert(var ICInboxSalesLine: Record "IC Inbox Sales Line"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxOutboxJnlLineDimFromJsonOnBeforeInsert(var ICInboxOutboxJnlLineDim: Record "IC Inbox/Outbox Jnl. Line Dim."; IndividualToken: JsonToken)` (integration)
- `OnPopulateICDocumentDimensionFromJsonOnBeforeInsert(var ICDocumentDimension: Record "IC Document Dimension"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICInboxPurchaseHeaderFromJsonOnBeforeInsert(var ICInboxPurchaseHeader: Record "IC Inbox Purchase Header"; IndividualToken: JsonToken)` (integration)
- `OnPopulateICCommentLineFromJsonOnBeforeInsert(var ICCommentLine: Record "IC Comment Line"; IndividualToken: JsonToken)` (integration)

## Event subscriptions

- OnAfterICInboxTransactionMovedToBuffer subscribes to Report "Move IC Trans. to Partner Comp" OnICInboxTransactionCreated
- HandledOnPopulate subscribes to Codeunit "IC Data Exchange API" OnPopulateTransactionDataFromICOutgoingNotification

## Procedures

- `GetICPartnerICGLAccount(ICPartner: Record "IC Partner"; var TempICPartnerICGLAccount: Record "IC G/L Account" temporary)`: Retrieves intercompany G/L accounts from a partner company via API connection. Populates temporary table with partner's G/L account structure for mapping and synchronization.
- `GetICPartnerICDimension(ICPartner: Record "IC Partner"; var TempICPartnerICDimension: Record "IC Dimension" temporary)`: Retrieves intercompany dimensions from a partner company via API connection. Populates temporary table with partner's dimension structure for validation and mapping.
- `GetICPartnerICDimensionValue(ICPartner: Record "IC Partner"; var TempICPartnerICDimensionValue: Record "IC Dimension Value" temporary)`: Retrieves intercompany dimension values from a partner company via API connection. Populates temporary table with partner's dimension values for transaction validation.
- `GetICPartnerFromICPartner(ICPartner: Record "IC Partner"; var TempRegisteredICPartner: Record "IC Partner" temporary)`: Retrieves intercompany partner data from the specified partner via API call. Uses current company's IC Partner Code for authentication and partner identification.
- `GetICPartnerFromICPartner(ICPartner: Record "IC Partner"; ICPartnerCode: Code[20]; var TempRegisteredICPartner: Record "IC Partner" temporary)`: Retrieves intercompany partner data using specified partner code for identification. Allows cross-partner data retrieval with explicit partner code specification.
- `GetICPartnerICSetup(ICPartnerName: Text; var TempICPartnerICSetup: Record "IC Setup" temporary)`: Retrieves intercompany setup configuration from a partner company by name.
- `GetICPartnerICSetup(ICPartner: Record "IC Partner"; var TempICPartnerICSetup: Record "IC Setup" temporary)`: Retrieves intercompany setup configuration from a partner company.
- `GetICPartnerGeneralLedgerSetup(ICPartnerName: Text; var TempICPartnerGeneralLedgerSetup: Record "General Ledger Setup" temporary)`: Retrieves general ledger setup configuration from a partner company by name.
- `GetICPartnerGeneralLedgerSetup(ICPartner: Record "IC Partner"; var TempICPartnerGeneralLedgerSetup: Record "General Ledger Setup" temporary)`: Retrieves general ledger setup configuration from a partner company.
- `GetICPartnerCompanyInformation(ICPartnerName: Text; var TempICPartnerCompanyInformation: Record "Company Information" temporary)`: Retrieves company information from a partner company by name.
- `GetICPartnerCompanyInformation(ICPartner: Record "IC Partner"; var TempICPartnerCompanyInformation: Record "Company Information" temporary)`: Retrieves company information from a partner company.
- `GetICPartnerBankAccount(ICPartner: Record "IC Partner"; var TempICPartnerBankAccount: Record "Bank Account" temporary)`: Retrieves bank account information from a partner company.
- `GetICPartnerICInboxTransaction(ICPartner: Record "IC Partner"; var TempICPartnerICInboxTransaction: Record "IC Inbox Transaction" temporary)`: Retrieves intercompany inbox transactions from a partner company.
- `GetICPartnerHandledICInboxTransaction(ICPartner: Record "IC Partner"; var TempICPartnerHandledICInboxTransaction: Record "Handled IC Inbox Trans." temporary)`: Retrieves handled intercompany inbox transactions from a partner company.
- `PostICTransactionToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxTransaction: Record "IC Inbox Transaction" temporary)`: Posts intercompany transaction data to partner's inbox via API connection. Handles secure transmission of transaction headers with proper validation and telemetry tracking.
- `PostICJournalLineToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxJnlLine: Record "IC Inbox Jnl. Line" temporary)`: Posts intercompany journal line data to partner's inbox via API for transaction processing. Transfers journal entries between partner companies using staging buffer tables.
- `PostICPurchaseHeaderToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxPurchaseHeader: Record "IC Inbox Purchase Header" temporary; var RegisteredPartner: Record "IC Partner" temporary)`: Posts intercompany purchase header data to partner's inbox via API connection.
- `PostICPurchaseLineToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxPurchaseLine: Record "IC Inbox Purchase Line" temporary)`: Posts intercompany purchase line data to partner's inbox via API connection.
- `PostICSalesHeaderToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxSalesHeader: Record "IC Inbox Sales Header" temporary; var RegisteredPartner: Record "IC Partner" temporary)`: Posts intercompany sales header data to partner's inbox via API connection.
- `PostICSalesLineToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxSalesLine: Record "IC Inbox Sales Line" temporary)`: Posts intercompany sales line data to partner's inbox via API connection.
- `PostICJournalLineDimensionToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxOutboxJnlLineDim: Record "IC Inbox/Outbox Jnl. Line Dim." temporary)`: Posts intercompany journal line dimension data to partner's inbox via API connection.
- `PostICDocumentDimensionToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICDocDim: Record "IC Document Dimension" temporary)`: Posts intercompany document dimension data to partner's inbox via API connection.
- `PostICCommentLineToICPartnerInbox(ICPartner: Record "IC Partner"; var TempICPartnerICInboxCommentLine: Record "IC Comment Line" temporary)`: Posts intercompany comment line data to partner's inbox via API connection.
- `EnqueueAutoAcceptedICInboxTransaction(ICPartner: Record "IC Partner"; ICInboxTransaction: Record "IC Inbox Transaction")`: Enqueues auto-accepted intercompany inbox transactions for asynchronous processing via job queue. Automatically processes transactions marked for auto-acceptance to streamline partner transaction flow.
- `PopulateICInboxTransactionFromJson(IndividualToken: JsonToken; var TempICPartnerICInboxTransaction: Record "IC Inbox Transaction" temporary)` (internal)
- `PopulateTransactionDataFromICOutgoingNotification(IndividualObject: JsonObject)` (internal)
- `PopulateICInboxTransactionFromJson(IndividualToken: JsonToken)` (internal)
- `CreateJsonContentFromICIncomingNotification(var TempICIncomingNotification: Record "IC Incoming Notification" temporary; var ContentJsonText: Text)` (internal)
- `CreateJsonContentFromICOutgoingNotification(var TempICOutgoingNotification: Record "IC Outgoing Notification" temporary; var ContentJsonText: Text)` (internal)
- `InsertICIncomingNotification(var ICIncomingNotification: Record "IC Incoming Notification")`: Creates and inserts a new incoming notification record for intercompany data exchange tracking. Initializes notification status and sets up job queue processing for partner communication.
- `CleanupICOutgoingNotification(var ICOutgoingNotification: Record "IC Outgoing Notification")`: Schedules cleanup of completed outgoing notification records via job queue processing. Removes processed notifications to maintain optimal system performance and data hygiene.

Plus 30 local procedures.

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 560 "CrossIntercompany Connector"](../codeunit/560.md) (8 calls: `CreateJsonContentFromICIncomingNotification → RemoveCurlyBracketsAndUpperCases`, `CreateJsonContentFromICOutgoingNotification → RemoveCurlyBracketsAndUpperCases`, `GetICPartnerBankAccount → RequestICPartnerBankAccount`, …)
- [Codeunit 428 "IC Mapping"](../codeunit/428.md) (1 call: `PostICTransactionToICPartnerInbox → GetFeatureTelemetryName`)
- [Codeunit 43 "Language"](../codeunit/43.md) (1 call: `ExtractCurrentUserAndChangeToEnglish → GetDefaultApplicationLanguageId`)
- [Codeunit 8703 "Feature Telemetry"](../codeunit/8703.md) (1 call: `PostICTransactionToICPartnerInbox → LogUsage`)

## Called by

- [Codeunit 534 "IC Read Notification JR"](../codeunit/534.md) (4 calls: `CleanupNotifications → CreateJsonContentFromICOutgoingNotification`, `GetICInboxTransaction → PopulateICInboxTransactionFromJson`, `ReadNotification → EnqueueAutoAcceptedICInboxTransaction`, …)
- [Codeunit 533 "IC New Notification JR"](../codeunit/533.md) (1 call: `SendNotification → CreateJsonContentFromICIncomingNotification`)
- [Page 30415 "API IC Incoming Notification"](../page/30415.md) (1 call: `OnInsertRecord → InsertICIncomingNotification`)
- [Page 30425 "API IC Outgoing Notification"](../page/30425.md) (1 call: `SyncronizationCompleted → CleanupICOutgoingNotification`)

## Implements

- [Interface "IC Data Exchange"](../interface/ic-data-exchange.md)

## Recent changes

- 2026-08-26 [#10631 Integration/main to releases 29.x 31a860b5](../../changes/bcapps/10631.md) (releases/29.x, BC29, feature)
- 2026-08-21 [#10488 Add integration event before inserting the outgoing IC sales line buffer](../../changes/bcapps/10488.md) (main, BC30, feature)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC25, BC28

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "codeunit", object_name: "IC Data Exchange API")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
