SAP IDocs and EDI Integration

Type: ERP Integration System: SAP S/4HANA (2408) Confidence: 0.92 Sources: 8 Verified: 2026-03-01 Freshness: 2026-03-01

TL;DR

System Profile

SAP IDocs are the native document exchange format used across all SAP ERP systems since R/3. In S/4HANA (release 2408), IDocs remain fully supported for on-premise and private cloud deployments. The IDoc framework handles both EDI (Electronic Data Interchange) with external trading partners via X12/EDIFACT translation and ALE (Application Link Enabling) for SAP-to-SAP distribution. S/4HANA Cloud Public Edition (multi-tenant) does NOT support IDocs -- use OData or SOAP APIs instead. [src4, src8]

PropertyValue
VendorSAP
SystemSAP S/4HANA 2408
API SurfaceIDoc / EDI / ALE
Current VersionIDoc release 7.40+ (S/4HANA 2408)
Editions CoveredOn-Premise, Private Cloud (RISE), ECC 6.0 (legacy)
DeploymentOn-Premise / Private Cloud / Hybrid
API DocsSAP Help -- IDoc Interface
StatusGA (stable, actively maintained)

API Surfaces & Capabilities

IDocs are not a traditional REST/SOAP API but a document-based asynchronous messaging system. The IDoc framework provides multiple "surfaces" for exchanging data. [src1, src5]

API SurfaceProtocolBest ForMax Records/RequestRate LimitReal-time?Bulk?
IDoc via tRFCTransactional RFCALE distribution between SAP systemsUnlimited (1 IDoc = 1 document)Work process dependentNear real-timeYes (packet mode)
IDoc via File PortFlat file / XMLEDI subsystem integration (Seeburger, OpenText)File size limited by OSN/A (file system)No (batch)Yes
IDoc via HTTP PortHTTPS/XMLCloud middleware (BTP, MuleSoft, Boomi)1 IDoc per HTTP POSTServer-dependentNear real-timeNo
IDoc via XML PortXML/RFCXML-based integration with SOA middleware1 IDoc per callWork process dependentNear real-timeNo
ALE DistributiontRFC + IDocMaster data distribution across SAP landscapeConfigurable packet sizeWork process dependentNear real-timeYes

Rate Limits & Quotas

IDocs do not have traditional API rate limits. Instead, throughput is constrained by SAP system resources: dialog/background work processes, database I/O, and RFC connection pools. [src5, src6]

Per-Request Limits

Limit TypeValueApplies ToNotes
Max IDoc size~2 GB (roll area limit)Single IDocPractical limit is ~100K segments per IDoc
Max segments per IDoc999,999 (theoretical)Data recordsRarely exceeds 10,000 in practice
Max segment data length1,000 bytesSingle segment (SDATA field)Fixed-width character format
Control record fields524 bytesEDI_DC40 structureIncludes sender, receiver, message type, IDoc type
Max packet size (ALE)Configurable (default 1)Outbound dispatchSet in partner profile; increase to 50-200 for bulk

Rolling / Daily Limits

Limit TypeValueWindowEdition Differences
Dialog work process timeout600 seconds (default)Per processConfigurable via rdisp/max_wprun_time
Background job timeout86,400 seconds (24h)Per jobConfigurable; no hard SAP limit
RFC connections100 (default)Per destinationSet in SM59; increase for high-volume
Parallel IDoc processing1-20 work processesConcurrentSet via RBDAPP01 parallelization parameter

Transaction / Governor Limits

Limit TypePer-Transaction ValueNotes
Dialog step timeout600s defaultConfigurable via profile parameter; exceeding aborts IDoc processing
Memory per work process2 GB (64-bit)Extended memory + roll area; large IDocs can exhaust this
Database locksTable-dependentMATMAS IDocs on same material can deadlock if processed in parallel
Commit frequencyEvery N IDocs (configurable)RBDAPP01 parameter PACKET_SIZE; default 1; set to 50-100 for throughput

Authentication

IDocs use SAP's internal authentication mechanisms rather than external API keys or OAuth. Authentication is configured through partner profiles, logical systems, and RFC destinations. [src5, src6]

