Admin Service
The Admin Service (/admin/) provides full CRUD operations for managing promotions, budgets, coupons, and master data via OData V4 with Fiori Elements support.
/admin/ — not /odata/v4/admin/Some older integration notes reference /odata/v4/admin/Promotions. That path returns 404 — it does not exist. CAP services normally default to /odata/v4/<service>, but the DRE admin service intentionally mounts at /admin/ via the @path: '/admin' service annotation. Always use /admin/ as the base path.
Overview
| Property | Value |
|---|---|
| Base Path | /admin/ |
| Protocol | OData V4 |
| Auth | Admin (full), PromotionManager (read), BudgetManager (budgets) |
| Draft Support | Yes, for most entities |
Promotions
GET /admin/Promotions
POST /admin/Promotions
GET /admin/Promotions(<ID>)
PATCH /admin/Promotions(<ID>)
DELETE /admin/Promotions(<ID>)
Draft-enabled with custom actions:
| Action | Description |
|---|---|
activate() | Transition promotion to ACTIVE status |
deactivate() | Transition promotion to INACTIVE status |
Navigation Properties
| Property | Target | Description |
|---|---|---|
posGroups | PromotionPosGroups | POS group assignments |
calculationConfig | CalculationConfigs | Calculation settings |
campaign | Campaigns | Optional campaign grouping |
Inverse Associations
Conditions and DiscountActions point back to a Promotion via their own
promotion association — they are NOT exposed as forward navigation
properties on Promotions. Query them via filter, e.g.
GET /admin/Conditions?$filter=promotion_ID eq <ID> or
GET /admin/DiscountActions?$filter=promotion_ID eq <ID>.
Related Entities (Auto-Exposed)
| Entity | Description |
|---|---|
| Conditions | Condition definitions with virtual parameterSummary |
| ConditionValueListItems | Value list items for conditions |
| ConditionArticleListItems | Article list items for conditions |
| PromotionPosGroups | Promotion-to-POS group junction |
Articles
GET /admin/Articles
POST /admin/Articles
GET /admin/Articles(<ID>)
PATCH /admin/Articles(<ID>)
DELETE /admin/Articles(<ID>)
Draft-enabled. Product master data (article number, EAN, manufacturer, category).
Article Groups
GET /admin/ArticleGroups
POST /admin/ArticleGroups
GET /admin/ArticleGroups(<ID>)
PATCH /admin/ArticleGroups(<ID>)
DELETE /admin/ArticleGroups(<ID>)
Draft-enabled. Hierarchical article groupings for condition targeting.
POS Groups
GET /admin/PosGroups
POST /admin/PosGroups
GET /admin/PosGroups(<ID>)
PATCH /admin/PosGroups(<ID>)
DELETE /admin/PosGroups(<ID>)
Draft-enabled. Store segmentation for targeted promotions.
Priority Groups
GET /admin/PriorityGroups
POST /admin/PriorityGroups
GET /admin/PriorityGroups(<ID>)
PATCH /admin/PriorityGroups(<ID>)
DELETE /admin/PriorityGroups(<ID>)
Draft-enabled. Controls promotion execution ordering. Linked to promotions via PriorityGroupPromotions.
Mutual Exclusion Groups
GET /admin/MutualExclusionGroups
POST /admin/MutualExclusionGroups
GET /admin/MutualExclusionGroups(<ID>)
PATCH /admin/MutualExclusionGroups(<ID>)
DELETE /admin/MutualExclusionGroups(<ID>)
Draft-enabled. Prevents conflicting promotions from being applied together.
Coupon Types
GET /admin/CouponTypes
POST /admin/CouponTypes
GET /admin/CouponTypes(<ID>)
PATCH /admin/CouponTypes(<ID>)
DELETE /admin/CouponTypes(<ID>)
Draft-enabled with custom actions:
| Action | Parameters | Description |
|---|---|---|
generateCodes(numberOfCodes) | numberOfCodes: Integer | Generate coupon codes |
issueCoupon(customerId) | customerId: String | Issue a personalized digital coupon |
activate() | -- | Activate coupon type |
deactivate() | -- | Deactivate coupon type |
Related Entities
| Entity | Operations | Description |
|---|---|---|
| CouponCodes | Read only | Generated coupon codes (no direct insert/delete) |
| RedemptionLogs | Read only | Coupon redemption audit trail |
| CouponTypePromotions | CRUD | Junction linking coupon types to promotions |
Budgets
GET /admin/Budgets
POST /admin/Budgets
GET /admin/Budgets(<ID>)
PATCH /admin/Budgets(<ID>)
DELETE /admin/Budgets(<ID>)
Draft-enabled. Virtual fields: statusCriticality, utilization (computed at runtime).
Related Entities
| Entity | Operations | Description |
|---|---|---|
| BudgetPromotions | CRUD | Many-to-many junction to promotions |
| BudgetNotifications | CRUD | Threshold-based budget alerts |
| BudgetConsumptions | Read only | Budget consumption audit trail |
Stakeholders
GET /admin/Stakeholders
POST /admin/Stakeholders
GET /admin/Stakeholders(<ID>)
PATCH /admin/Stakeholders(<ID>)
DELETE /admin/Stakeholders(<ID>)
Draft-enabled. Budget funding parties. Virtual field: totalShareAcrossBudgets.
Related Entities
| Entity | Description |
|---|---|
| BudgetStakeholders | Junction with share percentages |
| ⚠️ DEPRECATED junction — kept for backward compatibility only; no active Fiori surface | |
| RechargeContributions | Budget contribution tracking per stakeholder |
Calculation Logs (Audit)
GET /admin/CalculationLogs
GET /admin/CalculationLogs(<ID>)
GET /admin/CalculationLogs(<ID>)/items
GET /admin/CalculationLogs(<ID>)/promotions
Read-only audit trail for transaction confirmations. Includes per-item (CalculationLogItems) and per-promotion (CalculationLogPromotions) details.
Notification Logs
GET /admin/NotificationLogs
GET /admin/NotificationLogs(<ID>)
Read-only audit trail for budget notification alerts.
Article Import Jobs
ArticleImportJobs / ArticleImportJobItems track imports submitted via
POST /pos/articles/import-batch only. They do not track imports submitted
via POST /api/v1/Articles:bulk-import. For PublicAPI bulk imports, use
ImportJobs + ImportJobErrors via the Public API.
These entities are deprecated for new integrations. A @deprecated
annotation will be added to the Public API projection. The Admin Service
view remains available for the Fiori monitoring UI (no Fiori UI change planned).
GET /admin/ArticleImportJobs
GET /admin/ArticleImportJobs(<ID>)
GET /admin/ArticleImportJobs(<ID>)/items
Read-only. Monitors POS batch article imports triggered via POST /pos/articles/import-batch. ArticleImportJobItems provides per-article results. statusCriticality and failedCriticality virtual fields enable color-coded status display in Fiori.
Code List Entities (Read-Only)
Enum lookup tables used by Fiori Elements for dropdown values:
| Entity | Values |
|---|---|
| PromotionStatuses | DRAFT, ACTIVE, INACTIVE, EXPIRED, ARCHIVED, PENDING_APPROVAL, APPROVED, REJECTED, PILOT |
| PromotionTypes | ARTICLE, RECEIPT, LOYALTY, BUNDLE, COUPON |
| ExclusivityLevels | NONE, PROMOTION, GROUP, GLOBAL |
| DiscountTypes | PERCENTAGE, ABSOLUTE, UNIT_PRICE |
| ApplicationQuantityModes | ALL, LIMITED, CHEAPEST, MOST_EXPENSIVE |
| CalculationModes | ADDITIVE, MULTIPLICATIVE |
| RoundingModes | ROUND_HALF_UP, ROUND_DOWN, ROUND_UP, NONE |
| SelectionTypes | ALL, CHEAPEST, MOST_EXPENSIVE, RANDOM |
| ArticleSources | MANUAL, IMPORTED |
| GroupTypes | BRAND, CATEGORY, CUSTOM |
| LogicalConnectors | AND, OR, NOT |
| ComparisonOperators | EQUALS, CONTAINS, STARTS_WITH, GREATER_THAN, LESS_THAN, BETWEEN, GTE, LTE |
| ConditionTypes | ARTICLE, ARTICLE_GROUP, ARTICLE_LIST, CUSTOMER_GROUP, RECEIPT_AMOUNT, ITEM_QUANTITY, PAYMENT_MEANS, PAYMENT_CARD, CUSTOMER, MANUFACTURER, ADDITIONAL_FIELD, CREDIT_CARD_BIN, USER_DEFINED, LOYALTY_ACCOUNT, MANUAL_DISCOUNT, CHANNEL, TIME_WINDOW, TIME_PERIOD |
| ConditionValueCategories | ARTICLE_NUMBER, ARTICLE_GROUP_ID, CUSTOMER_GROUP_ID, CARD_TYPE, BIN_PREFIX, LOYALTY_TIER, REASON_CODE, PAYMENT_MEANS, CUSTOMER_ID, MANUFACTURER_ID, CHANNEL |
| ActionTypes | ARTICLE, ARTICLE_GROUP, ARTICLE_LIST, RECEIPT, SCALED_RECEIPT, BUNDLE, POST_PURCHASE_COUPON, LOYALTY, QUANTITY_TIER, FREE_ITEM |
| DistributionModes | PROPORTIONAL, EQUAL, HIGHEST_FIRST |
| ExclusionTypes | ARTICLE, ARTICLE_GROUP, ARTICLE_LIST, MANUFACTURER |
| ResolutionStrategies | HIGHEST_DISCOUNT, LOWEST_DISCOUNT |
| BudgetStatuses | DRAFT, SCHEDULED, ACTIVE, EXHAUSTED, EXPIRED |
| CouponCodeTypes | GENERIC, INDIVIDUAL |
| CouponStatuses | ACTIVE, INACTIVE |
| CouponCodeStatuses | CREATED, ACTIVE, RESERVED, REDEEMED, EXPIRED, CANCELLED |
| StakeholderTypes | SUPPLIER, BRAND, INTERNAL, EXTERNAL_SUPPLIER |
| CalculationLogStatuses | CALCULATED, FAILED |
| LoyaltyActionTypes | ADD_FIXED, MULTIPLY_POINTS, CURRENCY_TO_POINTS, SUBTRACT_POINTS |
| LoyaltyTargetScopes | ARTICLE, ARTICLE_GROUP, ARTICLE_LIST, ALL_ITEMS |
Authorization
| Role | Access |
|---|---|
| Admin | Full CRUD on all entities |
| PromotionManager | Read access to all entities |
| BudgetManager | Read + Update on Budgets and related entities |
Draft Editing
Most entities support OData draft editing:
POST /admin/PromotionswithIsActiveEntity: falseto create a draftPATCH /admin/Promotions(ID=<id>,IsActiveEntity=false)to edit a draftPOST /admin/Promotions(ID=<id>,IsActiveEntity=false)/draftActivateto activatePOST /admin/Promotions(ID=<id>,IsActiveEntity=true)/draftEditto edit an active entity