<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hengsin</id>
	<title>iDempiere en - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hengsin"/>
	<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/en/Special:Contributions/Hengsin"/>
	<updated>2026-09-30T02:38:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23877</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23877"/>
		<updated>2026-05-11T11:21:18Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;br /&gt;
- To retain bundles installed using OSGi console or Extension Manager form after restart of the iDempiere server, you need to comments out the `@1\:start` part of the `osgi.bundles=...simpleconfigurator...` line in `config.ini` (inside the `-configuration` folder). Note that this is not needed in a deploy environment as it is to workaround the combine effect of `-dev` (Equinox Development Mode) and `simpleconfigurator`.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23876</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23876"/>
		<updated>2026-05-11T11:20:16Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;br /&gt;
- To retain bundles installed using OSGi console or Extension Manager form after restart of the iDempiere server, you need to comments out the `@1\:start` part of the `osgi.bundles=...simpleconfigurator...` line in `config.ini` (inside the `-configuration` folder). Note that this is not needed in a deploy environment as it is to workaround the combination effect of `-dev` (equinox Dev Mode) and `simpleconfigurator`.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23875</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23875"/>
		<updated>2026-05-11T10:54:11Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;br /&gt;
- To retain bundles installed using OSGi console or Extension Manager form after restart of the iDempiere server, you need to comments out the `@1\:start` part of the `osgi.bundles=...simpleconfigurator...` line. Note that this is not needed in a deploy environment as it is to workaround the combination effect of `-dev` (equinox Dev Mode) and `simpleconfigurator`.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23874</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23874"/>
		<updated>2026-05-11T10:51:23Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;br /&gt;
- To retain bundles installed using OSGi console or Extension Manager form after restart of the iDempiere server, you need to comments out the '@1\:start` part of the `osgi.bundles=...simpleconfigurator...` line. Note that this is not needed in a deploy environment as it is to workaround the combination effect of `-dev` (equinox Dev Mode) and `simpleconfigurator`.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23873</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23873"/>
		<updated>2026-05-11T08:52:49Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;br /&gt;
- To retain bundles installed using OSGi console or Extension Manager form after restart of the iDempiere server, you need to comments out the `osgi.bundles=...simpleconfigurator...` line. Note that this is not needed in a deploy environment as it is to workaround the combination effect of `-dev` (equinox Dev Mode) and `simpleconfigurator`.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23867</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23867"/>
		<updated>2026-05-05T02:17:59Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- It is faster and more reliable to **Reload Target Platform** using **org.idempiere.p2.targetplatform.mirror.target** instead of **org.idempiere.p2.targetplatform.target**.&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23848</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23848"/>
		<updated>2026-04-17T09:08:30Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;br /&gt;
- Antigravity doesn't has build in support for generation of SerialVersionUID. Install the `Code Generator For Java` extension to get that.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23847</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23847"/>
		<updated>2026-04-17T08:55:03Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;java.project.resourceFilters&amp;quot;: [],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
  - `&amp;quot;java.project.resourceFilters&amp;quot;: []` is to stop antigravity adding the following to .project files:&lt;br /&gt;
    ```xml&lt;br /&gt;
    &amp;lt;filteredResources&amp;gt;&lt;br /&gt;
	&amp;lt;filter&amp;gt;&lt;br /&gt;
		&amp;lt;id&amp;gt;1774448868880&amp;lt;/id&amp;gt;&lt;br /&gt;
		&amp;lt;name&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;30&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;matcher&amp;gt;&lt;br /&gt;
		    &amp;lt;id&amp;gt;org.eclipse.core.resources.regexFilterMatcher&amp;lt;/id&amp;gt;&lt;br /&gt;
		    &amp;lt;arguments&amp;gt;node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__&amp;lt;/arguments&amp;gt;&lt;br /&gt;
		&amp;lt;/matcher&amp;gt;&lt;br /&gt;
	&amp;lt;/filter&amp;gt;&lt;br /&gt;
    &amp;lt;/filteredResources&amp;gt;&lt;br /&gt;
    ```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To restore tracking of .project files:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --no-skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23819</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23819"/>
		<updated>2026-04-11T07:58:10Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project file:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
  ```text&lt;br /&gt;
  **For running of unit test and integration test using maven**&lt;br /&gt;
  * Run from workspace root folder&lt;br /&gt;
  * Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
  * mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
  * Always run in terminal&lt;br /&gt;
  ```&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;br /&gt;
- Some useful shortcuts:&lt;br /&gt;
  - Ctrl+R : Open recent workspaces.&lt;br /&gt;
  - Ctrl+P : Open recent files.&lt;br /&gt;
  - Shift+Alt+B : Invoke Incremental or Full Build.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23818</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23818"/>
		<updated>2026-04-11T07:47:58Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - Add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```json&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
        &amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
        &amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
            &amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
            &amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;java.configuration.updateBuildConfiguration&amp;quot;: &amp;quot;disabled&amp;quot;,&lt;br /&gt;
        &amp;quot;java.configuration.runtimes&amp;quot;: [&lt;br /&gt;
	    {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;JavaSE-17&amp;quot;,&lt;br /&gt;
                &amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;,&lt;br /&gt;
                &amp;quot;default&amp;quot;: true&lt;br /&gt;
	    }&lt;br /&gt;
    	],&lt;br /&gt;
        &amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
        &amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
        &amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
  - Replace `&amp;quot;path&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk&amp;quot;` with your JDK17 path. The default JVM configuration is important for test and remote debugging.&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```text&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project file:&lt;br /&gt;
```text&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere REST API](https://github.com/bxservice/idempiere-rest)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```text&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;br /&gt;
- To debug integration test&lt;br /&gt;
  - Add the following to `&amp;quot;configurations&amp;quot;` in launch.json:&lt;br /&gt;
    ```json&lt;br /&gt;
    {&lt;br /&gt;
         &amp;quot;type&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
         &amp;quot;request&amp;quot;: &amp;quot;attach&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;: &amp;quot;Attach by Process ID&amp;quot;,&lt;br /&gt;
         &amp;quot;processId&amp;quot;: &amp;quot;${command:PickJavaProcess}&amp;quot;,&lt;br /&gt;
         &amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    ```&lt;br /&gt;
  - Add `-DdebugPort=5005`, for e.g, `./mvnw --offline integration-test -DskipTests=false -Dtest=EnvTest -DdebugPort=5005`&lt;br /&gt;
  - With the `-DdebugPort=5005` option, the test will start and &amp;quot;freeze&amp;quot; at 0% with a message like:&lt;br /&gt;
    `Listening for transport dt_socket at address: 5005`&lt;br /&gt;
  - At **Run and Debug**, start the **Attach by Process ID** configuration. A dialog will popup for you to select the process that's waiting for  connection at port 5005.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23817</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23817"/>
		<updated>2026-04-11T03:40:44Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project file:&lt;br /&gt;
```&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add more source folder to your workspace (File &amp;gt; Add Folder to Workspace...)&lt;br /&gt;
  - [iDempiere REST API](https://github.com/bxservice/idempiere-rest)&lt;br /&gt;
  - [iDempiere MCP Server](https://github.com/hengsin/idempiere-mcp)&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23816</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23816"/>
		<updated>2026-04-11T01:36:47Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;\n&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project file:&lt;br /&gt;
```&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23813</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23813"/>
		<updated>2026-04-10T03:02:04Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To ignore changes to tracked .project file:&lt;br /&gt;
```&lt;br /&gt;
git update-index --skip-worktree **/.project&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Accounting_Info.md&amp;diff=23807</id>
		<title>Accounting Info.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Accounting_Info.md&amp;diff=23807"/>
		<updated>2026-03-31T03:17:22Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: Created page with &amp;quot;# iDempiere Accounting Module  **Summary:** The foundational accounting engine for iDempiere. It processes all document-level transactions (Invoices, Payments, Material Receip...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# iDempiere Accounting Module&lt;br /&gt;
&lt;br /&gt;
**Summary:** The foundational accounting engine for iDempiere. It processes all document-level transactions (Invoices, Payments, Material Receipts, etc.) and transforms them into balanced accounting entries (Fact ACCT) based on the configured Accounting Schema and Chart of Accounts.&lt;br /&gt;
&lt;br /&gt;
## 🚀 Features&lt;br /&gt;
&lt;br /&gt;
* **Real-Time Posting:** Automatically generates accounting facts upon document completion.&lt;br /&gt;
* **Multi-Currency Support:** Handles complex currency conversions and realized/unrealized gain/loss calculations.&lt;br /&gt;
* **Multi-Schema Accounting:** Supports posting a single transaction to multiple accounting schemas simultaneously (e.g., Local GAAP and IFRS).&lt;br /&gt;
* **Flexible Dimensions:** Provides core support for accounting dimensions including Organization, Account, Product, Business Partner, Project, and Sales Region.&lt;br /&gt;
* **Suspense Accounting:** Robust handling of unbalanced entries by routing them to configured suspense accounts for manual review.&lt;br /&gt;
* **Document Integration:** Pre-configured posting logic for all standard iDempiere documents (AR/AP Invoices, Bank Statements, Inventory Moves, etc.).&lt;br /&gt;
&lt;br /&gt;
## ⚙️ Compatibility&lt;br /&gt;
&lt;br /&gt;
* **Core Module**&lt;br /&gt;
* **Java Version:** 17+&lt;br /&gt;
&lt;br /&gt;
## 📦 Database Changes&lt;br /&gt;
&lt;br /&gt;
* **Core Tables:** Manages data within `Fact_Acct`, `C_AcctSchema`, `C_ValidCombination`, and `GL_Category`.&lt;br /&gt;
* **Posting Logic:** Uses the `Doc_*` class hierarchy to define how specific document types are translated into debits and credits.&lt;br /&gt;
&lt;br /&gt;
## 🛠 Usage &amp;amp; Configuration&lt;br /&gt;
&lt;br /&gt;
* **Configuration:** &lt;br /&gt;
    1. Define your **Accounting Schema** and **Chart of Accounts**.&lt;br /&gt;
    2. Set up **Default Accounts** for Products, Business Partners, and Tax Categories.&lt;br /&gt;
* **Execution:** Transactions are usually posted automatically.&lt;br /&gt;
* **Audit:** Use the **Performance Analysis &amp;gt; Accounting Fact** window to audit individual entries and drill back to the source document.&lt;br /&gt;
&lt;br /&gt;
## 👤 Author / Support&lt;br /&gt;
&lt;br /&gt;
* **Developer:** iDempiere Community&lt;br /&gt;
* **Source Code:** [https://github.com/idempiere/idempiere/tree/master/org.idempiere.acct](https://github.com/idempiere/idempiere/tree/master/org.idempiere.acct)&lt;br /&gt;
* **Documentation:** [iDempiere Wiki - Accounting](https://wiki.idempiere.org/en/IDempiere_Accounting)&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23804</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23804"/>
		<updated>2026-03-28T06:03:10Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
  - Add `&amp;quot;projectName&amp;quot;: &amp;quot;org.adempiere.base&amp;quot;` to enable evaluation of expression in debug (using the **Debug Console**).&lt;br /&gt;
  - You can use inline comment as instruction to guide the agent to generate code for your need. You can remove the inline comment after you have accept or reject the generated code.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23799</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23799"/>
		<updated>2026-03-24T08:02:55Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- After making changes to MANIFEST.MF, run **Full Build** to resolve build errors.&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23774</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23774"/>
		<updated>2026-03-19T03:09:41Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to recreate it from the latest .launch file.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23773</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23773"/>
		<updated>2026-03-19T03:09:06Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketplace (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
  - If there are changes to a .launch file, remove the entry from **launch.json** to get recreate it from the latest .launch file.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF12_Multiple_SSO_Provider_Support&amp;diff=23772</id>
		<title>NF12 Multiple SSO Provider Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF12_Multiple_SSO_Provider_Support&amp;diff=23772"/>
		<updated>2026-03-19T03:03:24Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Developer:''' [[User:Dpansheriya|Deepak Pansheriya]] [https://www.logilite.com Logilite Technologies]&lt;br /&gt;
&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304]&lt;br /&gt;
===Multiple SSO Provider Support===&lt;br /&gt;
This enhancement introduces the ability to configure and support '''multiple Single Sign-On (SSO) providers''' in iDempiere. Previously, only one SSO provider could be used at a time, and the system lacked flexibility to present multiple options at login.&lt;br /&gt;
&lt;br /&gt;
With this feature, system administrators can now configure more than one SSO provider (e.g., Cognito, Keycloak) and present each as a distinct '''login button on the login page'''. This provides organizations with flexible identity provider options and improves user experience across different domains or roles.&lt;br /&gt;
&lt;br /&gt;
'''System Configuration: SSO_SHOW_LOGINPAGE'''&lt;br /&gt;
*'''Y''' – Shows the iDempiere login page with native login and SSO provider buttons&lt;br /&gt;
*'''N''' – Skips the login page and redirects to SSO (if one provider) or shows only SSO buttons (if multiple)&lt;br /&gt;
===Behavior Examples===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Providers&lt;br /&gt;
!SSO_SHOW_LOGINPAGE&lt;br /&gt;
!Result&lt;br /&gt;
|-&lt;br /&gt;
|Cognito&lt;br /&gt;
|Y&lt;br /&gt;
|Shows button for Cognito, allows login with iDempiere credentials&lt;br /&gt;
|-&lt;br /&gt;
|Cognito&lt;br /&gt;
|N&lt;br /&gt;
|Redirects to Cognito&lt;br /&gt;
|-&lt;br /&gt;
|Cognito + Keycloak&lt;br /&gt;
|Y&lt;br /&gt;
|Shows button for Cognito and Keycloak, allows login with iDempiere credentials&lt;br /&gt;
|-&lt;br /&gt;
|Cognito + Keycloak&lt;br /&gt;
|N&lt;br /&gt;
|Shows button for Cognito and Keycloak&lt;br /&gt;
|}&lt;br /&gt;
===How to Configure===&lt;br /&gt;
#Create multiple entries in the '''SSO Configuration''' window (e.g., Cognito and Keycloak).&lt;br /&gt;
#Set the system config:&lt;br /&gt;
##&amp;lt;code&amp;gt;SSO_SHOW_LOGINPAGE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; depending on your desired login experience.&lt;br /&gt;
#Run '''Cache Reset.'''&lt;br /&gt;
&lt;br /&gt;
== IDEMPIERE-6820 Add multi tenant support to SSO ==&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304]&lt;br /&gt;
# Change the window &amp;quot;SSO Configuration&amp;quot; to advanced and tenant level&lt;br /&gt;
# The selection of SSO principal configurations by tenant is via the tenant=loginPrefix query parameter.&lt;br /&gt;
## When the parameter is missing, it fall backs to SSO principal configurations in system tenant (i.e with AD_Client_ID=0) which should make it backward compatible.&lt;br /&gt;
## Uses the query parameter approach to support translation from tenant specific URL, for example from gw.idempiere.org/webui/index.zul to test.idempiere.org/webui/index.zul?tenant=gw.&lt;br /&gt;
## When tenant parameter exists, get SSO configuration by AD_Client_ID={AD_Client_ID of tenant parameter}.&lt;br /&gt;
## When no tenant parameter, get SSO configuration by AD_Client_ID=0 (effectively same as the implementation prior to this ticket).&lt;br /&gt;
## Tenant selection at Role selection panel is disable when tenant query parameter exists.&lt;br /&gt;
# SSO Configuration window changes:&lt;br /&gt;
## Only show configurations for current login tenant.&lt;br /&gt;
## The Application Client ID, Application Redirect URL and Application Discovery URI shouldn't be always updateable.&lt;br /&gt;
## Hide Tenant ID field if SSO Provider is OpenID Connect.&lt;br /&gt;
## Make Application Discovery URI and Application Client ID field mandatory if SSO Provider is OpenID Connect.&lt;br /&gt;
## Hide iDempiere Monitor Redirect URIs and Felix Web Console Redirect URIs field if current login tenant is not System tenant.&lt;br /&gt;
# Example Configurations:&lt;br /&gt;
* SSO Configuration for System Tenant:&lt;br /&gt;
[[File:System Tenant SSO Configuration.png|800x600px|frameless|System Tenant SSO Configuration]]&lt;br /&gt;
* Login Prefix Setup for System tenant:&lt;br /&gt;
[[File:System Tenant Login Prefix.png|400x300px|frameless|System Tenant Login Prefix]]&lt;br /&gt;
* SSO Configuration for GardenWorld Tenant:&lt;br /&gt;
[[File:Garden World Tenant SSO Configuration.png|800x600px|frameless|Garden World Tenant SSO Configuration]]&lt;br /&gt;
* Login Prefix Setup for GardenWorld tenant:&lt;br /&gt;
[[File:Garden World Login Prefix.png|400x300px|frameless|Garden World Login Prefix]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[NF11_Single_SignOn|iDempiere Single SignOn]]&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|T]]&lt;br /&gt;
[[Category:New Features Technical]]&lt;br /&gt;
[[Category:New Features w12|T]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF12_Multiple_SSO_Provider_Support&amp;diff=23771</id>
		<title>NF12 Multiple SSO Provider Support</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF12_Multiple_SSO_Provider_Support&amp;diff=23771"/>
		<updated>2026-03-19T03:02:41Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Developer:''' [[User:Dpansheriya|Deepak Pansheriya]] [https://www.logilite.com Logilite Technologies]&lt;br /&gt;
&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304]&lt;br /&gt;
===Multiple SSO Provider Support===&lt;br /&gt;
This enhancement introduces the ability to configure and support '''multiple Single Sign-On (SSO) providers''' in iDempiere. Previously, only one SSO provider could be used at a time, and the system lacked flexibility to present multiple options at login.&lt;br /&gt;
&lt;br /&gt;
With this feature, system administrators can now configure more than one SSO provider (e.g., Cognito, Keycloak) and present each as a distinct '''login button on the login page'''. This provides organizations with flexible identity provider options and improves user experience across different domains or roles.&lt;br /&gt;
&lt;br /&gt;
'''System Configuration: SSO_SHOW_LOGINPAGE'''&lt;br /&gt;
*'''Y''' – Shows the iDempiere login page with native login and SSO provider buttons&lt;br /&gt;
*'''N''' – Skips the login page and redirects to SSO (if one provider) or shows only SSO buttons (if multiple)&lt;br /&gt;
===Behavior Examples===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Providers&lt;br /&gt;
!SSO_SHOW_LOGINPAGE&lt;br /&gt;
!Result&lt;br /&gt;
|-&lt;br /&gt;
|Cognito&lt;br /&gt;
|Y&lt;br /&gt;
|Shows button for Cognito, allows login with iDempiere credentials&lt;br /&gt;
|-&lt;br /&gt;
|Cognito&lt;br /&gt;
|N&lt;br /&gt;
|Redirects to Cognito&lt;br /&gt;
|-&lt;br /&gt;
|Cognito + Keycloak&lt;br /&gt;
|Y&lt;br /&gt;
|Shows button for Cognito and Keycloak, allows login with iDempiere credentials&lt;br /&gt;
|-&lt;br /&gt;
|Cognito + Keycloak&lt;br /&gt;
|N&lt;br /&gt;
|Shows button for Cognito and Keycloak&lt;br /&gt;
|}&lt;br /&gt;
===How to Configure===&lt;br /&gt;
#Create multiple entries in the '''SSO Configuration''' window (e.g., Cognito and Keycloak).&lt;br /&gt;
#Set the system config:&lt;br /&gt;
##&amp;lt;code&amp;gt;SSO_SHOW_LOGINPAGE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; depending on your desired login experience.&lt;br /&gt;
#Run '''Cache Reset.'''&lt;br /&gt;
&lt;br /&gt;
== IDEMPIERE-6820 Add multi tenant support to SSO ==&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304]&lt;br /&gt;
# Change the window &amp;quot;SSO Configuration&amp;quot; to advanced and tenant level&lt;br /&gt;
# The selection of SSO principal configurations by tenant is via the tenant=loginPrefix query parameter.&lt;br /&gt;
## When the parameter is missing, it fall backs to SSO principal configurations in system tenant (i.e with AD_Client_ID=0) which should make it backward compatible.&lt;br /&gt;
## Uses the query parameter approach to support translation from tenant specific URL, for example from gw.idempiere.org/webui/index.zul to test.idempiere.org/webui/index.zul?tenant=gw.&lt;br /&gt;
## When tenant parameter exists, get SSO configuration by AD_Client_ID={AD_Client_ID of tenant parameter}.&lt;br /&gt;
## When no tenant parameter, get SSO configuration by AD_Client_ID=0 (effectively same as the implementation prior to this ticket).&lt;br /&gt;
## Tenant selection at Role selection panel is disable when tenant query parameter exists.&lt;br /&gt;
# SSO Configuration window changes:&lt;br /&gt;
## Only show configurations for current login tenant.&lt;br /&gt;
## The Application Client ID, Application Redirect URL and Application Discovery URI shouldn't be always updateable.&lt;br /&gt;
## Hide Tenant ID field if SSO Provider is OpenID Connect.&lt;br /&gt;
## Make Application Discovery URI and Application Client ID field mandatory if SSO Provider is OpenID Connect.&lt;br /&gt;
## Hide iDempiere Monitor Redirect URIs and Felix Web Console Redirect URIs field if current login tenant is not System tenant.&lt;br /&gt;
# Example Configurations:&lt;br /&gt;
* SSO Configuration for System Tenant:&lt;br /&gt;
[[File:System Tenant SSO Configuration.png|800x600px|frameless|System Tenant SSO Configuration]]&lt;br /&gt;
* Login Prefix Setup for System tenant:&lt;br /&gt;
[[File:System Tenant Login Prefix.png|400x300px|frameless|System Tenant Login Prefix]]&lt;br /&gt;
* SSO Configuration for GardenWorld Tenant:&lt;br /&gt;
[[File:Garden World Tenant SSO Configuration.png|800x600px|frameless|Garden World Tenant SSO Configuration]]&lt;br /&gt;
* Login Prefix Setup for GardenWorld tenant:&lt;br /&gt;
[[File:Garden World Login Prefix.png|400x300px|frameless|Garden World Login Prefix]]&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
*[[NF11_Single_SignOn|iDempiere Single SignOn]]&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|T]]&lt;br /&gt;
[[Category:New Features Technical]]&lt;br /&gt;
[[Category:New Features w12|T]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Garden_World_Login_Prefix.png&amp;diff=23770</id>
		<title>File:Garden World Login Prefix.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Garden_World_Login_Prefix.png&amp;diff=23770"/>
		<updated>2026-03-19T02:58:08Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Garden World Login Prefix&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:System_Tenant_Login_Prefix.png&amp;diff=23769</id>
		<title>File:System Tenant Login Prefix.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:System_Tenant_Login_Prefix.png&amp;diff=23769"/>
		<updated>2026-03-19T02:57:00Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;System Tenant Login Prefix&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Garden_World_Tenant_SSO_Configuration.png&amp;diff=23768</id>
		<title>File:Garden World Tenant SSO Configuration.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Garden_World_Tenant_SSO_Configuration.png&amp;diff=23768"/>
		<updated>2026-03-19T02:56:11Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Garden World Tenant SSO Configuration&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:System_Tenant_SSO_Configuration.png&amp;diff=23767</id>
		<title>File:System Tenant SSO Configuration.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:System_Tenant_SSO_Configuration.png&amp;diff=23767"/>
		<updated>2026-03-19T02:55:14Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;System Tenant SSO Configuration&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23699</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23699"/>
		<updated>2026-02-21T09:47:50Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - A new launch configuration entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that (for e.g, &amp;quot;cwd&amp;quot;: &amp;quot;/home/hengsin/idempiere-workspace/idempiere&amp;quot;).&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the initial launch, open the **Run/Debug View** and launch from the drop down list of available launch configuration.&lt;br /&gt;
  - Note that if you use Right Click &amp;gt; Debug PDE Application to launch a launch configuration again, it will overwrite the changes that you have make to the launch.json file.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23698</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23698"/>
		<updated>2026-02-20T22:20:17Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce (Gear icon &amp;gt; **Open Antigravity User Settings &amp;gt; Editor**): &lt;br /&gt;
  - https://marketplace.visualstudio.com/items (Marketplace Item URL)&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery (Marketplace Gallery URL)&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Gear Icon &amp;gt; **Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - An entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that.&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the first run, you can open the **launch.json** file, select **Run &amp;gt; Start Debugging** to run it.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23697</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23697"/>
		<updated>2026-02-20T22:16:28Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce: &lt;br /&gt;
  - https://marketplace.visualstudio.com/items&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (**Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - An entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that.&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the first run, you can open the **launch.json** file, select **Run &amp;gt; Start Debugging** to run it.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23696</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23696"/>
		<updated>2026-02-20T22:15:43Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce: &lt;br /&gt;
  - https://marketplace.visualstudio.com/items&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery&lt;br /&gt;
- Install **Extension Pack for Java** extension&lt;br /&gt;
- Install **Eclipse PDE Support** extension&lt;br /&gt;
- **File &amp;gt; Open Folder...** , select iDempiere source folder&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add idempiere-rest source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Add Folder to Workspace...** , add your other project source folder to your workspace&lt;br /&gt;
- **File &amp;gt; Save Workspace As...** to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formatting only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
- To set active target platform, right click on the target definition file (.target file) and select **Reload Target Platform**&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install **Eclipse Keymap** extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (**Open Antigravity User Settings &amp;gt; Enable Browser Tools**)&lt;br /&gt;
- Install Gemini CLI: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable Gemini CLI integration with antigravity: **/ide install**&lt;br /&gt;
  - Note that this might be needed for /ide install: `sudo ln -s /usr/bin/antigravity /usr/local/bin/agy`&lt;br /&gt;
- Install iDempiere examples for Gemini CLI&lt;br /&gt;
  - `gemini skills install https://github.com/hengsin/idempiere-examples`&lt;br /&gt;
- Install iDempiere skills for Gemini CLI: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add iDempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- To run a launch configuration, right click on launch configuration (.launch file) and select **Debug PDE Application**&lt;br /&gt;
  - An entry will be added to the **launch.json** file.&lt;br /&gt;
  - If the startup workspace folder is wrong, add the **&amp;quot;cwd&amp;quot;** property in launch.json to fix that.&lt;br /&gt;
  - If it is not launch with the intended Java runtime environment, add **&amp;quot;javaExec&amp;quot;** property in launch.json to set the Java runtime environment to use. This property should contain the absolute path of the Java executable to use (for e.g, &amp;quot;javaExec&amp;quot;: &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
  - After the first run, you can open the **launch.json** file, select **Run &amp;gt; Start Debugging** to run it.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add **Customizations** rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
```&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
```&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, try ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23694</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23694"/>
		<updated>2026-02-20T16:34:34Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce: &lt;br /&gt;
  - https://marketplace.visualstudio.com/items&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery&lt;br /&gt;
- Install Java extension pack&lt;br /&gt;
- Install Eclipse PDE extension&lt;br /&gt;
- File &amp;gt; Open Folder... , select iDempiere source folder&lt;br /&gt;
- File &amp;gt; Add Folder to Workspace... , add idempiere-rest source folder to your workspace&lt;br /&gt;
- File &amp;gt; Add Folder to Workspace... , add your other project source folder to your workspace&lt;br /&gt;
- File &amp;gt; Save Workspace As... to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formating only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install Eclipse Keymap extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Open Antigravity User Settings &amp;gt; Enable Browser Tools)&lt;br /&gt;
- Install gemini cli: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable gemini cli integration with antigravity: /ide install&lt;br /&gt;
  - note that this might be needed for /ide install: sudo ln -s /usr/bin/antigravity /usr/local/bin/agy&lt;br /&gt;
- Install idempiere examples for gemini cli&lt;br /&gt;
  - gemini skills install https://github.com/hengsin/idempiere-examples&lt;br /&gt;
- Install idempiere skills for gemini cli: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add idempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- When running launch configuration created with Eclipse, you might face issue with startup workspace folder. Use the &amp;quot;cwd&amp;quot; property in launch.json to fix that.&lt;br /&gt;
- Use &amp;quot;javaExec&amp;quot; property in launch.json to set the JDK to run or debug iDempiere. This property should be the absolute path of the Java executable (for e.g, &amp;quot;/usr/lib/jvm/java-17-temurin-jdk/bin/java&amp;quot;).&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add Customizations rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
````&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
````&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, just ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23693</id>
		<title>Antigravity.md</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Antigravity.md&amp;diff=23693"/>
		<updated>2026-02-20T14:05:50Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: Created page with &amp;quot;# Setup - Install from https://antigravity.google/ - Switch to visual studio code marketpalce:    - https://marketplace.visualstudio.com/items   - https://marketplace.visualst...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Setup&lt;br /&gt;
- Install from https://antigravity.google/&lt;br /&gt;
- Switch to visual studio code marketpalce: &lt;br /&gt;
  - https://marketplace.visualstudio.com/items&lt;br /&gt;
  - https://marketplace.visualstudio.com/_apis/public/gallery&lt;br /&gt;
- Install Java extension pack&lt;br /&gt;
- Install Eclipse PDE extension&lt;br /&gt;
- File &amp;gt; Open Folder... , select iDempiere source folder&lt;br /&gt;
- File &amp;gt; Add Folder to Workspace... , add idempiere-rest source folder to your workspace&lt;br /&gt;
- File &amp;gt; Add Folder to Workspace... , add your other project source folder to your workspace&lt;br /&gt;
- File &amp;gt; Save Workspace As... to save your workspace&lt;br /&gt;
  - add the following properties to &amp;quot;settings&amp;quot; in the save .code-workspace file to prevent unnecessary formating only changes:&lt;br /&gt;