FlowUse WhenToken LifetimeRefresh?Notes
Trusted RFC (SM59)SAP-to-SAP ALE distributionSession-basedAuto-refreshRequires trust relationship between systems
Standard RFC (SM59)Middleware integration via tRFC portSession-basedAuto-refreshStored credentials in RFC destination
File port (WE21)EDI subsystem reads/writes filesN/A (filesystem)N/AOS-level file permissions control access
HTTP port (WE21)Cloud middleware via HTTPSCertificate-basedN/AMutual TLS recommended for production
X.509 certificateSNC-encrypted RFC connectionsCertificate validityAnnual renewalRequired for production cross-system communication

Authentication Gotchas

Constraints

Integration Pattern Decision Tree

START -- User needs IDoc/EDI integration with SAP
|-- What's the deployment model?
|   |-- S/4HANA Cloud Public Edition?
|   |   |-- YES --> STOP. IDocs not available. Use OData/SOAP APIs.
|   |   +-- NO --> Continue
|   +-- On-Premise / Private Cloud / ECC?
|       +-- Continue below
|-- What's the integration pattern?
|   |-- EDI with external trading partners (X12/EDIFACT)
|   |   |-- Need real-time? --> tRFC port to EDI subsystem (Seeburger, OpenText)
|   |   +-- Batch acceptable? --> File port + scheduled EDI translation
|   |-- ALE distribution (SAP-to-SAP)
|   |   |-- Master data replication? --> MATMAS/DEBMAS/CREMAS via BD64 model
|   |   |-- Transactional data? --> ORDERS/INVOIC/DESADV via output determination
|   |   +-- Need filtering? --> ALE distribution model with filters (BD64)
|   |-- Middleware integration (MuleSoft, Boomi, BTP)
|   |   |-- Cloud middleware? --> HTTP/XML port (WE21)
|   |   |-- On-premise middleware? --> tRFC port or file port
|   |   +-- SAP BTP? --> Cloud Connector + RFC or IDoc adapter
|   +-- File-based batch
|       +-- File port (WE21) + OS-level file transfer (SFTP/SCP)
|-- Which direction?
|   |-- Inbound (into SAP) --> Configure process code + partner profile inbound params
|   |-- Outbound (from SAP) --> Configure output determination OR ALE distribution model
|   +-- Bidirectional --> Configure BOTH; use change pointers for master data sync
+-- Error tolerance?
    |-- Zero-loss required --> Enable IDoc serialization + monitoring via BD87
    +-- Best-effort --> Standard IDoc processing with alerting on status 51/56

Quick Reference

Core IDoc Architecture

ComponentDescriptionSAP TableTransaction
Control RecordMetadata: sender, receiver, message type, IDoc type, statusEDIDC (EDI_DC40)WE02, WE05
Data RecordsBusiness payload organized in hierarchical segmentsEDID4WE02
Status RecordsProcessing history with timestamps and status codesEDIDSWE02
Message TypeLogical business document intent (e.g., ORDERS, INVOIC)EDIMSGWE81
Basic TypePhysical IDoc structure and segment layout (e.g., ORDERS05)EDBAS, EDBASTWE30
Extension TypeCustom additions to standard basic types (Z-prefix)EDIDC.CIMTYPE fieldWE30
SegmentReusable data structure within an IDoc (e.g., E1EDK01)EDISDEFWE31
Partner ProfilePer-partner, per-message-type routing and processing rulesEDPP1WE20
PortCommunication channel (tRFC, file, HTTP, XML)EDIPORTWE21
Process CodeLinks inbound IDoc to function module for postingEDIPOAWE42
Distribution ModelALE routing rules: which message types flow between systemsTBD*BD64

Common IDoc Message Types and Basic Types

Message TypeBasic TypeBusiness DocumentDirectionSAP Module
ORDERSORDERS05Purchase Order / Sales OrderInbound/OutboundMM/SD
INVOICINVOIC02Invoice (AR/AP)Inbound/OutboundFI/MM
DESADVDELVRY05Advance Shipping Notification (ASN)OutboundSD/LE
MATMASMATMAS05Material MasterOutbound (ALE)MM
DEBMASDEBMAS07Customer MasterOutbound (ALE)SD
CREMASCREMAS07Vendor MasterOutbound (ALE)MM
WMMBIDWMMBID02Goods MovementInboundWM
SHPMNTSHPMNT05ShipmentOutboundLE
HRMD_AHRMD_A07HR Master DataOutbound (ALE)HR
PAYEXTPEXR2002Payment OrderOutboundFI
FIDCCPFIDCCP02Accounting DocumentOutboundFI

