Documentation Index Fetch the complete documentation index at: https://mintlify.com/idempiere/idempiere/llms.txt
Use this file to discover all available pages before exploring further.
iDempiere’s SOAP API provides comprehensive web services with WSDL definitions for robust enterprise integration. All services support standard SOAP protocols with XML Schema validation.
Service URLs
ModelADService
Service Endpoint
WSDL URL
Schema Location
https://your-server:8443/ADInterface/services/ModelADService
CompositeService
https://your-server:8443/ADInterface/services/compositeInterface
SOAP Configuration
Namespace
xmlns:_0="http://idempiere.org/ADInterface/1_0"
SOAP Binding
Style : RPC
Use : LITERAL
Parameter Style : WRAPPED
Data Binding
Services use Apache XMLBeans for data binding, providing type-safe XML manipulation.
ModelADService Operations
createData
Create a new record in an iDempiere table.
SOAP Request
SOAP Response
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:createData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > CreateBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 0 </ _0:RecordID >
< _0:Action > Create </ _0:Action >
< _0:DataRow >
< _0:field column = "Value" >
< _0:val > CUST-100 </ _0:val >
</ _0:field >
< _0:field column = "Name" >
< _0:val > <![CDATA[Acme Corporation]]> </ _0:val >
</ _0:field >
< _0:field column = "IsCustomer" >
< _0:val > Y </ _0:val >
</ _0:field >
< _0:field column = "C_BP_Group_ID" >
< _0:val > 103 </ _0:val >
</ _0:field >
</ _0:DataRow >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
< _0:user > WebService </ _0:user >
< _0:pass > WebService </ _0:pass >
< _0:lang > en_US </ _0:lang >
< _0:ClientID > 11 </ _0:ClientID >
< _0:RoleID > 50004 </ _0:RoleID >
< _0:OrgID > 11 </ _0:OrgID >
< _0:WarehouseID > 103 </ _0:WarehouseID >
< _0:stage > 9 </ _0:stage >
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:createData >
</ soapenv:Body >
</ soapenv:Envelope >
readData
Read a single record by RecordID.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:readData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > ReadBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 1000025 </ _0:RecordID >
< _0:Action > Read </ _0:Action >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:readData >
</ soapenv:Body >
</ soapenv:Envelope >
updateData
Update an existing record.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:updateData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > UpdateBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 1000025 </ _0:RecordID >
< _0:Action > Update </ _0:Action >
< _0:DataRow >
< _0:field column = "Name" >
< _0:val > <![CDATA[Acme Corporation - Updated]]> </ _0:val >
</ _0:field >
< _0:field column = "Description" >
< _0:val > Updated via SOAP API </ _0:val >
</ _0:field >
</ _0:DataRow >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:updateData >
</ soapenv:Body >
</ soapenv:Envelope >
deleteData
Delete a record by RecordID.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:deleteData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > DeleteBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 1000025 </ _0:RecordID >
< _0:Action > Delete </ _0:Action >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:deleteData >
</ soapenv:Body >
</ soapenv:Envelope >
queryData
Query multiple records with filters and pagination.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:queryData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > QueryBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 0 </ _0:RecordID >
< _0:Filter > IsCustomer='Y' AND IsActive='Y' </ _0:Filter >
< _0:Action > Read </ _0:Action >
< _0:Offset > 0 </ _0:Offset >
< _0:Limit > 50 </ _0:Limit >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:queryData >
</ soapenv:Body >
</ soapenv:Envelope >
createUpdateData
Create or update a record (upsert operation).
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:createUpdateData >
< _0:ModelCRUDRequest >
< _0:ModelCRUD >
< _0:serviceType > CreateUpdateBPartner </ _0:serviceType >
< _0:TableName > C_BPartner </ _0:TableName >
< _0:RecordID > 0 </ _0:RecordID >
< _0:recordIDVariable > @C_BPartner_ID@ </ _0:recordIDVariable >
< _0:Action > CreateUpdate </ _0:Action >
< _0:DataRow >
< _0:field column = "Value" >
< _0:val > CUST-100 </ _0:val >
</ _0:field >
< _0:field column = "Name" >
< _0:val > Acme Corporation </ _0:val >
</ _0:field >
</ _0:DataRow >
</ _0:ModelCRUD >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelCRUDRequest >
</ _0:createUpdateData >
</ soapenv:Body >
</ soapenv:Envelope >
runProcess
Execute an iDempiere process or report.
Process Request
Process Response
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:runProcess >
< _0:ModelRunProcessRequest >
< _0:ModelRunProcess AD_Process_ID = "119" AD_Menu_ID = "0" AD_Record_ID = "0" >
< _0:serviceType > RunInvoiceGenerate </ _0:serviceType >
< _0:ParamValues >
< _0:field column = "C_DocType_ID" >
< _0:val > 1000000 </ _0:val >
</ _0:field >
< _0:field column = "DateInvoiced" >
< _0:val > 2024-03-01 00:00:00 </ _0:val >
</ _0:field >
< _0:field column = "C_BPartner_ID" >
< _0:val > 118 </ _0:val >
</ _0:field >
</ _0:ParamValues >
</ _0:ModelRunProcess >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelRunProcessRequest >
</ _0:runProcess >
</ soapenv:Body >
</ soapenv:Envelope >
setDocAction
Process a document with a specific action.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:setDocAction >
< _0:ModelSetDocActionRequest >
< _0:ModelSetDocAction >
< _0:serviceType > CompleteOrder </ _0:serviceType >
< _0:tableName > C_Order </ _0:tableName >
< _0:recordID > 1000 </ _0:recordID >
< _0:docAction > CO </ _0:docAction >
</ _0:ModelSetDocAction >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelSetDocActionRequest >
</ _0:setDocAction >
</ soapenv:Body >
</ soapenv:Envelope >
Document Actions:
CO - Complete
CL - Close
VO - Void
RE - Reverse - Correct
RC - Reverse - Accrual
RA - Reactivate
PR - Post
getList
Retrieve lookup values from a reference.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:getList >
< _0:ModelGetListRequest >
< _0:ModelGetList >
< _0:serviceType > GetListSalesRegions </ _0:serviceType >
< _0:AD_Reference_ID > 144 </ _0:AD_Reference_ID >
< _0:Filter ></ _0:Filter >
</ _0:ModelGetList >
< _0:ADLoginRequest >
<!-- login details -->
</ _0:ADLoginRequest >
</ _0:ModelGetListRequest >
</ _0:getList >
</ soapenv:Body >
</ soapenv:Envelope >
CompositeService Operations
compositeOperation
Execute multiple operations in a single atomic transaction.
< soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:_0 = "http://idempiere.org/ADInterface/1_0" >
< soapenv:Header />
< soapenv:Body >
< _0:compositeOperation >
< _0:CompositeRequest >
< _0:ADLoginRequest >
< _0:user > WebService </ _0:user >
< _0:pass > WebService </ _0:pass >
< _0:lang > en_US </ _0:lang >
< _0:ClientID > 11 </ _0:ClientID >
< _0:RoleID > 50004 </ _0:RoleID >
< _0:OrgID > 11 </ _0:OrgID >
< _0:WarehouseID > 103 </ _0:WarehouseID >
< _0:stage > 9 </ _0:stage >
</ _0:ADLoginRequest >
< _0:serviceType > CompositeOrderEntry </ _0:serviceType >
< _0:operations >
<!-- Operation 1: Create Order -->
< _0:operation preCommit = "false" postCommit = "false" >
< _0:TargetPort > createData </ _0:TargetPort >
< _0:ModelCRUD >
< _0:serviceType > CreateOrder </ _0:serviceType >
< _0:TableName > C_Order </ _0:TableName >
< _0:RecordID > 0 </ _0:RecordID >
< _0:Action > Create </ _0:Action >
< _0:DataRow >
< _0:field column = "C_BPartner_ID" >
< _0:val > 118 </ _0:val >
</ _0:field >
< _0:field column = "C_DocTypeTarget_ID" >
< _0:val > 135 </ _0:val >
</ _0:field >
</ _0:DataRow >
</ _0:ModelCRUD >
</ _0:operation >
<!-- Operation 2: Create Order Line -->
< _0:operation preCommit = "false" postCommit = "false" >
< _0:TargetPort > createData </ _0:TargetPort >
< _0:ModelCRUD >
< _0:serviceType > CreateOrderLine </ _0:serviceType >
< _0:TableName > C_OrderLine </ _0:TableName >
< _0:RecordID > 0 </ _0:RecordID >
< _0:Action > Create </ _0:Action >
< _0:DataRow >
< _0:field column = "C_Order_ID" >
< _0:val > @C_Order.C_Order_ID@ </ _0:val >
</ _0:field >
< _0:field column = "M_Product_ID" >
< _0:val > 137 </ _0:val >
</ _0:field >
< _0:field column = "QtyOrdered" >
< _0:val > 5 </ _0:val >
</ _0:field >
</ _0:DataRow >
</ _0:ModelCRUD >
</ _0:operation >
<!-- Operation 3: Complete Order -->
< _0:operation preCommit = "true" postCommit = "false" >
< _0:TargetPort > setDocAction </ _0:TargetPort >
< _0:ModelSetDocAction >
< _0:serviceType > CompleteOrder </ _0:serviceType >
< _0:tableName > C_Order </ _0:tableName >
< _0:recordID > 0 </ _0:recordID >
< _0:recordIDVariable > @C_Order.C_Order_ID@ </ _0:recordIDVariable >
< _0:docAction > CO </ _0:docAction >
</ _0:ModelSetDocAction >
</ _0:operation >
</ _0:operations >
</ _0:CompositeRequest >
</ _0:compositeOperation >
</ soapenv:Body >
</ soapenv:Envelope >
Composite Features:
Commit transaction before executing this operation
Commit transaction after executing this operation
Reference values from previous operations using @TableName.ColumnName@ syntax
XML Schema Types
WindowTabData
Response structure for read and query operations.
< WindowTabData NumRows = "2" TotalRows = "10" StartRow = "0" >
< Success > true </ Success >
< DataSet >
< DataRow >
< field column = "C_BPartner_ID" type = "ID" >
< val > 118 </ val >
</ field >
< field column = "Value" type = "String" >
< val > CUST-001 </ val >
</ field >
< field column = "Name" type = "String" >
< val > Customer Name </ val >
</ field >
< field column = "C_BP_Group_ID" type = "TableDir" lval = "Standard" >
< val > 103 </ val >
< lookup >
< lv val = "Standard" key = "103" />
</ lookup >
</ field >
</ DataRow >
</ DataSet >
</ WindowTabData >
DataField Attributes
Display type (ID, String, Integer, Date, etc.)
Display value for lookup fields
Whether field is displayed
Whether field is editable
Whether field has an error
StandardResponse
Standard response for CRUD operations.
< StandardResponse IsError = "false" IsRolledBack = "false" RecordID = "1000025" >
< outputFields >
< outputField column = "C_BPartner_ID" value = "1000025" Text = "1000025" />
< outputField column = "Value" value = "CUST-100" Text = "CUST-100" />
</ outputFields >
</ StandardResponse >
Client Generation
Generate SOAP client code from WSDL:
Java (JAX-WS)
.NET (WCF)
PHP (SoapClient)
Python (Zeep)
# Generate client stubs
wsimport -keep -s src -p com.mycompany.idempiere.ws \
https://localhost:8443/ADInterface/services/ModelADService?wsdl
WSDL Schema Reference
Key schema definitions from idempiere-schema.xsd:
Complex Types
Main data structure for query results
DataSet - Collection of DataRow elements
RowCount - Number of rows returned
Success - Operation success flag
Error - Error message if failed
@NumRows - Number of rows in this response
@TotalRows - Total rows matching query
@StartRow - Starting row number
CRUD operation definition
serviceType - Web service type name
TableName - Database table name
RecordID - Record identifier
Filter - SQL WHERE clause
Action - Operation: Create, Read, Update, Delete, CreateUpdate
Offset - Pagination offset
Limit - Pagination limit
DataRow - Field values
Process execution definition
serviceType - Web service type name
@AD_Process_ID - Process identifier
@AD_Record_ID - Context record ID
ParamValues - Process parameter values
Document action definition
serviceType - Web service type name
tableName - Document table name
recordID - Document record ID
recordIDVariable - Context variable for record ID
docAction - Action code (CO, CL, VO, etc.)
Testing SOAP Services
Using SoapUI
Create New SOAP Project
File > New SOAP Project Enter WSDL URL: https://localhost:8443/ADInterface/services/ModelADService?wsdl
Configure Authentication
All requests include ADLoginRequest in the SOAP body (not HTTP authentication)
Test Operations
Expand service operations and generate sample requests Modify the ADLoginRequest section with valid credentials
Save Test Scripts
Save requests as test cases for regression testing
Using Postman
iDempiere includes Postman collections in:
/testScripts/postman/iDempiereWebServices.postman_collection.json
/testScripts/postman/idempiere-soap-as-rest.postman_collection.json
Import these collections for pre-configured test requests.
Best Practices
Use CDATA for Text Wrap text values containing special characters in CDATA sections: < val > <![CDATA[AT&T Corporation]]> </ val >
Validate Against Schema Use the XSD schema to validate requests before sending to catch errors early.
Handle SOAP Faults Implement proper SOAP fault handling in your client code to catch service errors.
Cache WSDL Locally Download and cache WSDL files locally for faster client initialization and offline development.
Always test SOAP services in a development environment before deploying to production. CRUD operations directly modify data.