```&lt;br /&gt;
&amp;quot;settings&amp;quot;: {&lt;br /&gt;
		&amp;quot;editor.formatOnSave&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnType&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.formatOnPaste&amp;quot;: false,&lt;br /&gt;
		&amp;quot;editor.codeActionsOnSave&amp;quot;: {&lt;br /&gt;
			&amp;quot;source.fixAll&amp;quot;: &amp;quot;never&amp;quot;,&lt;br /&gt;
			&amp;quot;source.organizeImports&amp;quot;: &amp;quot;never&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;files.eol&amp;quot;: &amp;quot;auto&amp;quot;,&lt;br /&gt;
    	&amp;quot;files.trimTrailingWhitespace&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.insertFinalNewline&amp;quot;: false,&lt;br /&gt;
    	&amp;quot;files.trimFinalNewlines&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
```&lt;br /&gt;
- Add the following to {idempiere source folder}/.git/info/exclude file:&lt;br /&gt;
```&lt;br /&gt;
.project&lt;br /&gt;
.vscode&lt;br /&gt;
*.properties&lt;br /&gt;
*.ks&lt;br /&gt;
**/.settings/&lt;br /&gt;
*.sh&lt;br /&gt;
**/*.launch&lt;br /&gt;
*.blacklist&lt;br /&gt;
*.blacklist.*&lt;br /&gt;
*.code-workspace&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
# Optional&lt;br /&gt;
- Install Eclipse Keymap extension to use Eclipse Key Binding&lt;br /&gt;
- Enable browser extension (Open Antigravity User Settings &amp;gt; Enable Browser Tools)&lt;br /&gt;
- Install gemini cli: https://github.com/google-gemini/gemini-cli&lt;br /&gt;
- Enable gemini cli integration with antigravity: /ide install&lt;br /&gt;
  - note that this might be needed for /ide install: sudo ln -s /usr/bin/antigravity /usr/local/bin/agy&lt;br /&gt;
- Install idempiere examples for gemini cli&lt;br /&gt;
  - gemini skills install https://github.com/hengsin/idempiere-examples&lt;br /&gt;
- Install idempiere skills for gemini cli: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
- Add idempiere mcp source folder to your workspace&lt;br /&gt;
  - https://github.com/hengsin/idempiere-mcp&lt;br /&gt;
&lt;br /&gt;
# What you still need from Eclipse&lt;br /&gt;
- Create new launch configuration&lt;br /&gt;
- Check and fix target platform state&lt;br /&gt;
&lt;br /&gt;
# Tips&lt;br /&gt;
- There's no build in tool to create OSGi component XML file from annotation but you can ask the agent to do that for you.&lt;br /&gt;
- When running launch configuration created with Eclipse, you might face issue with startup workspace folder. Use the &amp;quot;cwd&amp;quot; property in launch.json to fix that.&lt;br /&gt;
- Automatic build can cause conflict with mvn build. You might want to disable automatic build if you frequently use maven to run build or run unit test.&lt;br /&gt;
- Add Customizations rule to guide the agent on the running of mvn build and unit test for iDempiere:&lt;br /&gt;
````&lt;br /&gt;
**For running of unit test and integration test using maven**&lt;br /&gt;
* Run from workspace root folder&lt;br /&gt;
* Set JAVA_HOME to /usr/lib/jvm/java-17-temurin-jdk&lt;br /&gt;
* mvn integration-test -DskipTests=false -DmaterializeProduct=none -DassembleRepository=none -Dtest=**test class name**&lt;br /&gt;
* Always run in terminal&lt;br /&gt;
````&lt;br /&gt;
- If you have an IDE or workspace settings that you can't locate the place to change it, just ask the agent to do it for you.&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF13_Read_Access_To_Tables_Not_In_Role_Table_Access_List&amp;diff=23588</id>
		<title>NF13 Read Access To Tables Not In Role Table Access List</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF13_Read_Access_To_Tables_Not_In_Role_Table_Access_List&amp;diff=23588"/>
		<updated>2026-01-02T12:02:33Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Feature:''' Add READ_TABLES_NOT_IN_TABLE_ACCESS_INCLUDE_LIST AD_SysConfig flag for Role Table Access&lt;br /&gt;
&lt;br /&gt;
'''Goal:''' Functional&lt;br /&gt;
&lt;br /&gt;
'''Developer:'''  [[User:Hengsin|Heng Sin]]&lt;br /&gt;
&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6730 IDEMPIERE-6730]&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
When using the Role Table Access Include list (i.e uncheck the Exclude checkbox) for Read Write access, the current behaviour is hard coded as the role has no access to other tables that is not part of the include list. This make it very hard to use as you have to figure out all other tables that the user should have read only access to.&lt;br /&gt;
&lt;br /&gt;
===Changes===&lt;br /&gt;
&lt;br /&gt;
# Add client level '''READ_TABLES_NOT_IN_TABLE_ACCESS_INCLUDE_LIST''' AD_SysConfig Y/N entry.&lt;br /&gt;
#* '''N''' to disallow both read-only and read write access to other tables that's not part of the Role Table Access include list.&lt;br /&gt;
#* '''Y''' to allow read-only access to tables not in the include list.&lt;br /&gt;
#* Default is '''N''' to maintain backward compatibility.&lt;br /&gt;
# Note that you still can use the Role Table Access Exclude feature to disallow access to specific set of tables). &lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|F]]&lt;br /&gt;
[[Category:New Features w13|F]]&lt;br /&gt;
[[Category:New Features Functional]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF13_Read_Access_To_Tables_Not_In_Role_Table_Access_List&amp;diff=23587</id>
		<title>NF13 Read Access To Tables Not In Role Table Access List</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF13_Read_Access_To_Tables_Not_In_Role_Table_Access_List&amp;diff=23587"/>
		<updated>2026-01-02T11:59:50Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: Created page with &amp;quot;'''Feature:''' Add READ_TABLES_NOT_IN_TABLE_ACCESS_INCLUDE_LIST AD_SysConfig flag for Role Table Access  '''Goal:''' Functional  '''Developer:'''  User:Hengsin  '''Feature...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Feature:''' Add READ_TABLES_NOT_IN_TABLE_ACCESS_INCLUDE_LIST AD_SysConfig flag for Role Table Access&lt;br /&gt;
&lt;br /&gt;
'''Goal:''' Functional&lt;br /&gt;
&lt;br /&gt;
'''Developer:'''  [[User:Hengsin]]&lt;br /&gt;
&lt;br /&gt;
'''Feature Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6730 IDEMPIERE-6730]&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
When using the Role Table Access Include list (i.e uncheck the Exclude checkbox) for Read Write access, the current behaviour is hard coded as the role has no access to other tables that is not part of the include list. This make it very hard to use as you have to figure out all other tables that the user should have read only access to.&lt;br /&gt;
&lt;br /&gt;
===Changes===&lt;br /&gt;
&lt;br /&gt;
# Add client level '''READ_TABLES_NOT_IN_TABLE_ACCESS_INCLUDE_LIST''' AD_SysConfig Y/N entry.&lt;br /&gt;
#* '''N''' to disallow both read-only and read write access to other tables that's not part of the Role Table Access include list.&lt;br /&gt;
#* '''Y''' to allow read-only access to tables not in the include list.&lt;br /&gt;
#* Default is '''N''' to maintain backward compatibility.&lt;br /&gt;
# Note that you still can use the Role Table Access Exclude feature to disallow access to specific set of tables). &lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|F]]&lt;br /&gt;
[[Category:New Features w13|F]]&lt;br /&gt;
[[Category:New Features Functional]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF12_Improve_Password_Hashing&amp;diff=23550</id>
		<title>NF12 Improve Password Hashing</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF12_Improve_Password_Hashing&amp;diff=23550"/>
		<updated>2025-11-04T06:14:28Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: Created page with &amp;quot;= '''Feature:''' Improve Password Hashing=  '''Goal:''' Technical  '''Developer:''' Carlos Ruiz Heng Sin  '''Description:'''  Currently pa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''Feature:''' Improve Password Hashing=&lt;br /&gt;
&lt;br /&gt;
'''Goal:''' Technical&lt;br /&gt;
&lt;br /&gt;
'''Developer:''' [[User:CarlosRuiz|Carlos Ruiz]] [[User:Hengsin|Heng Sin]]&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
&lt;br /&gt;
Currently password hashing is using SHA-512 and salt is generated using SHA1PRNG random generator and 64 bytes.&lt;br /&gt;
&lt;br /&gt;
This ticket make the following changes to improve the security of password hashing in iDempiere:&lt;br /&gt;
* Generate salt using the DRBG algorithm and 256 bit strength.&lt;br /&gt;
* Add support for PBKDF2 and Argon2 hashing algorithm.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Changes:'''&lt;br /&gt;
&lt;br /&gt;
1. Added USER_PASSWORD_HASH_ALGORITHM System Configurator entry. Supported values are SHA-512, PBKDF2 and Argon2.&lt;br /&gt;
[[File:User password hash algorithm.png|600x600px|frameless|USER_PASSWORD_HASH_ALGORITHM]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Added '''Password Hash Algorithm''' parameter to the '''Convert passwords to hashes''' process.&lt;br /&gt;
[[File:Convert passwords to hash.png|600x600px|frameless|Convert password to hashes process]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Migration of existing SHA-512 hashes''':&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
* Change USER_PASSWORD_HASH_ALGORITHM System Configurator entry to PBKDF2 or Argon2, reset cache.&lt;br /&gt;
* User's password will be rehashed using the newly set algorithm when they login next time.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Technical Info:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712]&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|T]]&lt;br /&gt;
[[Category:New Features w12|T]]&lt;br /&gt;
[[Category:New Features Technical]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Convert_passwords_to_hash.png&amp;diff=23549</id>
		<title>File:Convert passwords to hash.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Convert_passwords_to_hash.png&amp;diff=23549"/>
		<updated>2025-11-04T06:08:49Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Convert passwords to hashes process&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:User_password_hash_algorithm.png&amp;diff=23548</id>
		<title>File:User password hash algorithm.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:User_password_hash_algorithm.png&amp;diff=23548"/>
		<updated>2025-11-04T06:06:01Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;USER_PASSWORD_HASH_ALGORITHM System Configurator&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=OIDC_SSO_Amazon_Cognito_Testing_Steps&amp;diff=23484</id>
		<title>OIDC SSO Amazon Cognito Testing Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=OIDC_SSO_Amazon_Cognito_Testing_Steps&amp;diff=23484"/>
		<updated>2025-08-21T03:00:08Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Testing using Postman */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Create user pool ==&lt;br /&gt;
Amazon Cognito https://console.aws.amazon.com/cognito/home &amp;gt; User pools &amp;gt; Create user pool&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Select Cognito user pool provider type ===&lt;br /&gt;
'''IMPORTANT NOTES:'''&lt;br /&gt;
&lt;br /&gt;
* if you are planning to use EMail authentication with iDempiere then select EMail as the '''ONLY''' attribute for sign in, otherwise you won't be able to create your users based on emails&lt;br /&gt;
* if you are planning to use Name as authentication you can select both User Name + EMail, but make sure that you check &amp;quot;Make user case sensitive&amp;quot;, otherwise you won't be able to create GardenAdmin as user (it will end and gardenadmin and the REST integration won't work)&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Step 1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configure password and authentication policy ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 2.png]] ===&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Configure sign-up experience ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Configure email and SMS delivery ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 4.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Integrate app ===&lt;br /&gt;
&lt;br /&gt;
==== Step 5.1: Setup integration with app ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.2: Setup Cognito domain ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.3: Select Confidential client, enter app client name and select Generate a client secret ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 3.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.4: Enter callback URLs ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 4.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.5: Add ALLOW_USER_PASSWORD_AUTH to Authentication flows ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 5.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.6: Add Profile to Open ID Connect scopes ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 6.png]]&lt;br /&gt;
&lt;br /&gt;
== User pool configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Create user ===&lt;br /&gt;
User pool: GardenWorld &amp;gt; Users &amp;gt; Create user&lt;br /&gt;
&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''User name = iDempiere user (AD_User.Name)''&lt;br /&gt;
* ''Email address = iDempiere user (AD_User.EMail)''&lt;br /&gt;
* ''User has to login for the first time using the temporary password to change new password''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Create group (Optional) ===&lt;br /&gt;
NOTE this step and the next are optional, not required if you uncheck the &amp;quot;Authorization&amp;quot; flag in the iDempiere &amp;quot;Rest OpenID Connect Service configuration&amp;quot; explaned below.&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; Groups &amp;gt; Create group&lt;br /&gt;
&lt;br /&gt;
''Note: Group name = iDempiere role (AD_Role.Name) without space''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Add user to group ===&lt;br /&gt;
User pool: GardenWorld &amp;gt; Groups &amp;gt; Group: GardenWorldAdmin &amp;gt; Add user to group&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Get region, User pool ID, Client ID, Client secret, Domain and Allowed callback URLs ===&lt;br /&gt;
&lt;br /&gt;
==== Step 4.1: Copy region and User pool ID ====&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration&lt;br /&gt;
&lt;br /&gt;
Get the region from the Token signing key URL. Token signing key URL format - &amp;lt;nowiki&amp;gt;https://cognito-idp&amp;lt;/nowiki&amp;gt;.[region].amazonaws.com/[userPoolId]/.well-known/jwks.json.&lt;br /&gt;
&lt;br /&gt;
Copy the User pool ID&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.2: Copy Client ID and Client secret ====&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client&lt;br /&gt;
&lt;br /&gt;
Copy the Client ID and Client secret&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.3: Copy Domain ====&lt;br /&gt;
''Note: Cognito domain is required for Authorization Code Grant authorization flow''&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; Domain&lt;br /&gt;
&lt;br /&gt;
Copy Domain&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 3.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.4: Copy Allowed callback URLs and Hosted UI link address ====&lt;br /&gt;
''Note: Allowed callback URL is required for Authorization Code Grant authorization flow''&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client &amp;gt; Hosted UI&lt;br /&gt;
&lt;br /&gt;
Copy Allowed callback URLs&lt;br /&gt;
&lt;br /&gt;
Right-click on the View Hosted UI button to Copy link address&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 4.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Pre Token Generation Lambda trigger (Optional) ===&lt;br /&gt;
User attributes such as email, phone number etc. are included in the ID Token instead of Access Token. &lt;br /&gt;
&lt;br /&gt;
You have to set up a Pre Token Generation Lambda trigger to add custom claims (such as user email, phone number etc.) to the Access Token. Customization of Access Token requires user to turn on the Advanced security features.&lt;br /&gt;
&lt;br /&gt;
== Rest OpenID Connect Service configuration ==&lt;br /&gt;
iDempiere Web Client &amp;gt; Tenant: GardenWorld &amp;gt; Rest OpenID Connect Service&lt;br /&gt;
&lt;br /&gt;
Authority URL format - &amp;lt;nowiki&amp;gt;https://cognito-idp&amp;lt;/nowiki&amp;gt;.[region].amazonaws.com/[userPoolId]&lt;br /&gt;
&lt;br /&gt;
Audience - User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client &amp;gt; Client ID&lt;br /&gt;
&lt;br /&gt;
Authorization - when checked the integration will verify the roles vs the groups configured on Cognito, when unchecked the roles assignment is completely managed on iDempiere&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Rest OpenID Connect Service.png]]&lt;br /&gt;
&lt;br /&gt;
== Generate Secret Hash ==&lt;br /&gt;
''Note: Secret Hash is required for Resource Owner Password Credentials (ROPC) authorization flow''&lt;br /&gt;
&lt;br /&gt;
* Combine the User name and Client ID into a single string&lt;br /&gt;
* Hash the combined string using the HMAC-SHA256 algorithm and the client secret as the key&lt;br /&gt;
* Base64 encode the resulting hash&lt;br /&gt;
&lt;br /&gt;
For example, to generate the hash using a linux CLI:&lt;br /&gt;
 USERNAME=&amp;lt;cognito user pool username&amp;gt;&lt;br /&gt;
 CLIENT_ID=&amp;lt;your client_id&amp;gt;&lt;br /&gt;
 CLIENT_SECRET=&amp;lt;your client secret&amp;gt;&lt;br /&gt;
 SECRET_HASH=$(echo -n $USERNAME$CLIENT_ID | openssl sha256 -binary -mac HMAC -macopt key:$CLIENT_SECRET | base64)&lt;br /&gt;
 echo $SECRET_HASH&lt;br /&gt;
&lt;br /&gt;
Alternatively for testing you can use an online generator like this: https://www.devglan.com/online-tools/hmac-sha256-online&lt;br /&gt;
&lt;br /&gt;
== Testing using Postman ==&lt;br /&gt;
&lt;br /&gt;
* Import amazon-cognito-oidc-test.postman_collection.json and environment-http---localhost-8080.postman_environment.json to Postman&lt;br /&gt;
* Set variable value&lt;br /&gt;
** cognitoDomain - Get Domain value from User pool configuration &amp;gt; Step 4.3 (for Authorization Code Grant flow only)&lt;br /&gt;
** cognitoRegion - Get region value from User pool configuration &amp;gt; Step 4.1&lt;br /&gt;
** cognitoClientId - Get Client ID value from User pool configuration &amp;gt; Step 4.1&lt;br /&gt;
** cognitoSecret - Get Client secret value from User pool configuration &amp;gt; Step 4.1 &lt;br /&gt;
** cognitoRedirectUri - Get Allowed callback URL from User pool configuration &amp;gt; Step 4.4 (for Authorization Code Grant flow only)&lt;br /&gt;
** cognitoUsername - User name of User pool: GardenWorld &amp;gt; Users &amp;gt; User: GardenAdmin (for Resource Owner Password Credentials flow only)&lt;br /&gt;
** cognitoPassword - Password of User pool: GardenWorld &amp;gt; Users &amp;gt; User: GardenAdmin (for Resource Owner Password Credentials flow only)&lt;br /&gt;
** cognitoSecretHash - Get the generated secret hash from Generate Secret Hash (for Resource Owner Password Credentials flow only)&lt;br /&gt;
&lt;br /&gt;
=== Authentication Flow 1: Authorization Code Grant ===&lt;br /&gt;
===== Step 1: Get New Access Token =====&lt;br /&gt;
At the '''Authorization''' tab, click '''Get New Access Token'''&lt;br /&gt;
# Postman Desktop, uncheck '''Authorize using browser''', use '''https://oauth.pstmn.io/v1/callback''' for callback url&lt;br /&gt;
# Postman Web, callback url is fix as '''https://oauth.pstmn.io/v1/browser-callback'''&lt;br /&gt;
# VSCode Postman Extension, callback url is fix as '''https://oauth.pstmn.io/v1/vscode-callback'''&lt;br /&gt;
# Depends on the type of Postman client you are using, add the corresponding callback url to Cognito's allowed callback url list&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Postman OAuth2 Get New Access Token.png|400x400px|frameless|Postman OAuth2 Get New Access Token]]&lt;br /&gt;
&lt;br /&gt;
===== Step 2: Cognito Login =====&lt;br /&gt;
'''Get New Access Token''' will open the login dialog for Cognito&lt;br /&gt;
&lt;br /&gt;
[[File:Cognito Sign In.png|400x400px|frameless|Cognito Sign In]]&lt;br /&gt;
&lt;br /&gt;
===== Step 3: Use Token =====&lt;br /&gt;
Upon successful authentication, click '''Proceed''' to open the '''MANAGE ACCESS TOKENS''' dialog. Click '''Use Token''' to use the return access token&lt;br /&gt;
&lt;br /&gt;
[[File:Postman Authorization Use Token.png|400x400px|frameless|Postman Authorization Use Token]]&lt;br /&gt;
&lt;br /&gt;
After execution of '''Use Token''', Access Token is the current token for Bearer Authorization&lt;br /&gt;
&lt;br /&gt;
[[File:Postman Authorization Current Access Token.png|400x400px|frameless|Postman Authorization Current Access Token]]&lt;br /&gt;
&lt;br /&gt;
===== Step 4: Send Request =====&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''X-ID-Role is required if user has more than one role access''&lt;br /&gt;
* ''X-ID-Organization is required if user + role has more than one organization access''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Postman OAuth2 Send Request.png|400x400px|frameless|Postman OAuth2 Send Request]]&lt;br /&gt;
&lt;br /&gt;
==== Authentication Flow 2: Resource Owner Password Credentials (ROPC) ====&lt;br /&gt;
For ROPC flow, the access token is not OpenID scope, therefore cannot be used to access the endpoints return from well known configuration URL.&lt;br /&gt;
&lt;br /&gt;
===== Step 1: Get Token =====&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 1 2 1.png]]&lt;br /&gt;
&lt;br /&gt;
===== Step 2: Refresh Token =====&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 1 2 2.png]]&lt;br /&gt;
&lt;br /&gt;
===== Step 3.1: Get tax records where C_TaxCategory_ID=107 =====&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''X-ID-IdToken is required if iDempiere is configured to use email to login and email information is not included in the Access Token (for Resource Owner Password Credentials flow only)''&lt;br /&gt;
* ''X-ID-Role is required if user has more than one role access''&lt;br /&gt;
* ''X-ID-Organization is required if user + role has more than one organization access''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 2 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 3.2: Get document no and description of the order records ====&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''X-ID-IdToken is required if iDempiere is configured to use email to login and email information is not included in the Access Token (for Resource Owner Password Credentials flow only)''&lt;br /&gt;
* ''X-ID-Role is required if user has more than one role access''&lt;br /&gt;
* ''X-ID-Organization is required if user + role has more than one organization access''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 2 2.png]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=OIDC_SSO_Amazon_Cognito_Testing_Steps&amp;diff=23483</id>
		<title>OIDC SSO Amazon Cognito Testing Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=OIDC_SSO_Amazon_Cognito_Testing_Steps&amp;diff=23483"/>
		<updated>2025-08-21T02:50:50Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Testing using Postman */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Create user pool ==&lt;br /&gt;
Amazon Cognito https://console.aws.amazon.com/cognito/home &amp;gt; User pools &amp;gt; Create user pool&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Select Cognito user pool provider type ===&lt;br /&gt;
'''IMPORTANT NOTES:'''&lt;br /&gt;
&lt;br /&gt;
* if you are planning to use EMail authentication with iDempiere then select EMail as the '''ONLY''' attribute for sign in, otherwise you won't be able to create your users based on emails&lt;br /&gt;
* if you are planning to use Name as authentication you can select both User Name + EMail, but make sure that you check &amp;quot;Make user case sensitive&amp;quot;, otherwise you won't be able to create GardenAdmin as user (it will end and gardenadmin and the REST integration won't work)&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Step 1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Configure password and authentication policy ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 2.png]] ===&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Configure sign-up experience ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Configure email and SMS delivery ===&lt;br /&gt;
[[File:Amazon Cognito Testing Step 4.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Integrate app ===&lt;br /&gt;
&lt;br /&gt;
==== Step 5.1: Setup integration with app ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.2: Setup Cognito domain ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.3: Select Confidential client, enter app client name and select Generate a client secret ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 3.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.4: Enter callback URLs ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 4.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.5: Add ALLOW_USER_PASSWORD_AUTH to Authentication flows ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 5.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 5.6: Add Profile to Open ID Connect scopes ====&lt;br /&gt;
[[File:Amazon Cognito Testing Step 5 6.png]]&lt;br /&gt;
&lt;br /&gt;
== User pool configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Create user ===&lt;br /&gt;
User pool: GardenWorld &amp;gt; Users &amp;gt; Create user&lt;br /&gt;
&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''User name = iDempiere user (AD_User.Name)''&lt;br /&gt;
* ''Email address = iDempiere user (AD_User.EMail)''&lt;br /&gt;
* ''User has to login for the first time using the temporary password to change new password''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Create group (Optional) ===&lt;br /&gt;
NOTE this step and the next are optional, not required if you uncheck the &amp;quot;Authorization&amp;quot; flag in the iDempiere &amp;quot;Rest OpenID Connect Service configuration&amp;quot; explaned below.&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; Groups &amp;gt; Create group&lt;br /&gt;
&lt;br /&gt;
''Note: Group name = iDempiere role (AD_Role.Name) without space''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Add user to group ===&lt;br /&gt;
User pool: GardenWorld &amp;gt; Groups &amp;gt; Group: GardenWorldAdmin &amp;gt; Add user to group&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Get region, User pool ID, Client ID, Client secret, Domain and Allowed callback URLs ===&lt;br /&gt;
&lt;br /&gt;
==== Step 4.1: Copy region and User pool ID ====&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration&lt;br /&gt;
&lt;br /&gt;
Get the region from the Token signing key URL. Token signing key URL format - &amp;lt;nowiki&amp;gt;https://cognito-idp&amp;lt;/nowiki&amp;gt;.[region].amazonaws.com/[userPoolId]/.well-known/jwks.json.&lt;br /&gt;
&lt;br /&gt;
Copy the User pool ID&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.2: Copy Client ID and Client secret ====&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client&lt;br /&gt;
&lt;br /&gt;
Copy the Client ID and Client secret&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.3: Copy Domain ====&lt;br /&gt;
''Note: Cognito domain is required for Authorization Code Grant authorization flow''&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; Domain&lt;br /&gt;
&lt;br /&gt;
Copy Domain&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 3.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 4.4: Copy Allowed callback URLs and Hosted UI link address ====&lt;br /&gt;
''Note: Allowed callback URL is required for Authorization Code Grant authorization flow''&lt;br /&gt;
&lt;br /&gt;
User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client &amp;gt; Hosted UI&lt;br /&gt;
&lt;br /&gt;
Copy Allowed callback URLs&lt;br /&gt;
&lt;br /&gt;
Right-click on the View Hosted UI button to Copy link address&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing User Pool Step 4 4.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Pre Token Generation Lambda trigger (Optional) ===&lt;br /&gt;
User attributes such as email, phone number etc. are included in the ID Token instead of Access Token. &lt;br /&gt;
&lt;br /&gt;
You have to set up a Pre Token Generation Lambda trigger to add custom claims (such as user email, phone number etc.) to the Access Token. Customization of Access Token requires user to turn on the Advanced security features.&lt;br /&gt;
&lt;br /&gt;
== Rest OpenID Connect Service configuration ==&lt;br /&gt;
iDempiere Web Client &amp;gt; Tenant: GardenWorld &amp;gt; Rest OpenID Connect Service&lt;br /&gt;
&lt;br /&gt;
Authority URL format - &amp;lt;nowiki&amp;gt;https://cognito-idp&amp;lt;/nowiki&amp;gt;.[region].amazonaws.com/[userPoolId]&lt;br /&gt;
&lt;br /&gt;
Audience - User pool: GardenWorld &amp;gt; App integration &amp;gt; App client: iDempiere Web Client &amp;gt; Client ID&lt;br /&gt;
&lt;br /&gt;
Authorization - when checked the integration will verify the roles vs the groups configured on Cognito, when unchecked the roles assignment is completely managed on iDempiere&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Rest OpenID Connect Service.png]]&lt;br /&gt;
&lt;br /&gt;
== Generate Secret Hash ==&lt;br /&gt;
''Note: Secret Hash is required for Resource Owner Password Credentials (ROPC) authorization flow''&lt;br /&gt;
&lt;br /&gt;
* Combine the User name and Client ID into a single string&lt;br /&gt;
* Hash the combined string using the HMAC-SHA256 algorithm and the client secret as the key&lt;br /&gt;
* Base64 encode the resulting hash&lt;br /&gt;
&lt;br /&gt;
For example, to generate the hash using a linux CLI:&lt;br /&gt;
 USERNAME=&amp;lt;cognito user pool username&amp;gt;&lt;br /&gt;
 CLIENT_ID=&amp;lt;your client_id&amp;gt;&lt;br /&gt;
 CLIENT_SECRET=&amp;lt;your client secret&amp;gt;&lt;br /&gt;
 SECRET_HASH=$(echo -n $USERNAME$CLIENT_ID | openssl sha256 -binary -mac HMAC -macopt key:$CLIENT_SECRET | base64)&lt;br /&gt;
 echo $SECRET_HASH&lt;br /&gt;
&lt;br /&gt;
Alternatively for testing you can use an online generator like this: https://www.devglan.com/online-tools/hmac-sha256-online&lt;br /&gt;
&lt;br /&gt;
== Testing using Postman ==&lt;br /&gt;
&lt;br /&gt;
* Import amazon-cognito-oidc-test.postman_collection.json and environment-http---localhost-8080.postman_environment.json to Postman&lt;br /&gt;
* Set variable value&lt;br /&gt;
** cognitoDomain - Get Domain value from User pool configuration &amp;gt; Step 4.3 (for Authorization Code Grant flow only)&lt;br /&gt;
** cognitoRegion - Get region value from User pool configuration &amp;gt; Step 4.1&lt;br /&gt;
** cognitoClientId - Get Client ID value from User pool configuration &amp;gt; Step 4.1&lt;br /&gt;
** cognitoSecret - Get Client secret value from User pool configuration &amp;gt; Step 4.1 &lt;br /&gt;
** cognitoRedirectUri - Get Allowed callback URL from User pool configuration &amp;gt; Step 4.4 (for Authorization Code Grant flow only)&lt;br /&gt;
** cognitoUsername - User name of User pool: GardenWorld &amp;gt; Users &amp;gt; User: GardenAdmin (for Resource Owner Password Credentials flow only)&lt;br /&gt;
** cognitoPassword - Password of User pool: GardenWorld &amp;gt; Users &amp;gt; User: GardenAdmin (for Resource Owner Password Credentials flow only)&lt;br /&gt;
** cognitoSecretHash - Get the generated secret hash from Generate Secret Hash (for Resource Owner Password Credentials flow only)&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Get and Refresh Token ===&lt;br /&gt;
There are two authentication flows used to get token and refresh token: Authorization Code Grant and Resource Owner Password Credentials (ROPC).&lt;br /&gt;
&lt;br /&gt;
For ROPC flow, the access token is not OpenID scope, therefore cannot be used to access the endpoints return from well known configuration URL.&lt;br /&gt;
&lt;br /&gt;
==== Step 1.1: Authorization Code Grant ====&lt;br /&gt;
&lt;br /&gt;
===== Step 1.1.1: Get New Access Token =====&lt;br /&gt;
At the '''Authorization''' tab, click '''Get New Access Token'''&lt;br /&gt;
# Postman Desktop, uncheck '''Authorize using browser''', use '''https://oauth.pstmn.io/v1/callback''' for callback url&lt;br /&gt;
# Postman Web, callback url is fix as '''https://oauth.pstmn.io/v1/browser-callback'''&lt;br /&gt;
# VSCode Postman Extension, callback url is fix as '''https://oauth.pstmn.io/v1/vscode-callback'''&lt;br /&gt;
# Depends on the type of Postman client you are using, add the corresponding callback url to Cognito's allowed callback url list&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Postman OAuth2 Get New Access Token.png|400x400px|frameless|Postman OAuth2 Get New Access Token]]&lt;br /&gt;
&lt;br /&gt;
===== Step 1.1.2: Cognito Login =====&lt;br /&gt;
'''Get New Access Token''' will open the login dialog for Cognito&lt;br /&gt;
&lt;br /&gt;
[[File:Cognito Sign In.png|400x400px|frameless|Cognito Sign In]]&lt;br /&gt;
&lt;br /&gt;
===== Step 1.1.3: Use Token =====&lt;br /&gt;
Upon successful authentication, click '''Proceed''' to open the '''MANAGE ACCESS TOKENS''' dialog. Click '''Use Token''' to use the return access token&lt;br /&gt;
&lt;br /&gt;
[[File:Postman Authorization Use Token.png|400x400px|frameless|Postman Authorization Use Token]]&lt;br /&gt;
&lt;br /&gt;
After execution of '''Use Token''', Access Token is the current token for Bearer Authorization&lt;br /&gt;
&lt;br /&gt;
[[File:Postman Authorization Current Access Token.png|400x400px|frameless|Postman Authorization Current Access Token]]&lt;br /&gt;
&lt;br /&gt;
===== Step 1.1.4: Send Request =====&lt;br /&gt;
&lt;br /&gt;
[[File:Postman OAuth2 Send Request.png|400x400px|frameless|Postman OAuth2 Send Request]]&lt;br /&gt;
&lt;br /&gt;
==== Step 1.2: Resource Owner Password Credentials (ROPC) ====&lt;br /&gt;
&lt;br /&gt;
===== Step 1.2.1: Get Token =====&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 1 2 1.png]]&lt;br /&gt;
&lt;br /&gt;
===== Step 1.2.2: Refresh Token =====&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 1 2 2.png]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Sample REST requests ===&lt;br /&gt;
&lt;br /&gt;
==== Step 2.1: Get tax records where C_TaxCategory_ID=107 ====&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''X-ID-IdToken is required if iDempiere is configured to use email to login and email information is not included in the Access Token (for Resource Owner Password Credentials flow only)''&lt;br /&gt;
* ''X-ID-Role is required if user has more than one role access''&lt;br /&gt;
* ''X-ID-Organization is required if user + role has more than one organization access''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 2 1.png]]&lt;br /&gt;
&lt;br /&gt;
==== Step 2.2: Get document no and description of the order records ====&lt;br /&gt;
''Notes:'' &lt;br /&gt;
&lt;br /&gt;
* ''X-ID-IdToken is required if iDempiere is configured to use email to login and email information is not included in the Access Token (for Resource Owner Password Credentials flow only)''&lt;br /&gt;
* ''X-ID-Role is required if user has more than one role access''&lt;br /&gt;
* ''X-ID-Organization is required if user + role has more than one organization access''&lt;br /&gt;
&lt;br /&gt;
[[File:Amazon Cognito Testing Postman Step 2 2.png]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Postman_OAuth2_Get_New_Access_Token.png&amp;diff=23482</id>
		<title>File:Postman OAuth2 Get New Access Token.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Postman_OAuth2_Get_New_Access_Token.png&amp;diff=23482"/>
		<updated>2025-08-21T02:43:53Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Postman OAuth2 Get New Access Token&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Postman_OAuth2_Send_Request.png&amp;diff=23481</id>
		<title>File:Postman OAuth2 Send Request.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Postman_OAuth2_Send_Request.png&amp;diff=23481"/>
		<updated>2025-08-21T02:31:02Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Postman OAuth2 Send Request&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Current_Access_Token.png&amp;diff=23480</id>
		<title>File:Postman Authorization Current Access Token.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Current_Access_Token.png&amp;diff=23480"/>
		<updated>2025-08-21T02:24:51Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Postman Authorization Current Access Token&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Use_Token.png&amp;diff=23479</id>
		<title>File:Postman Authorization Use Token.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Use_Token.png&amp;diff=23479"/>
		<updated>2025-08-21T02:22:03Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Postman Authorization Use Token&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Cognito_Sign_In.png&amp;diff=23478</id>
		<title>File:Cognito Sign In.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Cognito_Sign_In.png&amp;diff=23478"/>
		<updated>2025-08-21T02:19:31Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cognito Sign In&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Get_New_Access_Token.png&amp;diff=23477</id>
		<title>File:Postman Authorization Get New Access Token.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=File:Postman_Authorization_Get_New_Access_Token.png&amp;diff=23477"/>
		<updated>2025-08-21T02:17:04Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Postman Authorization Get New Access Token&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23434</id>
		<title>REST Web Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23434"/>
		<updated>2025-07-22T10:59:34Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Maintainers:''' [http://www.bx-service.com BX Service GmbH] team&lt;br /&gt;
* '''Status:''' used in production, up to date with release 11 and master&lt;br /&gt;
* '''License:''' [http://www.gnu.org/licenses/gpl-2.0.html GPLv2]&lt;br /&gt;
* '''Sources:''' https://github.com/bxservice/idempiere-rest&lt;br /&gt;
* '''Continuous Integration:''' https://jenkins.idempiere.org/job/idempiere-rest/ (installation instructions)&lt;br /&gt;
* '''Swagger UI:''' https://hengsin.github.io/idempiere-rest-swagger-ui&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
The iDempiere REST API is a plugin that allows developers to communicate with an iDempiere server via a RESTful API. This information is delivered via HTTP using JSON. &lt;br /&gt;
&lt;br /&gt;
The iDempiere REST API seeks to follow the OData standard and uses the following structure and endpoints.&lt;br /&gt;
&lt;br /&gt;
You can find examples of every call in the [https://github.com/bxservice/idempiere-rest/tree/master/com.trekglobal.idempiere.rest.api/postman postman collection sample files in the official repository].&lt;br /&gt;
&lt;br /&gt;
= Global URL parameters =&lt;br /&gt;
&lt;br /&gt;
* '''locale:''' in any call you can use the URL parameter locale &amp;lt;code&amp;gt;?locale={locale}&amp;lt;/code&amp;gt;  to define the language.  For example adding &amp;lt;code&amp;gt;?locale=es_CO&amp;lt;/code&amp;gt; to the login URL &amp;lt;code&amp;gt;api/v1/auth/tokens&amp;lt;/code&amp;gt; will return any error message in Spanish.&lt;br /&gt;
&lt;br /&gt;
= Login in to get your Bearer authorization token =&lt;br /&gt;
&lt;br /&gt;
'''Properties:'''&lt;br /&gt;
&lt;br /&gt;
* '''userName:'''The user name being authenticated, here you would need to use the user Name or the EMail depending on the [[System Configurator (Window ID-50006)#USE EMAIL FOR LOGIN|SysConfig USE_EMAIL_FOR_LOGIN]]&lt;br /&gt;
* '''password:''' the password of the user being authenticated&lt;br /&gt;
* parameters:&lt;br /&gt;
** '''clientId:''' the client ID from AD_Client, here you can use the AD_Client_ID or the Value for authentication&lt;br /&gt;
** '''roleId:''' the role ID from AD_Role, here you can use the AD_Role_ID or the role Name for authentication&lt;br /&gt;
** '''organizationId:''' the organization ID from AD_Org, here you can use the AD_Org_ID or the organization Name for authentication&lt;br /&gt;
** '''warehouseId:''' the warehouse ID from M_Warehouse, here you can use the M_Warehouse_ID or the warehouse Name for authentication&lt;br /&gt;
** '''language:''' the language for the session, as defined in AD_Language.AD_Language&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' REST API just allows to log in to roles with Role Type = WebService, or without Role Type.  This means by default is not possible to login with role System, you need to clear the Role Type in System, or even better create a WebService role for System tenant.&lt;br /&gt;
&lt;br /&gt;
There are two ways to log in to get your authorization token:&lt;br /&gt;
&lt;br /&gt;
== One-step log-in ==&lt;br /&gt;
&lt;br /&gt;
When you know beforehand all the login information needed to get into the system, you need to do a POST request to the following endpoint&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;.../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With a body like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;,&lt;br /&gt;
    &amp;quot;parameters&amp;quot;: {&lt;br /&gt;
        &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
        &amp;quot;roleId&amp;quot;: {{roleId}},&lt;br /&gt;
        &amp;quot;organizationId&amp;quot;: {{organizationId}},&lt;br /&gt;
        &amp;quot;warehouseId&amp;quot;: {{warehouseId}},&lt;br /&gt;
        &amp;quot;language&amp;quot;: &amp;quot;{{language}}&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Change all the {{propertyname}} values to the ones you want to use in your instance.''&lt;br /&gt;
&lt;br /&gt;
== Normal log-in ==&lt;br /&gt;
&lt;br /&gt;
If you want to log in as a user would normally do in iDempiere (choosing a role, warehouse, client, etc), you need to do the following requests&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;clients&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;GardenWorld&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsImlzcyI6ImlkZW1waWVyZS5vcmciLCJDbGllbnRzIjoiMTEiLCJleHAiOjE2NjY5NjQ5Mjh9.3t0MuK6ReF7xNmb36ITM36VSKI5QnK3n0ZF_LIgPQSrso4oRhDsL8Mudc0NqH4qjvvKDlYsPquYKtrHnB5UiZg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With that token you can request for login information from the user that is being authenticated. You need to add it to the request Header with Key value as:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; Authorization: Bearer {authToken}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The information you can request is the following, and it needs to be done in this order because each request needs information from the previous call:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/roles?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the roles that the user has access to&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/organizations?client={clientId}&amp;amp;role={roleId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the organizations that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/auth/warehouses?client={clientId}&amp;amp;role={roleId}&amp;amp;organization={organizationId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the warehouses that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/language?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the languages the user can login with.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When you have all the data you need to do a final PUT request like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PUT .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;clientId&amp;quot;: {clientId},&lt;br /&gt;
  &amp;quot;roleId&amp;quot;: {roleId},&lt;br /&gt;
  &amp;quot;organizationId&amp;quot;: {organizationId},&lt;br /&gt;
  &amp;quot;warehouseId&amp;quot;: {warehouseId},&lt;br /&gt;
  &amp;quot;language&amp;quot;: &amp;quot;{language}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''The language, organizationId and warehouseId properties are optional, it can be omitted and the system will use the default language and 0 for the organization.''&lt;br /&gt;
&lt;br /&gt;
* ''If the warehouseId property is omitted the system assigns by default the warehouse defined for the organization, if the warehouse is passed as 0, then the login doesn't assign a default warehouse.''&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101,&lt;br /&gt;
    &amp;quot;language&amp;quot;: &amp;quot;en_US&amp;quot;,&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MjAwMDAxLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDE2MiwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTcwMTc3NTUzN30.bAUEhPylAQhZjZquJhvLpO9zMZG3g6zlM_IqO9ifeXJpAJBOoJtDqd8CrYPU1PKURzoPRSUglbKqr1LsXdz38A&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwODk1OTIyNC1iYzBhLTRkNTQtOTlhZS1jNmRmZjNiOGEwMzUiLCJpc3MiOiJpZGVtcGllcmUub3JnIiwiZXhwIjoxNzAxODU4MzM3fQ.uSE5SOtWgPvReC4JtyV4alHd-ccU0L9QhIpP2TwT7C5TJFeCGVYTdyWc291DaIweyiIGCfWFgQlbe0oH1EEXXg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Abbreviated log-in =&lt;br /&gt;
The &amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt; operation described above can be sufficient for a login when the user has only access to one client, one role and one organization.  In this case the POST operation returns immediately the token and refresh_token and the payload includes the values that were assumed for the login.&lt;br /&gt;
&lt;br /&gt;
= Refresh Token =&lt;br /&gt;
&lt;br /&gt;
As you see above, the login process returns a token and a refresh_token, normally the token expires in 1 hour and the refresh_token expires in 24 hours.  These expiration defaults can be changed using SysConfig keys REST_TOKEN_EXPIRE_IN_MINUTES and REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES.&lt;br /&gt;
&lt;br /&gt;
It is a common practice in front-end development to store the refresh_token in a cookie or browser data, while keeping the token itself just in memory.  This approach is taken due to the sensitive nature of the information contained within the token, which must not be disclosed.&lt;br /&gt;
&lt;br /&gt;
When the token expires, you can get a new token calling the following request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;{{refreshToken}}&amp;quot;,&lt;br /&gt;
    &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that clientId and userId are recommended, but optional, it can be disabled with the SysConfig keys REST_MANDATORY_CLIENT_ID_ON_REFRESH=N and REST_MANDATORY_USER_ID_ON_REFRESH=N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MTAyLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDIyMCwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTczMDgxNTUwM30.MzmpXlpuIUjKkYdKi2G50ORcSt2FcLT4-x-OO1LVzDDoO8lNm7P9ELaWWViKktOzN_pKtocIA59LlXzXBmWVtA&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZTQ3Zjg4YjkyMmU5MzU5NzEwNmRlNWIwOGQ1ZDljMjk3OTQxMzNkNjYxMWFjOWZkMmI1NGE5NWExODFjNDIxIiwiaXNzIjoiaWRlbXBpZXJlLm9yZyJ9.efa6M1oOb_QDnSKopNsdDygd1fF3S-ozr3DXjn1qANyPEVK-kg3Y2anGXrqQCtUzmxWBi8eTY4C6r5wXY6jtFA&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new tokens are set with new expiration times as configured.&lt;br /&gt;
&lt;br /&gt;
Refresh tokens can be expired (deleted) using the process &amp;quot;Expire Refresh Tokens&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A refresh token can be used just one time.  If a refresh token tries to be used a second time a potential breach is set on the system and all the tokens associated with the refresh token are invalidated.&lt;br /&gt;
&lt;br /&gt;
= Logout =&lt;br /&gt;
&lt;br /&gt;
Logout a session from a token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/logout&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;{{authToken}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The session associated to the token will be logged out.&lt;br /&gt;
&lt;br /&gt;
This token cannot be used again, neither the refresh token associated.&lt;br /&gt;
&lt;br /&gt;
= Common Headers =&lt;br /&gt;
&lt;br /&gt;
* Content-Type: application/json&lt;br /&gt;
* Accept: application/json&lt;br /&gt;
* Authorization: Bearer {authToken}&lt;br /&gt;
** All calls except the first one (POST/auth) require an authorization bearer that is returned by the /auth APIs from the previous steps.&lt;br /&gt;
&lt;br /&gt;
= Requesting Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports requests for data via HTTP '''GET''' requests.&lt;br /&gt;
&lt;br /&gt;
On every get request the response will include this information, in addition to the one requested:&lt;br /&gt;
* id: the record ID&lt;br /&gt;
* uid: the UUID of the record&lt;br /&gt;
* model-name: the table name of the record&lt;br /&gt;
* {columnname}: each pair of column/value is represented as a json object with the columnname:&lt;br /&gt;
** String: strings are represented directly as a json string quoted value&lt;br /&gt;
** Yes/No: these are represented as true/false&lt;br /&gt;
** Numbers: numbers are represented as a json number without quotes&lt;br /&gt;
** Dates/Times: timestamp values are represented as a json date (quoted string with format [https://en.wikipedia.org/wiki/ISO_8601 ISO_8601]&lt;br /&gt;
** Foreign keys: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt; the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** identifier -&amp;gt; the foreign identifier&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
** Binary: binary columns are represented directly as a json string base64 encoded value&lt;br /&gt;
** Images: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt;  the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** data -&amp;gt; a string containing the base64 encoded data for the image&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
&lt;br /&gt;
== Requesting PO Collections ==&lt;br /&gt;
The request below returns the collection of taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d76b09c5-531b-4f98-a8c6-9af848b6697b&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T15:06:11Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Provintial Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2002-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7.5,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual PO by ID ==&lt;br /&gt;
The request below returns an individual PO of type tax by the given id &amp;quot;106&amp;quot;.&lt;br /&gt;
''* You can use here either record id or the UUID (C_Tax_ID or C_Tax_UU value)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual Property ==&lt;br /&gt;
To address an entity property clients append a path segment containing property name to the URL of the entity.&lt;br /&gt;
The request below returns the Rate property of a tax.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106/rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Querying Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports various kinds of query options for querying data. This section will help you go through the common scenarios for these query options.&lt;br /&gt;
&lt;br /&gt;
== Query Option $filter ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option allows developers to filter a collection of resources that are addressed by a request URL. The expression specified with $filter is evaluated for each resource in the collection, and only items where the expression evaluates to true are included in the response. These are the basic predicates that are supported:&lt;br /&gt;
&lt;br /&gt;
* $filter&lt;br /&gt;
** Logical operators&lt;br /&gt;
*** eq -&amp;gt; equals =&lt;br /&gt;
*** neq -&amp;gt; not equals !=&lt;br /&gt;
*** in -&amp;gt; IN&lt;br /&gt;
*** gt -&amp;gt; greater than &amp;gt;&lt;br /&gt;
*** ge -&amp;gt; greater or equal &amp;gt;=&lt;br /&gt;
*** lt -&amp;gt; less than &amp;lt;&lt;br /&gt;
*** le -&amp;gt; less or equal &amp;lt;=&lt;br /&gt;
*** and -&amp;gt; &amp;amp;&lt;br /&gt;
*** or -&amp;gt; |&lt;br /&gt;
*** not -&amp;gt; !&lt;br /&gt;
** Method operators (WARNING: there must not be spaces before/after the parameters on these functions, strings must be surrounded by single quotes):&lt;br /&gt;
*** contains -&amp;gt; if a string contains another string&lt;br /&gt;
*** startswith -&amp;gt; if a string starts with another string&lt;br /&gt;
*** endswith -&amp;gt; if a string ends with another string&lt;br /&gt;
*** tolower -&amp;gt; convert a string to lowercase&lt;br /&gt;
*** toupper -&amp;gt; convert a string to uppercase&lt;br /&gt;
** Parenthesis are supported&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
The request below using $filter to get business partners where IsCustomer = true and IsActive = true and the name starts with 'Pa'&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_bpartner?$filter=isCustomer eq true AND isActive eq true AND startswith(name,'Pa') AND C_BPartner_ID in (120,121)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 121,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;39e85feb-94a2-4e41-ae45-e7d49d7be077&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-13T10:14:03Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-11T13:16:05Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Patio&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Fun, Inc.&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesVolume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;NumberEmployees&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;AD_Language&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Language&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Spanish (Colombia)&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_language&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsProspect&amp;quot;: false,&lt;br /&gt;
            &amp;quot;FirstSale&amp;quot;: &amp;quot;2020-11-05&amp;quot;,&lt;br /&gt;
            &amp;quot;SO_CreditLimit&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;SO_CreditUsed&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;AcqusitionCost&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;PotentialLifeTimeValue&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ActualLifeTimeValue&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;ShareOfCustomer&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsEmployee&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSalesRep&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOneTime&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BP_Group_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner Group&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bp_group&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOCreditStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Credit Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;O&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Credit OK&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalOpenBalance&amp;quot;: 588.240,&lt;br /&gt;
            &amp;quot;IsPOTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufacturer&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Is1099Vendor&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsUseTaxIdDigit&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDetailedNames&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $expand ==&lt;br /&gt;
iDempiere supports nested filters in &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The request below return Orders and all their Lines and Taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$expand=c_orderLine,c_ordertax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountTendered&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountRefunded&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;c_orderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;M_Product_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 1000295,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Poker_Poker&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;6-Pack&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;QtyOrdered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;QtyReserved&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyDelivered&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyInvoiced&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;PriceList&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceActual&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;C_Tax_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceLimit&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;Discount&amp;quot;: 0.00,&lt;br /&gt;
                    &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsDescription&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;PriceEntered&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;QtyEntered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;PriceCost&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyLostSales&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;RRAmt&amp;quot;: 0&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add query operators ($filter, $orderyby, $top, $skip, $select) to the detail tables by adding the query operators between parentheses separated by ;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns Orders and their Lines (Line number and line net amount) from lines with linnetamt &amp;gt; 1000.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$select=DocumentNo,Description&amp;amp;$expand=C_OrderLine($select=Line,Linenetamt ; $filter=LineNetAmt gt 1000 ; $orderby=Line)&amp;amp;$top=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000020,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;470c98e0-5a19-413d-b589-89fc67272823&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50013&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000018,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;fb485eb0-6e79-439d-926f-cce53d76d806&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50011&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;040ffe18-04ab-4989-ae83-9ed295146042&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50008&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000026,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;d3eac7ec-caf1-473e-8c22-f5b8cee55d30&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 4275.00&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000017,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;ee3a9225-439a-4022-8eaa-1109e5e4f049&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50010&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default expand searches for the primary key column in the master table and tries to create the relation with this column name in the expanded table. /ad_user?$expand=c_order expands using ad_user_id by default. Sometimes you want to specify which column must be used for the expanding. In this case, you need to specify the column name using a dot after the table name.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns users and their corresponding orders as sales representatives.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/ad_user?$expand=C_order.salesrep_id($select=documentno)&amp;amp;$select=Name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;986cb4dc-7161-4d77-a7c7-3832d24b19de&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;,&lt;br /&gt;
    &amp;quot;C_order&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;3456b6d0-b911-42e6-8432-f52ded58713f&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;800000&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iDempiere has special tables where record_id is used, for instance, fact_acct. You can expand to this table using the same syntax as explained above. ''The plug-in will automatically set the correct value for AD_Table_ID''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the invoice 104 and their corresponding records on fact_acct.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/c_invoice/104?$expand=fact_acct.record_id($select=fact_acct_id)&amp;amp;$select=DocumentNo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;6d2768c9-b3cc-4820-b903-9748b416b98f&amp;quot;,&lt;br /&gt;
    &amp;quot;DocumentNo&amp;quot;: &amp;quot;10000001&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_invoice&amp;quot;,&lt;br /&gt;
    &amp;quot;fact_acct&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001729,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;cd02c4e7-b386-46aa-b367-f5ec618dccc8&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001730,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e8dfd3ec-d5bf-4ded-9646-0a2a8d86a680&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001731,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2bf88ace-83bc-4968-abdd-fd211765da92&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001732,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26735041-c88e-4670-89e5-95ae49beb4dc&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to expand to a master record as well, for instance, from product to product category. You accomplish this by writing expand followed by the column name you want to expand.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the product 122 and its corresponding product category.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/m_product/122?$expand=m_product_category_id($select=Name,IsDefault)&amp;amp;$select=Name,m_product_category_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 122,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;c713192a-9ed3-4740-ad32-9583c30d0206&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;,&lt;br /&gt;
    &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
        &amp;quot;uid&amp;quot;: &amp;quot;be686f7e-993f-4162-a02d-ad4bb8c6987b&amp;quot;,&lt;br /&gt;
        &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;IsDefault&amp;quot;: true,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: For obvious reasons. $select is the only query operator accepted in this case.''&lt;br /&gt;
&lt;br /&gt;
You can expand on multiple levels by using the $expand operators within the $expand clause. You can only expand deeper on master &amp;gt; detail records. Cases like GET ../orders?$expand=AD_user_ID($expand=C_orderLine) are forbidden.&lt;br /&gt;
&lt;br /&gt;
== Query Option $orderby ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$orderby&amp;lt;/code&amp;gt; query option allows developers to request resources in either ascending order using asc or descending order using desc. If asc or desc not specified, then the resources will be ordered in ascending order. &lt;br /&gt;
&lt;br /&gt;
The request below orders products on property Value in descending order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$orderby=Value desc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 37,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000216,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e19114c8-86cc-4fb4-b6eb-15f8fa350d38&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-05T18:46:14Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-23T19:45:12Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Tron&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;zas&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000398,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d5d1bb16-81b4-429b-86bf-f667f22b93df&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;yudo mat&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;ym&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Trees&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000299,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;1726c817-71bc-4abf-8949-0372c9ffb0d3&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Gadgets&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ShelfWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfHeight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfDepth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;UnitsPerPallet&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDays&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDaysMin&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Options $top and $skip ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$top&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection to be included in the result. The &amp;lt;code&amp;gt;$skip&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection that are to be skipped and not included in the result.&lt;br /&gt;
&lt;br /&gt;
The request below return the first two Orders starting with other 5th order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$top=2&amp;amp;$skip=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 34,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000022,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2238dc66-edda-41f7-8348-d781342f6dfc&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50015&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000016,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;5565e213-a119-4bcc-beb6-c9f9a4e75dab&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-03-09T14:20:31Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-03-09T14:20:59Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50009&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Completed&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-02-25&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_Shipper_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Shipper&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;UPS&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_shipper&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;F&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fix price&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 1615296059621.6216,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $select ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$select&amp;lt;/code&amp;gt; query option allows the clients to requests a limited set of properties for each entity or complex type. &lt;br /&gt;
&lt;br /&gt;
The request below returns Name and Value of all products.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$select=Name,Value&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 28,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000322,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;b0e7e8b6-13ed-406d-a105-bd67ddb7f423&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 134,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;01254fee-c75f-42f0-941c-142e27078643&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Table&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;PTable&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 137,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26a7e6d7-e2c1-4c21-97f2-773dc222e6a2&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mulch 10#&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mulch&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 50003,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;8a27ac0a-56c0-4a3a-8eb8-ff87c94899c1&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Ultra Glue&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;UltraGlue&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== iDempiere specific query Options ==&lt;br /&gt;
&lt;br /&gt;
=== Query Option $valrule ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$valrule&amp;lt;/code&amp;gt; can be used to get PO records using a validation rule - AD_ValRule_ID or AD_ValRule_UU&lt;br /&gt;
&lt;br /&gt;
=== Query Option $context ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$context&amp;lt;/code&amp;gt; can be used to put variables in context to be parsed by the validation rule&lt;br /&gt;
&lt;br /&gt;
=== Query Option showsql ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; can be used to add the SQL query being executed on GET.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;code&amp;gt;showsql=nodata&amp;lt;/code&amp;gt; to obtain just information about the query without returning the real data.&lt;br /&gt;
&lt;br /&gt;
The payload will include a JSON element with name &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; containing the query that is executed in the database to obtain the record(s).&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; is used at the same time with &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;, then the payload will include the &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; JSON element for the query on the master table, and also it will include the elements with format &amp;lt;code&amp;gt;sql-command-[table]&amp;lt;/code&amp;gt; for each expanded table, for example the following query:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/models/c_tax/106?$expand=c_tax_acct&amp;amp;showsql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will return the following elements in the payload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;quot;sql-command&amp;quot;: &amp;quot;SELECT C_Tax_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Name,Description,Parent_Tax_ID,C_Country_ID,C_Region_ID,To_Country_ID,To_Region_ID,C_TaxCategory_ID,Updated,UpdatedBy,IsDocumentLevel,ValidFrom,IsSummary,Rate,RequiresTaxCertificate,TaxIndicator,IsDefault,IsTaxExempt,SOPOType,IsSalesTax,AD_Rule_ID,C_Tax_UU,C_TaxProvider_ID,C_CountryGroupTo_ID,C_CountryGroupFrom_ID FROM C_Tax WHERE (c_tax_ID=?) AND C_Tax.AD_Client_ID IN(0,11) AND (C_Tax.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
    &amp;quot;sql-command-c_tax_acct&amp;quot;: &amp;quot;SELECT C_Tax_ID,C_AcctSchema_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,T_Due_Acct,T_Credit_Acct,T_Expense_Acct,C_Tax_Acct_UU FROM C_Tax_Acct WHERE (c_tax_ID=?) AND IsActive=? AND C_Tax_Acct.AD_Client_ID IN(0,11) AND (C_Tax_Acct.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query Option label ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; can be used to get PO records by filtering based on labels (i.e. &amp;lt;code&amp;gt;AD_Label&amp;lt;/code&amp;gt;). For example,  &amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner?label=Name eq '%23Customer'&amp;lt;/code&amp;gt; query will return all business partner records where the name of the Assigned Label &amp;gt; Label is '#Customer'.&lt;br /&gt;
&lt;br /&gt;
iDempiere supports using nested  &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; within the &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt; query option.&lt;br /&gt;
&lt;br /&gt;
Refer to the &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option for the supported predicates.&lt;br /&gt;
&lt;br /&gt;
=== Query Option showlabel ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showlabel&amp;lt;/code&amp;gt; can be used to include the list of assigned labels in the payload when getting a PO record or records. &lt;br /&gt;
&lt;br /&gt;
The query below returns the business partner record along with a list of assigned label objects, including all columns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;6d550225-2e0a-4203-9b82-0f2634f7d079&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:11:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:35:43Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;87ae21d5-f06a-4cd8-977c-86712cf58da1&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:13:40Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:36:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname list}&amp;lt;/code&amp;gt; to retrieve a list of assigned label objects, including the defined column list only. For example, the query below returns the business partner record along with a list of assigned label objects including the name and description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name,Description&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname}&amp;lt;/code&amp;gt; to retrieve the values of the assigned label column. For example, the query below returns the business partner record along with a list of assigned label names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
        &amp;quot;#Vendor&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data Modification =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports Create, Update and Delete operation for some or all exposed POs.&lt;br /&gt;
&lt;br /&gt;
== Create a PO (POST) ==&lt;br /&gt;
To create a PO in a collection, the client sends a POST request to that collection's URL. The POST body MUST contain a single valid entity representation. &lt;br /&gt;
&lt;br /&gt;
The request below creates a Tax which contains complex type and collection property. &lt;br /&gt;
&amp;lt;code&amp;gt;POST api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;AD_Org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;lookupColumn&amp;quot;: &amp;quot;CountryCode&amp;quot;,&lt;br /&gt;
        &amp;quot;lookupValue&amp;quot;: &amp;quot;CA&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_TaxCategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;validFrom&amp;quot;: &amp;quot;01/01/2001&amp;quot;,&lt;br /&gt;
    &amp;quot;isSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;rate&amp;quot;: &amp;quot;7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;requiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;taxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;isDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;isTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;sOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000005,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;4e71df80-f3f5-41cd-84cf-2bc8e12322d0&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard 19%&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remove a PO (DELETE) ==&lt;br /&gt;
The request below deletes the Tax with id '1000005'.&lt;br /&gt;
&amp;lt;code&amp;gt;DELETE /api/v1/models/c_tax/1000005&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;msg&amp;quot;: &amp;quot;Deleted&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update a PO (PUT) ==&lt;br /&gt;
The request below updates the tax with id 1000000 &lt;br /&gt;
&amp;lt;code&amp;gt;PUT /api/v1/models/c_tax/1000000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Standard Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000002,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;a1c76f9b-30ea-44c1-a8c3-2bc27daa1cd1&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2020-08-21T18:29:28Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:48:14Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 6.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: true,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update/Insert/Delete child records of a PO (PUT) ===&lt;br /&gt;
Update the child records of a PO using the child record array in the PUT request Body:&lt;br /&gt;
* Without child record id to create&lt;br /&gt;
* With child record id to update&lt;br /&gt;
* With child record id and the following delete flag to delete a child record.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&amp;quot;(delete)&amp;quot;:true&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples to delete, create and update order lines:&amp;lt;br/&amp;gt;&lt;br /&gt;
PUT /api/v1/models/c_order/1000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
         &amp;quot;(delete)&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;M_Product_ID&amp;quot;: 128,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 1&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 2&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Special Entity Type Representations ==&lt;br /&gt;
&lt;br /&gt;
=== Image ===&lt;br /&gt;
If you are modifying or creating values of an Image type column/field, the json entity representation must be as follows: &lt;br /&gt;
* id -&amp;gt; the foreign record ID. If not informed a new foreign record will be created and linked to the main record&lt;br /&gt;
* file_name -&amp;gt; the readable file name to be stored at the foreign table&lt;br /&gt;
* url -&amp;gt; an optional URL for the image to be stored at the foreign table&lt;br /&gt;
* data -&amp;gt; a string with the base64 encoded data for the image&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/auth/jwk ===&lt;br /&gt;
&lt;br /&gt;
Calling this endpoint returns the key used to sign the JWT.&lt;br /&gt;
&lt;br /&gt;
By default this endpoint returns nothing.  It requires the System Configurator IDEMPIERE_REST_EXPOSE_JWK to be set to Y on System tenant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;gt;'''WARNING!'''&amp;lt;/span&amp;gt; Exposing the signature key is intended exclusively for integration with API gateways that requires it (like krakend), and this endpoint MUST be hidden from public usage and exposed JUST to the API gateway.  Exposing the key publicly open the REST interface to attacks changing the JWT token.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* keys&lt;br /&gt;
** alg&lt;br /&gt;
** k&lt;br /&gt;
** kid&lt;br /&gt;
** kty&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/models/{tablename}/{recordId}/print ===&lt;br /&gt;
This method is used to get the print format from the model's record id.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $report_type -&amp;gt; optional - ( PDF | HTML | CSV | XLSX | XLS )&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* AD_PInstance_ID&lt;br /&gt;
* process&lt;br /&gt;
* summary&lt;br /&gt;
* isError&lt;br /&gt;
* reportFile&lt;br /&gt;
* reportFileName&lt;br /&gt;
* reportFileLength&lt;br /&gt;
* nodeId&lt;br /&gt;
&lt;br /&gt;
== Windows api/v1/windows ==&lt;br /&gt;
&lt;br /&gt;
working with AD_Window and AD_Tab&lt;br /&gt;
&lt;br /&gt;
== Forms api/v1/forms ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/forms ===&lt;br /&gt;
&lt;br /&gt;
Get Forms available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the forms (AD_Form) queried&lt;br /&gt;
&lt;br /&gt;
== Processes api/v1/processes ==&lt;br /&gt;
&lt;br /&gt;
working with process and reports&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes ===&lt;br /&gt;
&lt;br /&gt;
Get Processes available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an PO json record from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters, for example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=json&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ImportOrExport&amp;quot;: &amp;quot;export&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Language&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
    &amp;quot;IsOnlyCentralizedData&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for reports three special parameters can be added:&lt;br /&gt;
* report-type: with the possible values HTML, CSV, XLS or PDF (the default)&lt;br /&gt;
* is-summary&lt;br /&gt;
* print-format-id&lt;br /&gt;
&lt;br /&gt;
also, for buttons is possible to define two special parameters:&lt;br /&gt;
* table-id or model-name&lt;br /&gt;
* record-id&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the process/report executed:&lt;br /&gt;
** AD_PInstance_ID&lt;br /&gt;
** process&lt;br /&gt;
** summary&lt;br /&gt;
** isError&lt;br /&gt;
** nodeId&lt;br /&gt;
** logs - array containing the logs from the process&lt;br /&gt;
&lt;br /&gt;
The reports will be returned in an object with name &amp;lt;code&amp;gt;reportFile&amp;lt;/code&amp;gt; containing the base64 encoded report, and additionally the objects &amp;lt;code&amp;gt;reportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;reportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the process produces an export file it will be returned in an object &amp;lt;code&amp;gt;exportFile&amp;lt;/code&amp;gt;, and additionally the objects &amp;lt;code&amp;gt;exportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;exportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs ===&lt;br /&gt;
&lt;br /&gt;
Get information about jobs running&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of json records from the process running (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs/{ad_pinstance_id} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a job&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {ad_pinstance_id}&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* a json record from the process (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/jobs/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process in background (as job)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/jobs/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters (same as for running the process)&lt;br /&gt;
&lt;br /&gt;
same special parameters apply as for the reports, and additionally you can define the parameter &amp;lt;code&amp;gt;notification-type&amp;lt;/code&amp;gt; with the values E, N or B  (EMail, Notification or Both)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the AD_PInstance scheduled&lt;br /&gt;
&lt;br /&gt;
== Files api/v1/files ==&lt;br /&gt;
&lt;br /&gt;
to access files created by api/v1/processes&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Caches api/v1/caches ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Get caches information.  This call is restricted just for administrators.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
* name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* caches (array)&lt;br /&gt;
** name&lt;br /&gt;
** table_name&lt;br /&gt;
** size&lt;br /&gt;
** expireMinutes&lt;br /&gt;
** maxSize&lt;br /&gt;
** distributed (boolean)&lt;br /&gt;
&lt;br /&gt;
=== DEL api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Reset cache.  This call requires the role to have permission to execute &amp;quot;Cache Reset&amp;quot; process.&lt;br /&gt;
&lt;br /&gt;
When called without parameters it reset the whole cache, or just from a table, or just one record.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to restrict the reset to just one table.  Case sensitive.&lt;br /&gt;
* record_id -&amp;gt; optional - to restrict the reset to just one record.  Zero is the same as not set, it clears the cache of the whole table.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* entriesReset (number of entries cleared)&lt;br /&gt;
&lt;br /&gt;
== Nodes api/v1/nodes ==&lt;br /&gt;
&lt;br /&gt;
get nodes info, get log files, reset and rotate logs.&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Servers api/v1/servers ==&lt;br /&gt;
&lt;br /&gt;
servers and schedulers resource&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Infos api/v1/infos ==&lt;br /&gt;
&lt;br /&gt;
info windows&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Reference api/v1/reference/{id} ==&lt;br /&gt;
&lt;br /&gt;
You can get a reference list by id/uuid or name.&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/152'''&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/42522223-92ae-4405-92dc-e02e2dea61a7'''&lt;br /&gt;
&lt;br /&gt;
'''GET  .../api/v1/reference/C_Order%20DeliveryViaRule'''&lt;br /&gt;
&lt;br /&gt;
''* Only list and table validation references are supported''&lt;br /&gt;
&lt;br /&gt;
== Workflows api/v1/workflow ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the current user&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow/{userid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the user id passed in the URL&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/workflow/100&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/approve/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Approves the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for approval&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the approval&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/reject/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Rejects the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for rejection&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the rejection&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/forward/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Forwards the corresponding node to a specific user. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;userTo&amp;quot;: {userToID} '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for fowarding&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the forwarding&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/acknowledge/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Implementation of the workflow nodes where a user gets notified when something happens, it&lt;br /&gt;
does not require any action from the user but the user receives a message after a specific&lt;br /&gt;
action is performed. This is used when the node is from type Window/form&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for acknowledge&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/setuserchoice/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
This is similar to approve and reject but it supports columns with Type List and String.&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;value&amp;quot;:&amp;quot;Value to be set in the corresponding column&amp;quot; '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for userschoice&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
== Status lines api/v1/statuslines ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all active status line records configured in the dictionary ordered by Name.&lt;br /&gt;
&lt;br /&gt;
You can use the query parameters '''$filter''' to filter the records returned.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use the query parameter '''with_messages''' to specify that you want the resulting message returned in the payload. This means that the status line will be resolved by REST, and the result will be returned in a ''message'' property in the JSON response.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all the active status line records configured in the dictionary. &lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** name&lt;br /&gt;
** entity type&lt;br /&gt;
** message (optional)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines/{statuslineid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The message corresponding to the specific status line&lt;br /&gt;
** message&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/statuslines/200024&lt;br /&gt;
&lt;br /&gt;
=== GET /api/v1/statuslines/200024 ===&lt;br /&gt;
&lt;br /&gt;
Returns the Core status line Dashboard_OrderCount.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Order Count\n Top Year (2002): 4 \n Current Year: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Charts api/v1/charts ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/charts/{chartid} ===&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* height -&amp;gt; optional - height in pixels for the image&lt;br /&gt;
** if not provided then it uses the same height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* width -&amp;gt; optional - width in pixels for the image&lt;br /&gt;
** if not provided then it uses the height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* json -&amp;gt; optional&lt;br /&gt;
** if this parameter is present the image is returned base64 encoded in data element of JSON&lt;br /&gt;
** when not present the image file is returned directly in PNG format&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The image generated from the chart.&lt;br /&gt;
* NOTE that this image is generated using the old JFreeChart library, not the new billboard, so it can have an outdated look.&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/charts/50002?width=800&amp;amp;height=600&amp;amp;json&lt;br /&gt;
&lt;br /&gt;
== Menu tree api/v1/menutree/ ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/menutree/{id} ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all the elements from the requested menu tree with id or uuid.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Name&lt;br /&gt;
* Description&lt;br /&gt;
* IsSOTrx&lt;br /&gt;
* PredefinedContextVariables&lt;br /&gt;
* EntityType&lt;br /&gt;
* Action&lt;br /&gt;
* AD_Window_ID&lt;br /&gt;
* AD_Workflow_ID&lt;br /&gt;
* AD_Task_ID&lt;br /&gt;
* AD_Process_ID&lt;br /&gt;
* AD_Form_ID&lt;br /&gt;
* AD_InfoWindow_ID&lt;br /&gt;
&lt;br /&gt;
== REST View api/v1/views ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
iDempiere model typically has many columns and is using DB naming convention that's not particularly natural in a Json data schema. A common need is to pick a subset of columns for different use case and uses a more json oriented naming for the selected columns.&lt;br /&gt;
&lt;br /&gt;
This add a layer of abstraction on top of iDempiere model (term as Rest View) to cater for such need. It can be taken as a way to configure Json schema on top of iDempiere model.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/views ===&lt;br /&gt;
Get active REST view definitions (Rest_View, Rest_ViewColumn, Rest_ViewRelated).&lt;br /&gt;
&lt;br /&gt;
=== Support all requests and methods for api/v1/models/ ===&lt;br /&gt;
Supports all requests and methods that are available with '''api/v1/models''', just replace '''models''' with '''views''' and '''{tableName}''' with '''{viewName}''' (i.e api/v1/views/{viewName} for api/v1/models/{tableName}, api/v1/views/{viewName}/{id} for api/v1/models/{tableName}/{id}, etc).&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
See example at [https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&lt;br /&gt;
== Uploads api/v1/uploads ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/360 https://github.com/bxservice/idempiere-rest/issues/360]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Allow uploading large files for posterior references where base64 files are used (e.g. attachments, images, etc)&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Initiates a new upload session for a file&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* fileName -&amp;gt; The name of the file to be uploaded&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file in bytes&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*sha256 -&amp;gt; The SHA-256 hash of the file content for integrity verification&lt;br /&gt;
*uploadLocation -&amp;gt; &amp;quot;ARCHIVE&amp;quot;, &amp;quot;ATTACHMENT&amp;quot; OR &amp;quot;IMAGE&amp;quot;&lt;br /&gt;
*expiresInSeconds -&amp;gt; The number of seconds after which the upload session will expire&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*expiresAt -&amp;gt; The expiration time of the upload session&lt;br /&gt;
*presignedURL -&amp;gt; The pre-signed URL for PUT&lt;br /&gt;
&lt;br /&gt;
===PUT api/v1/uploads/{uploadId}/chunks/{chunkOrder}===&lt;br /&gt;
&lt;br /&gt;
Uploads a chunk of the file to the server&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk&lt;br /&gt;
&lt;br /&gt;
'''''Header Parameter:'''''&lt;br /&gt;
*X-Total-Chunks -&amp;gt; mandatory, specific the expected number of chunks&lt;br /&gt;
*X-Content-SHA256 -&amp;gt; hash of the chunk data&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Chunk data to be uploaded&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
*receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
*isLastChunk -&amp;gt; True if this is the last chunk receive and will trigger the completion of the upload asynchronously&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}===&lt;br /&gt;
&lt;br /&gt;
Retrieves the current status of an ongoing or completed upload&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*expiresInSeconds -&amp;gt; The number of seconds after which the presigned URL will expire. When provided, a presigned URL will be returned for the upload session.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence &lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
*presignedURL -&amp;gt; The pre-signed URL for GET&lt;br /&gt;
&lt;br /&gt;
===DEL api/v1/uploads/{uploadId} ===&lt;br /&gt;
&lt;br /&gt;
Cancels an ongoing/completed upload, cleans up any temporarily stored chunks and associated uploaded file&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*message -&amp;gt; Message or details about the outcome of the cancellation&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}/file ===&lt;br /&gt;
&lt;br /&gt;
Get uploaded file content as binary stream or json&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Query Parameter:'''''&lt;br /&gt;
*asJson -&amp;gt; if provided, the response will be in JSON format with file content as base64 encoded string&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Response may be returned in one of the following media types:&lt;br /&gt;
&lt;br /&gt;
*application/octet-stream for binary data&lt;br /&gt;
*text/html for HTML-formatted content&lt;br /&gt;
*text/plain for plain text responses&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Get pending uploads from current user&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Status list of pending uploads:&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
* message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads/{uploadId}/copy===&lt;br /&gt;
&lt;br /&gt;
Copy uploaded file to attachment, image or archive (edited)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record (ARCHIVE, IMAGE or ATTACHMENT)&lt;br /&gt;
* tableName -&amp;gt; The table name of the destination record (optional)&lt;br /&gt;
*recordId -&amp;gt; The record id/uuid of the destination record (optional)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*tableName -&amp;gt; The table name of the destination record&lt;br /&gt;
*recordId -&amp;gt; The record id of the destination record&lt;br /&gt;
*recordUU -&amp;gt; The record uuid of the destination record&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record, e.g. archive (default), image or attachment&lt;br /&gt;
* fileName -&amp;gt; The name of the file being copied&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file being copied (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
* fileSize -&amp;gt; The size of the file being copied&lt;br /&gt;
&lt;br /&gt;
== Batch request api/v1/batch ==&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/batch===&lt;br /&gt;
&lt;br /&gt;
Execute one or more sub-request in single transaction&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*method -&amp;gt; HTTP method &amp;quot;POST&amp;quot;, &amp;quot;PUT&amp;quot; or &amp;quot;DEL&amp;quot;&lt;br /&gt;
*path -&amp;gt; Sub-request resource path, for e.g &amp;quot;v1/model/C_Order&amp;quot;&lt;br /&gt;
*body -&amp;gt; JSON body for the sub-request (if applicable)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*status -&amp;gt; HTTP status text (OK, Created, etc) return from sub-request&lt;br /&gt;
*statusCode -&amp;gt; HTTP status code (200, 201, 400, etc) return from sub-request&lt;br /&gt;
*body -&amp;gt; JSON return from sub-request (if available)&lt;br /&gt;
&lt;br /&gt;
=SysConfig Keys=&lt;br /&gt;
&lt;br /&gt;
==IDEMPIERE_REST_EXPOSE_JWK==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
For integration with krakend (see [[Proxy iDempiere-Rest Through KrakenD]]) it is necessary to expose the signing key in the endpoint api/v1/auth/jwk&lt;br /&gt;
&lt;br /&gt;
Setting this to N (the default) the endpoint is not exposed, changing to Y it will expose the endpoint.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_COLUMNNAME_TOLOWERCASE ==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
When set to Y the columnnames are translated to be named as json properties.  The first letter is changed to lowercase when the columnname doesn't contain the underline character ( _ )&lt;br /&gt;
&lt;br /&gt;
When set to N (the default) the columnname is unchanged&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_MAX_RECORDS_SIZE==&lt;br /&gt;
&lt;br /&gt;
Numeric, default 100&lt;br /&gt;
&lt;br /&gt;
This is a System SysConfig defining the maximum number of records returned in a get operation.&lt;br /&gt;
&lt;br /&gt;
After changing this SysConfig key a server restart is required.&lt;br /&gt;
&lt;br /&gt;
Note that $top cannot be higher than this configured value.&lt;br /&gt;
&lt;br /&gt;
Also, REST_MAX_RECORDS_SIZE=0 means unlimited, and in this case the $top takes precedence when defined.&lt;br /&gt;
&lt;br /&gt;
==REST_USE_SYSCONFIG_SECRET==&lt;br /&gt;
&lt;br /&gt;
Y/N, defaults to Y (true)&lt;br /&gt;
&lt;br /&gt;
When set to false (N) iDempiere uses a random key generated every time it is rebooted. Note this creates two problems:&lt;br /&gt;
*The tokens generated do not survive a reboot, because the key is changed on every reboot, if there is a valid token, it becomes invalid immediately after the server is rebooted, requiring a new login&lt;br /&gt;
*The token is generated per server, so they are not valid in a multi-server environment, load balancing the REST API in a multi-server environment can make the API useless because the token of one server is not valid in the other server&lt;br /&gt;
&lt;br /&gt;
When set to true (Y), the default, the tokens are generated and signed using a key saved in the System SysConfig REST_TOKEN_SECRET, so they are shared between servers and survive a reboot.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_SECRET==&lt;br /&gt;
&lt;br /&gt;
In this SysConfig is preserved a random key generated, in case they key is compromised, or as a security measure, a new key can be generated using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
You don't need to touch this SysConfig, it is managed automatically.&lt;br /&gt;
&lt;br /&gt;
==REST_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of token expiration in minutes.  The default is 60 minutes (1 hour).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of refresh token expiration in minutes.  This expiration is equivalent to inactivity of the session, every time the token is refreshed is set to expire again to these minutes.  The default is 1440 minutes (1 day).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_ABSOLUTE_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of a session, after this expiration the refresh token doesn't work anymore and the user needs to login again using a password.  The default is 10080 minutes (1 week).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_CLIENT_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires a clientId parameter to work correctly.  If your application cannot provide clientId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_USER_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires an userId parameter to work correctly.  If your application cannot provide userId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_ALLOW_UPDATE_SECURE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST allows to update columns marked as secure or encrypted.  This System SysConfig changes this behavior, if you add it and set it to N, then the secure or encrypted columns cannot be updated.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_EXISTING_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON does not exist.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not throw an error.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_UPDATABLE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON is not updatable.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not update the column but it won't throw an error&lt;br /&gt;
&lt;br /&gt;
==REST_EXPAND_SEPARATOR==&lt;br /&gt;
&lt;br /&gt;
Character - defaults to ;&lt;br /&gt;
&lt;br /&gt;
Expand supports sub-operators, f.i. select, expand, order by ... By default, these operators are separated using a semicolon ';'. However, this causes a problem because there are API gateways that do not support semicolons as separators, for example, Traefik by default changes semicolons to ampersands or Krakend throws an error when a URL contains a semicolon.&lt;br /&gt;
&lt;br /&gt;
If you want to change the separator character to something different than ';', set it using this System Configurator.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_TABLES_EXPORT_LOOKUP_UU==&lt;br /&gt;
By default, REST returns lookup values and foreign keys (FK) as a JSONObject with id, model-name, etc. Sometimes, you might need the UUID as well, but this is not possible with expand in some cases, for instance, when you are getting an FK from a System table. This SysConfig allows you to configure all tables per tenant from which you want to receive the UUID as well. You can fill this SysConfig with ''&amp;quot;ALL&amp;quot;'' (in uppercase) to specify that all FKs should return the UUID, or with a comma-separated string listing all the tables from which you want to get the UUID, for instance, ''&amp;quot;AD_FieldGroup, AD_Field.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
*''Setting ALL can impact performance.''&lt;br /&gt;
*''The table names'' can be in upper or lower case; it does not make a difference.&lt;br /&gt;
&lt;br /&gt;
=Server to Server Tokens=&lt;br /&gt;
&lt;br /&gt;
You can generate server to server tokens in the window ''Rest Auth Token''.&lt;br /&gt;
&lt;br /&gt;
Simply fill the fields:&lt;br /&gt;
*Organization&lt;br /&gt;
*User&lt;br /&gt;
*Role&lt;br /&gt;
*Warehouse&lt;br /&gt;
*Language&lt;br /&gt;
*Expire in Minutes (0 means no expiration)&lt;br /&gt;
&lt;br /&gt;
And when saving the token will be generated for these parameters.&lt;br /&gt;
&lt;br /&gt;
[[Image:01_Rest_Auth_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
When a token is generated, the flag ''Active'' indicates if it is a valid token.  To active/inactive a token you can use the process ''Inactive/Active Token''.&lt;br /&gt;
&lt;br /&gt;
[[Image:02_Activate_Inactivate_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Also, you can change the server secret key, and this inactivate all the issued tokens, using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
[[Image:03_Expire_Server_Secret.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=Refresh Tokens Administration=&lt;br /&gt;
&lt;br /&gt;
With the window ''Rest Refresh Token'' you can review and administer the refresh tokens issued by the server.&lt;br /&gt;
&lt;br /&gt;
For security reasons the refresh tokens are not deleted, it is recommended to set up a periodic housekeeping that takes care of deleting obsolete and unnecessary tokens.&lt;br /&gt;
&lt;br /&gt;
When there is a detected breach (a trial to use a refresh token twice) the token is marked as revoked with cause ''Breach'' and all the tokens related to the breached token are revoked too with cause ''Breach Chain'', including the authorization token, so, in case of a breach is mandatory that the user log in again.  It is recommended to verify frequently for breaches and take potential actions (f.e. inform the user), this can be done setting an alert.&lt;br /&gt;
&lt;br /&gt;
Also, when a user changes his/her password all the refresh tokens are revoked with cause ''Password Change''&lt;br /&gt;
&lt;br /&gt;
=Role access control for resource endpoint=&lt;br /&gt;
https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Role base access control for resource endpoint path.&lt;br /&gt;
By default, all resource endpoint path is not protected. Create a new resource path record (Rest_Resource) to protect one more resource endpoints. The resource path definition is a regular expression so you can use .* to protect all endpoint paths and add new resource path records to open access to selected resources (for e.g '''v1/models\b/?.*''').&lt;br /&gt;
&lt;br /&gt;
==Tables==&lt;br /&gt;
1. Rest_Resource&lt;br /&gt;
   - Name&lt;br /&gt;
   - Resource Path (regular expression pattern, without the query parameters)&lt;br /&gt;
2. Rest_Resource_Access&lt;br /&gt;
   - AD_Role_ID &lt;br /&gt;
   - Rest_Resource_ID&lt;br /&gt;
   - Http Methods (Multi selection list of GET, POST, PUT and DELETE)&lt;br /&gt;
&lt;br /&gt;
==Window==&lt;br /&gt;
1. Rest Resource Window&lt;br /&gt;
2. Role Data Access Window&lt;br /&gt;
   - Added Rest Resource Access tab&lt;br /&gt;
&lt;br /&gt;
==AD_SysConfig==&lt;br /&gt;
1. REST_RESOURCE_ACCESS_CONTROL&lt;br /&gt;
   - Y/N, System level, default to Y&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
See examples at https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&lt;br /&gt;
=OpenAPI Support=&lt;br /&gt;
&lt;br /&gt;
Generate OpenAPI 3.0.0 yaml for table and view.&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/models/{tableName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for table&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/views/{viewName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for view&lt;br /&gt;
&lt;br /&gt;
'''''HTTP Header:'''''&lt;br /&gt;
*Accept: application/yaml&lt;br /&gt;
&lt;br /&gt;
=Add Custom End Point=&lt;br /&gt;
&lt;br /&gt;
You can add new, custom end point with your own plugin.&lt;br /&gt;
&lt;br /&gt;
To do that, in your plugin:&lt;br /&gt;
&lt;br /&gt;
*Create resource classes for your end points using jaxrs annotation (@Path, @GET, @POST, etc).&lt;br /&gt;
*Create an OSGi component that implements the ResourceExtension interface (@Component(service = ResourceExtension.class, immediate = true)).&lt;br /&gt;
*Override the getResourceClasses() method and return the set of resource classes that you have created.&lt;br /&gt;
&lt;br /&gt;
[[Category:Available Plugins]]&lt;br /&gt;
[[Category:Updated2022]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23433</id>
		<title>REST Web Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23433"/>
		<updated>2025-07-22T10:51:54Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Maintainers:''' [http://www.bx-service.com BX Service GmbH] team&lt;br /&gt;
* '''Status:''' used in production, up to date with release 11 and master&lt;br /&gt;
* '''License:''' [http://www.gnu.org/licenses/gpl-2.0.html GPLv2]&lt;br /&gt;
* '''Sources:''' https://github.com/bxservice/idempiere-rest&lt;br /&gt;
* '''Continuous Integration:''' https://jenkins.idempiere.org/job/idempiere-rest/ (installation instructions)&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
The iDempiere REST API is a plugin that allows developers to communicate with an iDempiere server via a RESTful API. This information is delivered via HTTP using JSON. &lt;br /&gt;
&lt;br /&gt;
The iDempiere REST API seeks to follow the OData standard and uses the following structure and endpoints.&lt;br /&gt;
&lt;br /&gt;
You can find examples of every call in the [https://github.com/bxservice/idempiere-rest/tree/master/com.trekglobal.idempiere.rest.api/postman postman collection sample files in the official repository].&lt;br /&gt;
&lt;br /&gt;
= Global URL parameters =&lt;br /&gt;
&lt;br /&gt;
* '''locale:''' in any call you can use the URL parameter locale &amp;lt;code&amp;gt;?locale={locale}&amp;lt;/code&amp;gt;  to define the language.  For example adding &amp;lt;code&amp;gt;?locale=es_CO&amp;lt;/code&amp;gt; to the login URL &amp;lt;code&amp;gt;api/v1/auth/tokens&amp;lt;/code&amp;gt; will return any error message in Spanish.&lt;br /&gt;
&lt;br /&gt;
= Login in to get your Bearer authorization token =&lt;br /&gt;
&lt;br /&gt;
'''Properties:'''&lt;br /&gt;
&lt;br /&gt;
* '''userName:'''The user name being authenticated, here you would need to use the user Name or the EMail depending on the [[System Configurator (Window ID-50006)#USE EMAIL FOR LOGIN|SysConfig USE_EMAIL_FOR_LOGIN]]&lt;br /&gt;
* '''password:''' the password of the user being authenticated&lt;br /&gt;
* parameters:&lt;br /&gt;
** '''clientId:''' the client ID from AD_Client, here you can use the AD_Client_ID or the Value for authentication&lt;br /&gt;
** '''roleId:''' the role ID from AD_Role, here you can use the AD_Role_ID or the role Name for authentication&lt;br /&gt;
** '''organizationId:''' the organization ID from AD_Org, here you can use the AD_Org_ID or the organization Name for authentication&lt;br /&gt;
** '''warehouseId:''' the warehouse ID from M_Warehouse, here you can use the M_Warehouse_ID or the warehouse Name for authentication&lt;br /&gt;
** '''language:''' the language for the session, as defined in AD_Language.AD_Language&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' REST API just allows to log in to roles with Role Type = WebService, or without Role Type.  This means by default is not possible to login with role System, you need to clear the Role Type in System, or even better create a WebService role for System tenant.&lt;br /&gt;
&lt;br /&gt;
There are two ways to log in to get your authorization token:&lt;br /&gt;
&lt;br /&gt;
== One-step log-in ==&lt;br /&gt;
&lt;br /&gt;
When you know beforehand all the login information needed to get into the system, you need to do a POST request to the following endpoint&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;.../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With a body like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;,&lt;br /&gt;
    &amp;quot;parameters&amp;quot;: {&lt;br /&gt;
        &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
        &amp;quot;roleId&amp;quot;: {{roleId}},&lt;br /&gt;
        &amp;quot;organizationId&amp;quot;: {{organizationId}},&lt;br /&gt;
        &amp;quot;warehouseId&amp;quot;: {{warehouseId}},&lt;br /&gt;
        &amp;quot;language&amp;quot;: &amp;quot;{{language}}&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Change all the {{propertyname}} values to the ones you want to use in your instance.''&lt;br /&gt;
&lt;br /&gt;
== Normal log-in ==&lt;br /&gt;
&lt;br /&gt;
If you want to log in as a user would normally do in iDempiere (choosing a role, warehouse, client, etc), you need to do the following requests&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;clients&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;GardenWorld&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsImlzcyI6ImlkZW1waWVyZS5vcmciLCJDbGllbnRzIjoiMTEiLCJleHAiOjE2NjY5NjQ5Mjh9.3t0MuK6ReF7xNmb36ITM36VSKI5QnK3n0ZF_LIgPQSrso4oRhDsL8Mudc0NqH4qjvvKDlYsPquYKtrHnB5UiZg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With that token you can request for login information from the user that is being authenticated. You need to add it to the request Header with Key value as:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; Authorization: Bearer {authToken}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The information you can request is the following, and it needs to be done in this order because each request needs information from the previous call:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/roles?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the roles that the user has access to&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/organizations?client={clientId}&amp;amp;role={roleId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the organizations that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/auth/warehouses?client={clientId}&amp;amp;role={roleId}&amp;amp;organization={organizationId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the warehouses that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/language?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the languages the user can login with.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When you have all the data you need to do a final PUT request like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PUT .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;clientId&amp;quot;: {clientId},&lt;br /&gt;
  &amp;quot;roleId&amp;quot;: {roleId},&lt;br /&gt;
  &amp;quot;organizationId&amp;quot;: {organizationId},&lt;br /&gt;
  &amp;quot;warehouseId&amp;quot;: {warehouseId},&lt;br /&gt;
  &amp;quot;language&amp;quot;: &amp;quot;{language}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''The language, organizationId and warehouseId properties are optional, it can be omitted and the system will use the default language and 0 for the organization.''&lt;br /&gt;
&lt;br /&gt;
* ''If the warehouseId property is omitted the system assigns by default the warehouse defined for the organization, if the warehouse is passed as 0, then the login doesn't assign a default warehouse.''&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101,&lt;br /&gt;
    &amp;quot;language&amp;quot;: &amp;quot;en_US&amp;quot;,&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MjAwMDAxLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDE2MiwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTcwMTc3NTUzN30.bAUEhPylAQhZjZquJhvLpO9zMZG3g6zlM_IqO9ifeXJpAJBOoJtDqd8CrYPU1PKURzoPRSUglbKqr1LsXdz38A&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwODk1OTIyNC1iYzBhLTRkNTQtOTlhZS1jNmRmZjNiOGEwMzUiLCJpc3MiOiJpZGVtcGllcmUub3JnIiwiZXhwIjoxNzAxODU4MzM3fQ.uSE5SOtWgPvReC4JtyV4alHd-ccU0L9QhIpP2TwT7C5TJFeCGVYTdyWc291DaIweyiIGCfWFgQlbe0oH1EEXXg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Abbreviated log-in =&lt;br /&gt;
The &amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt; operation described above can be sufficient for a login when the user has only access to one client, one role and one organization.  In this case the POST operation returns immediately the token and refresh_token and the payload includes the values that were assumed for the login.&lt;br /&gt;
&lt;br /&gt;
= Refresh Token =&lt;br /&gt;
&lt;br /&gt;
As you see above, the login process returns a token and a refresh_token, normally the token expires in 1 hour and the refresh_token expires in 24 hours.  These expiration defaults can be changed using SysConfig keys REST_TOKEN_EXPIRE_IN_MINUTES and REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES.&lt;br /&gt;
&lt;br /&gt;
It is a common practice in front-end development to store the refresh_token in a cookie or browser data, while keeping the token itself just in memory.  This approach is taken due to the sensitive nature of the information contained within the token, which must not be disclosed.&lt;br /&gt;
&lt;br /&gt;
When the token expires, you can get a new token calling the following request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;{{refreshToken}}&amp;quot;,&lt;br /&gt;
    &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that clientId and userId are recommended, but optional, it can be disabled with the SysConfig keys REST_MANDATORY_CLIENT_ID_ON_REFRESH=N and REST_MANDATORY_USER_ID_ON_REFRESH=N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MTAyLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDIyMCwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTczMDgxNTUwM30.MzmpXlpuIUjKkYdKi2G50ORcSt2FcLT4-x-OO1LVzDDoO8lNm7P9ELaWWViKktOzN_pKtocIA59LlXzXBmWVtA&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZTQ3Zjg4YjkyMmU5MzU5NzEwNmRlNWIwOGQ1ZDljMjk3OTQxMzNkNjYxMWFjOWZkMmI1NGE5NWExODFjNDIxIiwiaXNzIjoiaWRlbXBpZXJlLm9yZyJ9.efa6M1oOb_QDnSKopNsdDygd1fF3S-ozr3DXjn1qANyPEVK-kg3Y2anGXrqQCtUzmxWBi8eTY4C6r5wXY6jtFA&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new tokens are set with new expiration times as configured.&lt;br /&gt;
&lt;br /&gt;
Refresh tokens can be expired (deleted) using the process &amp;quot;Expire Refresh Tokens&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A refresh token can be used just one time.  If a refresh token tries to be used a second time a potential breach is set on the system and all the tokens associated with the refresh token are invalidated.&lt;br /&gt;
&lt;br /&gt;
= Logout =&lt;br /&gt;
&lt;br /&gt;
Logout a session from a token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/logout&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;{{authToken}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The session associated to the token will be logged out.&lt;br /&gt;
&lt;br /&gt;
This token cannot be used again, neither the refresh token associated.&lt;br /&gt;
&lt;br /&gt;
= Common Headers =&lt;br /&gt;
&lt;br /&gt;
* Content-Type: application/json&lt;br /&gt;
* Accept: application/json&lt;br /&gt;
* Authorization: Bearer {authToken}&lt;br /&gt;
** All calls except the first one (POST/auth) require an authorization bearer that is returned by the /auth APIs from the previous steps.&lt;br /&gt;
&lt;br /&gt;
= Requesting Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports requests for data via HTTP '''GET''' requests.&lt;br /&gt;
&lt;br /&gt;
On every get request the response will include this information, in addition to the one requested:&lt;br /&gt;
* id: the record ID&lt;br /&gt;
* uid: the UUID of the record&lt;br /&gt;
* model-name: the table name of the record&lt;br /&gt;
* {columnname}: each pair of column/value is represented as a json object with the columnname:&lt;br /&gt;
** String: strings are represented directly as a json string quoted value&lt;br /&gt;
** Yes/No: these are represented as true/false&lt;br /&gt;
** Numbers: numbers are represented as a json number without quotes&lt;br /&gt;
** Dates/Times: timestamp values are represented as a json date (quoted string with format [https://en.wikipedia.org/wiki/ISO_8601 ISO_8601]&lt;br /&gt;
** Foreign keys: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt; the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** identifier -&amp;gt; the foreign identifier&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
** Binary: binary columns are represented directly as a json string base64 encoded value&lt;br /&gt;
** Images: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt;  the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** data -&amp;gt; a string containing the base64 encoded data for the image&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
&lt;br /&gt;
== Requesting PO Collections ==&lt;br /&gt;
The request below returns the collection of taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d76b09c5-531b-4f98-a8c6-9af848b6697b&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T15:06:11Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Provintial Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2002-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7.5,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual PO by ID ==&lt;br /&gt;
The request below returns an individual PO of type tax by the given id &amp;quot;106&amp;quot;.&lt;br /&gt;
''* You can use here either record id or the UUID (C_Tax_ID or C_Tax_UU value)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual Property ==&lt;br /&gt;
To address an entity property clients append a path segment containing property name to the URL of the entity.&lt;br /&gt;
The request below returns the Rate property of a tax.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106/rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Querying Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports various kinds of query options for querying data. This section will help you go through the common scenarios for these query options.&lt;br /&gt;
&lt;br /&gt;
== Query Option $filter ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option allows developers to filter a collection of resources that are addressed by a request URL. The expression specified with $filter is evaluated for each resource in the collection, and only items where the expression evaluates to true are included in the response. These are the basic predicates that are supported:&lt;br /&gt;
&lt;br /&gt;
* $filter&lt;br /&gt;
** Logical operators&lt;br /&gt;
*** eq -&amp;gt; equals =&lt;br /&gt;
*** neq -&amp;gt; not equals !=&lt;br /&gt;
*** in -&amp;gt; IN&lt;br /&gt;
*** gt -&amp;gt; greater than &amp;gt;&lt;br /&gt;
*** ge -&amp;gt; greater or equal &amp;gt;=&lt;br /&gt;
*** lt -&amp;gt; less than &amp;lt;&lt;br /&gt;
*** le -&amp;gt; less or equal &amp;lt;=&lt;br /&gt;
*** and -&amp;gt; &amp;amp;&lt;br /&gt;
*** or -&amp;gt; |&lt;br /&gt;
*** not -&amp;gt; !&lt;br /&gt;
** Method operators (WARNING: there must not be spaces before/after the parameters on these functions, strings must be surrounded by single quotes):&lt;br /&gt;
*** contains -&amp;gt; if a string contains another string&lt;br /&gt;
*** startswith -&amp;gt; if a string starts with another string&lt;br /&gt;
*** endswith -&amp;gt; if a string ends with another string&lt;br /&gt;
*** tolower -&amp;gt; convert a string to lowercase&lt;br /&gt;
*** toupper -&amp;gt; convert a string to uppercase&lt;br /&gt;
** Parenthesis are supported&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
The request below using $filter to get business partners where IsCustomer = true and IsActive = true and the name starts with 'Pa'&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_bpartner?$filter=isCustomer eq true AND isActive eq true AND startswith(name,'Pa') AND C_BPartner_ID in (120,121)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 121,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;39e85feb-94a2-4e41-ae45-e7d49d7be077&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-13T10:14:03Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-11T13:16:05Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Patio&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Fun, Inc.&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesVolume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;NumberEmployees&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;AD_Language&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Language&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Spanish (Colombia)&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_language&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsProspect&amp;quot;: false,&lt;br /&gt;
            &amp;quot;FirstSale&amp;quot;: &amp;quot;2020-11-05&amp;quot;,&lt;br /&gt;
            &amp;quot;SO_CreditLimit&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;SO_CreditUsed&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;AcqusitionCost&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;PotentialLifeTimeValue&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ActualLifeTimeValue&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;ShareOfCustomer&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsEmployee&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSalesRep&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOneTime&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BP_Group_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner Group&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bp_group&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOCreditStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Credit Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;O&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Credit OK&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalOpenBalance&amp;quot;: 588.240,&lt;br /&gt;
            &amp;quot;IsPOTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufacturer&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Is1099Vendor&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsUseTaxIdDigit&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDetailedNames&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $expand ==&lt;br /&gt;
iDempiere supports nested filters in &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The request below return Orders and all their Lines and Taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$expand=c_orderLine,c_ordertax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountTendered&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountRefunded&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;c_orderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;M_Product_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 1000295,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Poker_Poker&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;6-Pack&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;QtyOrdered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;QtyReserved&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyDelivered&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyInvoiced&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;PriceList&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceActual&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;C_Tax_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceLimit&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;Discount&amp;quot;: 0.00,&lt;br /&gt;
                    &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsDescription&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;PriceEntered&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;QtyEntered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;PriceCost&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyLostSales&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;RRAmt&amp;quot;: 0&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add query operators ($filter, $orderyby, $top, $skip, $select) to the detail tables by adding the query operators between parentheses separated by ;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns Orders and their Lines (Line number and line net amount) from lines with linnetamt &amp;gt; 1000.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$select=DocumentNo,Description&amp;amp;$expand=C_OrderLine($select=Line,Linenetamt ; $filter=LineNetAmt gt 1000 ; $orderby=Line)&amp;amp;$top=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000020,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;470c98e0-5a19-413d-b589-89fc67272823&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50013&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000018,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;fb485eb0-6e79-439d-926f-cce53d76d806&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50011&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;040ffe18-04ab-4989-ae83-9ed295146042&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50008&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000026,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;d3eac7ec-caf1-473e-8c22-f5b8cee55d30&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 4275.00&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000017,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;ee3a9225-439a-4022-8eaa-1109e5e4f049&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50010&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default expand searches for the primary key column in the master table and tries to create the relation with this column name in the expanded table. /ad_user?$expand=c_order expands using ad_user_id by default. Sometimes you want to specify which column must be used for the expanding. In this case, you need to specify the column name using a dot after the table name.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns users and their corresponding orders as sales representatives.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/ad_user?$expand=C_order.salesrep_id($select=documentno)&amp;amp;$select=Name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;986cb4dc-7161-4d77-a7c7-3832d24b19de&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;,&lt;br /&gt;
    &amp;quot;C_order&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;3456b6d0-b911-42e6-8432-f52ded58713f&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;800000&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iDempiere has special tables where record_id is used, for instance, fact_acct. You can expand to this table using the same syntax as explained above. ''The plug-in will automatically set the correct value for AD_Table_ID''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the invoice 104 and their corresponding records on fact_acct.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/c_invoice/104?$expand=fact_acct.record_id($select=fact_acct_id)&amp;amp;$select=DocumentNo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;6d2768c9-b3cc-4820-b903-9748b416b98f&amp;quot;,&lt;br /&gt;
    &amp;quot;DocumentNo&amp;quot;: &amp;quot;10000001&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_invoice&amp;quot;,&lt;br /&gt;
    &amp;quot;fact_acct&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001729,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;cd02c4e7-b386-46aa-b367-f5ec618dccc8&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001730,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e8dfd3ec-d5bf-4ded-9646-0a2a8d86a680&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001731,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2bf88ace-83bc-4968-abdd-fd211765da92&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001732,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26735041-c88e-4670-89e5-95ae49beb4dc&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to expand to a master record as well, for instance, from product to product category. You accomplish this by writing expand followed by the column name you want to expand.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the product 122 and its corresponding product category.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/m_product/122?$expand=m_product_category_id($select=Name,IsDefault)&amp;amp;$select=Name,m_product_category_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 122,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;c713192a-9ed3-4740-ad32-9583c30d0206&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;,&lt;br /&gt;
    &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
        &amp;quot;uid&amp;quot;: &amp;quot;be686f7e-993f-4162-a02d-ad4bb8c6987b&amp;quot;,&lt;br /&gt;
        &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;IsDefault&amp;quot;: true,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: For obvious reasons. $select is the only query operator accepted in this case.''&lt;br /&gt;
&lt;br /&gt;
You can expand on multiple levels by using the $expand operators within the $expand clause. You can only expand deeper on master &amp;gt; detail records. Cases like GET ../orders?$expand=AD_user_ID($expand=C_orderLine) are forbidden.&lt;br /&gt;
&lt;br /&gt;
== Query Option $orderby ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$orderby&amp;lt;/code&amp;gt; query option allows developers to request resources in either ascending order using asc or descending order using desc. If asc or desc not specified, then the resources will be ordered in ascending order. &lt;br /&gt;
&lt;br /&gt;
The request below orders products on property Value in descending order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$orderby=Value desc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 37,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000216,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e19114c8-86cc-4fb4-b6eb-15f8fa350d38&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-05T18:46:14Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-23T19:45:12Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Tron&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;zas&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000398,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d5d1bb16-81b4-429b-86bf-f667f22b93df&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;yudo mat&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;ym&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Trees&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000299,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;1726c817-71bc-4abf-8949-0372c9ffb0d3&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Gadgets&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ShelfWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfHeight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfDepth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;UnitsPerPallet&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDays&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDaysMin&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Options $top and $skip ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$top&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection to be included in the result. The &amp;lt;code&amp;gt;$skip&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection that are to be skipped and not included in the result.&lt;br /&gt;
&lt;br /&gt;
The request below return the first two Orders starting with other 5th order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$top=2&amp;amp;$skip=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 34,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000022,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2238dc66-edda-41f7-8348-d781342f6dfc&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50015&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000016,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;5565e213-a119-4bcc-beb6-c9f9a4e75dab&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-03-09T14:20:31Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-03-09T14:20:59Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50009&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Completed&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-02-25&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_Shipper_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Shipper&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;UPS&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_shipper&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;F&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fix price&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 1615296059621.6216,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $select ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$select&amp;lt;/code&amp;gt; query option allows the clients to requests a limited set of properties for each entity or complex type. &lt;br /&gt;
&lt;br /&gt;
The request below returns Name and Value of all products.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$select=Name,Value&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 28,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000322,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;b0e7e8b6-13ed-406d-a105-bd67ddb7f423&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 134,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;01254fee-c75f-42f0-941c-142e27078643&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Table&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;PTable&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 137,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26a7e6d7-e2c1-4c21-97f2-773dc222e6a2&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mulch 10#&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mulch&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 50003,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;8a27ac0a-56c0-4a3a-8eb8-ff87c94899c1&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Ultra Glue&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;UltraGlue&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== iDempiere specific query Options ==&lt;br /&gt;
&lt;br /&gt;
=== Query Option $valrule ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$valrule&amp;lt;/code&amp;gt; can be used to get PO records using a validation rule - AD_ValRule_ID or AD_ValRule_UU&lt;br /&gt;
&lt;br /&gt;
=== Query Option $context ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$context&amp;lt;/code&amp;gt; can be used to put variables in context to be parsed by the validation rule&lt;br /&gt;
&lt;br /&gt;
=== Query Option showsql ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; can be used to add the SQL query being executed on GET.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;code&amp;gt;showsql=nodata&amp;lt;/code&amp;gt; to obtain just information about the query without returning the real data.&lt;br /&gt;
&lt;br /&gt;
The payload will include a JSON element with name &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; containing the query that is executed in the database to obtain the record(s).&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; is used at the same time with &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;, then the payload will include the &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; JSON element for the query on the master table, and also it will include the elements with format &amp;lt;code&amp;gt;sql-command-[table]&amp;lt;/code&amp;gt; for each expanded table, for example the following query:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/models/c_tax/106?$expand=c_tax_acct&amp;amp;showsql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will return the following elements in the payload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;quot;sql-command&amp;quot;: &amp;quot;SELECT C_Tax_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Name,Description,Parent_Tax_ID,C_Country_ID,C_Region_ID,To_Country_ID,To_Region_ID,C_TaxCategory_ID,Updated,UpdatedBy,IsDocumentLevel,ValidFrom,IsSummary,Rate,RequiresTaxCertificate,TaxIndicator,IsDefault,IsTaxExempt,SOPOType,IsSalesTax,AD_Rule_ID,C_Tax_UU,C_TaxProvider_ID,C_CountryGroupTo_ID,C_CountryGroupFrom_ID FROM C_Tax WHERE (c_tax_ID=?) AND C_Tax.AD_Client_ID IN(0,11) AND (C_Tax.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
    &amp;quot;sql-command-c_tax_acct&amp;quot;: &amp;quot;SELECT C_Tax_ID,C_AcctSchema_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,T_Due_Acct,T_Credit_Acct,T_Expense_Acct,C_Tax_Acct_UU FROM C_Tax_Acct WHERE (c_tax_ID=?) AND IsActive=? AND C_Tax_Acct.AD_Client_ID IN(0,11) AND (C_Tax_Acct.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query Option label ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; can be used to get PO records by filtering based on labels (i.e. &amp;lt;code&amp;gt;AD_Label&amp;lt;/code&amp;gt;). For example,  &amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner?label=Name eq '%23Customer'&amp;lt;/code&amp;gt; query will return all business partner records where the name of the Assigned Label &amp;gt; Label is '#Customer'.&lt;br /&gt;
&lt;br /&gt;
iDempiere supports using nested  &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; within the &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt; query option.&lt;br /&gt;
&lt;br /&gt;
Refer to the &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option for the supported predicates.&lt;br /&gt;
&lt;br /&gt;
=== Query Option showlabel ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showlabel&amp;lt;/code&amp;gt; can be used to include the list of assigned labels in the payload when getting a PO record or records. &lt;br /&gt;
&lt;br /&gt;
The query below returns the business partner record along with a list of assigned label objects, including all columns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;6d550225-2e0a-4203-9b82-0f2634f7d079&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:11:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:35:43Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;87ae21d5-f06a-4cd8-977c-86712cf58da1&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:13:40Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:36:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname list}&amp;lt;/code&amp;gt; to retrieve a list of assigned label objects, including the defined column list only. For example, the query below returns the business partner record along with a list of assigned label objects including the name and description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name,Description&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname}&amp;lt;/code&amp;gt; to retrieve the values of the assigned label column. For example, the query below returns the business partner record along with a list of assigned label names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
        &amp;quot;#Vendor&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data Modification =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports Create, Update and Delete operation for some or all exposed POs.&lt;br /&gt;
&lt;br /&gt;
== Create a PO (POST) ==&lt;br /&gt;
To create a PO in a collection, the client sends a POST request to that collection's URL. The POST body MUST contain a single valid entity representation. &lt;br /&gt;
&lt;br /&gt;
The request below creates a Tax which contains complex type and collection property. &lt;br /&gt;
&amp;lt;code&amp;gt;POST api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;AD_Org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;lookupColumn&amp;quot;: &amp;quot;CountryCode&amp;quot;,&lt;br /&gt;
        &amp;quot;lookupValue&amp;quot;: &amp;quot;CA&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_TaxCategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;validFrom&amp;quot;: &amp;quot;01/01/2001&amp;quot;,&lt;br /&gt;
    &amp;quot;isSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;rate&amp;quot;: &amp;quot;7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;requiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;taxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;isDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;isTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;sOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000005,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;4e71df80-f3f5-41cd-84cf-2bc8e12322d0&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard 19%&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remove a PO (DELETE) ==&lt;br /&gt;
The request below deletes the Tax with id '1000005'.&lt;br /&gt;
&amp;lt;code&amp;gt;DELETE /api/v1/models/c_tax/1000005&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;msg&amp;quot;: &amp;quot;Deleted&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update a PO (PUT) ==&lt;br /&gt;
The request below updates the tax with id 1000000 &lt;br /&gt;
&amp;lt;code&amp;gt;PUT /api/v1/models/c_tax/1000000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Standard Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000002,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;a1c76f9b-30ea-44c1-a8c3-2bc27daa1cd1&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2020-08-21T18:29:28Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:48:14Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 6.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: true,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update/Insert/Delete child records of a PO (PUT) ===&lt;br /&gt;
Update the child records of a PO using the child record array in the PUT request Body:&lt;br /&gt;
* Without child record id to create&lt;br /&gt;
* With child record id to update&lt;br /&gt;
* With child record id and the following delete flag to delete a child record.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&amp;quot;(delete)&amp;quot;:true&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples to delete, create and update order lines:&amp;lt;br/&amp;gt;&lt;br /&gt;
PUT /api/v1/models/c_order/1000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
         &amp;quot;(delete)&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;M_Product_ID&amp;quot;: 128,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 1&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 2&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Special Entity Type Representations ==&lt;br /&gt;
&lt;br /&gt;
=== Image ===&lt;br /&gt;
If you are modifying or creating values of an Image type column/field, the json entity representation must be as follows: &lt;br /&gt;
* id -&amp;gt; the foreign record ID. If not informed a new foreign record will be created and linked to the main record&lt;br /&gt;
* file_name -&amp;gt; the readable file name to be stored at the foreign table&lt;br /&gt;
* url -&amp;gt; an optional URL for the image to be stored at the foreign table&lt;br /&gt;
* data -&amp;gt; a string with the base64 encoded data for the image&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/auth/jwk ===&lt;br /&gt;
&lt;br /&gt;
Calling this endpoint returns the key used to sign the JWT.&lt;br /&gt;
&lt;br /&gt;
By default this endpoint returns nothing.  It requires the System Configurator IDEMPIERE_REST_EXPOSE_JWK to be set to Y on System tenant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;gt;'''WARNING!'''&amp;lt;/span&amp;gt; Exposing the signature key is intended exclusively for integration with API gateways that requires it (like krakend), and this endpoint MUST be hidden from public usage and exposed JUST to the API gateway.  Exposing the key publicly open the REST interface to attacks changing the JWT token.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* keys&lt;br /&gt;
** alg&lt;br /&gt;
** k&lt;br /&gt;
** kid&lt;br /&gt;
** kty&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/models/{tablename}/{recordId}/print ===&lt;br /&gt;
This method is used to get the print format from the model's record id.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $report_type -&amp;gt; optional - ( PDF | HTML | CSV | XLSX | XLS )&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* AD_PInstance_ID&lt;br /&gt;
* process&lt;br /&gt;
* summary&lt;br /&gt;
* isError&lt;br /&gt;
* reportFile&lt;br /&gt;
* reportFileName&lt;br /&gt;
* reportFileLength&lt;br /&gt;
* nodeId&lt;br /&gt;
&lt;br /&gt;
== Windows api/v1/windows ==&lt;br /&gt;
&lt;br /&gt;
working with AD_Window and AD_Tab&lt;br /&gt;
&lt;br /&gt;
== Forms api/v1/forms ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/forms ===&lt;br /&gt;
&lt;br /&gt;
Get Forms available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the forms (AD_Form) queried&lt;br /&gt;
&lt;br /&gt;
== Processes api/v1/processes ==&lt;br /&gt;
&lt;br /&gt;
working with process and reports&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes ===&lt;br /&gt;
&lt;br /&gt;
Get Processes available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an PO json record from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters, for example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=json&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ImportOrExport&amp;quot;: &amp;quot;export&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Language&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
    &amp;quot;IsOnlyCentralizedData&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for reports three special parameters can be added:&lt;br /&gt;
* report-type: with the possible values HTML, CSV, XLS or PDF (the default)&lt;br /&gt;
* is-summary&lt;br /&gt;
* print-format-id&lt;br /&gt;
&lt;br /&gt;
also, for buttons is possible to define two special parameters:&lt;br /&gt;
* table-id or model-name&lt;br /&gt;
* record-id&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the process/report executed:&lt;br /&gt;
** AD_PInstance_ID&lt;br /&gt;
** process&lt;br /&gt;
** summary&lt;br /&gt;
** isError&lt;br /&gt;
** nodeId&lt;br /&gt;
** logs - array containing the logs from the process&lt;br /&gt;
&lt;br /&gt;
The reports will be returned in an object with name &amp;lt;code&amp;gt;reportFile&amp;lt;/code&amp;gt; containing the base64 encoded report, and additionally the objects &amp;lt;code&amp;gt;reportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;reportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the process produces an export file it will be returned in an object &amp;lt;code&amp;gt;exportFile&amp;lt;/code&amp;gt;, and additionally the objects &amp;lt;code&amp;gt;exportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;exportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs ===&lt;br /&gt;
&lt;br /&gt;
Get information about jobs running&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of json records from the process running (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs/{ad_pinstance_id} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a job&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {ad_pinstance_id}&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* a json record from the process (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/jobs/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process in background (as job)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/jobs/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters (same as for running the process)&lt;br /&gt;
&lt;br /&gt;
same special parameters apply as for the reports, and additionally you can define the parameter &amp;lt;code&amp;gt;notification-type&amp;lt;/code&amp;gt; with the values E, N or B  (EMail, Notification or Both)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the AD_PInstance scheduled&lt;br /&gt;
&lt;br /&gt;
== Files api/v1/files ==&lt;br /&gt;
&lt;br /&gt;
to access files created by api/v1/processes&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Caches api/v1/caches ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Get caches information.  This call is restricted just for administrators.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
* name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* caches (array)&lt;br /&gt;
** name&lt;br /&gt;
** table_name&lt;br /&gt;
** size&lt;br /&gt;
** expireMinutes&lt;br /&gt;
** maxSize&lt;br /&gt;
** distributed (boolean)&lt;br /&gt;
&lt;br /&gt;
=== DEL api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Reset cache.  This call requires the role to have permission to execute &amp;quot;Cache Reset&amp;quot; process.&lt;br /&gt;
&lt;br /&gt;
When called without parameters it reset the whole cache, or just from a table, or just one record.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to restrict the reset to just one table.  Case sensitive.&lt;br /&gt;
* record_id -&amp;gt; optional - to restrict the reset to just one record.  Zero is the same as not set, it clears the cache of the whole table.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* entriesReset (number of entries cleared)&lt;br /&gt;
&lt;br /&gt;
== Nodes api/v1/nodes ==&lt;br /&gt;
&lt;br /&gt;
get nodes info, get log files, reset and rotate logs.&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Servers api/v1/servers ==&lt;br /&gt;
&lt;br /&gt;
servers and schedulers resource&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Infos api/v1/infos ==&lt;br /&gt;
&lt;br /&gt;
info windows&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Reference api/v1/reference/{id} ==&lt;br /&gt;
&lt;br /&gt;
You can get a reference list by id/uuid or name.&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/152'''&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/42522223-92ae-4405-92dc-e02e2dea61a7'''&lt;br /&gt;
&lt;br /&gt;
'''GET  .../api/v1/reference/C_Order%20DeliveryViaRule'''&lt;br /&gt;
&lt;br /&gt;
''* Only list and table validation references are supported''&lt;br /&gt;
&lt;br /&gt;
== Workflows api/v1/workflow ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the current user&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow/{userid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the user id passed in the URL&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/workflow/100&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/approve/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Approves the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for approval&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the approval&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/reject/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Rejects the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for rejection&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the rejection&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/forward/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Forwards the corresponding node to a specific user. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;userTo&amp;quot;: {userToID} '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for fowarding&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the forwarding&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/acknowledge/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Implementation of the workflow nodes where a user gets notified when something happens, it&lt;br /&gt;
does not require any action from the user but the user receives a message after a specific&lt;br /&gt;
action is performed. This is used when the node is from type Window/form&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for acknowledge&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/setuserchoice/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
This is similar to approve and reject but it supports columns with Type List and String.&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;value&amp;quot;:&amp;quot;Value to be set in the corresponding column&amp;quot; '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for userschoice&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
== Status lines api/v1/statuslines ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all active status line records configured in the dictionary ordered by Name.&lt;br /&gt;
&lt;br /&gt;
You can use the query parameters '''$filter''' to filter the records returned.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use the query parameter '''with_messages''' to specify that you want the resulting message returned in the payload. This means that the status line will be resolved by REST, and the result will be returned in a ''message'' property in the JSON response.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all the active status line records configured in the dictionary. &lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** name&lt;br /&gt;
** entity type&lt;br /&gt;
** message (optional)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines/{statuslineid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The message corresponding to the specific status line&lt;br /&gt;
** message&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/statuslines/200024&lt;br /&gt;
&lt;br /&gt;
=== GET /api/v1/statuslines/200024 ===&lt;br /&gt;
&lt;br /&gt;
Returns the Core status line Dashboard_OrderCount.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Order Count\n Top Year (2002): 4 \n Current Year: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Charts api/v1/charts ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/charts/{chartid} ===&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* height -&amp;gt; optional - height in pixels for the image&lt;br /&gt;
** if not provided then it uses the same height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* width -&amp;gt; optional - width in pixels for the image&lt;br /&gt;
** if not provided then it uses the height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* json -&amp;gt; optional&lt;br /&gt;
** if this parameter is present the image is returned base64 encoded in data element of JSON&lt;br /&gt;
** when not present the image file is returned directly in PNG format&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The image generated from the chart.&lt;br /&gt;
* NOTE that this image is generated using the old JFreeChart library, not the new billboard, so it can have an outdated look.&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/charts/50002?width=800&amp;amp;height=600&amp;amp;json&lt;br /&gt;
&lt;br /&gt;
== Menu tree api/v1/menutree/ ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/menutree/{id} ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all the elements from the requested menu tree with id or uuid.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Name&lt;br /&gt;
* Description&lt;br /&gt;
* IsSOTrx&lt;br /&gt;
* PredefinedContextVariables&lt;br /&gt;
* EntityType&lt;br /&gt;
* Action&lt;br /&gt;
* AD_Window_ID&lt;br /&gt;
* AD_Workflow_ID&lt;br /&gt;
* AD_Task_ID&lt;br /&gt;
* AD_Process_ID&lt;br /&gt;
* AD_Form_ID&lt;br /&gt;
* AD_InfoWindow_ID&lt;br /&gt;
&lt;br /&gt;
== REST View api/v1/views ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
iDempiere model typically has many columns and is using DB naming convention that's not particularly natural in a Json data schema. A common need is to pick a subset of columns for different use case and uses a more json oriented naming for the selected columns.&lt;br /&gt;
&lt;br /&gt;
This add a layer of abstraction on top of iDempiere model (term as Rest View) to cater for such need. It can be taken as a way to configure Json schema on top of iDempiere model.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/views ===&lt;br /&gt;
Get active REST view definitions (Rest_View, Rest_ViewColumn, Rest_ViewRelated).&lt;br /&gt;
&lt;br /&gt;
=== Support all requests and methods for api/v1/models/ ===&lt;br /&gt;
Supports all requests and methods that are available with '''api/v1/models''', just replace '''models''' with '''views''' and '''{tableName}''' with '''{viewName}''' (i.e api/v1/views/{viewName} for api/v1/models/{tableName}, api/v1/views/{viewName}/{id} for api/v1/models/{tableName}/{id}, etc).&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
See example at [https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&lt;br /&gt;
== Uploads api/v1/uploads ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/360 https://github.com/bxservice/idempiere-rest/issues/360]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Allow uploading large files for posterior references where base64 files are used (e.g. attachments, images, etc)&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Initiates a new upload session for a file&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* fileName -&amp;gt; The name of the file to be uploaded&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file in bytes&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*sha256 -&amp;gt; The SHA-256 hash of the file content for integrity verification&lt;br /&gt;
*uploadLocation -&amp;gt; &amp;quot;ARCHIVE&amp;quot;, &amp;quot;ATTACHMENT&amp;quot; OR &amp;quot;IMAGE&amp;quot;&lt;br /&gt;
*expiresInSeconds -&amp;gt; The number of seconds after which the upload session will expire&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*expiresAt -&amp;gt; The expiration time of the upload session&lt;br /&gt;
*presignedURL -&amp;gt; The pre-signed URL for PUT&lt;br /&gt;
&lt;br /&gt;
===PUT api/v1/uploads/{uploadId}/chunks/{chunkOrder}===&lt;br /&gt;
&lt;br /&gt;
Uploads a chunk of the file to the server&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk&lt;br /&gt;
&lt;br /&gt;
'''''Header Parameter:'''''&lt;br /&gt;
*X-Total-Chunks -&amp;gt; mandatory, specific the expected number of chunks&lt;br /&gt;
*X-Content-SHA256 -&amp;gt; hash of the chunk data&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Chunk data to be uploaded&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
*receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
*isLastChunk -&amp;gt; True if this is the last chunk receive and will trigger the completion of the upload asynchronously&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}===&lt;br /&gt;
&lt;br /&gt;
Retrieves the current status of an ongoing or completed upload&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*expiresInSeconds -&amp;gt; The number of seconds after which the presigned URL will expire. When provided, a presigned URL will be returned for the upload session.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence &lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
*presignedURL -&amp;gt; The pre-signed URL for GET&lt;br /&gt;
&lt;br /&gt;
===DEL api/v1/uploads/{uploadId} ===&lt;br /&gt;
&lt;br /&gt;
Cancels an ongoing/completed upload, cleans up any temporarily stored chunks and associated uploaded file&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*message -&amp;gt; Message or details about the outcome of the cancellation&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}/file ===&lt;br /&gt;
&lt;br /&gt;
Get uploaded file content as binary stream or json&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Query Parameter:'''''&lt;br /&gt;
*asJson -&amp;gt; if provided, the response will be in JSON format with file content as base64 encoded string&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Response may be returned in one of the following media types:&lt;br /&gt;
&lt;br /&gt;
*application/octet-stream for binary data&lt;br /&gt;
*text/html for HTML-formatted content&lt;br /&gt;
*text/plain for plain text responses&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Get pending uploads from current user&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Status list of pending uploads:&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
* message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads/{uploadId}/copy===&lt;br /&gt;
&lt;br /&gt;
Copy uploaded file to attachment, image or archive (edited)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record (ARCHIVE, IMAGE or ATTACHMENT)&lt;br /&gt;
* tableName -&amp;gt; The table name of the destination record (optional)&lt;br /&gt;
*recordId -&amp;gt; The record id/uuid of the destination record (optional)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*tableName -&amp;gt; The table name of the destination record&lt;br /&gt;
*recordId -&amp;gt; The record id of the destination record&lt;br /&gt;
*recordUU -&amp;gt; The record uuid of the destination record&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record, e.g. archive (default), image or attachment&lt;br /&gt;
* fileName -&amp;gt; The name of the file being copied&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file being copied (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
* fileSize -&amp;gt; The size of the file being copied&lt;br /&gt;
&lt;br /&gt;
== Batch request api/v1/batch ==&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/batch===&lt;br /&gt;
&lt;br /&gt;
Execute one or more sub-request in single transaction&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*method -&amp;gt; HTTP method &amp;quot;POST&amp;quot;, &amp;quot;PUT&amp;quot; or &amp;quot;DEL&amp;quot;&lt;br /&gt;
*path -&amp;gt; Sub-request resource path, for e.g &amp;quot;v1/model/C_Order&amp;quot;&lt;br /&gt;
*body -&amp;gt; JSON body for the sub-request (if applicable)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*status -&amp;gt; HTTP status text (OK, Created, etc) return from sub-request&lt;br /&gt;
*statusCode -&amp;gt; HTTP status code (200, 201, 400, etc) return from sub-request&lt;br /&gt;
*body -&amp;gt; JSON return from sub-request (if available)&lt;br /&gt;
&lt;br /&gt;
=SysConfig Keys=&lt;br /&gt;
&lt;br /&gt;
==IDEMPIERE_REST_EXPOSE_JWK==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
For integration with krakend (see [[Proxy iDempiere-Rest Through KrakenD]]) it is necessary to expose the signing key in the endpoint api/v1/auth/jwk&lt;br /&gt;
&lt;br /&gt;
Setting this to N (the default) the endpoint is not exposed, changing to Y it will expose the endpoint.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_COLUMNNAME_TOLOWERCASE ==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
When set to Y the columnnames are translated to be named as json properties.  The first letter is changed to lowercase when the columnname doesn't contain the underline character ( _ )&lt;br /&gt;
&lt;br /&gt;
When set to N (the default) the columnname is unchanged&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_MAX_RECORDS_SIZE==&lt;br /&gt;
&lt;br /&gt;
Numeric, default 100&lt;br /&gt;
&lt;br /&gt;
This is a System SysConfig defining the maximum number of records returned in a get operation.&lt;br /&gt;
&lt;br /&gt;
After changing this SysConfig key a server restart is required.&lt;br /&gt;
&lt;br /&gt;
Note that $top cannot be higher than this configured value.&lt;br /&gt;
&lt;br /&gt;
Also, REST_MAX_RECORDS_SIZE=0 means unlimited, and in this case the $top takes precedence when defined.&lt;br /&gt;
&lt;br /&gt;
==REST_USE_SYSCONFIG_SECRET==&lt;br /&gt;
&lt;br /&gt;
Y/N, defaults to Y (true)&lt;br /&gt;
&lt;br /&gt;
When set to false (N) iDempiere uses a random key generated every time it is rebooted. Note this creates two problems:&lt;br /&gt;
*The tokens generated do not survive a reboot, because the key is changed on every reboot, if there is a valid token, it becomes invalid immediately after the server is rebooted, requiring a new login&lt;br /&gt;
*The token is generated per server, so they are not valid in a multi-server environment, load balancing the REST API in a multi-server environment can make the API useless because the token of one server is not valid in the other server&lt;br /&gt;
&lt;br /&gt;
When set to true (Y), the default, the tokens are generated and signed using a key saved in the System SysConfig REST_TOKEN_SECRET, so they are shared between servers and survive a reboot.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_SECRET==&lt;br /&gt;
&lt;br /&gt;
In this SysConfig is preserved a random key generated, in case they key is compromised, or as a security measure, a new key can be generated using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
You don't need to touch this SysConfig, it is managed automatically.&lt;br /&gt;
&lt;br /&gt;
==REST_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of token expiration in minutes.  The default is 60 minutes (1 hour).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of refresh token expiration in minutes.  This expiration is equivalent to inactivity of the session, every time the token is refreshed is set to expire again to these minutes.  The default is 1440 minutes (1 day).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_ABSOLUTE_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of a session, after this expiration the refresh token doesn't work anymore and the user needs to login again using a password.  The default is 10080 minutes (1 week).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_CLIENT_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires a clientId parameter to work correctly.  If your application cannot provide clientId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_USER_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires an userId parameter to work correctly.  If your application cannot provide userId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_ALLOW_UPDATE_SECURE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST allows to update columns marked as secure or encrypted.  This System SysConfig changes this behavior, if you add it and set it to N, then the secure or encrypted columns cannot be updated.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_EXISTING_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON does not exist.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not throw an error.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_UPDATABLE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON is not updatable.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not update the column but it won't throw an error&lt;br /&gt;
&lt;br /&gt;
==REST_EXPAND_SEPARATOR==&lt;br /&gt;
&lt;br /&gt;
Character - defaults to ;&lt;br /&gt;
&lt;br /&gt;
Expand supports sub-operators, f.i. select, expand, order by ... By default, these operators are separated using a semicolon ';'. However, this causes a problem because there are API gateways that do not support semicolons as separators, for example, Traefik by default changes semicolons to ampersands or Krakend throws an error when a URL contains a semicolon.&lt;br /&gt;
&lt;br /&gt;
If you want to change the separator character to something different than ';', set it using this System Configurator.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_TABLES_EXPORT_LOOKUP_UU==&lt;br /&gt;
By default, REST returns lookup values and foreign keys (FK) as a JSONObject with id, model-name, etc. Sometimes, you might need the UUID as well, but this is not possible with expand in some cases, for instance, when you are getting an FK from a System table. This SysConfig allows you to configure all tables per tenant from which you want to receive the UUID as well. You can fill this SysConfig with ''&amp;quot;ALL&amp;quot;'' (in uppercase) to specify that all FKs should return the UUID, or with a comma-separated string listing all the tables from which you want to get the UUID, for instance, ''&amp;quot;AD_FieldGroup, AD_Field.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
*''Setting ALL can impact performance.''&lt;br /&gt;
*''The table names'' can be in upper or lower case; it does not make a difference.&lt;br /&gt;
&lt;br /&gt;
=Server to Server Tokens=&lt;br /&gt;
&lt;br /&gt;
You can generate server to server tokens in the window ''Rest Auth Token''.&lt;br /&gt;
&lt;br /&gt;
Simply fill the fields:&lt;br /&gt;
*Organization&lt;br /&gt;
*User&lt;br /&gt;
*Role&lt;br /&gt;
*Warehouse&lt;br /&gt;
*Language&lt;br /&gt;
*Expire in Minutes (0 means no expiration)&lt;br /&gt;
&lt;br /&gt;
And when saving the token will be generated for these parameters.&lt;br /&gt;
&lt;br /&gt;
[[Image:01_Rest_Auth_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
When a token is generated, the flag ''Active'' indicates if it is a valid token.  To active/inactive a token you can use the process ''Inactive/Active Token''.&lt;br /&gt;
&lt;br /&gt;
[[Image:02_Activate_Inactivate_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Also, you can change the server secret key, and this inactivate all the issued tokens, using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
[[Image:03_Expire_Server_Secret.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=Refresh Tokens Administration=&lt;br /&gt;
&lt;br /&gt;
With the window ''Rest Refresh Token'' you can review and administer the refresh tokens issued by the server.&lt;br /&gt;
&lt;br /&gt;
For security reasons the refresh tokens are not deleted, it is recommended to set up a periodic housekeeping that takes care of deleting obsolete and unnecessary tokens.&lt;br /&gt;
&lt;br /&gt;
When there is a detected breach (a trial to use a refresh token twice) the token is marked as revoked with cause ''Breach'' and all the tokens related to the breached token are revoked too with cause ''Breach Chain'', including the authorization token, so, in case of a breach is mandatory that the user log in again.  It is recommended to verify frequently for breaches and take potential actions (f.e. inform the user), this can be done setting an alert.&lt;br /&gt;
&lt;br /&gt;
Also, when a user changes his/her password all the refresh tokens are revoked with cause ''Password Change''&lt;br /&gt;
&lt;br /&gt;
=Role access control for resource endpoint=&lt;br /&gt;
https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Role base access control for resource endpoint path.&lt;br /&gt;
By default, all resource endpoint path is not protected. Create a new resource path record (Rest_Resource) to protect one more resource endpoints. The resource path definition is a regular expression so you can use .* to protect all endpoint paths and add new resource path records to open access to selected resources (for e.g '''v1/models\b/?.*''').&lt;br /&gt;
&lt;br /&gt;
==Tables==&lt;br /&gt;
1. Rest_Resource&lt;br /&gt;
   - Name&lt;br /&gt;
   - Resource Path (regular expression pattern, without the query parameters)&lt;br /&gt;
2. Rest_Resource_Access&lt;br /&gt;
   - AD_Role_ID &lt;br /&gt;
   - Rest_Resource_ID&lt;br /&gt;
   - Http Methods (Multi selection list of GET, POST, PUT and DELETE)&lt;br /&gt;
&lt;br /&gt;
==Window==&lt;br /&gt;
1. Rest Resource Window&lt;br /&gt;
2. Role Data Access Window&lt;br /&gt;
   - Added Rest Resource Access tab&lt;br /&gt;
&lt;br /&gt;
==AD_SysConfig==&lt;br /&gt;
1. REST_RESOURCE_ACCESS_CONTROL&lt;br /&gt;
   - Y/N, System level, default to Y&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
See examples at https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&lt;br /&gt;
=OpenAPI Support=&lt;br /&gt;
&lt;br /&gt;
Generate OpenAPI 3.0.0 yaml for table and view.&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/models/{tableName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for table&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/views/{viewName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for view&lt;br /&gt;
&lt;br /&gt;
'''''HTTP Header:'''''&lt;br /&gt;
*Accept: application/yaml&lt;br /&gt;
&lt;br /&gt;
=Add Custom End Point=&lt;br /&gt;
&lt;br /&gt;
You can add new, custom end point with your own plugin.&lt;br /&gt;
&lt;br /&gt;
To do that, in your plugin:&lt;br /&gt;
&lt;br /&gt;
*Create resource classes for your end points using jaxrs annotation (@Path, @GET, @POST, etc).&lt;br /&gt;
*Create an OSGi component that implements the ResourceExtension interface (@Component(service = ResourceExtension.class, immediate = true)).&lt;br /&gt;
*Override the getResourceClasses() method and return the set of resource classes that you have created.&lt;br /&gt;
&lt;br /&gt;
[[Category:Available Plugins]]&lt;br /&gt;
[[Category:Updated2022]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23432</id>
		<title>REST Web Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=REST_Web_Services&amp;diff=23432"/>
		<updated>2025-07-22T03:55:17Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Maintainers:''' [http://www.bx-service.com BX Service GmbH] team&lt;br /&gt;
* '''Status:''' used in production, up to date with release 11 and master&lt;br /&gt;
* '''License:''' [http://www.gnu.org/licenses/gpl-2.0.html GPLv2]&lt;br /&gt;
* '''Sources:''' https://github.com/bxservice/idempiere-rest&lt;br /&gt;
* '''Continuous Integration:''' https://jenkins.idempiere.org/job/idempiere-rest/ (installation instructions)&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
The iDempiere REST API is a plugin that allows developers to communicate with an iDempiere server via a RESTful API. This information is delivered via HTTP using JSON. &lt;br /&gt;
&lt;br /&gt;
The iDempiere REST API seeks to follow the OData standard and uses the following structure and endpoints.&lt;br /&gt;
&lt;br /&gt;
You can find examples of every call in the [https://github.com/bxservice/idempiere-rest/tree/master/com.trekglobal.idempiere.rest.api/postman postman collection sample files in the official repository].&lt;br /&gt;
&lt;br /&gt;
= Global URL parameters =&lt;br /&gt;
&lt;br /&gt;
* '''locale:''' in any call you can use the URL parameter locale &amp;lt;code&amp;gt;?locale={locale}&amp;lt;/code&amp;gt;  to define the language.  For example adding &amp;lt;code&amp;gt;?locale=es_CO&amp;lt;/code&amp;gt; to the login URL &amp;lt;code&amp;gt;api/v1/auth/tokens&amp;lt;/code&amp;gt; will return any error message in Spanish.&lt;br /&gt;
&lt;br /&gt;
= Login in to get your Bearer authorization token =&lt;br /&gt;
&lt;br /&gt;
'''Properties:'''&lt;br /&gt;
&lt;br /&gt;
* '''userName:'''The user name being authenticated, here you would need to use the user Name or the EMail depending on the [[System Configurator (Window ID-50006)#USE EMAIL FOR LOGIN|SysConfig USE_EMAIL_FOR_LOGIN]]&lt;br /&gt;
* '''password:''' the password of the user being authenticated&lt;br /&gt;
* parameters:&lt;br /&gt;
** '''clientId:''' the client ID from AD_Client, here you can use the AD_Client_ID or the Value for authentication&lt;br /&gt;
** '''roleId:''' the role ID from AD_Role, here you can use the AD_Role_ID or the role Name for authentication&lt;br /&gt;
** '''organizationId:''' the organization ID from AD_Org, here you can use the AD_Org_ID or the organization Name for authentication&lt;br /&gt;
** '''warehouseId:''' the warehouse ID from M_Warehouse, here you can use the M_Warehouse_ID or the warehouse Name for authentication&lt;br /&gt;
** '''language:''' the language for the session, as defined in AD_Language.AD_Language&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANT:''' REST API just allows to log in to roles with Role Type = WebService, or without Role Type.  This means by default is not possible to login with role System, you need to clear the Role Type in System, or even better create a WebService role for System tenant.&lt;br /&gt;
&lt;br /&gt;
There are two ways to log in to get your authorization token:&lt;br /&gt;
&lt;br /&gt;
== One-step log-in ==&lt;br /&gt;
&lt;br /&gt;
When you know beforehand all the login information needed to get into the system, you need to do a POST request to the following endpoint&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;.../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With a body like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;,&lt;br /&gt;
    &amp;quot;parameters&amp;quot;: {&lt;br /&gt;
        &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
        &amp;quot;roleId&amp;quot;: {{roleId}},&lt;br /&gt;
        &amp;quot;organizationId&amp;quot;: {{organizationId}},&lt;br /&gt;
        &amp;quot;warehouseId&amp;quot;: {{warehouseId}},&lt;br /&gt;
        &amp;quot;language&amp;quot;: &amp;quot;{{language}}&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Change all the {{propertyname}} values to the ones you want to use in your instance.''&lt;br /&gt;
&lt;br /&gt;
== Normal log-in ==&lt;br /&gt;
&lt;br /&gt;
If you want to log in as a user would normally do in iDempiere (choosing a role, warehouse, client, etc), you need to do the following requests&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userName&amp;quot;: &amp;quot;{{userName}}&amp;quot;,&lt;br /&gt;
    &amp;quot;password&amp;quot;: &amp;quot;{{password}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;clients&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;GardenWorld&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsImlzcyI6ImlkZW1waWVyZS5vcmciLCJDbGllbnRzIjoiMTEiLCJleHAiOjE2NjY5NjQ5Mjh9.3t0MuK6ReF7xNmb36ITM36VSKI5QnK3n0ZF_LIgPQSrso4oRhDsL8Mudc0NqH4qjvvKDlYsPquYKtrHnB5UiZg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With that token you can request for login information from the user that is being authenticated. You need to add it to the request Header with Key value as:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt; Authorization: Bearer {authToken}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The information you can request is the following, and it needs to be done in this order because each request needs information from the previous call:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/roles?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the roles that the user has access to&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/organizations?client={clientId}&amp;amp;role={roleId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the organizations that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/auth/warehouses?client={clientId}&amp;amp;role={roleId}&amp;amp;organization={organizationId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the warehouses that the user has access to.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/auth/language?client={clientId}&amp;lt;/code&amp;gt;&lt;br /&gt;
::Returns an array with the languages the user can login with.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When you have all the data you need to do a final PUT request like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PUT .../api/v1/auth/tokens&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;clientId&amp;quot;: {clientId},&lt;br /&gt;
  &amp;quot;roleId&amp;quot;: {roleId},&lt;br /&gt;
  &amp;quot;organizationId&amp;quot;: {organizationId},&lt;br /&gt;
  &amp;quot;warehouseId&amp;quot;: {warehouseId},&lt;br /&gt;
  &amp;quot;language&amp;quot;: &amp;quot;{language}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''The language, organizationId and warehouseId properties are optional, it can be omitted and the system will use the default language and 0 for the organization.''&lt;br /&gt;
&lt;br /&gt;
* ''If the warehouseId property is omitted the system assigns by default the warehouse defined for the organization, if the warehouse is passed as 0, then the login doesn't assign a default warehouse.''&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101,&lt;br /&gt;
    &amp;quot;language&amp;quot;: &amp;quot;en_US&amp;quot;,&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MjAwMDAxLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDE2MiwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTcwMTc3NTUzN30.bAUEhPylAQhZjZquJhvLpO9zMZG3g6zlM_IqO9ifeXJpAJBOoJtDqd8CrYPU1PKURzoPRSUglbKqr1LsXdz38A&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwODk1OTIyNC1iYzBhLTRkNTQtOTlhZS1jNmRmZjNiOGEwMzUiLCJpc3MiOiJpZGVtcGllcmUub3JnIiwiZXhwIjoxNzAxODU4MzM3fQ.uSE5SOtWgPvReC4JtyV4alHd-ccU0L9QhIpP2TwT7C5TJFeCGVYTdyWc291DaIweyiIGCfWFgQlbe0oH1EEXXg&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Abbreviated log-in =&lt;br /&gt;
The &amp;lt;code&amp;gt;POST .../api/v1/auth/tokens&amp;lt;/code&amp;gt; operation described above can be sufficient for a login when the user has only access to one client, one role and one organization.  In this case the POST operation returns immediately the token and refresh_token and the payload includes the values that were assumed for the login.&lt;br /&gt;
&lt;br /&gt;
= Refresh Token =&lt;br /&gt;
&lt;br /&gt;
As you see above, the login process returns a token and a refresh_token, normally the token expires in 1 hour and the refresh_token expires in 24 hours.  These expiration defaults can be changed using SysConfig keys REST_TOKEN_EXPIRE_IN_MINUTES and REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES.&lt;br /&gt;
&lt;br /&gt;
It is a common practice in front-end development to store the refresh_token in a cookie or browser data, while keeping the token itself just in memory.  This approach is taken due to the sensitive nature of the information contained within the token, which must not be disclosed.&lt;br /&gt;
&lt;br /&gt;
When the token expires, you can get a new token calling the following request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;{{refreshToken}}&amp;quot;,&lt;br /&gt;
    &amp;quot;clientId&amp;quot;: {{clientId}},&lt;br /&gt;
    &amp;quot;userId&amp;quot;: 101&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that clientId and userId are recommended, but optional, it can be disabled with the SysConfig keys REST_MANDATORY_CLIENT_ID_ON_REFRESH=N and REST_MANDATORY_USER_ID_ON_REFRESH=N&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJHYXJkZW5BZG1pbiIsIkFEX0NsaWVudF9JRCI6MTEsIkFEX1VzZXJfSUQiOjEwMSwiQURfUm9sZV9JRCI6MTAyLCJBRF9PcmdfSUQiOjExLCJNX1dhcmVob3VzZV9JRCI6MTAzLCJBRF9MYW5ndWFnZSI6ImVuX1VTIiwiQURfU2Vzc2lvbl9JRCI6MTAwMDIyMCwiaXNzIjoiaWRlbXBpZXJlLm9yZyIsImV4cCI6MTczMDgxNTUwM30.MzmpXlpuIUjKkYdKi2G50ORcSt2FcLT4-x-OO1LVzDDoO8lNm7P9ELaWWViKktOzN_pKtocIA59LlXzXBmWVtA&amp;quot;,&lt;br /&gt;
    &amp;quot;refresh_token&amp;quot;: &amp;quot;eyJraWQiOiJpZGVtcGllcmUiLCJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiZTQ3Zjg4YjkyMmU5MzU5NzEwNmRlNWIwOGQ1ZDljMjk3OTQxMzNkNjYxMWFjOWZkMmI1NGE5NWExODFjNDIxIiwiaXNzIjoiaWRlbXBpZXJlLm9yZyJ9.efa6M1oOb_QDnSKopNsdDygd1fF3S-ozr3DXjn1qANyPEVK-kg3Y2anGXrqQCtUzmxWBi8eTY4C6r5wXY6jtFA&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The new tokens are set with new expiration times as configured.&lt;br /&gt;
&lt;br /&gt;
Refresh tokens can be expired (deleted) using the process &amp;quot;Expire Refresh Tokens&amp;quot;&lt;br /&gt;
&lt;br /&gt;
A refresh token can be used just one time.  If a refresh token tries to be used a second time a potential breach is set on the system and all the tokens associated with the refresh token are invalidated.&lt;br /&gt;
&lt;br /&gt;
= Logout =&lt;br /&gt;
&lt;br /&gt;
Logout a session from a token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST .../api/v1/auth/logout&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Body:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;token&amp;quot;: &amp;quot;{{authToken}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The session associated to the token will be logged out.&lt;br /&gt;
&lt;br /&gt;
This token cannot be used again, neither the refresh token associated.&lt;br /&gt;
&lt;br /&gt;
= Common Headers =&lt;br /&gt;
&lt;br /&gt;
* Content-Type: application/json&lt;br /&gt;
* Accept: application/json&lt;br /&gt;
* Authorization: Bearer {authToken}&lt;br /&gt;
** All calls except the first one (POST/auth) require an authorization bearer that is returned by the /auth APIs from the previous steps.&lt;br /&gt;
&lt;br /&gt;
= Requesting Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports requests for data via HTTP '''GET''' requests.&lt;br /&gt;
&lt;br /&gt;
On every get request the response will include this information, in addition to the one requested:&lt;br /&gt;
* id: the record ID&lt;br /&gt;
* uid: the UUID of the record&lt;br /&gt;
* model-name: the table name of the record&lt;br /&gt;
* {columnname}: each pair of column/value is represented as a json object with the columnname:&lt;br /&gt;
** String: strings are represented directly as a json string quoted value&lt;br /&gt;
** Yes/No: these are represented as true/false&lt;br /&gt;
** Numbers: numbers are represented as a json number without quotes&lt;br /&gt;
** Dates/Times: timestamp values are represented as a json date (quoted string with format [https://en.wikipedia.org/wiki/ISO_8601 ISO_8601]&lt;br /&gt;
** Foreign keys: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt; the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** identifier -&amp;gt; the foreign identifier&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
** Binary: binary columns are represented directly as a json string base64 encoded value&lt;br /&gt;
** Images: these are represented as a json object with the following values:&lt;br /&gt;
*** propertyLabel -&amp;gt;  the foreign name&lt;br /&gt;
*** id -&amp;gt; the foreign record ID&lt;br /&gt;
*** data -&amp;gt; a string containing the base64 encoded data for the image&lt;br /&gt;
*** model-name -&amp;gt; the foreign table name&lt;br /&gt;
&lt;br /&gt;
== Requesting PO Collections ==&lt;br /&gt;
The request below returns the collection of taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 8,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d76b09c5-531b-4f98-a8c6-9af848b6697b&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T15:06:11Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Canadian Provintial Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ValidFrom&amp;quot;: &amp;quot;2002-01-01&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Rate&amp;quot;: 7.5,&lt;br /&gt;
            &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxIndicator&amp;quot;: &amp;quot;PST&amp;quot;,&lt;br /&gt;
            &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
            &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual PO by ID ==&lt;br /&gt;
The request below returns an individual PO of type tax by the given id &amp;quot;106&amp;quot;.&lt;br /&gt;
''* You can use here either record id or the UUID (C_Tax_ID or C_Tax_UU value)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2003-01-08T13:14:01Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;Canadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2003-02-22T02:20:37Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;~System (deprecated)~&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;2001-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requesting an Individual Property ==&lt;br /&gt;
To address an entity property clients append a path segment containing property name to the URL of the entity.&lt;br /&gt;
The request below returns the Rate property of a tax.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_tax/106/rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;315dacb1-415c-45e7-8dac-a9a44fa8aca7&amp;quot;,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Querying Data =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports various kinds of query options for querying data. This section will help you go through the common scenarios for these query options.&lt;br /&gt;
&lt;br /&gt;
== Query Option $filter ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option allows developers to filter a collection of resources that are addressed by a request URL. The expression specified with $filter is evaluated for each resource in the collection, and only items where the expression evaluates to true are included in the response. These are the basic predicates that are supported:&lt;br /&gt;
&lt;br /&gt;
* $filter&lt;br /&gt;
** Logical operators&lt;br /&gt;
*** eq -&amp;gt; equals =&lt;br /&gt;
*** neq -&amp;gt; not equals !=&lt;br /&gt;
*** in -&amp;gt; IN&lt;br /&gt;
*** gt -&amp;gt; greater than &amp;gt;&lt;br /&gt;
*** ge -&amp;gt; greater or equal &amp;gt;=&lt;br /&gt;
*** lt -&amp;gt; less than &amp;lt;&lt;br /&gt;
*** le -&amp;gt; less or equal &amp;lt;=&lt;br /&gt;
*** and -&amp;gt; &amp;amp;&lt;br /&gt;
*** or -&amp;gt; |&lt;br /&gt;
*** not -&amp;gt; !&lt;br /&gt;
** Method operators (WARNING: there must not be spaces before/after the parameters on these functions, strings must be surrounded by single quotes):&lt;br /&gt;
*** contains -&amp;gt; if a string contains another string&lt;br /&gt;
*** startswith -&amp;gt; if a string starts with another string&lt;br /&gt;
*** endswith -&amp;gt; if a string ends with another string&lt;br /&gt;
*** tolower -&amp;gt; convert a string to lowercase&lt;br /&gt;
*** toupper -&amp;gt; convert a string to uppercase&lt;br /&gt;
** Parenthesis are supported&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
The request below using $filter to get business partners where IsCustomer = true and IsActive = true and the name starts with 'Pa'&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_bpartner?$filter=isCustomer eq true AND isActive eq true AND startswith(name,'Pa') AND C_BPartner_ID in (120,121)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 121,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;39e85feb-94a2-4e41-ae45-e7d49d7be077&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2003-01-13T10:14:03Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-11T13:16:05Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Patio&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Fun, Inc.&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesVolume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;NumberEmployees&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;AD_Language&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Language&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Spanish (Colombia)&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_language&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsProspect&amp;quot;: false,&lt;br /&gt;
            &amp;quot;FirstSale&amp;quot;: &amp;quot;2020-11-05&amp;quot;,&lt;br /&gt;
            &amp;quot;SO_CreditLimit&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;SO_CreditUsed&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;AcqusitionCost&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;PotentialLifeTimeValue&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ActualLifeTimeValue&amp;quot;: 588.24,&lt;br /&gt;
            &amp;quot;ShareOfCustomer&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsEmployee&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSalesRep&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOneTime&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BP_Group_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner Group&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bp_group&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SOCreditStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Credit Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;O&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Credit OK&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalOpenBalance&amp;quot;: 588.240,&lt;br /&gt;
            &amp;quot;IsPOTaxExempt&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufacturer&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Is1099Vendor&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsUseTaxIdDigit&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDetailedNames&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $expand ==&lt;br /&gt;
iDempiere supports nested filters in &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The request below return Orders and all their Lines and Taxes.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$expand=c_orderLine,c_ordertax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:20Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 14500,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountTendered&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;AmountRefunded&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;c_orderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;Created&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-22T17:36:50Z&amp;quot;,&lt;br /&gt;
                    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-19&amp;quot;,&lt;br /&gt;
                    &amp;quot;M_Product_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 1000295,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Poker_Poker&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;6-Pack&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;QtyOrdered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;QtyReserved&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyDelivered&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyInvoiced&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;PriceList&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceActual&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;C_Tax_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                        &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;PriceLimit&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;Discount&amp;quot;: 0.00,&lt;br /&gt;
                    &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                        &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;IsDescription&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
                    &amp;quot;PriceEntered&amp;quot;: 14500,&lt;br /&gt;
                    &amp;quot;QtyEntered&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;PriceCost&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;QtyLostSales&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;RRAmt&amp;quot;: 0&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can add query operators ($filter, $orderyby, $top, $skip, $select) to the detail tables by adding the query operators between parentheses separated by ;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns Orders and their Lines (Line number and line net amount) from lines with linnetamt &amp;gt; 1000.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$select=DocumentNo,Description&amp;amp;$expand=C_OrderLine($select=Line,Linenetamt ; $filter=LineNetAmt gt 1000 ; $orderby=Line)&amp;amp;$top=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 14,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000019,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;7144b00f-a283-465e-8d2d-1fe89eac5748&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50012&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000033,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;0b02614d-bdcd-406f-a9e6-5399ed3a9997&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 14500&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000020,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;470c98e0-5a19-413d-b589-89fc67272823&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50013&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000018,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;fb485eb0-6e79-439d-926f-cce53d76d806&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50011&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;040ffe18-04ab-4989-ae83-9ed295146042&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50008&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;,&lt;br /&gt;
            &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;id&amp;quot;: 1000026,&lt;br /&gt;
                    &amp;quot;uid&amp;quot;: &amp;quot;d3eac7ec-caf1-473e-8c22-f5b8cee55d30&amp;quot;,&lt;br /&gt;
                    &amp;quot;Line&amp;quot;: 10,&lt;br /&gt;
                    &amp;quot;LineNetAmt&amp;quot;: 4275.00&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000017,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;ee3a9225-439a-4022-8eaa-1109e5e4f049&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50010&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default expand searches for the primary key column in the master table and tries to create the relation with this column name in the expanded table. /ad_user?$expand=c_order expands using ad_user_id by default. Sometimes you want to specify which column must be used for the expanding. In this case, you need to specify the column name using a dot after the table name.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns users and their corresponding orders as sales representatives.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/ad_user?$expand=C_order.salesrep_id($select=documentno)&amp;amp;$select=Name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;986cb4dc-7161-4d77-a7c7-3832d24b19de&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;,&lt;br /&gt;
    &amp;quot;C_order&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;3456b6d0-b911-42e6-8432-f52ded58713f&amp;quot;,&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;800000&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iDempiere has special tables where record_id is used, for instance, fact_acct. You can expand to this table using the same syntax as explained above. ''The plug-in will automatically set the correct value for AD_Table_ID''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the invoice 104 and their corresponding records on fact_acct.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/c_invoice/104?$expand=fact_acct.record_id($select=fact_acct_id)&amp;amp;$select=DocumentNo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 104,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;6d2768c9-b3cc-4820-b903-9748b416b98f&amp;quot;,&lt;br /&gt;
    &amp;quot;DocumentNo&amp;quot;: &amp;quot;10000001&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_invoice&amp;quot;,&lt;br /&gt;
    &amp;quot;fact_acct&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001729,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;cd02c4e7-b386-46aa-b367-f5ec618dccc8&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001730,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e8dfd3ec-d5bf-4ded-9646-0a2a8d86a680&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001731,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2bf88ace-83bc-4968-abdd-fd211765da92&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1001732,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26735041-c88e-4670-89e5-95ae49beb4dc&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to expand to a master record as well, for instance, from product to product category. You accomplish this by writing expand followed by the column name you want to expand.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The request below returns the product 122 and its corresponding product category.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/api/v1/models/m_product/122?$expand=m_product_category_id($select=Name,IsDefault)&amp;amp;$select=Name,m_product_category_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 122,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;c713192a-9ed3-4740-ad32-9583c30d0206&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;,&lt;br /&gt;
    &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
        &amp;quot;uid&amp;quot;: &amp;quot;be686f7e-993f-4162-a02d-ad4bb8c6987b&amp;quot;,&lt;br /&gt;
        &amp;quot;Name&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;IsDefault&amp;quot;: true,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: For obvious reasons. $select is the only query operator accepted in this case.''&lt;br /&gt;
&lt;br /&gt;
You can expand on multiple levels by using the $expand operators within the $expand clause. You can only expand deeper on master &amp;gt; detail records. Cases like GET ../orders?$expand=AD_user_ID($expand=C_orderLine) are forbidden.&lt;br /&gt;
&lt;br /&gt;
== Query Option $orderby ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$orderby&amp;lt;/code&amp;gt; query option allows developers to request resources in either ascending order using asc or descending order using desc. If asc or desc not specified, then the resources will be ordered in ascending order. &lt;br /&gt;
&lt;br /&gt;
The request below orders products on property Value in descending order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$orderby=Value desc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 37,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 3,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000216,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;e19114c8-86cc-4fb4-b6eb-15f8fa350d38&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-05T18:46:14Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-11-23T19:45:12Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Tron&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;zas&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000398,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;d5d1bb16-81b4-429b-86bf-f667f22b93df&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 50001,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fertilizer&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-01-20T18:52:06Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;yudo mat&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;ym&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Trees&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000299,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;1726c817-71bc-4abf-8949-0372c9ffb0d3&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2020-10-08T19:04:22Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_UOM_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;UOM&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Each&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_uom&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsStocked&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsPurchased&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsSold&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Xiaomi Redmi Airdots&amp;quot;,&lt;br /&gt;
            &amp;quot;M_Product_Category_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000015,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Gadgets&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_product_category&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ShelfWidth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfHeight&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;ShelfDepth&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;UnitsPerPallet&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Discontinued&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsBOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoicePrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPickListPrintDetails&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsVerified&amp;quot;: false,&lt;br /&gt;
            &amp;quot;ProductType&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Product Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Item&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDays&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;M_AttributeSetInstance_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Attribute Set Instance&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_attributesetinstance&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;GuaranteeDaysMin&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsWebStoreFeatured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsExcludeAutoDelivery&amp;quot;: false,&lt;br /&gt;
            &amp;quot;UnitsPerPack&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;LowLevel&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;IsKanban&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsManufactured&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPhantom&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsOwnBox&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsAutoProduce&amp;quot;: false,&lt;br /&gt;
            &amp;quot;BXS_IsPricePerUOM&amp;quot;: false,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Options $top and $skip ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$top&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection to be included in the result. The &amp;lt;code&amp;gt;$skip&amp;lt;/code&amp;gt; query option requests the number of items in the queried collection that are to be skipped and not included in the result.&lt;br /&gt;
&lt;br /&gt;
The request below return the first two Orders starting with other 5th order.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/c_order?$top=2&amp;amp;$skip=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 34,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 68,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000022,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;2238dc66-edda-41f7-8348-d781342f6dfc&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-07-29T15:59:51Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50015&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;DR&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Drafted&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;** New **&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-07-29&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 105,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: false,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Freight included&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Monroe&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.0,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000016,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;5565e213-a119-4bcc-beb6-c9f9a4e75dab&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2021-03-09T14:20:31Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2021-03-09T14:20:59Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;DocumentNo&amp;quot;: &amp;quot;50009&amp;quot;,&lt;br /&gt;
            &amp;quot;DocStatus&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Status&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;CO&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Completed&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocType_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_DocTypeTarget_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Target Document Type&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 132,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard Order&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_doctype&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Order Description from Business Partner Definition&amp;quot;,&lt;br /&gt;
            &amp;quot;IsApproved&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsCreditApproved&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDelivered&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsInvoiced&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPrinted&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsTransferred&amp;quot;: false,&lt;br /&gt;
            &amp;quot;DateOrdered&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;DatePromised&amp;quot;: &amp;quot;2021-02-25&amp;quot;,&lt;br /&gt;
            &amp;quot;DateAcct&amp;quot;: &amp;quot;2021-02-16&amp;quot;,&lt;br /&gt;
            &amp;quot;SalesRep_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Sales Representative&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_PaymentTerm_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Term&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 106,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;2%10 Net 30&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_paymentterm&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_Currency_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Currency&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 102,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;EUR&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_currency&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;InvoiceRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Immediate&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;DeliveryViaRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Via&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Pickup&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_Shipper_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Shipper&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;UPS&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_shipper&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PriorityRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Priority&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Medium&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;TotalLines&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;GrandTotal&amp;quot;: 95.00,&lt;br /&gt;
            &amp;quot;M_Warehouse_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 103,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;HQ Warehouse&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_warehouse&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;M_PriceList_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Price List&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;m_pricelist&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;C_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Business Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;User/Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;POReference&amp;quot;: &amp;quot;Order Reference 1234&amp;quot;,&lt;br /&gt;
            &amp;quot;ChargeAmt&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;Processed&amp;quot;: true,&lt;br /&gt;
            &amp;quot;C_BPartner_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Partner Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSOTrx&amp;quot;: true,&lt;br /&gt;
            &amp;quot;DeliveryRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Delivery Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;A&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Availability&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;FreightCostRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Freight Cost Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;F&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Fix price&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;PaymentRule&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Payment Rule&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: &amp;quot;P&amp;quot;,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;On Credit&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsDiscountPrinted&amp;quot;: true,&lt;br /&gt;
            &amp;quot;IsTaxIncluded&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsSelected&amp;quot;: false,&lt;br /&gt;
            &amp;quot;SendEMail&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Bill_User_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Contact&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1000011,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Carlitos Boss&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_BPartner_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Partner&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 117,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;C&amp;amp;W Construction&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Bill_Location_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Invoice Location&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 112,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;Stamford&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner_location&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsSelfService&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsDropShip&amp;quot;: false,&lt;br /&gt;
            &amp;quot;Volume&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;Weight&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;ProcessedOn&amp;quot;: 1615296059621.6216,&lt;br /&gt;
            &amp;quot;IsPayScheduleValid&amp;quot;: false,&lt;br /&gt;
            &amp;quot;IsPriviledgedRate&amp;quot;: false,&lt;br /&gt;
            &amp;quot;NetAmtToInvoice&amp;quot;: 0.00,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;c_order&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Query Option $select ==&lt;br /&gt;
The &amp;lt;code&amp;gt;$select&amp;lt;/code&amp;gt; query option allows the clients to requests a limited set of properties for each entity or complex type. &lt;br /&gt;
&lt;br /&gt;
The request below returns Name and Value of all products.&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/m_product?$select=Name,Value&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;page-count&amp;quot;: 28,&lt;br /&gt;
    &amp;quot;records-size&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;skip-records&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;row-count&amp;quot;: 111,&lt;br /&gt;
    &amp;quot;array-count&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;records&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000322,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;b0e7e8b6-13ed-406d-a105-bd67ddb7f423&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mug 50&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 134,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;01254fee-c75f-42f0-941c-142e27078643&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Patio Table&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;PTable&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 137,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;26a7e6d7-e2c1-4c21-97f2-773dc222e6a2&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Mulch 10#&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;Mulch&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 50003,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;8a27ac0a-56c0-4a3a-8eb8-ff87c94899c1&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;Ultra Glue&amp;quot;,&lt;br /&gt;
            &amp;quot;Value&amp;quot;: &amp;quot;UltraGlue&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;m_product&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== iDempiere specific query Options ==&lt;br /&gt;
&lt;br /&gt;
=== Query Option $valrule ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$valrule&amp;lt;/code&amp;gt; can be used to get PO records using a validation rule - AD_ValRule_ID or AD_ValRule_UU&lt;br /&gt;
&lt;br /&gt;
=== Query Option $context ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;$context&amp;lt;/code&amp;gt; can be used to put variables in context to be parsed by the validation rule&lt;br /&gt;
&lt;br /&gt;
=== Query Option showsql ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; can be used to add the SQL query being executed on GET.&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;code&amp;gt;showsql=nodata&amp;lt;/code&amp;gt; to obtain just information about the query without returning the real data.&lt;br /&gt;
&lt;br /&gt;
The payload will include a JSON element with name &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; containing the query that is executed in the database to obtain the record(s).&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;showsql&amp;lt;/code&amp;gt; is used at the same time with &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt;, then the payload will include the &amp;lt;code&amp;gt;sql-command&amp;lt;/code&amp;gt; JSON element for the query on the master table, and also it will include the elements with format &amp;lt;code&amp;gt;sql-command-[table]&amp;lt;/code&amp;gt; for each expanded table, for example the following query:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET .../api/v1/models/c_tax/106?$expand=c_tax_acct&amp;amp;showsql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will return the following elements in the payload:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;quot;sql-command&amp;quot;: &amp;quot;SELECT C_Tax_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Name,Description,Parent_Tax_ID,C_Country_ID,C_Region_ID,To_Country_ID,To_Region_ID,C_TaxCategory_ID,Updated,UpdatedBy,IsDocumentLevel,ValidFrom,IsSummary,Rate,RequiresTaxCertificate,TaxIndicator,IsDefault,IsTaxExempt,SOPOType,IsSalesTax,AD_Rule_ID,C_Tax_UU,C_TaxProvider_ID,C_CountryGroupTo_ID,C_CountryGroupFrom_ID FROM C_Tax WHERE (c_tax_ID=?) AND C_Tax.AD_Client_ID IN(0,11) AND (C_Tax.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
    &amp;quot;sql-command-c_tax_acct&amp;quot;: &amp;quot;SELECT C_Tax_ID,C_AcctSchema_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,T_Due_Acct,T_Credit_Acct,T_Expense_Acct,C_Tax_Acct_UU FROM C_Tax_Acct WHERE (c_tax_ID=?) AND IsActive=? AND C_Tax_Acct.AD_Client_ID IN(0,11) AND (C_Tax_Acct.AD_Org_ID IN (0,11,12,50000,1000000,50002,50001,50004,50006,50005,50007))&amp;quot;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Query Option label ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; can be used to get PO records by filtering based on labels (i.e. &amp;lt;code&amp;gt;AD_Label&amp;lt;/code&amp;gt;). For example,  &amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner?label=Name eq '%23Customer'&amp;lt;/code&amp;gt; query will return all business partner records where the name of the Assigned Label &amp;gt; Label is '#Customer'.&lt;br /&gt;
&lt;br /&gt;
iDempiere supports using nested  &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt; within the &amp;lt;code&amp;gt;$expand&amp;lt;/code&amp;gt; query option.&lt;br /&gt;
&lt;br /&gt;
Refer to the &amp;lt;code&amp;gt;$filter&amp;lt;/code&amp;gt; query option for the supported predicates.&lt;br /&gt;
&lt;br /&gt;
=== Query Option showlabel ===&lt;br /&gt;
&lt;br /&gt;
The query option &amp;lt;code&amp;gt;showlabel&amp;lt;/code&amp;gt; can be used to include the list of assigned labels in the payload when getting a PO record or records. &lt;br /&gt;
&lt;br /&gt;
The query below returns the business partner record along with a list of assigned label objects, including all columns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;6d550225-2e0a-4203-9b82-0f2634f7d079&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:11:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:35:43Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
            &amp;quot;uid&amp;quot;: &amp;quot;87ae21d5-f06a-4cd8-977c-86712cf58da1&amp;quot;,&lt;br /&gt;
            &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tenant&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;GardenWorld&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Created&amp;quot;: &amp;quot;2025-04-11T13:13:40Z&amp;quot;,&lt;br /&gt;
            &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Updated&amp;quot;: &amp;quot;2025-04-16T17:36:54Z&amp;quot;,&lt;br /&gt;
            &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
                &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
                &amp;quot;id&amp;quot;: 100,&lt;br /&gt;
                &amp;quot;identifier&amp;quot;: &amp;quot;SuperUser&amp;quot;,&lt;br /&gt;
                &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;,&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;model-name&amp;quot;: &amp;quot;ad_label&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname list}&amp;lt;/code&amp;gt; to retrieve a list of assigned label objects, including the defined column list only. For example, the query below returns the business partner record along with a list of assigned label objects including the name and description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name,Description&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Customers&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;: &amp;quot;#Vendor&amp;quot;,&lt;br /&gt;
            &amp;quot;Description&amp;quot;: &amp;quot;Vendors&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can use &amp;lt;code&amp;gt;showlabel={columnname}&amp;lt;/code&amp;gt; to retrieve the values of the assigned label column. For example, the query below returns the business partner record along with a list of assigned label names.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/models/C_BPartner/119?showlabel=Name&amp;amp;$select=Name,IsCustomer,IsVendor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response payload:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 119,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;61a84a1b-37a0-4dda-80a2-3ee218522b32&amp;quot;,&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;GardenUser BP&amp;quot;,&lt;br /&gt;
    &amp;quot;IsVendor&amp;quot;: true,&lt;br /&gt;
    &amp;quot;IsCustomer&amp;quot;: true,&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_bpartner&amp;quot;,&lt;br /&gt;
    &amp;quot;assigned-labels&amp;quot;: [&lt;br /&gt;
        &amp;quot;#Customer&amp;quot;,&lt;br /&gt;
        &amp;quot;#Vendor&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Data Modification =&lt;br /&gt;
&lt;br /&gt;
iDempiere supports Create, Update and Delete operation for some or all exposed POs.&lt;br /&gt;
&lt;br /&gt;
== Create a PO (POST) ==&lt;br /&gt;
To create a PO in a collection, the client sends a POST request to that collection's URL. The POST body MUST contain a single valid entity representation. &lt;br /&gt;
&lt;br /&gt;
The request below creates a Tax which contains complex type and collection property. &lt;br /&gt;
&amp;lt;code&amp;gt;POST api/v1/models/c_tax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;AD_Org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;lookupColumn&amp;quot;: &amp;quot;CountryCode&amp;quot;,&lt;br /&gt;
        &amp;quot;lookupValue&amp;quot;: &amp;quot;CA&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_Country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;tableName&amp;quot;: &amp;quot;C_TaxCategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;validFrom&amp;quot;: &amp;quot;01/01/2001&amp;quot;,&lt;br /&gt;
    &amp;quot;isSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;rate&amp;quot;: &amp;quot;7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;requiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;taxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;isDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;isTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;sOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;isSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;tableName&amp;quot;: &amp;quot;C_Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000005,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;4e71df80-f3f5-41cd-84cf-2bc8e12322d0&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard 19%&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;MyCanadian Federal Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:44:44Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 7.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remove a PO (DELETE) ==&lt;br /&gt;
The request below deletes the Tax with id '1000005'.&lt;br /&gt;
&amp;lt;code&amp;gt;DELETE /api/v1/models/c_tax/1000005&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;msg&amp;quot;: &amp;quot;Deleted&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update a PO (PUT) ==&lt;br /&gt;
The request below updates the tax with id 1000000 &lt;br /&gt;
&amp;lt;code&amp;gt;PUT /api/v1/models/c_tax/1000000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Body:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Standard Tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response Payload&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;id&amp;quot;: 1000002,&lt;br /&gt;
    &amp;quot;uid&amp;quot;: &amp;quot;a1c76f9b-30ea-44c1-a8c3-2bc27daa1cd1&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Client_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Client&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;MyGST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_client&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;AD_Org_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Organization&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_org&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsActive&amp;quot;: true,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2020-08-21T18:29:28Z&amp;quot;,&lt;br /&gt;
    &amp;quot;CreatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Created By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Name&amp;quot;: &amp;quot;Standard Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Description&amp;quot;: &amp;quot;My Sales Tax&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent_Tax_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Parent Tax&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 108,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GST/PST&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Country&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;To_Country_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;To&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 109,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Canada&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_country&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;C_TaxCategory_ID&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Tax Category&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 107,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Standard&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;c_taxcategory&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Updated&amp;quot;: &amp;quot;2022-10-28T15:48:14Z&amp;quot;,&lt;br /&gt;
    &amp;quot;UpdatedBy&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Updated By&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: 101,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;GardenAdmin&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_user&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsDocumentLevel&amp;quot;: false,&lt;br /&gt;
    &amp;quot;ValidFrom&amp;quot;: &amp;quot;1990-01-01&amp;quot;,&lt;br /&gt;
    &amp;quot;IsSummary&amp;quot;: false,&lt;br /&gt;
    &amp;quot;Rate&amp;quot;: 6.0,&lt;br /&gt;
    &amp;quot;RequiresTaxCertificate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;TaxIndicator&amp;quot;: &amp;quot;GST&amp;quot;,&lt;br /&gt;
    &amp;quot;IsDefault&amp;quot;: false,&lt;br /&gt;
    &amp;quot;IsTaxExempt&amp;quot;: false,&lt;br /&gt;
    &amp;quot;SOPOType&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;SO/PO Type&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;B&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Both&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;IsSalesTax&amp;quot;: true,&lt;br /&gt;
    &amp;quot;TaxPostingIndicator&amp;quot;: {&lt;br /&gt;
        &amp;quot;propertyLabel&amp;quot;: &amp;quot;Posting Indicator&amp;quot;,&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
        &amp;quot;identifier&amp;quot;: &amp;quot;Separate Tax Posting&amp;quot;,&lt;br /&gt;
        &amp;quot;model-name&amp;quot;: &amp;quot;ad_ref_list&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;model-name&amp;quot;: &amp;quot;c_tax&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update/Insert/Delete child records of a PO (PUT) ===&lt;br /&gt;
Update the child records of a PO using the child record array in the PUT request Body:&lt;br /&gt;
* Without child record id to create&lt;br /&gt;
* With child record id to update&lt;br /&gt;
* With child record id and the following delete flag to delete a child record.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&amp;quot;(delete)&amp;quot;:true&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples to delete, create and update order lines:&amp;lt;br/&amp;gt;&lt;br /&gt;
PUT /api/v1/models/c_order/1000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;C_OrderLine&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000000,&lt;br /&gt;
         &amp;quot;(delete)&amp;quot;: true&lt;br /&gt;
      }&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;M_Product_ID&amp;quot;: 128,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 1&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;id&amp;quot;: 1000001,&lt;br /&gt;
         &amp;quot;QtyEntered&amp;quot;: 2&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Special Entity Type Representations ==&lt;br /&gt;
&lt;br /&gt;
=== Image ===&lt;br /&gt;
If you are modifying or creating values of an Image type column/field, the json entity representation must be as follows: &lt;br /&gt;
* id -&amp;gt; the foreign record ID. If not informed a new foreign record will be created and linked to the main record&lt;br /&gt;
* file_name -&amp;gt; the readable file name to be stored at the foreign table&lt;br /&gt;
* url -&amp;gt; an optional URL for the image to be stored at the foreign table&lt;br /&gt;
* data -&amp;gt; a string with the base64 encoded data for the image&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/auth/jwk ===&lt;br /&gt;
&lt;br /&gt;
Calling this endpoint returns the key used to sign the JWT.&lt;br /&gt;
&lt;br /&gt;
By default this endpoint returns nothing.  It requires the System Configurator IDEMPIERE_REST_EXPOSE_JWK to be set to Y on System tenant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;gt;'''WARNING!'''&amp;lt;/span&amp;gt; Exposing the signature key is intended exclusively for integration with API gateways that requires it (like krakend), and this endpoint MUST be hidden from public usage and exposed JUST to the API gateway.  Exposing the key publicly open the REST interface to attacks changing the JWT token.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* keys&lt;br /&gt;
** alg&lt;br /&gt;
** k&lt;br /&gt;
** kid&lt;br /&gt;
** kty&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/models/{tablename}/{recordId}/print ===&lt;br /&gt;
This method is used to get the print format from the model's record id.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $report_type -&amp;gt; optional - ( PDF | HTML | CSV | XLSX | XLS )&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* AD_PInstance_ID&lt;br /&gt;
* process&lt;br /&gt;
* summary&lt;br /&gt;
* isError&lt;br /&gt;
* reportFile&lt;br /&gt;
* reportFileName&lt;br /&gt;
* reportFileLength&lt;br /&gt;
* nodeId&lt;br /&gt;
&lt;br /&gt;
== Windows api/v1/windows ==&lt;br /&gt;
&lt;br /&gt;
working with AD_Window and AD_Tab&lt;br /&gt;
&lt;br /&gt;
== Forms api/v1/forms ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/forms ===&lt;br /&gt;
&lt;br /&gt;
Get Forms available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the forms (AD_Form) queried&lt;br /&gt;
&lt;br /&gt;
== Processes api/v1/processes ==&lt;br /&gt;
&lt;br /&gt;
working with process and reports&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes ===&lt;br /&gt;
&lt;br /&gt;
Get Processes available&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* $filter -&amp;gt; optional - used to filter the query&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of PO json records from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an PO json record from the process (AD_Process) queried&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters, for example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=json&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ImportOrExport&amp;quot;: &amp;quot;export&amp;quot;,&lt;br /&gt;
    &amp;quot;AD_Language&amp;quot;: &amp;quot;es_CO&amp;quot;,&lt;br /&gt;
    &amp;quot;IsOnlyCentralizedData&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for reports three special parameters can be added:&lt;br /&gt;
* report-type: with the possible values HTML, CSV, XLS or PDF (the default)&lt;br /&gt;
* is-summary&lt;br /&gt;
* print-format-id&lt;br /&gt;
&lt;br /&gt;
also, for buttons is possible to define two special parameters:&lt;br /&gt;
* table-id or model-name&lt;br /&gt;
* record-id&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the process/report executed:&lt;br /&gt;
** AD_PInstance_ID&lt;br /&gt;
** process&lt;br /&gt;
** summary&lt;br /&gt;
** isError&lt;br /&gt;
** nodeId&lt;br /&gt;
** logs - array containing the logs from the process&lt;br /&gt;
&lt;br /&gt;
The reports will be returned in an object with name &amp;lt;code&amp;gt;reportFile&amp;lt;/code&amp;gt; containing the base64 encoded report, and additionally the objects &amp;lt;code&amp;gt;reportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;reportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the process produces an export file it will be returned in an object &amp;lt;code&amp;gt;exportFile&amp;lt;/code&amp;gt;, and additionally the objects &amp;lt;code&amp;gt;exportFileName&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;exportFileLength&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs ===&lt;br /&gt;
&lt;br /&gt;
Get information about jobs running&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* an array of json records from the process running (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/processes/jobs/{ad_pinstance_id} ===&lt;br /&gt;
&lt;br /&gt;
Get Information from a job&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {ad_pinstance_id}&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* a json record from the process (AD_PInstance)&lt;br /&gt;
&lt;br /&gt;
=== POST api/v1/processes/jobs/{process_value} ===&lt;br /&gt;
&lt;br /&gt;
Run a process in background (as job)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* {process_value} -&amp;gt; value of the process (in slug form - lowercase)&lt;br /&gt;
for example &amp;lt;code&amp;gt;https://demo.globalqss.com/api/v1/processes/jobs/translationimpexp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* {process_parameters} -&amp;gt; a JSON representation of the process parameters (same as for running the process)&lt;br /&gt;
&lt;br /&gt;
same special parameters apply as for the reports, and additionally you can define the parameter &amp;lt;code&amp;gt;notification-type&amp;lt;/code&amp;gt; with the values E, N or B  (EMail, Notification or Both)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* JSON information about the AD_PInstance scheduled&lt;br /&gt;
&lt;br /&gt;
== Files api/v1/files ==&lt;br /&gt;
&lt;br /&gt;
to access files created by api/v1/processes&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Caches api/v1/caches ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Get caches information.  This call is restricted just for administrators.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
* name -&amp;gt; optional - to filter the list of caches&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* caches (array)&lt;br /&gt;
** name&lt;br /&gt;
** table_name&lt;br /&gt;
** size&lt;br /&gt;
** expireMinutes&lt;br /&gt;
** maxSize&lt;br /&gt;
** distributed (boolean)&lt;br /&gt;
&lt;br /&gt;
=== DEL api/v1/caches ===&lt;br /&gt;
&lt;br /&gt;
Reset cache.  This call requires the role to have permission to execute &amp;quot;Cache Reset&amp;quot; process.&lt;br /&gt;
&lt;br /&gt;
When called without parameters it reset the whole cache, or just from a table, or just one record.&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* table_name -&amp;gt; optional - to restrict the reset to just one table.  Case sensitive.&lt;br /&gt;
* record_id -&amp;gt; optional - to restrict the reset to just one record.  Zero is the same as not set, it clears the cache of the whole table.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* entriesReset (number of entries cleared)&lt;br /&gt;
&lt;br /&gt;
== Nodes api/v1/nodes ==&lt;br /&gt;
&lt;br /&gt;
get nodes info, get log files, reset and rotate logs.&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Servers api/v1/servers ==&lt;br /&gt;
&lt;br /&gt;
servers and schedulers resource&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Infos api/v1/infos ==&lt;br /&gt;
&lt;br /&gt;
info windows&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
== Reference api/v1/reference/{id} ==&lt;br /&gt;
&lt;br /&gt;
You can get a reference list by id/uuid or name.&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/152'''&lt;br /&gt;
&lt;br /&gt;
'''GET .../api/v1/reference/42522223-92ae-4405-92dc-e02e2dea61a7'''&lt;br /&gt;
&lt;br /&gt;
'''GET  .../api/v1/reference/C_Order%20DeliveryViaRule'''&lt;br /&gt;
&lt;br /&gt;
''* Only list and table validation references are supported''&lt;br /&gt;
&lt;br /&gt;
== Workflows api/v1/workflow ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the current user&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/workflow/{userid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all suspended, non-processed nodes of the user id passed in the URL&lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** node-name&lt;br /&gt;
** node-description&lt;br /&gt;
** priority&lt;br /&gt;
** summary&lt;br /&gt;
** node-help&lt;br /&gt;
** history-records&lt;br /&gt;
** table-name&lt;br /&gt;
** ad_table_id&lt;br /&gt;
** record_id&lt;br /&gt;
** node-approval&lt;br /&gt;
** node-confirmation&lt;br /&gt;
** created&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/workflow/100&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/approve/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Approves the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for approval&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the approval&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/reject/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Rejects the corresponding node. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for rejection&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the rejection&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/forward/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Forwards the corresponding node to a specific user. Just for nodes of type = Approval (Column name = IsApproved).&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;userTo&amp;quot;: {userToID} '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for fowarding&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the forwarding&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/acknowledge/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
Implementation of the workflow nodes where a user gets notified when something happens, it&lt;br /&gt;
does not require any action from the user but the user receives a message after a specific&lt;br /&gt;
action is performed. This is used when the node is from type Window/form&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for acknowledge&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
=== PUT api/v1/workflow/setuserchoice/{nodeid} ===&lt;br /&gt;
&lt;br /&gt;
This is similar to approve and reject but it supports columns with Type List and String.&lt;br /&gt;
&lt;br /&gt;
'''''Body Parameters:'''''&lt;br /&gt;
* &amp;quot;value&amp;quot;:&amp;quot;Value to be set in the corresponding column&amp;quot; '''(Mandatory)'''&lt;br /&gt;
* &amp;quot;message&amp;quot;: &amp;quot;This is an example message for userschoice&amp;quot; ''(Optional)''&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Confirmation of the acknowledge&lt;br /&gt;
&lt;br /&gt;
== Status lines api/v1/statuslines ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all active status line records configured in the dictionary ordered by Name.&lt;br /&gt;
&lt;br /&gt;
You can use the query parameters '''$filter''' to filter the records returned.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can use the query parameter '''with_messages''' to specify that you want the resulting message returned in the payload. This means that the status line will be resolved by REST, and the result will be returned in a ''message'' property in the JSON response.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* all the active status line records configured in the dictionary. &lt;br /&gt;
** id&lt;br /&gt;
** uid&lt;br /&gt;
** model-name&lt;br /&gt;
** name&lt;br /&gt;
** entity type&lt;br /&gt;
** message (optional)&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/statuslines/{statuslineid} ===&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The message corresponding to the specific status line&lt;br /&gt;
** message&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/statuslines/200024&lt;br /&gt;
&lt;br /&gt;
=== GET /api/v1/statuslines/200024 ===&lt;br /&gt;
&lt;br /&gt;
Returns the Core status line Dashboard_OrderCount.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Order Count\n Top Year (2002): 4 \n Current Year: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Charts api/v1/charts ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/charts/{chartid} ===&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
* height -&amp;gt; optional - height in pixels for the image&lt;br /&gt;
** if not provided then it uses the same height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* width -&amp;gt; optional - width in pixels for the image&lt;br /&gt;
** if not provided then it uses the height defined in the chart, or 100 if not defined in chart&lt;br /&gt;
* json -&amp;gt; optional&lt;br /&gt;
** if this parameter is present the image is returned base64 encoded in data element of JSON&lt;br /&gt;
** when not present the image file is returned directly in PNG format&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* The image generated from the chart.&lt;br /&gt;
* NOTE that this image is generated using the old JFreeChart library, not the new billboard, so it can have an outdated look.&lt;br /&gt;
&lt;br /&gt;
'''''Examples:'''''&lt;br /&gt;
 /api/v1/charts/50002?width=800&amp;amp;height=600&amp;amp;json&lt;br /&gt;
&lt;br /&gt;
== Menu tree api/v1/menutree/ ==&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/menutree/{id} ===&lt;br /&gt;
&lt;br /&gt;
Retrieve all the elements from the requested menu tree with id or uuid.&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
* Name&lt;br /&gt;
* Description&lt;br /&gt;
* IsSOTrx&lt;br /&gt;
* PredefinedContextVariables&lt;br /&gt;
* EntityType&lt;br /&gt;
* Action&lt;br /&gt;
* AD_Window_ID&lt;br /&gt;
* AD_Workflow_ID&lt;br /&gt;
* AD_Task_ID&lt;br /&gt;
* AD_Process_ID&lt;br /&gt;
* AD_Form_ID&lt;br /&gt;
* AD_InfoWindow_ID&lt;br /&gt;
&lt;br /&gt;
== REST View api/v1/views ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
iDempiere model typically has many columns and is using DB naming convention that's not particularly natural in a Json data schema. A common need is to pick a subset of columns for different use case and uses a more json oriented naming for the selected columns.&lt;br /&gt;
&lt;br /&gt;
This add a layer of abstraction on top of iDempiere model (term as Rest View) to cater for such need. It can be taken as a way to configure Json schema on top of iDempiere model.&lt;br /&gt;
&lt;br /&gt;
=== GET api/v1/views ===&lt;br /&gt;
Get active REST view definitions (Rest_View, Rest_ViewColumn, Rest_ViewRelated).&lt;br /&gt;
&lt;br /&gt;
=== Support all requests and methods for api/v1/models/ ===&lt;br /&gt;
Supports all requests and methods that are available with '''api/v1/models''', just replace '''models''' with '''views''' and '''{tableName}''' with '''{viewName}''' (i.e api/v1/views/{viewName} for api/v1/models/{tableName}, api/v1/views/{viewName}/{id} for api/v1/models/{tableName}/{id}, etc).&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
See example at [https://github.com/bxservice/idempiere-rest/issues/281 https://github.com/bxservice/idempiere-rest/issues/281]&lt;br /&gt;
&lt;br /&gt;
== Uploads api/v1/uploads ==&lt;br /&gt;
[https://github.com/bxservice/idempiere-rest/issues/360 https://github.com/bxservice/idempiere-rest/issues/360]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Allow uploading large files for posterior references where base64 files are used (e.g. attachments, images, etc)&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Initiates a new upload session for a file&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
* fileName -&amp;gt; The name of the file to be uploaded&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file in bytes&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*sha256 -&amp;gt; The SHA-256 hash of the file content for integrity verification&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*expiresAt -&amp;gt; The expiration time of the upload session&lt;br /&gt;
&lt;br /&gt;
===PUT api/v1/uploads/{uploadId}/chunks/{chunkOrder}===&lt;br /&gt;
&lt;br /&gt;
Uploads a chunk of the file to the server&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameters:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk&lt;br /&gt;
&lt;br /&gt;
'''''Header Parameter:'''''&lt;br /&gt;
*X-Content-SHA256 -&amp;gt; hash of the chunk data&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Chunk data to be uploaded&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
*receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}===&lt;br /&gt;
&lt;br /&gt;
Retrieves the current status of an ongoing or completed upload&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
* chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence &lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads/{uploadId}/complete===&lt;br /&gt;
&lt;br /&gt;
Notifies the server that all chunks have been uploaded and the file should be reassembled&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
*fileName -&amp;gt; The final name of the file being uploaded (optional)&lt;br /&gt;
*totalChunks -&amp;gt; The total number of chunks expected for the file upload&lt;br /&gt;
*uploadLocation -&amp;gt; The upload location for the file upload (ARCHIVE, IMAGE or ATTACHMENT) (optional)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
* status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===DEL api/v1/uploads/{uploadId} ===&lt;br /&gt;
&lt;br /&gt;
Cancels an ongoing/completed upload, cleans up any temporarily stored chunks and associated uploaded file&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*message -&amp;gt; Message or details about the outcome of the cancellation&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads/{uploadId}/file ===&lt;br /&gt;
&lt;br /&gt;
Get uploaded file content as binary stream or json&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Query Parameter:'''''&lt;br /&gt;
*asJson -&amp;gt; if provided, the response will be in JSON format with file content as base64 encoded string&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Response may be returned in one of the following media types:&lt;br /&gt;
&lt;br /&gt;
*application/octet-stream for binary data&lt;br /&gt;
*text/html for HTML-formatted content&lt;br /&gt;
*text/plain for plain text responses&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/uploads===&lt;br /&gt;
&lt;br /&gt;
Get pending uploads from current user&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Status list of pending uploads:&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*fileName -&amp;gt; The name of the file being uploaded&lt;br /&gt;
*fileSize -&amp;gt; The total size of the file being uploaded&lt;br /&gt;
*chunkSize -&amp;gt; The preferred size of each chunk in the upload, in bytes&lt;br /&gt;
*status -&amp;gt; Status of the upload processing (INITIATED, UPLOADING, PROCESSING, COMPLETED, CANCELED or FAILED)&lt;br /&gt;
*uploadedChunks -&amp;gt; List of chunks that have been successfully uploaded&lt;br /&gt;
**chunkOrder -&amp;gt; The order of the chunk in the upload sequence&lt;br /&gt;
**receivedSize -&amp;gt; The size of the chunk that has been received&lt;br /&gt;
&lt;br /&gt;
*totalReceivedSize -&amp;gt; Total size of all received chunks so far&lt;br /&gt;
* message -&amp;gt; Additional message or details about the upload processing&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/uploads/{uploadId}/copy===&lt;br /&gt;
&lt;br /&gt;
Copy uploaded file to attachment, image or archive (edited)&lt;br /&gt;
&lt;br /&gt;
'''''URL Parameter:'''''&lt;br /&gt;
* uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record (ARCHIVE, IMAGE or ATTACHMENT)&lt;br /&gt;
* tableName -&amp;gt; The table name of the destination record (optional)&lt;br /&gt;
*recordId -&amp;gt; The record id/uuid of the destination record (optional)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
*uploadId -&amp;gt; The unique ID of the upload session&lt;br /&gt;
*tableName -&amp;gt; The table name of the destination record&lt;br /&gt;
*recordId -&amp;gt; The record id of the destination record&lt;br /&gt;
*recordUU -&amp;gt; The record uuid of the destination record&lt;br /&gt;
*copyLocation -&amp;gt; The copy location of the destination record, e.g. archive (default), image or attachment&lt;br /&gt;
* fileName -&amp;gt; The name of the file being copied&lt;br /&gt;
*contentType -&amp;gt; The MIME type of the file being copied (e.g., &amp;quot;image/png&amp;quot;, &amp;quot;application/pdf&amp;quot;)&lt;br /&gt;
* fileSize -&amp;gt; The size of the file being copied&lt;br /&gt;
&lt;br /&gt;
== Batch request api/v1/batch ==&lt;br /&gt;
&lt;br /&gt;
===POST api/v1/batch===&lt;br /&gt;
&lt;br /&gt;
Execute one or more sub-request in single transaction&lt;br /&gt;
&lt;br /&gt;
'''''Body:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*method -&amp;gt; HTTP method &amp;quot;POST&amp;quot;, &amp;quot;PUT&amp;quot; or &amp;quot;DEL&amp;quot;&lt;br /&gt;
*path -&amp;gt; Sub-request resource path, for e.g &amp;quot;v1/model/C_Order&amp;quot;&lt;br /&gt;
*body -&amp;gt; JSON body for the sub-request (if applicable)&lt;br /&gt;
&lt;br /&gt;
'''''Returns:'''''&lt;br /&gt;
&lt;br /&gt;
Arrays of:&amp;lt;br/&amp;gt;&lt;br /&gt;
*status -&amp;gt; HTTP status text (OK, Created, etc) return from sub-request&lt;br /&gt;
*statusCode -&amp;gt; HTTP status code (200, 201, 400, etc) return from sub-request&lt;br /&gt;
*body -&amp;gt; JSON return from sub-request (if available)&lt;br /&gt;
&lt;br /&gt;
=SysConfig Keys=&lt;br /&gt;
&lt;br /&gt;
==IDEMPIERE_REST_EXPOSE_JWK==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
For integration with krakend (see [[Proxy iDempiere-Rest Through KrakenD]]) it is necessary to expose the signing key in the endpoint api/v1/auth/jwk&lt;br /&gt;
&lt;br /&gt;
Setting this to N (the default) the endpoint is not exposed, changing to Y it will expose the endpoint.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_COLUMNNAME_TOLOWERCASE ==&lt;br /&gt;
&lt;br /&gt;
Y/N - defaults to N&lt;br /&gt;
&lt;br /&gt;
When set to Y the columnnames are translated to be named as json properties.  The first letter is changed to lowercase when the columnname doesn't contain the underline character ( _ )&lt;br /&gt;
&lt;br /&gt;
When set to N (the default) the columnname is unchanged&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_MAX_RECORDS_SIZE==&lt;br /&gt;
&lt;br /&gt;
Numeric, default 100&lt;br /&gt;
&lt;br /&gt;
This is a System SysConfig defining the maximum number of records returned in a get operation.&lt;br /&gt;
&lt;br /&gt;
After changing this SysConfig key a server restart is required.&lt;br /&gt;
&lt;br /&gt;
Note that $top cannot be higher than this configured value.&lt;br /&gt;
&lt;br /&gt;
Also, REST_MAX_RECORDS_SIZE=0 means unlimited, and in this case the $top takes precedence when defined.&lt;br /&gt;
&lt;br /&gt;
==REST_USE_SYSCONFIG_SECRET==&lt;br /&gt;
&lt;br /&gt;
Y/N, defaults to Y (true)&lt;br /&gt;
&lt;br /&gt;
When set to false (N) iDempiere uses a random key generated every time it is rebooted. Note this creates two problems:&lt;br /&gt;
*The tokens generated do not survive a reboot, because the key is changed on every reboot, if there is a valid token, it becomes invalid immediately after the server is rebooted, requiring a new login&lt;br /&gt;
*The token is generated per server, so they are not valid in a multi-server environment, load balancing the REST API in a multi-server environment can make the API useless because the token of one server is not valid in the other server&lt;br /&gt;
&lt;br /&gt;
When set to true (Y), the default, the tokens are generated and signed using a key saved in the System SysConfig REST_TOKEN_SECRET, so they are shared between servers and survive a reboot.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_SECRET==&lt;br /&gt;
&lt;br /&gt;
In this SysConfig is preserved a random key generated, in case they key is compromised, or as a security measure, a new key can be generated using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
You don't need to touch this SysConfig, it is managed automatically.&lt;br /&gt;
&lt;br /&gt;
==REST_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of token expiration in minutes.  The default is 60 minutes (1 hour).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_REFRESH_TOKEN_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of refresh token expiration in minutes.  This expiration is equivalent to inactivity of the session, every time the token is refreshed is set to expire again to these minutes.  The default is 1440 minutes (1 day).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
== REST_TOKEN_ABSOLUTE_EXPIRE_IN_MINUTES==&lt;br /&gt;
&lt;br /&gt;
This Tenant SysConfig set the duration of a session, after this expiration the refresh token doesn't work anymore and the user needs to login again using a password.  The default is 10080 minutes (1 week).  Zero (0) means no expiration.  If you need to change the default number, you can add this to System Configurator and set configured value with your value.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_CLIENT_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires a clientId parameter to work correctly.  If your application cannot provide clientId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_MANDATORY_USER_ID_ON_REFRESH==&lt;br /&gt;
&lt;br /&gt;
The auth/refresh endpoint requires an userId parameter to work correctly.  If your application cannot provide userId you can set this SysConfig to N to make it optional.&lt;br /&gt;
&lt;br /&gt;
==REST_ALLOW_UPDATE_SECURE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST allows to update columns marked as secure or encrypted.  This System SysConfig changes this behavior, if you add it and set it to N, then the secure or encrypted columns cannot be updated.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_EXISTING_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON does not exist.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not throw an error.&lt;br /&gt;
&lt;br /&gt;
==REST_ERROR_ON_NON_UPDATABLE_COLUMN==&lt;br /&gt;
&lt;br /&gt;
By default REST throws errors when a column mentioned in JSON is not updatable.  This System SysConfig changes this behavior, if you add it and set it to N, then the REST will not update the column but it won't throw an error&lt;br /&gt;
&lt;br /&gt;
==REST_EXPAND_SEPARATOR==&lt;br /&gt;
&lt;br /&gt;
Character - defaults to ;&lt;br /&gt;
&lt;br /&gt;
Expand supports sub-operators, f.i. select, expand, order by ... By default, these operators are separated using a semicolon ';'. However, this causes a problem because there are API gateways that do not support semicolons as separators, for example, Traefik by default changes semicolons to ampersands or Krakend throws an error when a URL contains a semicolon.&lt;br /&gt;
&lt;br /&gt;
If you want to change the separator character to something different than ';', set it using this System Configurator.&lt;br /&gt;
&lt;br /&gt;
Scope: System&lt;br /&gt;
&lt;br /&gt;
==REST_TABLES_EXPORT_LOOKUP_UU==&lt;br /&gt;
By default, REST returns lookup values and foreign keys (FK) as a JSONObject with id, model-name, etc. Sometimes, you might need the UUID as well, but this is not possible with expand in some cases, for instance, when you are getting an FK from a System table. This SysConfig allows you to configure all tables per tenant from which you want to receive the UUID as well. You can fill this SysConfig with ''&amp;quot;ALL&amp;quot;'' (in uppercase) to specify that all FKs should return the UUID, or with a comma-separated string listing all the tables from which you want to get the UUID, for instance, ''&amp;quot;AD_FieldGroup, AD_Field.&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
*''Setting ALL can impact performance.''&lt;br /&gt;
*''The table names'' can be in upper or lower case; it does not make a difference.&lt;br /&gt;
&lt;br /&gt;
=Server to Server Tokens=&lt;br /&gt;
&lt;br /&gt;
You can generate server to server tokens in the window ''Rest Auth Token''.&lt;br /&gt;
&lt;br /&gt;
Simply fill the fields:&lt;br /&gt;
*Organization&lt;br /&gt;
*User&lt;br /&gt;
*Role&lt;br /&gt;
*Warehouse&lt;br /&gt;
*Language&lt;br /&gt;
*Expire in Minutes (0 means no expiration)&lt;br /&gt;
&lt;br /&gt;
And when saving the token will be generated for these parameters.&lt;br /&gt;
&lt;br /&gt;
[[Image:01_Rest_Auth_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
When a token is generated, the flag ''Active'' indicates if it is a valid token.  To active/inactive a token you can use the process ''Inactive/Active Token''.&lt;br /&gt;
&lt;br /&gt;
[[Image:02_Activate_Inactivate_Token.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Also, you can change the server secret key, and this inactivate all the issued tokens, using the process ''Expire Server Secret''&lt;br /&gt;
&lt;br /&gt;
[[Image:03_Expire_Server_Secret.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=Refresh Tokens Administration=&lt;br /&gt;
&lt;br /&gt;
With the window ''Rest Refresh Token'' you can review and administer the refresh tokens issued by the server.&lt;br /&gt;
&lt;br /&gt;
For security reasons the refresh tokens are not deleted, it is recommended to set up a periodic housekeeping that takes care of deleting obsolete and unnecessary tokens.&lt;br /&gt;
&lt;br /&gt;
When there is a detected breach (a trial to use a refresh token twice) the token is marked as revoked with cause ''Breach'' and all the tokens related to the breached token are revoked too with cause ''Breach Chain'', including the authorization token, so, in case of a breach is mandatory that the user log in again.  It is recommended to verify frequently for breaches and take potential actions (f.e. inform the user), this can be done setting an alert.&lt;br /&gt;
&lt;br /&gt;
Also, when a user changes his/her password all the refresh tokens are revoked with cause ''Password Change''&lt;br /&gt;
&lt;br /&gt;
=Role access control for resource endpoint=&lt;br /&gt;
https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Role base access control for resource endpoint path.&lt;br /&gt;
By default, all resource endpoint path is not protected. Create a new resource path record (Rest_Resource) to protect one more resource endpoints. The resource path definition is a regular expression so you can use .* to protect all endpoint paths and add new resource path records to open access to selected resources (for e.g '''v1/models\b/?.*''').&lt;br /&gt;
&lt;br /&gt;
==Tables==&lt;br /&gt;
1. Rest_Resource&lt;br /&gt;
   - Name&lt;br /&gt;
   - Resource Path (regular expression pattern, without the query parameters)&lt;br /&gt;
2. Rest_Resource_Access&lt;br /&gt;
   - AD_Role_ID &lt;br /&gt;
   - Rest_Resource_ID&lt;br /&gt;
   - Http Methods (Multi selection list of GET, POST, PUT and DELETE)&lt;br /&gt;
&lt;br /&gt;
==Window==&lt;br /&gt;
1. Rest Resource Window&lt;br /&gt;
2. Role Data Access Window&lt;br /&gt;
   - Added Rest Resource Access tab&lt;br /&gt;
&lt;br /&gt;
==AD_SysConfig==&lt;br /&gt;
1. REST_RESOURCE_ACCESS_CONTROL&lt;br /&gt;
   - Y/N, System level, default to Y&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
See examples at https://github.com/bxservice/idempiere-rest/issues/290&lt;br /&gt;
&lt;br /&gt;
=OpenAPI Support=&lt;br /&gt;
&lt;br /&gt;
Generate OpenAPI 3.0.0 yaml for table and view.&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/models/{tableName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for table&lt;br /&gt;
&lt;br /&gt;
===GET api/v1/views/{viewName}/yaml===&lt;br /&gt;
&lt;br /&gt;
Get OpenAPI 3.0.0 yaml schema and request for view&lt;br /&gt;
&lt;br /&gt;
'''''HTTP Header:'''''&lt;br /&gt;
*Accept: application/yaml&lt;br /&gt;
&lt;br /&gt;
=Add Custom End Point=&lt;br /&gt;
&lt;br /&gt;
You can add new, custom end point with your own plugin.&lt;br /&gt;
&lt;br /&gt;
To do that, in your plugin:&lt;br /&gt;
&lt;br /&gt;
*Create resource classes for your end points using jaxrs annotation (@Path, @GET, @POST, etc).&lt;br /&gt;
*Create an OSGi component that implements the ResourceExtension interface (@Component(service = ResourceExtension.class, immediate = true)).&lt;br /&gt;
*Override the getResourceClasses() method and return the set of resource classes that you have created.&lt;br /&gt;
&lt;br /&gt;
[[Category:Available Plugins]]&lt;br /&gt;
[[Category:Updated2022]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Development_With_Intellij&amp;diff=23117</id>
		<title>Development With Intellij</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Development_With_Intellij&amp;diff=23117"/>
		<updated>2025-05-03T07:44:11Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Goal:''' Development&lt;br /&gt;
&lt;br /&gt;
'''Developer:''' Hengsin&lt;br /&gt;
&lt;br /&gt;
'''Feature''' '''Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
With the help of the '''Eclipse PDE Partial''' plugin, use IntelliJ for iDempiere development.&lt;br /&gt;
&lt;br /&gt;
===Steps===&lt;br /&gt;
* Install '''Intellij 2024.3.5''' or '''Intellij 2025.1'''&lt;br /&gt;
* Install '''Eclipse PDE Partial''' plugin '''1.6.8''' from Intellij Marketplace&lt;br /&gt;
* At the '''Projects''' window, select '''Open''' and pick the root iDempiere source folder. Make sure you have run '''mvn verify''' successfully before doing this.&lt;br /&gt;
* The '''Eclipse PDE Partial''' plugin should be able to setup everything without further input from user.&lt;br /&gt;
* The '''Eclipse PDE Partial''' plugin doesn't works well with Maven build files. Select '''Skip''' if the Intellij IDE shows the '''Load Maven Projects''' popup dialog.&lt;br /&gt;
* Run or debug with Maven Run Configuration:&lt;br /&gt;
** '''iDempiere Setup''': run the '''org.adempiere.app.install''' Maven run configuration.&lt;br /&gt;
** '''Generate Model''': run the '''org.adempiere.modelgenerator.app''' Maven run configuration.&lt;br /&gt;
** '''iDempiere Server''': run the '''org.adempiere.server.application''' Maven run configuration.&lt;br /&gt;
** To debug, run one of the Maven run configuration above, click the '''Attach debugger''' link in the Run output panel or use '''Run &amp;gt; Attach to process...'''. &lt;br /&gt;
** Due to the use of Equinox launcher, the Debug Maven run configuration menu wouldn't work.&lt;br /&gt;
** To setup new maven run configuration, please refer to one of the pre-setup Maven run configuration. You can setup the '''bundles.info''' and '''dev.properties''' manually or copy it from Eclipse launch configuration (&amp;lt;workspace&amp;gt;/.metadata/.plugins/org.eclipse.pde.core/&amp;lt;launch configuration name&amp;gt;/). For the copy over bundles.info, you need to replace all occurrence of '''&amp;lt;home folder&amp;gt;''' with '''${user.home}'''.&lt;br /&gt;
* Run or debug with '''Eclipse Application Partial''' Configuration:&lt;br /&gt;
** '''iDempiere Setup''': run or debug the '''Install''' configuration&lt;br /&gt;
** '''Generate Model''': run or debug the '''Model Generator''' configuration&lt;br /&gt;
** '''iDempiere Server''': run or debug the '''iDempiere Server''' configuration&lt;br /&gt;
* Run or debug plugin unit test (required '''Eclipse PDE Partial''' plugin '''1.6.8''' and above):&lt;br /&gt;
** '''org.idempiere.test''': run all unit test inside the '''org.idempiere.test''' project&lt;br /&gt;
** '''org.idempiere.test.SelectedClass''': run all unit test methods inside the currently selected class at the '''Project''' view (the class must belongs to the '''org.idempiere.test''' project).&lt;br /&gt;
** '''org.idempiere.test.SelectedClass.Method''': run single unit test methods inside the currently selected class at the '''Project''' view (the class must belongs to the '''org.idempiere.test''' project). The run configuration will prompt for the unit test method name (you can copy the method name using the '''Structure''' view).&lt;br /&gt;
&lt;br /&gt;
===Maintenance of .iml file and run configurations===&lt;br /&gt;
* We need to update the .iml files and run configurations if there are changes in project modules and/or target platform.&lt;br /&gt;
* To update .iml files, right click on '''idempiere''' project, select '''Resolve Workspace'''. Push the updated .iml files to repository.&lt;br /&gt;
* For Eclipse PDE Partial run configurations, update selection of target modules and run it. Push the updated configurations to repository.&lt;br /&gt;
* For Maven run configurations, get the updated dev.properties and bundles.info from your Eclipse installation (&amp;lt;workspace&amp;gt;/.metadata/.plugins/org.eclipse.pde.core/&amp;lt;launch configuration name&amp;gt;/). For the copy over bundles.info, you need to replace all occurrence of '''&amp;lt;home folder&amp;gt;''' with '''${user.home}'''.&lt;br /&gt;
&lt;br /&gt;
===Working with idempiere-rest module===&lt;br /&gt;
1. Import '''com.trekglobal.idempiere.rest.api''' module&lt;br /&gt;
* Step 1&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 1.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 1]]&lt;br /&gt;
* Step 2&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 2.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 2]]&lt;br /&gt;
* Step 3&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 3.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 3]]&lt;br /&gt;
* Step 4&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 4.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 4]]&lt;br /&gt;
* Step 5&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 5.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 5]]&lt;br /&gt;
* Step 6&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 6.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 6]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
2. Configure Imported com.trekglobal.idempiere.rest.api Module&lt;br /&gt;
* Exclude Target Folder&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Exclude Rest API Module Target Folder.png|800x600px|frameless|Exclude com.trekglobal.idempiere.rest.api target folder]]&lt;br /&gt;
* Set Compile Output Path&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api compile output path.png|800x600px|frameless|Compile output path of com.trekglobal.idempiere.rest.api]]&lt;br /&gt;
* Set Eclipse PDE Partial Settings&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api facet output path.png|800x600px|frameless|com.trekglobal.idempiere.rest.api output path for Eclipse PDE Partial facet]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
3. Close and re-open module setting to verify that the module's dependencies have been updated by the Eclipse PDE Partial plugin.&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api Module Dependencies.png|800x600px|frameless|Updated module dependencies of com.trekglobal.idempiere.rest.api ]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
4. Create a duplicate copy of '''iDempiere Server''' run configuration. Change runtime data directory path and select the '''com.trekglobal.idempiere.rest.api''' module&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api Run Configuration.png|800x600px|frameless|Run configuration for com.trekglobal.idempiere.rest.api]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
5. Run/Debug the newly created run configuration to test&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|D]]&lt;br /&gt;
[[Category:New Features w13|D]]&lt;br /&gt;
[[Category:New Features Development]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Development_With_Intellij&amp;diff=23116</id>
		<title>Development With Intellij</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Development_With_Intellij&amp;diff=23116"/>
		<updated>2025-05-03T07:32:44Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Goal:''' Development&lt;br /&gt;
&lt;br /&gt;
'''Developer:''' Hengsin&lt;br /&gt;
&lt;br /&gt;
'''Feature''' '''Ticket:''' [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
With the help of the '''Eclipse PDE Partial''' plugin, use IntelliJ for iDempiere development.&lt;br /&gt;
&lt;br /&gt;
===Steps===&lt;br /&gt;
* Install '''Intellij 2024.3.5''' or '''Intellij 2025.1'''&lt;br /&gt;
* Install '''Eclipse PDE Partial''' plugin '''1.6.8''' from Intellij Marketplace&lt;br /&gt;
* At the '''Projects''' window, select '''Open''' and pick the root iDempiere source folder. Make sure you have run '''mvn verify''' successfully before doing this.&lt;br /&gt;
* The '''Eclipse PDE Partial''' plugin should be able to setup everything without further input from user.&lt;br /&gt;
* The '''Eclipse PDE Partial''' plugin doesn't works well with Maven build files. Select '''Skip''' if the Intellij IDE shows the '''Load Maven Projects''' popup dialog.&lt;br /&gt;
* Run or debug with Maven Run Configuration:&lt;br /&gt;
** '''iDempiere Setup''': run the '''org.adempiere.app.install''' Maven run configuration.&lt;br /&gt;
** '''Generate Model''': run the '''org.adempiere.modelgenerator.app''' Maven run configuration.&lt;br /&gt;
** '''iDempiere Server''': run the '''org.adempiere.server.application''' Maven run configuration.&lt;br /&gt;
** To debug, run one of the Maven run configuration above, click the '''Attach debugger''' link in the Run output panel or use '''Run &amp;gt; Attach to process...'''. &lt;br /&gt;
** Due to the use of Equinox launcher, the Debug Maven run configuration menu wouldn't work.&lt;br /&gt;
** To setup new maven run configuration, please refer to one of the pre-setup Maven run configuration. You can setup the '''bundles.info''' and '''dev.properties''' manually or copy it from Eclipse launch configuration (&amp;lt;workspace&amp;gt;/.metadata/.plugins/org.eclipse.pde.core/&amp;lt;launch configuration name&amp;gt;/). For the copy over bundles.info, you need to replace all occurrence of '''&amp;lt;home folder&amp;gt;''' with '''${user.home}'''.&lt;br /&gt;
* Run or debug with '''Eclipse Application Partial''' Configuration:&lt;br /&gt;
** '''iDempiere Setup''': run or debug the '''Install''' configuration&lt;br /&gt;
** '''Generate Model''': run or debug the '''Model Generator''' configuration&lt;br /&gt;
** '''iDempiere Server''': run or debug the '''iDempiere Server''' configuration&lt;br /&gt;
&lt;br /&gt;
===Maintenance of .iml file and run configurations===&lt;br /&gt;
* We need to update the .iml files and run configurations if there are changes in project modules and/or target platform.&lt;br /&gt;
* To update .iml files, right click on '''idempiere''' project, select '''Resolve Workspace'''. Push the updated .iml files to repository.&lt;br /&gt;
* For Eclipse PDE Partial run configurations, update selection of target modules and run it. Push the updated configurations to repository.&lt;br /&gt;
* For Maven run configurations, get the updated dev.properties and bundles.info from your Eclipse installation (&amp;lt;workspace&amp;gt;/.metadata/.plugins/org.eclipse.pde.core/&amp;lt;launch configuration name&amp;gt;/). For the copy over bundles.info, you need to replace all occurrence of '''&amp;lt;home folder&amp;gt;''' with '''${user.home}'''.&lt;br /&gt;
&lt;br /&gt;
===Working with idempiere-rest module===&lt;br /&gt;
1. Import '''com.trekglobal.idempiere.rest.api''' module&lt;br /&gt;
* Step 1&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 1.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 1]]&lt;br /&gt;
* Step 2&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 2.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 2]]&lt;br /&gt;
* Step 3&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 3.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 3]]&lt;br /&gt;
* Step 4&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 4.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 4]]&lt;br /&gt;
* Step 5&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 5.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 5]]&lt;br /&gt;
* Step 6&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Import com.trekglobal.idempiere.rest.api Step 6.png|800x600px|frameless|Import com.trekglobal.idempiere.rest.api - Step 6]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
2. Configure Imported com.trekglobal.idempiere.rest.api Module&lt;br /&gt;
* Exclude Target Folder&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Exclude Rest API Module Target Folder.png|800x600px|frameless|Exclude com.trekglobal.idempiere.rest.api target folder]]&lt;br /&gt;
* Set Compile Output Path&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api compile output path.png|800x600px|frameless|Compile output path of com.trekglobal.idempiere.rest.api]]&lt;br /&gt;
* Set Eclipse PDE Partial Settings&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api facet output path.png|800x600px|frameless|com.trekglobal.idempiere.rest.api output path for Eclipse PDE Partial facet]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
3. Close and re-open module setting to verify that the module's dependencies have been updated by the Eclipse PDE Partial plugin.&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api Module Dependencies.png|800x600px|frameless|Updated module dependencies of com.trekglobal.idempiere.rest.api ]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
4. Create a duplicate copy of '''iDempiere Server''' run configuration. Change runtime data directory path and select the '''com.trekglobal.idempiere.rest.api''' module&lt;br /&gt;
[[File:Com.trekglobal.idempiere.rest.api Run Configuration.png|800x600px|frameless|Run configuration for com.trekglobal.idempiere.rest.api]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
5. Run/Debug the newly created run configuration to test&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|D]]&lt;br /&gt;
[[Category:New Features w13|D]]&lt;br /&gt;
[[Category:New Features Development]]&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Setting_up_Eclipse&amp;diff=23115</id>
		<title>Setting up Eclipse</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Setting_up_Eclipse&amp;diff=23115"/>
		<updated>2025-05-03T07:08:25Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Eclipse version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Installing_iDempiere|Table of Contents]] |&lt;br /&gt;
[[Download the Code]] |&lt;br /&gt;
Setting up Eclipse |&lt;br /&gt;
[[Importing DB Seed Manually]]&lt;br /&gt;
&amp;amp;rArr;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Materialize and build ==&lt;br /&gt;
&lt;br /&gt;
On the operating system navigate to the folder where you cloned the code, named below as $IDEMPIERE_REPOSITORY (f.e. /home/carlos/sources/idempiere), and run the next command:&lt;br /&gt;
 cd $HOME/sources/idempiere&lt;br /&gt;
 mvn verify&lt;br /&gt;
This command download all libraries on Bundle-ClassPath, build all projects and output binaries to org.idempiere.p2/target/products. If not, verify with mvn -version that maven is using the correct java-version.&lt;br /&gt;
&lt;br /&gt;
== Setup workspace in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
* Open again the eclipse you configured with the workspace pointing to the folder where you cloned the code&lt;br /&gt;
** Following the example here this folder would be '''$HOME/sources/idempiere''' - this is just an example recommendation, not a must, you can use any folder as your workspace&lt;br /&gt;
* Turn off '''Project &amp;gt; Build automatically'''&lt;br /&gt;
* Navigate to '''Window &amp;gt; Preferences &amp;gt; General &amp;gt; Workspace'''&lt;br /&gt;
** set '''Text file encoding''' to '''UTF-8''' (if default is different)&lt;br /&gt;
** set '''New text file line delimiter''' to '''Unix''' (if the default is different)&lt;br /&gt;
* Not required, this is a personal preference, but normally I switch here to Java perspective and choose Working Sets as the Top Level Elements&lt;br /&gt;
**[[User:Hengsin|Hengsin]] ([[User talk:Hengsin|talk]]) : My preference is the Plug-in Development perspective for easy access to plugin and target platform state.&lt;br /&gt;
&lt;br /&gt;
* In '''Java &amp;gt; Installed JREs''', add the  java-17-openjdk JRE if not present and select it as the active JRE:&lt;br /&gt;
** click the '''Add''' button, then&lt;br /&gt;
** select '''Standard VM''', click '''Next'''&lt;br /&gt;
** enter &amp;quot;/usr/lib/jvm/java-17-openjdk-amd64&amp;quot; as JRE Home (or click the '''Directory...''' button to find the JRE/JDK 17 root folder) , click '''Finish'''&lt;br /&gt;
** click the Checkbox next to the new entry to apply the changes.&lt;br /&gt;
* Navigate to '''Window &amp;gt; Preferences &amp;gt; Java &amp;gt; Compiler'''&lt;br /&gt;
** set '''Java &amp;gt; Compiler &amp;gt; Compiler compliance level''' to '''17'''&lt;br /&gt;
&lt;br /&gt;
== Import projects in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
* Navigate to '''File &amp;gt; Import'''&lt;br /&gt;
* Navigate to '''Maven &amp;gt; Existing Maven Projects'''&lt;br /&gt;
* Click '''Next''' and click '''Browse...''' to select the cloned idempiere source folder&lt;br /&gt;
** Following the example above, this folder would be '''$HOME/sources/idempiere'''&lt;br /&gt;
* All projects must appear selected, click '''Finish''' to complete the import&lt;br /&gt;
** At the end all projects are loaded into the workspace&lt;br /&gt;
* Sometimes eclipse creates changes to the workspace, you can discard those changes at this point via right click on the projects and select '''Replace With &amp;gt; HEAD Revision'''&lt;br /&gt;
&lt;br /&gt;
== Set target platform ==&lt;br /&gt;
&lt;br /&gt;
* Now open the '''org.idempiere.p2.targetplatform.target''' file inside the '''org.idempiere.p2.targetplatform''' project&lt;br /&gt;
** This is the default target platform definition with remote url&lt;br /&gt;
** Here eclipse takes some time downloading the required dependencies, you can prepare some Colombian coffee and wait patiently  :)&lt;br /&gt;
* For fast setup of target platform, use '''org.idempiere.p2.targetplatform.mirror.target''' (inside the same project) instead. The downside is this doesn't comes with source code for the target platform contents and you will have to manually set it up if you need to debug into the target platform plugin (which is rare anyway).&lt;br /&gt;
* At '''Target Editor''', click the '''Set as Active Target Platform''' link&lt;br /&gt;
* Wait for Eclipse to finish downloading bundles onto target platform (No waiting for download if using org.idempiere.p2.targetplatform.mirror.target)&lt;br /&gt;
** Click the &amp;quot;Reload&amp;quot; button if some download fail, until there are no red errors on the Locations list&lt;br /&gt;
&lt;br /&gt;
* At the end you should enable back '''Project &amp;gt; Build automatically'''&lt;br /&gt;
* In case there are files with compilation errors you can right click on the iDempiere project and select '''Maven &amp;gt; Update Projects''', then press '''OK'''&lt;br /&gt;
* When everything is good, close the target editor for '''org.idempiere.p2.targetplatform.target'''.  Keeping it open makes Eclipse produce erratic behavior (especially after you restart your Eclipse).&lt;br /&gt;
&lt;br /&gt;
== Eclipse version ==&lt;br /&gt;
As explained in the [[Install_Development_Prerequisites#Install_Eclipse|prerequisites]] the minimum version to run iDempiere is '''Eclipse 2024-03''', and specifically the version '''Eclipse IDE for Enterprise Java and Web Developers'''.&lt;br /&gt;
&lt;br /&gt;
In case you decided to go against the recommendation and use instead '''Eclipse IDE for Java Developers''' you'll find some problems when compiling, to overcome that you must install the '''m2e PDE - Maven Integration for Eclipse Plugin Development''' plugin (check at '''Help &amp;gt; About Eclipse IDE &amp;gt; Installation Details &amp;gt; Installed Software''' tab), you have to install it from https://download.eclipse.org/releases/latest (Help &amp;gt; Install New Software...). This plugin sits inside the '''General Purpose Tools''' category.&lt;br /&gt;
&lt;br /&gt;
== Notes about target platform ==&lt;br /&gt;
* If you want to make changes to the target platform, you might want to install the Target Platform DSL Editor from https://download.eclipse.org/cbi/tpd/3.0.0-SNAPSHOT/ (Help &amp;gt; Install New Software... and enter the URL into the &amp;quot;Work with:&amp;quot; field). This plugin allows you to generate new org.idempiere.p2.targetplatform.target file from org.idempiere.p2.targetplatform.tpd. Note that after you have generated a new org.idempiere.p2.targetplatform.target file, you need to manually copy the maven locations from maven.locations.xml into it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''This How-To is brought to you by [[User:CarlosRuiz|Carlos Ruiz]] from [https://www.bx-service.com/ BX Service GmbH].  Feel free to improve directly or suggest using the Discussion tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Manual|I]]&lt;br /&gt;
[[Category:Installation|E]] &lt;br /&gt;
[[Category:Installation Eclipse]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Installing_iDempiere|Table of Contents]] |&lt;br /&gt;
[[Download the Code]] |&lt;br /&gt;
Setting up Eclipse |&lt;br /&gt;
[[Importing DB Seed Manually]]&lt;br /&gt;
&amp;amp;rArr;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Setting_up_Eclipse&amp;diff=23114</id>
		<title>Setting up Eclipse</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Setting_up_Eclipse&amp;diff=23114"/>
		<updated>2025-05-03T07:04:44Z</updated>

		<summary type="html">&lt;p&gt;Hengsin: /* Set target platform */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Installing_iDempiere|Table of Contents]] |&lt;br /&gt;
[[Download the Code]] |&lt;br /&gt;
Setting up Eclipse |&lt;br /&gt;
[[Importing DB Seed Manually]]&lt;br /&gt;
&amp;amp;rArr;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Materialize and build ==&lt;br /&gt;
&lt;br /&gt;
On the operating system navigate to the folder where you cloned the code, named below as $IDEMPIERE_REPOSITORY (f.e. /home/carlos/sources/idempiere), and run the next command:&lt;br /&gt;
 cd $HOME/sources/idempiere&lt;br /&gt;
 mvn verify&lt;br /&gt;
This command download all libraries on Bundle-ClassPath, build all projects and output binaries to org.idempiere.p2/target/products. If not, verify with mvn -version that maven is using the correct java-version.&lt;br /&gt;
&lt;br /&gt;
== Setup workspace in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
* Open again the eclipse you configured with the workspace pointing to the folder where you cloned the code&lt;br /&gt;
** Following the example here this folder would be '''$HOME/sources/idempiere''' - this is just an example recommendation, not a must, you can use any folder as your workspace&lt;br /&gt;
* Turn off '''Project &amp;gt; Build automatically'''&lt;br /&gt;
* Navigate to '''Window &amp;gt; Preferences &amp;gt; General &amp;gt; Workspace'''&lt;br /&gt;
** set '''Text file encoding''' to '''UTF-8''' (if default is different)&lt;br /&gt;
** set '''New text file line delimiter''' to '''Unix''' (if the default is different)&lt;br /&gt;
* Not required, this is a personal preference, but normally I switch here to Java perspective and choose Working Sets as the Top Level Elements&lt;br /&gt;
**[[User:Hengsin|Hengsin]] ([[User talk:Hengsin|talk]]) : My preference is the Plug-in Development perspective for easy access to plugin and target platform state.&lt;br /&gt;
&lt;br /&gt;
* In '''Java &amp;gt; Installed JREs''', add the  java-17-openjdk JRE if not present and select it as the active JRE:&lt;br /&gt;
** click the '''Add''' button, then&lt;br /&gt;
** select '''Standard VM''', click '''Next'''&lt;br /&gt;
** enter &amp;quot;/usr/lib/jvm/java-17-openjdk-amd64&amp;quot; as JRE Home (or click the '''Directory...''' button to find the JRE/JDK 17 root folder) , click '''Finish'''&lt;br /&gt;
** click the Checkbox next to the new entry to apply the changes.&lt;br /&gt;
* Navigate to '''Window &amp;gt; Preferences &amp;gt; Java &amp;gt; Compiler'''&lt;br /&gt;
** set '''Java &amp;gt; Compiler &amp;gt; Compiler compliance level''' to '''17'''&lt;br /&gt;
&lt;br /&gt;
== Import projects in Eclipse ==&lt;br /&gt;
&lt;br /&gt;
* Navigate to '''File &amp;gt; Import'''&lt;br /&gt;
* Navigate to '''Maven &amp;gt; Existing Maven Projects'''&lt;br /&gt;
* Click '''Next''' and click '''Browse...''' to select the cloned idempiere source folder&lt;br /&gt;
** Following the example above, this folder would be '''$HOME/sources/idempiere'''&lt;br /&gt;
* All projects must appear selected, click '''Finish''' to complete the import&lt;br /&gt;
** At the end all projects are loaded into the workspace&lt;br /&gt;
* Sometimes eclipse creates changes to the workspace, you can discard those changes at this point via right click on the projects and select '''Replace With &amp;gt; HEAD Revision'''&lt;br /&gt;
&lt;br /&gt;
== Set target platform ==&lt;br /&gt;
&lt;br /&gt;
* Now open the '''org.idempiere.p2.targetplatform.target''' file inside the '''org.idempiere.p2.targetplatform''' project&lt;br /&gt;
** This is the default target platform definition with remote url&lt;br /&gt;
** Here eclipse takes some time downloading the required dependencies, you can prepare some Colombian coffee and wait patiently  :)&lt;br /&gt;
* For fast setup of target platform, use '''org.idempiere.p2.targetplatform.mirror.target''' (inside the same project) instead. The downside is this doesn't comes with source code for the target platform contents and you will have to manually set it up if you need to debug into the target platform plugin (which is rare anyway).&lt;br /&gt;
* At '''Target Editor''', click the '''Set as Active Target Platform''' link&lt;br /&gt;
* Wait for Eclipse to finish downloading bundles onto target platform (No waiting for download if using org.idempiere.p2.targetplatform.mirror.target)&lt;br /&gt;
** Click the &amp;quot;Reload&amp;quot; button if some download fail, until there are no red errors on the Locations list&lt;br /&gt;
&lt;br /&gt;
* At the end you should enable back '''Project &amp;gt; Build automatically'''&lt;br /&gt;
* In case there are files with compilation errors you can right click on the iDempiere project and select '''Maven &amp;gt; Update Projects''', then press '''OK'''&lt;br /&gt;
* When everything is good, close the target editor for '''org.idempiere.p2.targetplatform.target'''.  Keeping it open makes Eclipse produce erratic behavior (especially after you restart your Eclipse).&lt;br /&gt;
&lt;br /&gt;
== Eclipse version ==&lt;br /&gt;
As explained in the [[Install_Development_Prerequisites#Install_Eclipse|prerequisites]] the minimum version to run iDempiere is Eclipse 2024-03, and specifically the version &amp;quot;Eclipse IDE for Enterprise Java and Web Developers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In case you decided to go against the recommendation and use instead &amp;quot;Eclipse IDE for Java Developers&amp;quot; you'll find some problems when compiling, to overcome that you must install the &amp;quot;m2e PDE - Maven Integration for Eclipse Plugin Development&amp;quot; plugin (check at Help &amp;gt; About Eclipse IDE &amp;gt; Installation Details &amp;gt; Installed Software tab), you have to install it from https://download.eclipse.org/releases/latest (Help &amp;gt; Install New Software...). This plugin sits inside the &amp;quot;General Purpose Tools&amp;quot; category.&lt;br /&gt;
&lt;br /&gt;
== Notes about target platform ==&lt;br /&gt;
* If you want to make changes to the target platform, you might want to install the Target Platform DSL Editor from https://download.eclipse.org/cbi/tpd/3.0.0-SNAPSHOT/ (Help &amp;gt; Install New Software... and enter the URL into the &amp;quot;Work with:&amp;quot; field). This plugin allows you to generate new org.idempiere.p2.targetplatform.target file from org.idempiere.p2.targetplatform.tpd. Note that after you have generated a new org.idempiere.p2.targetplatform.target file, you need to manually copy the maven locations from maven.locations.xml into it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''This How-To is brought to you by [[User:CarlosRuiz|Carlos Ruiz]] from [https://www.bx-service.com/ BX Service GmbH].  Feel free to improve directly or suggest using the Discussion tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Manual|I]]&lt;br /&gt;
[[Category:Installation|E]] &lt;br /&gt;
[[Category:Installation Eclipse]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Installing_iDempiere|Table of Contents]] |&lt;br /&gt;
[[Download the Code]] |&lt;br /&gt;
Setting up Eclipse |&lt;br /&gt;
[[Importing DB Seed Manually]]&lt;br /&gt;
&amp;amp;rArr;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hengsin</name></author>
	</entry>
</feed>