Key Transaction Codes

TransactionPurposeWhen to Use
WE02 / WE05Display IDoc listMonitor IDoc processing status
WE19IDoc test toolTest inbound processing with modified data
WE20Partner profilesConfigure per-partner IDoc routing
WE21Port definitionDefine tRFC, file, HTTP, or XML ports
WE30IDoc type developmentView/create basic types and extensions
WE31Segment definitionCreate custom Z-segments for extensions
WE42Inbound process codesMap message types to posting function modules
WE41Outbound process codesMap message types to outbound function modules
WE81Message type assignmentAssign message types to basic types
BD64ALE distribution modelDefine which IDocs flow between logical systems
BD87IDoc reprocessingFilter, edit, and reprocess failed IDocs
BD20Process inbound IDocsReprocess IDocs in status 64 or 66
BD83Reprocess outbound IDocsReprocess IDocs in status 02, 04, 05, 25, 29
SM59RFC destinationsConfigure communication channels between systems
SALEALE configurationCentral ALE customizing menu

Step-by-Step Integration Guide

1. Define logical systems and assign to client (SALE/BD54)

Create logical systems for the sender and receiver in transaction SALE > Basic Settings > Logical Systems. Assign the local logical system to the client. This establishes the identity of each system in the ALE framework. [src5, src6]

Transaction: SALE
Path: Basic Settings > Logical Systems > Define Logical System
  - Create: CLNT100 (local SAP system)
  - Create: EDISUB01 (EDI subsystem)

Transaction: SALE
Path: Basic Settings > Logical Systems > Assign Logical System to Client
  - Client 100 --> CLNT100

Verify: Transaction SCC4 -- Check that client 100 shows logical system CLNT100.

2. Define ports for IDoc communication (WE21)

Create a port that defines HOW IDocs are transmitted. For EDI subsystem integration, use a file port or tRFC port. For cloud middleware, use an HTTP port. [src6]

Transaction: WE21

File Port (for EDI subsystem):
  - Port: EDIPORT1
  - Description: EDI Subsystem File Port
  - Function module: EDI_PATH_CREATE_CLIENT_DOCNUM
  - Outbound directory: /usr/sap/<SID>/edi/outbound/
  - Inbound directory: /usr/sap/<SID>/edi/inbound/

tRFC Port (for ALE):
  - Port: TRFC01
  - Description: ALE tRFC Port
  - RFC destination: EDISUB01 (from SM59)
  - Version: IDoc record types SAP Release 4.x

Verify: Transaction WE21 -- Port EDIPORT1 shows green status. Test with "Test outbound processing."

3. Create partner profiles (WE20)

Define WHO sends/receives IDocs and WHAT message types are exchanged. Every partner-message type combination needs explicit configuration. [src6]

Transaction: WE20

Partner Number: EDISUB01
Partner Type: LS (Logical System)

Outbound Parameters:
  - Message Type: ORDERS
  - Receiver Port: EDIPORT1
  - Basic Type: ORDERS05
  - Output Mode: Transfer IDoc immediately (or Collect IDocs)
  - Pack Size: 1 (increase to 50-100 for high-volume)

Inbound Parameters:
  - Message Type: INVOIC
  - Process Code: INVL (or custom process code)
  - Triggering Event: Immediate processing (or background)

Verify: Transaction WE20 -- Partner EDISUB01 shows both inbound and outbound parameters with green checks.

4. Configure ALE distribution model (BD64)

For master data distribution, create a distribution model that defines the flow of message types between logical systems. [src5]

Transaction: BD64

1. Switch to Edit mode
2. Create Model View: ZEDIMODEL "EDI Integration Model"
3. Add Message Type:
   - Sender: CLNT100
   - Receiver: EDISUB01
   - Message Type: ORDERS
4. Repeat for each message type (INVOIC, DESADV, MATMAS, etc.)
5. Save and distribute model (Environment > Generate Partner Profiles)

Verify: Transaction BD64 -- Model ZEDIMODEL shows all configured message types with sender/receiver pairs.

5. Test outbound IDoc generation (WE19)

Generate a test IDoc to verify the entire outbound chain works. [src3]

Transaction: WE19

