> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# QAD Adaptive ERP

> Client-mode REST API connectors for QAD Adaptive ERP on the QAD Enterprise Platform: OAuth 2 token, read items, sites, inventory, work orders, BOMs, routings, purchase and sales orders, shippers and quality certifications, and call the Business Document and Business Service REST APIs of your environment

Technical Preview

## Overview

[QAD Adaptive ERP](https://www.qad.com/) (QAD Adaptive Applications) runs items, inventory, production, purchasing, sales and quality for many manufacturers. It is built on the **QAD Enterprise Platform (QEP)**, which serves REST APIs under the web application context, usually `/clouderp`. Connecting QAD to the broker lets the shop floor read work orders, on-hand inventory, BOMs and routings when a line needs them, check supplier and item certifications, and report production through the business services your environment exposes.

QAD has no single public API catalog. The platform has three kinds of REST API:

* **Business components** (`api/qracore/be/<URI>`): read a record by its domain and key fields. QAD names each component with a URI such as `urn:be:com.qad.base.item.IItem`.
* **Business documents**: complete documents with Query REST APIs (filtering, sorting, paging). Each environment documents its own under **Business Document API Documentation** (Swagger).
* **Business services**: non-CRUD methods exposed as REST with GET (query parameters) or POST (body). Each environment lists them under **Business Service API Documentation**.

The template has one client-mode connector, `QadAdaptiveErp`, with 36 events under `erp/qad/`. Each event publishes the reply on `<topic>/response`. 4 events write (business document submits and business service POSTs). The business component events only read, and there is no DELETE event.

| Event | Topic | Method | Use |
| - | - | - | - |
| `GetToken` | `erp/qad/auth/token` | POST | Get an access token (OAuth 2 password grant with your Client ID) (fields: `form`) |
| `RefreshToken` | `erp/qad/auth/token/refresh` | POST | Get a new access token with the refresh token (fields: `form`) |
| `GetEsignatureToken` | `erp/qad/auth/esignature-token` | POST | Get an e-signature token for the `*Esig` writes (fields: `authorization`, `body`) |
| `GetApps` | `erp/qad/platform/apps/get` | GET | Apps installed in the environment, for example query appURI=urn:app:com.qad.base (fields: `authorization`, `query`) |
| `ListWorkspaces` | `erp/qad/platform/workspaces/list` | GET | Domains / workspaces the API user can open (reply key qad-qracore: key, name, description, default) (path from a third-party client, not in QAD's guides) (fields: `authorization`) |
| `GetBusinessComponent` | `erp/qad/be/get` | GET | Read any business component by URI (`urn:be:<name>`) (fields: `authorization`, `beUri`, `query`) |
| `GetSite` | `erp/qad/sites/get` | GET | Read a site (`urn:be:com.qad.base.item.ISite`) (fields: `authorization`, `query`) |
| `GetItem` | `erp/qad/items/get` | GET | Read an item (item master) (`urn:be:com.qad.base.item.IItem`) (fields: `authorization`, `query`) |
| `GetItemSite` | `erp/qad/item-sites/get` | GET | Read item-site planning / inventory data (`urn:be:com.qad.base.item.IItemSite`) (fields: `authorization`, `query`) |
| `GetInventoryDetail` | `erp/qad/inventory/detail/get` | GET | Read inventory detail (on hand by site / location / lot / reference) (`urn:be:com.qad.inventory.inv.IInventoryDetail`) (fields: `authorization`, `query`) |
| `GetLocation` | `erp/qad/inventory/locations/get` | GET | Read a location master record (`urn:be:com.qad.inventory.inv.ILocationMaster`) (fields: `authorization`, `query`) |
| `GetLot` | `erp/qad/inventory/lots/get` | GET | Read a lot master record (`urn:be:com.qad.inventory.inv.ILotMaster`) (fields: `authorization`, `query`) |
| `GetInventoryTransactionHistory` | `erp/qad/inventory/transactions/history/get` | GET | Read inventory transaction history (`urn:be:com.qad.transhist.transaction.IInventoryTransHist`) (fields: `authorization`, `query`) |
| `GetWorkOrder` | `erp/qad/production/work-orders/get` | GET | Read a work order (header, status, quantities) (`urn:be:com.qad.pushproduction.workorder.IWorkOrderMaster`) (fields: `authorization`, `query`) |
| `GetWorkOrderRouting` | `erp/qad/production/work-order-routings/get` | GET | Read work order routing operations (`urn:be:com.qad.pushproduction.workorder.IWorkOrderRouting`) (fields: `authorization`, `query`) |
| `GetWorkOrderDetail` | `erp/qad/production/work-order-details/get` | GET | Read work order component requirements (`urn:be:com.qad.pushproduction.workorder.IWorkOrderDetail`) (fields: `authorization`, `query`) |
| `GetOperationHistory` | `erp/qad/production/operation-history/get` | GET | Read operation transaction history (labor, run, scrap reporting) (`urn:be:com.qad.transhist.transaction.IOperationTransHist`) (fields: `authorization`, `query`) |
| `GetBom` | `erp/qad/engineering/boms/get` | GET | Read a product structure (BOM) (`urn:be:com.qad.engineering.productstructure.IBom`) (fields: `authorization`, `query`) |
| `GetRoutingOperation` | `erp/qad/engineering/routing-operations/get` | GET | Read routing operations (`urn:be:com.qad.engineering.routing.IRoutingOperation`) (fields: `authorization`, `query`) |
| `GetProductionLine` | `erp/qad/engineering/production-lines/get` | GET | Read a production line (`urn:be:com.qad.engineering.setup.IProductionLine`) (fields: `authorization`, `query`) |
| `GetPurchaseOrder` | `erp/qad/purchasing/purchase-orders/get` | GET | Read a purchase order (`urn:be:com.qad.purchasing.purchaseorders.IPurchaseOrder`) (fields: `authorization`, `query`) |
| `GetPurchaseReceiptHistory` | `erp/qad/purchasing/receipts/history/get` | GET | Read purchase receipt history (`urn:be:com.qad.purchasing.receipts.IPurchaseReceiptHistory`) (fields: `authorization`, `query`) |
| `GetSalesOrder` | `erp/qad/sales/sales-orders/get` | GET | Read a sales order (`urn:be:com.qad.sales.salesorder.ISalesOrder`) (fields: `authorization`, `query`) |
| `GetShipper` | `erp/qad/logistics/shippers/get` | GET | Read a shipper header (`urn:be:com.qad.logistics.shipping.IShipperHeader`) (fields: `authorization`, `query`) |
| `GetSupplier` | `erp/qad/suppliers/get` | GET | Read a supplier (`urn:be:com.qad.base.supplier.ISupplier`) (fields: `authorization`, `query`) |
| `GetSupplierCertification` | `erp/qad/quality/supplier-certifications/get` | GET | Read a supplier certification (`urn:be:com.qad.base.supplier.ISupplierCertification`) (fields: `authorization`, `query`) |
| `GetItemCertification` | `erp/qad/quality/item-certifications/get` | GET | Read an item certification (`urn:be:com.qad.base.supplier.IItemCertification`) (fields: `authorization`, `query`) |
| `GetReasonCode` | `erp/qad/codes/reason-codes/get` | GET | Read a reason code (downtime, scrap, rework, ...) (`urn:be:com.qad.base.codes.IReasonCode`) (fields: `authorization`, `query`) |
| `GetInstalledBaseItem` | `erp/qad/service/installed-base/get` | GET | Read an installed base item (equipment at a customer) (`urn:be:com.qad.service.installedbase.IInstalledBaseItem`) (fields: `authorization`, `query`) |
| `BrowseQuery` | `erp/qad/browse/query` | GET | Multi-record read through a browse (path from a third-party client, not in QAD's guides) (fields: `authorization`, `browseId`, `query`) |
| `BusinessDocumentQuery` | `erp/qad/business-document/query` | GET | Query REST API of a business document (filtering, sorting, paging, partial data) (fields: `authorization`, `path`, `query`) |
| `BusinessDocumentSubmit` | `erp/qad/business-document/submit` | POST | **Write.** Send a complete business document (fields: `authorization`, `body`, `path`) |
| `BusinessDocumentSubmitEsig` | `erp/qad/business-document/submit-esig` | POST | **Write.** Same as BusinessDocumentSubmit with X-QAD-Esig-Token from GetEsignatureToken, for components with an active e-signature configuration (fields: `authorization`, `body`, `esig_token`, `path`) |
| `BusinessServiceGet` | `erp/qad/business-service/get` | GET | Call a business service (non-CRUD method exposed as REST) (fields: `authorization`, `path`, `query`) |
| `BusinessServicePost` | `erp/qad/business-service/post` | POST | **Write (may write).** Call a business service whose HTTP Method Type is POST, for example a production or inventory transaction service (fields: `authorization`, `body`, `path`) |
| `BusinessServicePostEsig` | `erp/qad/business-service/post-esig` | POST | **Write (may write).** Same as BusinessServicePost with X-QAD-Esig-Token (fields: `authorization`, `body`, `esig_token`, `path`) |

## Prerequisites

* A QAD Adaptive ERP environment (QAD cloud or on-premises) reachable over HTTPS from the broker. Note its host and web application context: `/clouderp` on QAD cloud; some on-premises installs use `/qad-central`.
* A **Client ID** for the broker, generated in **Client IDs** (Adaptive UX) or **Client ID Maintenance** (36.3.12). Use one Client ID per integration.
* An API user who can sign in with a password (not single sign-on only), with the **webui\_user** role, **Read** on each business component or browse you call, and **Execute** on each business service (Role Permissions > Not In Menu > Integration > External Business Services).
* The domain code you work in, and the key field names of each component (Business Components > Fields, or the component's Swagger).
* For business documents and business services: the REST path and body schema from **Business Document API Documentation** or **Business Service API Documentation** in your environment.

## Connection and security

QAD's API authentication is OAuth 2 (password grant) or HTTP Basic. QAD recommends OAuth 2. Store the credentials as broker secrets and build the token form with `GET SECRET`:

| Secret | Value |
| - | - |
| `QAD_CLIENT_ID` | The Client ID generated for Coreflux |
| `QAD_USERNAME` | The API user |
| `QAD_PASSWORD` | The API user's password, URL-encoded (it goes into a form body) |

`GetToken` posts `client_id=<Client ID>&grant_type=password&username=<user>&password=<password>` as `application/x-www-form-urlencoded` to `/clouderp/oauth/token`. No client secret is sent. The reply carries `access_token` and `refresh_token`. Send `"authorization": "Bearer <access_token>"` on every other event. A Basic value (`Basic <base64 user:password>`) also works in the same field, but QAD discourages it.

When a component has an active **e-signature** configuration, a write without a token fails with `APIModeRequiredException` or `ESignatureRequiredException`. Call `GetEsignatureToken` with `{"password", "reasonCode", "remarks"}` and use the `*Esig` events, which send the token in the `X-QAD-Esig-Token` header.

If your environment uses `/qad-central` (or another context), replace `/clouderp/` in every endpoint before you deploy, and change `BASE_ADDRESS` to your host.

## Payload

Publish JSON on the event's source topic. The broker fills the `{value.json.<field>}` placeholders:

* `authorization`: on every event except `GetToken` and `RefreshToken`.
* `query`: URL-encoded query string, for example `domainCode=<domain>&itemCode=<item>`. Use `""` for none.
* `form`: the URL-encoded token form on `GetToken` and `RefreshToken`.
* `body`: JSON on POST events.
* `path`: the REST path from the API documentation screen (starts with `/clouderp/api/...`) on the business document and business service events.
* `beUri`: the business component URI on `GetBusinessComponent`.
* `browseId`: the browse URI (`urn:browse:<type>:<id>`) on `BrowseQuery`.
* `esig_token`: the e-signature token on the `*Esig` events.

```json theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
{"authorization": "Bearer <token>", "query": "domainCode=<domain>&itemCode=<item>"}
```

Values are not URL-encoded by the connector, so encode `query` and `form` before you publish.

## Pacing and errors

QAD publishes no rate limit or token lifetime. Read `expires_in` from the token reply and refresh before it runs out. Business document queries support paging; ask for small pages from the shop floor.

Errors come back with the HTTP status and QAD's envelope:

```json theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
{"submitResult": {"success": false, "errors": [{"severity": 1, "code": "401", "message": "Unauthorized. "}]}, "data": null}
```

A bad or expired bearer returns 401 with `{"error": "invalid_token"}`. A token request with an unknown Client ID returns 401 `The client is not authenticated.`

## Example actions

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Example actions for the QadAdaptiveErp route (docs page). Not part of the route template.
# Secrets: QAD_CLIENT_ID (a Client ID generated in Client IDs / Client ID Maintenance 36.3.12 for this integration),
#   QAD_USERNAME and QAD_PASSWORD (an API user with the webui_user role and Read on the components used; store the
#   password URL-encoded because it goes into a form body). QAD does not publish the token lifetime, so the token
#   action runs every 10 minutes; lengthen it to just under the expires_in your environment returns.
#   The bearer value is kept on internal/qad/authorization. Replace the <...> placeholders (domain, key fields, path).

DEFINE ACTION QadGetToken
ON EVERY 10 MINUTES DO
    SET "cid" WITH GET SECRET "QAD_CLIENT_ID"
    SET "user" WITH GET SECRET "QAD_USERNAME"
    SET "pwd" WITH GET SECRET "QAD_PASSWORD"
    SET "form" WITH "client_id=" + {cid} + "&grant_type=password&username=" + {user} + "&password=" + {pwd}
    PUBLISH TOPIC "erp/qad/auth/token" WITH { "form": {form} }

DEFINE ACTION QadKeepToken
ON TOPIC "erp/qad/auth/token/response" DO
    SET "tok" WITH (GET JSON "access_token" IN PAYLOAD AS STRING)
    KEEP TOPIC "internal/qad/authorization" WITH "Bearer " + {tok}

DEFINE ACTION QadItemOnRequest
ON TOPIC "plant/line1/item/request" DO
    SET "auth" WITH GET TOPIC "internal/qad/authorization" AS STRING
    SET "item" WITH PAYLOAD AS STRING
    SET "q" WITH "domainCode=<domain>&itemCode=" + {item}
    PUBLISH TOPIC "erp/qad/items/get" WITH { "authorization": {auth}, "query": {q} }

DEFINE ACTION QadWorkOrderEvery5Minutes
ON EVERY 5 MINUTES DO
    SET "auth" WITH GET TOPIC "internal/qad/authorization" AS STRING
    PUBLISH TOPIC "erp/qad/production/work-orders/get" WITH { "authorization": {auth}, "query": "domainCode=<domain>&<work order key field>=<value>" }

DEFINE ACTION QadReportProductionFromLine
ON TOPIC "plant/line1/counter/good" DO
    SET "auth" WITH GET TOPIC "internal/qad/authorization" AS STRING
    SET "qty" WITH PAYLOAD AS STRING
    PUBLISH TOPIC "erp/qad/business-service/post" WITH { "authorization": {auth}, "path": "<REST URL Path of your production reporting business service>", "body": { "domainCode": "<domain>", "quantity": {qty} } }
```

## Connector template

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Coreflux REST_API template — QAD Adaptive ERP (QAD Adaptive Applications on the QAD Enterprise Platform, cloud or
#   on-premises) for plants: OAuth 2 token (password grant) from the platform, read business components (sites, items,
#   item-sites, inventory detail, locations, lots, work orders with routing and component lines, BOMs, routings,
#   production lines, purchase orders, receipts, sales orders, shippers, inventory and operation transaction history,
#   supplier / item certifications, reason codes, installed base), run browse queries, and call the Business Document
#   and Business Service REST APIs your environment publishes (with an e-signature token when a component needs it).
# Added on request (not in Hugo's 200-app catalog), erp. Sources fetched 2026-10-09 from QAD's public Document Library
#   (connect.qad.com/web/documentlibrary, no login): QAD Enterprise Platform Developer Guide 2020 (QEP_DG_v2020: URI
#   formats, api/qracore/be/<business component URI>?domainCode=..&<key>=.. reads, api/qracore/apps, API auth = OAuth2
#   and HTTP Basic), QAD Security Administration Guides 2024 QAE + QAD Adaptive 2026 (API Authentication: POST
#   /clouderp/oauth/token password grant with client_id, Client IDs), 2020 QAE (business component URIs, from its
#   field security appendix) and the AI_Docs Security Admin Guide (e-signature API mode: POST /api/qracore/esignature/token -> X-QAD-Esig-Token header, submitResult error envelope),
#   QAD Online Help Foundation (Business Document / Business Service API Documentation screens: per-environment
#   Swagger / OpenAPI, Business Service HTTP method GET or POST with QUERY or BODY parameters), QAD Adaptive release
#   notes 2025 / 2026 and the Business Events User Guide. Cached in openapi-cache/qad-adaptive-erp/.
#   documentlibrary.qad.com (online help + Swagger guides) sits behind a Cloudflare Turnstile challenge and the real
#   per-document Swagger lives inside each QAD environment (Development > Business Document API Documentation), so
#   there is no public OpenAPI. Business document / business service paths are payload fields copied from that screen.
#   The browse query path api/qracore/browses?browseId=..&filters=..&fields=..&pageSize=.. and api/webshell/workspaces
#   are NOT in QAD's public guides: they come from a public QAD client (github.com/frantm05/QMA) and are marked as such.
#  
# Docs: https://docs.coreflux.org/latest/lot-language/routes/rest-api-apps/qad-adaptive-erp
#
# One route, topic prefix erp/qad/:
#   QadAdaptiveErp  https://qad.example.com  (your QAD Adaptive host). Every path starts with the web app context
#   /clouderp (QAD's documented example, used by QAD cloud). Some on-premises installs serve the same app as
#   /qad-central (QAD Implementation Guide examples): replace "/clouderp/" with "/qad-central/" in every endpoint then.
# Auth (QAD Security Administration Guide, "API Authentication"): OAuth 2 or HTTP Basic.
#   GetToken: POST /clouderp/oauth/token, application/x-www-form-urlencoded
#     client_id=<Client ID>&grant_type=password&username=<user>&password=<password>  (no client secret in the request)
#   -> access_token (+ refresh_token). Send "authorization":"Bearer <access_token>" on every other event. HTTP Basic
#   ("Basic <base64 user:password>") also works in the same field but QAD discourages it (re-authenticates every call).
#   Client IDs are generated in Client IDs (Adaptive UX) / Client ID Maintenance 36.3.12 — use one per integration.
#   The API user needs the webui_user role plus Read on each business component / browse and Execute on each business
#   service (Role Permissions > Not In Menu > Integration > External Business Services).
# E-signature: if a component has an active e-signature configuration, writes fail with APIModeRequiredException /
#   ESignatureRequiredException. Get a token with GetEsignatureToken {"password","reasonCode","remarks"} and use the
#   *Esig write events, which add header X-QAD-Esig-Token.
# Scope: most components are domain-scoped; pass domainCode (and site / entity where the component is site- or
#   entity-scoped) plus the key fields in "query", for example domainCode=<domain>&itemCode=<item> (the DG shows domainCode + key-field
#   query parameters; check each component's key field names in Business Components > Fields or its Swagger).
# Errors: HTTP status + {"submitResult":{"success":false,"errors":[{"severity","code","message","messageType",...}]},
#   "data":null}. 401 without or with a bad token (Spring OAuth "invalid_token" for a bad bearer).
# Writes (# WRITE): business documents and business services only. QAD's public guides do not document create / update
#   / delete verbs on api/qracore/be, so this template does not write through it, and has no DELETE event.
# Not packaged: QXtend (SOAP), Business Events (published to an event streaming platform, not HTTP callbacks), QAD
#   Integration Platform (Boomi) flows, analytics / composer admin APIs, Java extension framework.
#
# Payload fields (JSON on the source topic): authorization on every event except GetToken / RefreshToken;
#   query = URL-encoded query string ("" for none); body = JSON string on POST; path = the REST path from the Business
#   Document / Business Service API Documentation screen (starts /clouderp/api/...); beUri on GetBusinessComponent;
#   browseId on BrowseQuery; esig_token on the *Esig events; form on the token events.
#     GetToken               {"form":"client_id=<client id>&grant_type=password&username=<user>&password=<password>"}
#     GetItem                {"authorization":"Bearer <token>","query":"domainCode=<domain>&itemCode=<item>"}
#     GetWorkOrder           {"authorization":"Bearer <token>","query":"domainCode=<domain>&<key field>=<value>"}  (key field names: see the component in Business Components > Fields or its Swagger)
#     BrowseQuery            {"authorization":"Bearer <token>","browseId":"urn:browse:mfg:<browse>","query":"filters=..&fields=..&pageSize=100"}
#     BusinessServicePost    {"authorization":"Bearer <token>","path":"/clouderp/api/<from the screen>","body":"{...}"}

DEFINE ROUTE QadAdaptiveErp WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://qad.example.com"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '120'
        WITH DEFAULT_CONTENT_TYPE "application/json"
        # Replace with your QAD Adaptive host (https://<host>[:port]). Paths start /clouderp (or /qad-central on some on-premises installs).
    # OAuth 2 token endpoint (Security Administration Guide, API Authentication): Password grant: form client_id=<Client ID>&grant_type=password&username=..&password=.. (client secret not sent). Returns access_token, refresh_token, expires_in.
    ADD EVENT GetToken
        WITH SOURCE_TOPIC "erp/qad/auth/token"
        WITH DESTINATION_TOPIC "erp/qad/auth/token/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/clouderp/oauth/token"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Content-Type" "application/x-www-form-urlencoded"
        WITH BODY "{value.json.form}"
    # OAuth 2 token endpoint, refresh_token grant (RFC 6749 section 6; the guide says the password flow issues access and refresh tokens): form client_id=<Client ID>&grant_type=refresh_token&refresh_token=<refresh_token>.
    ADD EVENT RefreshToken
        WITH SOURCE_TOPIC "erp/qad/auth/token/refresh"
        WITH DESTINATION_TOPIC "erp/qad/auth/token/refresh/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/clouderp/oauth/token"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Content-Type" "application/x-www-form-urlencoded"
        WITH BODY "{value.json.form}"
    # E-signature API mode (Security Administration Guide, Electronic Signatures): body {"password":..,"reasonCode":..,"remarks":..} for the current user. Returns a base64 token for header X-QAD-Esig-Token on the *Esig writes.
    ADD EVENT GetEsignatureToken
        WITH SOURCE_TOPIC "erp/qad/auth/esignature-token"
        WITH DESTINATION_TOPIC "erp/qad/auth/esignature-token/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/clouderp/api/qracore/esignature/token"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    # Platform apps (QEP Developer Guide 2020: api/qracore/apps?appURI={appURI}): Apps installed in the environment, for example query appURI=urn:app:com.qad.base. Good connectivity / token check.
    ADD EVENT GetApps
        WITH SOURCE_TOPIC "erp/qad/platform/apps/get"
        WITH DESTINATION_TOPIC "erp/qad/platform/apps/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/apps?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Web shell workspaces (NOT in QAD's public guides; observed in public QAD client github.com/frantm05/QMA): Domains / workspaces the API user can open (reply key qad-qracore: key, name, description, default). Gives the domainCode values.
    ADD EVENT ListWorkspaces
        WITH SOURCE_TOPIC "erp/qad/platform/workspaces/list"
        WITH DESTINATION_TOPIC "erp/qad/platform/workspaces/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/webshell/workspaces"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Any business component (QEP Developer Guide 2020): GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). beUri: urn:be:<name>, for example urn:be:com.qad.base.item.IItem; query: domainCode + key fields.
    ADD EVENT GetBusinessComponent
        WITH SOURCE_TOPIC "erp/qad/be/get"
        WITH DESTINATION_TOPIC "erp/qad/be/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/{value.json.beUri}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ISite (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a site. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetSite
        WITH SOURCE_TOPIC "erp/qad/sites/get"
        WITH DESTINATION_TOPIC "erp/qad/sites/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.item.ISite?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IItem (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read an item (item master). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetItem
        WITH SOURCE_TOPIC "erp/qad/items/get"
        WITH DESTINATION_TOPIC "erp/qad/items/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.item.IItem?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IItemSite (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read item-site planning / inventory data. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetItemSite
        WITH SOURCE_TOPIC "erp/qad/item-sites/get"
        WITH DESTINATION_TOPIC "erp/qad/item-sites/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.item.IItemSite?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IInventoryDetail (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read inventory detail (on hand by site / location / lot / reference). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetInventoryDetail
        WITH SOURCE_TOPIC "erp/qad/inventory/detail/get"
        WITH DESTINATION_TOPIC "erp/qad/inventory/detail/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.inventory.inv.IInventoryDetail?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ILocationMaster (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a location master record. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetLocation
        WITH SOURCE_TOPIC "erp/qad/inventory/locations/get"
        WITH DESTINATION_TOPIC "erp/qad/inventory/locations/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.inventory.inv.ILocationMaster?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ILotMaster (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a lot master record. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetLot
        WITH SOURCE_TOPIC "erp/qad/inventory/lots/get"
        WITH DESTINATION_TOPIC "erp/qad/inventory/lots/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.inventory.inv.ILotMaster?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IInventoryTransHist (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read inventory transaction history. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetInventoryTransactionHistory
        WITH SOURCE_TOPIC "erp/qad/inventory/transactions/history/get"
        WITH DESTINATION_TOPIC "erp/qad/inventory/transactions/history/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.transhist.transaction.IInventoryTransHist?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IWorkOrderMaster (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a work order (header, status, quantities). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetWorkOrder
        WITH SOURCE_TOPIC "erp/qad/production/work-orders/get"
        WITH DESTINATION_TOPIC "erp/qad/production/work-orders/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.pushproduction.workorder.IWorkOrderMaster?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IWorkOrderRouting (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read work order routing operations. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetWorkOrderRouting
        WITH SOURCE_TOPIC "erp/qad/production/work-order-routings/get"
        WITH DESTINATION_TOPIC "erp/qad/production/work-order-routings/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.pushproduction.workorder.IWorkOrderRouting?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IWorkOrderDetail (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read work order component requirements. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetWorkOrderDetail
        WITH SOURCE_TOPIC "erp/qad/production/work-order-details/get"
        WITH DESTINATION_TOPIC "erp/qad/production/work-order-details/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.pushproduction.workorder.IWorkOrderDetail?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IOperationTransHist (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read operation transaction history (labor, run, scrap reporting). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetOperationHistory
        WITH SOURCE_TOPIC "erp/qad/production/operation-history/get"
        WITH DESTINATION_TOPIC "erp/qad/production/operation-history/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.transhist.transaction.IOperationTransHist?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IBom (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a product structure (BOM). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetBom
        WITH SOURCE_TOPIC "erp/qad/engineering/boms/get"
        WITH DESTINATION_TOPIC "erp/qad/engineering/boms/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.engineering.productstructure.IBom?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IRoutingOperation (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read routing operations. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetRoutingOperation
        WITH SOURCE_TOPIC "erp/qad/engineering/routing-operations/get"
        WITH DESTINATION_TOPIC "erp/qad/engineering/routing-operations/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.engineering.routing.IRoutingOperation?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IProductionLine (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a production line. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetProductionLine
        WITH SOURCE_TOPIC "erp/qad/engineering/production-lines/get"
        WITH DESTINATION_TOPIC "erp/qad/engineering/production-lines/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.engineering.setup.IProductionLine?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IPurchaseOrder (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a purchase order. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetPurchaseOrder
        WITH SOURCE_TOPIC "erp/qad/purchasing/purchase-orders/get"
        WITH DESTINATION_TOPIC "erp/qad/purchasing/purchase-orders/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.purchasing.purchaseorders.IPurchaseOrder?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IPurchaseReceiptHistory (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read purchase receipt history. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetPurchaseReceiptHistory
        WITH SOURCE_TOPIC "erp/qad/purchasing/receipts/history/get"
        WITH DESTINATION_TOPIC "erp/qad/purchasing/receipts/history/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.purchasing.receipts.IPurchaseReceiptHistory?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ISalesOrder (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a sales order. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetSalesOrder
        WITH SOURCE_TOPIC "erp/qad/sales/sales-orders/get"
        WITH DESTINATION_TOPIC "erp/qad/sales/sales-orders/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.sales.salesorder.ISalesOrder?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IShipperHeader (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a shipper header. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetShipper
        WITH SOURCE_TOPIC "erp/qad/logistics/shippers/get"
        WITH DESTINATION_TOPIC "erp/qad/logistics/shippers/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.logistics.shipping.IShipperHeader?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ISupplier (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a supplier. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetSupplier
        WITH SOURCE_TOPIC "erp/qad/suppliers/get"
        WITH DESTINATION_TOPIC "erp/qad/suppliers/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.supplier.ISupplier?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component ISupplierCertification (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a supplier certification. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetSupplierCertification
        WITH SOURCE_TOPIC "erp/qad/quality/supplier-certifications/get"
        WITH DESTINATION_TOPIC "erp/qad/quality/supplier-certifications/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.supplier.ISupplierCertification?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IItemCertification (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read an item certification. GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetItemCertification
        WITH SOURCE_TOPIC "erp/qad/quality/item-certifications/get"
        WITH DESTINATION_TOPIC "erp/qad/quality/item-certifications/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.supplier.IItemCertification?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IReasonCode (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read a reason code (downtime, scrap, rework, ...). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetReasonCode
        WITH SOURCE_TOPIC "erp/qad/codes/reason-codes/get"
        WITH DESTINATION_TOPIC "erp/qad/codes/reason-codes/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.base.codes.IReasonCode?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business component IInstalledBaseItem (URI from QAD Security Administration Guide 2020 QAE (field security appendix)): Read an installed base item (equipment at a customer). GET QEP Developer Guide 2020: api/qracore/be/<business component URI>?domainCode=..&<key>=.. (doHttpGet examples). query: domainCode + key fields (URL-encoded); reply data holds the record(s).
    ADD EVENT GetInstalledBaseItem
        WITH SOURCE_TOPIC "erp/qad/service/installed-base/get"
        WITH DESTINATION_TOPIC "erp/qad/service/installed-base/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/be/urn:be:com.qad.service.installedbase.IInstalledBaseItem?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Browse query (browse URIs urn:browse:<type>:<id> are in the QEP Developer Guide; this REST path is NOT in QAD's public guides, observed in public QAD client github.com/frantm05/QMA): Multi-record read through a browse. query: filters=<table.field> EQ '<value>' (URL-encoded), fields=<table.field,...>, pageSize=<n>. Reply data is the row list.
    ADD EVENT BrowseQuery
        WITH SOURCE_TOPIC "erp/qad/browse/query"
        WITH DESTINATION_TOPIC "erp/qad/browse/query/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/clouderp/api/qracore/browses?browseId={value.json.browseId}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # Business Document API (Online Help Foundation: Business Document API Documentation; per-environment Swagger / OpenAPI): Query REST API of a business document (filtering, sorting, paging, partial data). path = API URL from the Business Document API Documentation screen.
    ADD EVENT BusinessDocumentQuery
        WITH SOURCE_TOPIC "erp/qad/business-document/query"
        WITH DESTINATION_TOPIC "erp/qad/business-document/query/response"
        WITH METHOD "GET"
        WITH ENDPOINT "{value.json.path}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # WRITE Business Document API (Online Help Foundation; inbound integration of a whole document, e.g. sales order header + lines): WRITE: send a complete business document. Check the method and body schema in your environment's Swagger before use.
    ADD EVENT BusinessDocumentSubmit
        WITH SOURCE_TOPIC "erp/qad/business-document/submit"
        WITH DESTINATION_TOPIC "erp/qad/business-document/submit/response"
        WITH METHOD "POST"
        WITH ENDPOINT "{value.json.path}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    # WRITE Business Document API + e-signature API mode (Security Administration Guide): WRITE: same as BusinessDocumentSubmit with X-QAD-Esig-Token from GetEsignatureToken, for components with an active e-signature configuration.
    ADD EVENT BusinessDocumentSubmitEsig
        WITH SOURCE_TOPIC "erp/qad/business-document/submit-esig"
        WITH DESTINATION_TOPIC "erp/qad/business-document/submit-esig/response"
        WITH METHOD "POST"
        WITH ENDPOINT "{value.json.path}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
            ADD "Content-Type" "application/json"
            ADD "X-QAD-Esig-Token" "{value.json.esig_token}"
        WITH BODY "{value.json.body}"
    # Business Service API, HTTP method GET + QUERY parameters (Online Help Foundation: Business Services panel): Call a business service (non-CRUD method exposed as REST) whose HTTP Method Type is GET. path = REST URL Path from the Business Service API Documentation screen.
    ADD EVENT BusinessServiceGet
        WITH SOURCE_TOPIC "erp/qad/business-service/get"
        WITH DESTINATION_TOPIC "erp/qad/business-service/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "{value.json.path}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
    # WRITE Business Service API, HTTP method POST + BODY parameters (Online Help Foundation: Business Services panel): WRITE (may write): call a business service whose HTTP Method Type is POST, for example a production or inventory transaction service.
    ADD EVENT BusinessServicePost
        WITH SOURCE_TOPIC "erp/qad/business-service/post"
        WITH DESTINATION_TOPIC "erp/qad/business-service/post/response"
        WITH METHOD "POST"
        WITH ENDPOINT "{value.json.path}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    # WRITE Business Service API + e-signature API mode (Security Administration Guide): WRITE (may write): same as BusinessServicePost with X-QAD-Esig-Token.
    ADD EVENT BusinessServicePostEsig
        WITH SOURCE_TOPIC "erp/qad/business-service/post-esig"
        WITH DESTINATION_TOPIC "erp/qad/business-service/post-esig/response"
        WITH METHOD "POST"
        WITH ENDPOINT "{value.json.path}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Authorization" "{value.json.authorization}"
            ADD "Content-Type" "application/json"
            ADD "X-QAD-Esig-Token" "{value.json.esig_token}"
        WITH BODY "{value.json.body}"
```

## Not packaged

* Create, update or delete through `api/qracore/be` (not in QAD's public guides), and any DELETE event.
* QXtend (SOAP) inbound and outbound.
* Business Events: QAD publishes them to an event streaming platform through the Integration Platform, not to HTTP callbacks, so there is no receiver connector.
* QAD Integration Platform flows, analytics and composer admin APIs, and the Java extension framework.
* Fixed events for single business documents or business services: their paths and schemas differ per environment, so use the generic events with the path from your API documentation screen.

## Testing

Static checks 252/252 (structure, auth headers, write flags, and every business component URI checked against QAD's Security Administration Guide), a local mock QAD server 36/36 (password grant, then every event with its method, path, bearer, e-signature header and body), controls 8/8 (wrong password, bad bearer, no credentials, HTTP Basic, missing e-signature token, e-signature token, missing payload field, non-JSON body) and live probes 10/10 passed. The probes checked QAD's public guides and called QAD's own hosted sign-in environment with fake credentials only: the token endpoint and the API both answer as the template expects. QAD Adaptive runs per customer with no public sandbox, so no authenticated call has run. See `TEST.md` in the package.

## Suggested branches

* `feat/rest-api-route-qad-adaptive-erp` (broker template)
* `feat/docs-rest-api-qad-adaptive-erp` (this page)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.