1. Enter Basic Type: ORDERS05
2. Click "Create"
3. Fill control record:
   - RCVPRT: LS
   - RCVPRN: EDISUB01
   - SNDPRT: LS
   - SNDPRN: CLNT100
   - MESTYP: ORDERS
4. Fill data segments (E1EDK01, E1EDP01, etc.) with test data
5. Click "Standard Outbound Processing"
6. Note the generated IDoc number

Verify: Transaction WE02 -- Search for IDoc number -- Status should be 03 (Data passed to port OK) or 30 (IDoc ready for dispatch).

6. Monitor and reprocess failed IDocs (BD87)

Set up monitoring for failed IDocs and establish a reprocessing workflow. [src3]

Transaction: BD87

1. Enter selection criteria:
   - Date: today's date range
   - Direction: Inbound / Outbound / Both
   - Status: 51 (not posted), 56 (error), 02 (port error)
2. Execute to display failed IDocs
3. Select IDoc --> Display --> Identify error in status record
4. Fix root cause (master data, authorization, config)
5. Select IDoc --> Process --> Reprocess

Verify: After reprocessing, IDoc status changes from error (51/56) to success (53 for inbound, 03 for outbound).

Code Examples

ABAP: Send outbound IDoc programmatically

* Input:  Purchase order data to send as ORDERS05 IDoc
* Output: IDoc number and communication status

DATA: ls_control   TYPE edidc,
      lt_data      TYPE STANDARD TABLE OF edidd,
      ls_data      TYPE edidd,
      ls_e1edk01   TYPE e1edk01,
      lv_idoc_num  TYPE edi_docnum.

* Fill control record
ls_control-mestyp = 'ORDERS'.          " Message type
ls_control-idoctp = 'ORDERS05'.        " Basic type
ls_control-rcvprt = 'LS'.              " Receiver partner type
ls_control-rcvprn = 'EDISUB01'.        " Receiver partner number
ls_control-sndprt = 'LS'.              " Sender partner type
ls_control-sndprn = 'CLNT100'.         " Sender partner number

* Fill header segment E1EDK01
ls_e1edk01-belnr = '4500012345'.       " Document number
ls_e1edk01-bsart = 'NB'.              " Document type
ls_data-segnam = 'E1EDK01'.            " Segment name
ls_data-sdata  = ls_e1edk01.           " Segment data
APPEND ls_data TO lt_data.

* Create and dispatch IDoc
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
  EXPORTING
    master_idoc_control = ls_control
  TABLES
    communication_idoc_control = lt_comm_control
    master_idoc_data = lt_data
  EXCEPTIONS
    error_in_idoc_control = 1
    error_writing_idoc_status = 2
    error_in_idoc_data = 3
    OTHERS = 4.

IF sy-subrc = 0.
  COMMIT WORK.
  READ TABLE lt_comm_control INDEX 1 INTO ls_comm.
  lv_idoc_num = ls_comm-docnum.
  WRITE: / 'IDoc created:', lv_idoc_num.
ELSE.
  WRITE: / 'Error creating IDoc:', sy-subrc.
ENDIF.

Python: Process IDoc XML file from SAP file port

# Input:  IDoc XML file exported from SAP file port
# Output: Parsed IDoc data with control record, segments, and status

import xml.etree.ElementTree as ET
from dataclasses import dataclass, field
from typing import Optional

@dataclass
class IdocSegment:
    name: str
    data: dict
    children: list = field(default_factory=list)

@dataclass
class IdocDocument:
    idoc_number: str
    message_type: str
    basic_type: str
    sender: str
    receiver: str
    segments: list = field(default_factory=list)

def parse_idoc_xml(file_path: str) -> IdocDocument:
    """Parse SAP IDoc XML file into structured data."""
    tree = ET.parse(file_path)
    root = tree.getroot()

    ctrl = root.find('.//EDI_DC40')
    if ctrl is None:
        raise ValueError("No EDI_DC40 control record found")

    doc = IdocDocument(
        idoc_number=ctrl.findtext('DOCNUM', ''),
        message_type=ctrl.findtext('MESTYP', ''),
        basic_type=ctrl.findtext('IDOCTYP', ''),
        sender=ctrl.findtext('SNDPRN', ''),
        receiver=ctrl.findtext('RCVPRN', ''),
    )

    for elem in root.iter():
        if elem.tag.startswith('E1') or elem.tag.startswith('Z1'):
            seg_data = {child.tag: child.text for child in elem
                       if not child.tag.startswith('E1')
                       and not child.tag.startswith('Z1')}
            doc.segments.append(IdocSegment(name=elem.tag, data=seg_data))

    return doc

idoc = parse_idoc_xml('/usr/sap/S4H/edi/outbound/ORDERS05_001.xml')
print(f"IDoc {idoc.idoc_number}: {idoc.message_type} "
      f"from {idoc.sender} to {idoc.receiver}")
print(f"Segments: {len(idoc.segments)}")

cURL: Test IDoc HTTP port connectivity

# Input:  SAP system URL, HTTP port credentials, test IDoc XML
# Output: HTTP response with IDoc posting status

# Test connectivity to SAP IDoc HTTP port
curl -X POST \
  "https://sap-host:8443/sap/bc/srt/idoc?sap-client=100" \
  -H "Content-Type: application/xml" \
  -u "EDIUSER:password" \
  --cert client.pem \
  --key client-key.pem \
  -d @test_idoc.xml \
  -v

# Expected response (success):
# HTTP/1.1 200 OK
# <IDOC_RESPONSE>
#   <DOCNUM>0000000012345678</DOCNUM>
#   <STATUS>64</STATUS>
# </IDOC_RESPONSE>

Data Mapping

IDoc Segment Structure -- ORDERS05

SegmentLevelDescriptionKey FieldsMandatory
E1EDK011Document HeaderBELNR (doc number), BSART (doc type), CURCY (currency)Yes
E1EDK142Header OrganizationQUESSION (org data qualifier), ORGID (org value)Yes
E1EDK032Header DateIDDAT (date qualifier), DATUM (date value)Yes
E1EDK042Header TaxMWSKZ (tax code), MSATZ (tax rate)No
E1EDK052Header ConditionsALESSION (condition type), BEESSION (condition value)No
E1EDKA12Header PartnerPARVW (partner function: AG=sold-to, WE=ship-to, RE=bill-to)Yes
E1EDP011Line ItemPOSEX (item number), MENGE (quantity), MENEE (UoM)Yes
E1EDP022Item ReferenceQUESSION (reference qualifier), BESSION (reference number)No
E1EDP192Item Object IDQUESSION (ID qualifier), IDTNR (material number)Yes
E1EDP202Item ScheduleWMENG (scheduled quantity), EDATU (delivery date)Yes

Data Type Gotchas

Error Handling & Failure Points

Common IDoc Status Codes

StatusDirectionMeaningCauseResolution
02OutboundError passing data to portRFC destination down or file path inaccessibleCheck SM59 destination; verify file directory permissions
03OutboundData passed to port OKSuccessNo action needed
04OutboundError in EDI subsystem control infoEDI subsystem rejected the IDocCheck EDI subsystem logs; verify partner profile
12OutboundDispatch OKIDoc successfully transmittedNo action needed
30OutboundIDoc ready for dispatch (ALE)Waiting for RSEOUT00 to sendRun program RSEOUT00 or transaction WE14
51InboundApplication document not postedBusiness rule violation (missing master data, auth)Fix master data or authorization; reprocess via BD87
53InboundApplication document postedSuccessNo action needed
56InboundIDoc with errors addedSyntax or structural error in IDoc dataFix IDoc data via BD87 edit; reprocess
64InboundIDoc ready to be transferred to applicationWaiting for RBDAPP01 to postRun BD20 or program RBDAPP01
66InboundIDoc waiting for predecessor (serialization)Predecessor IDoc not yet processedProcess predecessor first; then run BD20

Failure Points in Production

Anti-Patterns

Wrong: Processing all IDocs immediately with "Transfer IDoc immediately"

Partner Profile (WE20) Outbound Parameters:
  Output Mode: Transfer IDoc immediately
  Pack Size: 1

// BAD -- Fires a separate RFC call for EVERY IDoc.
// For high-volume scenarios (1000+ IDocs/hour), this floods
// the RFC connection pool and causes timeouts.

Correct: Use "Collect IDocs" mode with scheduled dispatch

Partner Profile (WE20) Outbound Parameters:
  Output Mode: Collect IDocs
  Pack Size: 100

// GOOD -- Schedule job RSEOUT00 (WE14) every 5-15 minutes.
// Batches IDocs and sends them in packets,
// reducing RFC overhead by 99%.

Wrong: Using WE19 to reprocess production IDocs

// BAD -- WE19 creates a NEW IDoc number, leaving the original in error.
// You now have TWO IDocs: one failed, one (maybe) successful.
// Duplicate processing risk if the original is later reprocessed.
Transaction WE19 --> Enter failed IDoc number --> Modify data -->
Click "Standard Inbound Processing"

Correct: Use BD87 to edit and reprocess with the SAME IDoc number

// GOOD -- Same IDoc number is retained.
// Status history shows the edit and reprocessing. No duplicate risk.
Transaction BD87 --> Filter for failed IDocs --> Select IDoc -->
Data Record > Display/Change --> Fix the data --> Save --> Reprocess

Wrong: Hardcoding segment field positions when parsing IDoc flat files

# BAD -- field positions change between IDoc releases and extensions
order_number = line[10:20]  # Assumes BELNR is at position 10-20

Correct: Parse by segment name and field definition from SAP metadata

# GOOD -- use segment definitions from WE60/WE30 export
# Parse XML IDocs instead of flat files when possible
import xml.etree.ElementTree as ET
root = ET.parse('idoc.xml').getroot()
for seg in root.iter('E1EDK01'):
    order_number = seg.findtext('BELNR', '')

Common Pitfalls

Diagnostic Commands

# Check IDoc processing status for today
Transaction WE05: Enter date range --> Execute
  Look for: Red/Yellow status indicators

# Count IDocs by status
Transaction SE16: Table EDIDC
  Selection: CREDAT = today, STATUS = 51 (or 56, 02)

# Check partner profile configuration
Transaction WE20: Enter partner number
  Verify: Outbound params (message type, port, basic type)
  Verify: Inbound params (process code, triggering event)

# Verify port connectivity
Transaction WE21: Select port --> Test Outbound Processing
  Success: "IDoc dispatched successfully"
  Failure: Check SM59 for RFC destination status

# Check RFC destination health
Transaction SM59: Select destination --> Connection Test
  Success: Response time < 100ms
  Failure: Check network, credentials, target system status

# Monitor IDoc processing queue
Transaction SMQ1: Check outbound tRFC queue
Transaction SMQ2: Check inbound tRFC queue
  Look for: stuck entries with LUW errors

# Check ALE distribution model
Transaction BD64: Display model --> Verify sender/receiver/message types

# Verify IDoc archiving status
Transaction SARA: Archiving object IDOC --> Check last run date

Version History & Compatibility

ReleaseDateStatusKey ChangesMigration Notes
S/4HANA 24082024-10CurrentIncremental segment updatesCheck MATNR_LONG support in middleware
S/4HANA 20232023-10SupportedE1IDOCENHANCEMENT generic extensionEnable if using key-value custom data
S/4HANA 20202020-10Supported37 changes in INVOIC02 (4 new functional fields)Re-export IDoc schemas; update MATNR mapping
ECC 6.0 EHP82016MaintenanceLast ECC enhancement packagePlan migration to S/4HANA
ECC 6.0 EHP72014EOLUnicode conversion impact on IDocsEnsure all IDoc files are UTF-8

Deprecation Policy

SAP maintains backward compatibility for IDoc basic types across releases -- existing basic types are never removed, only extended with new segments. SAP has confirmed IDocs remain supported in S/4HANA on-premise and private cloud through at least 2030, though the strategic direction is toward OData and event-based APIs for new development. [src8]

When to Use / When Not to Use

Use WhenDon't Use WhenUse Instead
EDI with external trading partners (X12/EDIFACT)S/4HANA Cloud Public Edition (multi-tenant)OData APIs / SOAP services
ALE master data distribution (SAP-to-SAP)Need synchronous request/responseBAPI/RFC via SM59
High-volume batch document exchange (1000+ docs/day)Real-time individual record lookupOData v4 API
Existing EDI subsystem integration (Seeburger, OpenText)New greenfield cloud integrationSAP Event Mesh + Cloud Integration
Regulated industries requiring audit trailSimple master data queryCDS views / OData
Complex document structures (nested line items)Point-to-point API callREST API with JSON

Important Caveats

Related Units