Skip to content

API Calls

Base: https://api.g3nretailstack.com/ppm

Source of truth: /internal-docs/ppm-openapi.yaml/ppm/openapi.yaml

Notes: samples are schema-derived placeholders. Replace placeholder values (ORGCODE, SESSION_GUID, etc.) with real values.

Inventory

MethodPathSummaryRequest schemaResponse schema
POST/commentAdd comment (draft)CommentAddRequestCommentEnvelope
POST/comment/getGet comment (draft)CommentGetRequestCommentEnvelope
POST/comment/listList comments (draft)CommentListRequestCommentListEnvelope
POST/comment/reportReport top-N largest comments (draft)CommentReportRequestCommentReportEnvelope
POST/comment/reviseRevise comment (draft)CommentReviseRequestCommentEnvelope
POST/comment/statusUpdate comment status (draft)CommentStatusRequestCommentEnvelope
POST/commission-rule/getGet commission rule by rule_idNoneEnvelope
POST/commission-rule/listList commission rules with optional status filterNoneEnvelope
POST/commission-rule/setCreate or update a commission ruleNoneEnvelope
POST/commission-rule/status/setUpdate commission rule statusNoneEnvelope
POST/coupon/createCreate a coupon codeNoneEnvelope
POST/coupon/getGet a coupon code by codeNoneEnvelope
POST/coupon/listList coupon codesNoneEnvelope
POST/coupon/redeemRedeem a coupon codeNoneEnvelope
POST/coupon/status/setSet coupon code statusNoneEnvelope
POST/coupon/validateValidate a coupon code without redeemingNoneEnvelope
POST/dynamic-rule/getGet dynamic pricing rule (draft)DynamicPricingRuleGetRequestDynamicPricingRuleEnvelope
POST/dynamic-rule/listList dynamic pricing rules (draft)DynamicPricingRuleListRequestDynamicPricingRuleListEnvelope
POST/dynamic-rule/setCreate or update dynamic pricing rule (draft)DynamicPricingRuleSetRequestDynamicPricingRuleEnvelope
POST/dynamic-rule/status/setSet dynamic pricing rule status (draft)DynamicPricingRuleStatusSetRequestDynamicPricingRuleEnvelope
POST/fx/rate/getGet an FX rate by ID or currency pairFxRateGetRequestFxRateEnvelope
POST/fx/rate/listList FX rates with optional currency filtersFxRateListRequestFxRateListEnvelope
POST/fx/rate/setCreate or update an FX rateFxRateSetRequestFxRateEnvelope
POST/inbox/createCreate inbox notification (draft)InboxCreateRequestInboxEnvelope
POST/inbox/getGet inbox notification (draft)InboxGetRequestInboxEnvelope
POST/inbox/listList inbox notifications (draft)InboxListRequestInboxListEnvelope
POST/inbox/stateUpdate inbox state (draft)InboxStateRequestInboxEnvelope
POST/inbox/statusUpdate inbox status (draft)InboxStatusRequestInboxEnvelope
POST/installment-plan/getFetch an installment plan by IDNoneEnvelope
POST/installment-plan/listList installment plans with optional status filterNoneEnvelope
POST/installment-plan/setCreate or update an installment/layaway planNoneEnvelope
POST/installment-plan/status/setUpdate installment plan statusNoneEnvelope
POST/policy/getGet pricing policy (draft)PricePolicyGetRequestPricePolicyEnvelope
POST/policy/setSet pricing policy (draft)PricePolicySetRequestPricePolicyEnvelope
POST/price-list/assignAssign price list to customer (draft)PriceListAssignRequestPriceListAssignmentEnvelope
POST/price-list/assign/clearClear price list assignment (draft)PriceListAssignClearRequestPriceListAssignmentEnvelope
POST/price-list/assignmentsList price list assignments (draft)PriceListAssignmentsRequestPriceListAssignmentListEnvelope
POST/price-list/getGet price list (draft)PriceListGetRequestPriceListEnvelope
POST/price-list/listList price lists (draft)PriceListListRequestPriceListListEnvelope
POST/price-list/resolveResolve price list assignment (draft)PriceListResolveRequestPriceListAssignmentEnvelope
POST/price-list/setCreate or update price list (draft)PriceListSetRequestPriceListEnvelope
POST/price-list/status/setSet price list status (draft)PriceListStatusSetRequestPriceListEnvelope
POST/price-zone/assignAssign logical facility to price zone (draft)PriceZoneAssignRequestPriceZoneAssignmentEnvelope
POST/price-zone/assign/clearClear price zone assignment (draft)PriceZoneAssignClearRequestPriceZoneAssignmentEnvelope
POST/price-zone/assignmentsList price zone assignments (draft)PriceZoneAssignmentsRequestPriceZoneAssignmentListEnvelope
POST/price-zone/getGet price zone (draft)PriceZoneGetRequestPriceZoneEnvelope
POST/price-zone/listList price zones (draft)PriceZoneListRequestPriceZoneListEnvelope
POST/price-zone/resolveResolve price zone for logical facility (draft)PriceZoneResolveRequestPriceZoneAssignmentEnvelope
POST/price-zone/setCreate or update price zone (draft)PriceZoneSetRequestPriceZoneEnvelope
POST/price-zone/status/setSet price zone status (draft)PriceZoneStatusSetRequestPriceZoneEnvelope
POST/price/approval/approveApprove price entry (draft)PriceApprovalApproveRequestPriceEntryEnvelope
POST/price/approval/rejectReject price entry (draft)PriceApprovalRejectRequestPriceEntryEnvelope
POST/price/approval/submitSubmit price entry for approval (draft)PriceApprovalSubmitRequestPriceEntryEnvelope
POST/price/getGet price entry (draft)PriceEntryGetRequestPriceEntryEnvelope
POST/price/listList price entries (draft)PriceEntryListRequestPriceEntryListEnvelope
POST/price/resolveResolve price (draft)PriceResolveRequestPriceResolveEnvelope
POST/price/setCreate or update price entry (draft)PriceEntrySetRequestPriceEntryEnvelope
POST/promotion/createCreate promotion (draft)PromotionCreateRequestPromotionEnvelope
POST/promotion/endEnd promotion (draft)PromotionEndRequestPromotionEnvelope
POST/promotion/getGet promotion (draft)PromotionGetRequestPromotionEnvelope
POST/promotion/listList promotions (draft)PromotionListRequestPromotionListEnvelope
POST/recommendation/getGet price recommendation (draft)PriceRecommendationGetRequestPriceRecommendationEnvelope
POST/recommendation/listList price recommendations (draft)PriceRecommendationListRequestPriceRecommendationListEnvelope
POST/recommendation/setCreate or update price recommendation (draft)PriceRecommendationSetRequestPriceRecommendationEnvelope
POST/recommendation/status/setSet price recommendation status (draft)PriceRecommendationStatusSetRequestPriceRecommendationEnvelope
POST/rental-rate/getGet a rental rate by IDRentalRateGetRequestRentalRateEnvelope
POST/rental-rate/listList rental ratesRentalRateListRequestRentalRateListEnvelope
POST/rental-rate/setCreate or update a rental rateRentalRateSetRequestRentalRateEnvelope
POST/rental-rate/status/setUpdate rental rate statusRentalRateStatusSetRequestRentalRateEnvelope
GET/statHealth checkNoneEnvelope
POST/subscription-instance/cancelCancel subscription instance (L4)NoneEnvelope
POST/subscription-instance/createCreate subscription instance (L4)NoneEnvelope
POST/subscription-instance/getGet subscription instance (L4)NoneEnvelope
POST/subscription-instance/listList subscription instances (L4)NoneEnvelope
POST/subscription-instance/pausePause subscription instance (L4)NoneEnvelope
POST/subscription-instance/resumeResume subscription instance (L4)NoneEnvelope
POST/subscription-plan/getGet a subscription plan by IDSubscriptionPlanGetRequestSubscriptionPlanEnvelope
POST/subscription-plan/listList subscription plans with optional status filterSubscriptionPlanListRequestSubscriptionPlanListEnvelope
POST/subscription-plan/setCreate or update a subscription planSubscriptionPlanSetRequestSubscriptionPlanEnvelope
POST/subscription-plan/status/setUpdate subscription plan statusSubscriptionPlanStatusSetRequestSubscriptionPlanEnvelope
POST/trade-agreement/getFetch a trade agreement by IDNoneEnvelope
POST/trade-agreement/listList trade agreements with optional status filterNoneEnvelope
POST/trade-agreement/setCreate or update a trade agreementNoneEnvelope
POST/trade-agreement/status/setUpdate trade agreement statusNoneEnvelope
POST/uom/getGet UoM conversion (draft)UomConversionGetRequestUomConversionEnvelope
POST/uom/listList UoM conversions (draft)UomConversionListRequestUomConversionListEnvelope
POST/uom/setSet UoM conversion (draft)UomConversionSetRequestUomConversionEnvelope

Call details

POST /comment

Purpose: Add comment (draft)

Notes: Add comment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: CommentAddRequest Response schema: CommentEnvelope

Sample request (schema-derived)

json
{
  "target_type": "string",
  "target_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "comment": {
      "comment_id": "string",
      "target_type": "string",
      "target_id": "string",
      "status": "current",
      "current_revision": 0,
      "created_at": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /comment/get

Purpose: Get comment (draft)

Notes: Get comment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: CommentGetRequest Response schema: CommentEnvelope

Sample request (schema-derived)

json
{
  "comment_id": "string",
  "target_type": "string",
  "target_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "comment": {
      "comment_id": "string",
      "target_type": "string",
      "target_id": "string",
      "status": "current",
      "current_revision": 0,
      "created_at": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /comment/list

Purpose: List comments (draft)

Notes: List comments (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: CommentListRequest Response schema: CommentListEnvelope

Sample request (schema-derived)

json
{
  "target_type": "string",
  "target_id": "string",
  "user_guid": "USER_GUID"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "comment_id": "string",
        "target_type": "string",
        "target_id": "string",
        "status": "current",
        "current_revision": 0,
        "created_at": "2026-01-01T00:00:00Z"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /comment/report

Purpose: Report top-N largest comments (draft)

Notes: Report top-N largest comments (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: CommentReportRequest Response schema: CommentReportEnvelope

Sample request (schema-derived)

json
{
  "limit": 8
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "comment_id": "string",
        "target_type": "string",
        "target_id": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment/report",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /comment/revise

Purpose: Revise comment (draft)

Notes: Revise comment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: CommentReviseRequest Response schema: CommentEnvelope

Sample request (schema-derived)

json
{
  "comment_id": "string",
  "target_type": "string",
  "target_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "comment": {
      "comment_id": "string",
      "target_type": "string",
      "target_id": "string",
      "status": "current",
      "current_revision": 0,
      "created_at": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment/revise",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /comment/status

Purpose: Update comment status (draft)

Notes: Update comment status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: CommentStatusRequest Response schema: CommentEnvelope

Sample request (schema-derived)

json
{
  "comment_id": "string",
  "target_type": "string",
  "target_id": "string",
  "status": "current"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "comment": {
      "comment_id": "string",
      "target_type": "string",
      "target_id": "string",
      "status": "current",
      "current_revision": 0,
      "created_at": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /comment/status",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /commission-rule/get

Purpose: Get commission rule by rule_id

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /commission-rule/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /commission-rule/list

Purpose: List commission rules with optional status filter

Notes: Paginated; use limit and next_token.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /commission-rule/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /commission-rule/set

Purpose: Create or update a commission rule

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /commission-rule/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /commission-rule/status/set

Purpose: Update commission rule status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /commission-rule/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/create

Purpose: Create a coupon code

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/create",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/get

Purpose: Get a coupon code by code

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/list

Purpose: List coupon codes

Notes: Paginated; use limit and next_token.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/redeem

Purpose: Redeem a coupon code

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/redeem",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/status/set

Purpose: Set coupon code status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /coupon/validate

Purpose: Validate a coupon code without redeeming

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /coupon/validate",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /dynamic-rule/get

Purpose: Get dynamic pricing rule (draft)

Notes: Get dynamic pricing rule (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: DynamicPricingRuleGetRequest Response schema: DynamicPricingRuleEnvelope

Sample request (schema-derived)

json
{
  "rule_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "dynamic_rule": {
      "rule_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /dynamic-rule/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /dynamic-rule/list

Purpose: List dynamic pricing rules (draft)

Notes: List dynamic pricing rules (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: DynamicPricingRuleListRequest Response schema: DynamicPricingRuleListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "channel_code": "pos_generic",
  "logical_guid": "LOGICAL_GUID"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "dynamic_rules": [
      {
        "rule_id": "string",
        "status": "active",
        "name": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /dynamic-rule/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /dynamic-rule/set

Purpose: Create or update dynamic pricing rule (draft)

Notes: Create or update dynamic pricing rule (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: DynamicPricingRuleSetRequest Response schema: DynamicPricingRuleEnvelope

Sample request (schema-derived)

json
{
  "dynamic_rule": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ],
    "adjustment": {
      "type": "multiplier"
    }
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "dynamic_rule": {
      "rule_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /dynamic-rule/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /dynamic-rule/status/set

Purpose: Set dynamic pricing rule status (draft)

Notes: Set dynamic pricing rule status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: DynamicPricingRuleStatusSetRequest Response schema: DynamicPricingRuleEnvelope

Sample request (schema-derived)

json
{
  "rule_id": "string",
  "status": "active",
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "dynamic_rule": {
      "rule_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /dynamic-rule/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /fx/rate/get

Purpose: Get an FX rate by ID or currency pair

Request schema: FxRateGetRequest Response schema: FxRateEnvelope

Sample request (schema-derived)

json
{
  "fx_rate_id": "string",
  "base_currency": "string",
  "target_currency": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "fx_rate": {
      "fx_rate_id": "string",
      "base_currency": "string",
      "target_currency": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /fx/rate/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /fx/rate/list

Purpose: List FX rates with optional currency filters

Notes: Paginated; use limit and next_token.

Request schema: FxRateListRequest Response schema: FxRateListEnvelope

Sample request (schema-derived)

json
{
  "base_currency": "string",
  "target_currency": "string",
  "limit": 8
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "fx_rates": [
      {
        "fx_rate_id": "string",
        "base_currency": "string",
        "target_currency": "string"
      }
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /fx/rate/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /fx/rate/set

Purpose: Create or update an FX rate

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: FxRateSetRequest Response schema: FxRateEnvelope

Sample request (schema-derived)

json
{
  "fx_rate": {
    "base_currency": "string",
    "target_currency": "string",
    "rate": 0,
    "effective_from": "2026-01-01T00:00:00Z"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "fx_rate": {
      "fx_rate_id": "string",
      "base_currency": "string",
      "target_currency": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /fx/rate/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /inbox/create

Purpose: Create inbox notification (draft)

Notes: Create inbox notification (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: InboxCreateRequest Response schema: InboxEnvelope

Sample request (schema-derived)

json
{
  "team_guid": "string",
  "title": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "notification": {
      "notification_id": "string",
      "team_guid": "string",
      "status": "inbox",
      "state": "pending",
      "priority": "low",
      "title": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /inbox/create",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /inbox/get

Purpose: Get inbox notification (draft)

Notes: Get inbox notification (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: InboxGetRequest Response schema: InboxEnvelope

Sample request (schema-derived)

json
{
  "notification_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "notification": {
      "notification_id": "string",
      "team_guid": "string",
      "status": "inbox",
      "state": "pending",
      "priority": "low",
      "title": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /inbox/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /inbox/list

Purpose: List inbox notifications (draft)

Notes: List inbox notifications (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: InboxListRequest Response schema: InboxListEnvelope

Sample request (schema-derived)

json
{
  "team_guid": "string",
  "org_wide": false,
  "status": "inbox"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "notification_id": "string",
        "team_guid": "string",
        "status": "inbox",
        "state": "pending",
        "priority": "low",
        "title": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /inbox/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /inbox/state

Purpose: Update inbox state (draft)

Notes: Update inbox state (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: InboxStateRequest Response schema: InboxEnvelope

Sample request (schema-derived)

json
{
  "notification_id": "string",
  "state": "pending"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "notification": {
      "notification_id": "string",
      "team_guid": "string",
      "status": "inbox",
      "state": "pending",
      "priority": "low",
      "title": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /inbox/state",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /inbox/status

Purpose: Update inbox status (draft)

Notes: Update inbox status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: InboxStatusRequest Response schema: InboxEnvelope

Sample request (schema-derived)

json
{
  "notification_id": "string",
  "status": "inbox"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "notification": {
      "notification_id": "string",
      "team_guid": "string",
      "status": "inbox",
      "state": "pending",
      "priority": "low",
      "title": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /inbox/status",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /installment-plan/get

Purpose: Fetch an installment plan by ID

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /installment-plan/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /installment-plan/list

Purpose: List installment plans with optional status filter

Notes: Paginated; use limit and next_token.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /installment-plan/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /installment-plan/set

Purpose: Create or update an installment/layaway plan

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /installment-plan/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /installment-plan/status/set

Purpose: Update installment plan status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /installment-plan/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /policy/get

Purpose: Get pricing policy (draft)

Notes: Get pricing policy (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PricePolicyGetRequest Response schema: PricePolicyEnvelope

Sample request (schema-derived)

json
{
  "policy_version": "string",
  "effective_as_of": "2026-01-01T00:00:00Z"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "policy": {
      "policy_version": "string",
      "effective_from": "2026-01-01T00:00:00Z",
      "effective_to": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /policy/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /policy/set

Purpose: Set pricing policy (draft)

Notes: Set pricing policy (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PricePolicySetRequest Response schema: PricePolicyEnvelope

Sample request (schema-derived)

json
{
  "policy": {
    "policy_version": "string",
    "effective_from": "2026-01-01T00:00:00Z",
    "effective_to": "2026-01-01T00:00:00Z"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "policy": {
      "policy_version": "string",
      "effective_from": "2026-01-01T00:00:00Z",
      "effective_to": "2026-01-01T00:00:00Z"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /policy/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/assign

Purpose: Assign price list to customer (draft)

Notes: Assign price list to customer (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceListAssignRequest Response schema: PriceListAssignmentEnvelope

Sample request (schema-derived)

json
{
  "assignment": {
    "customer_ref": "string",
    "price_list_code": "CODE1"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "customer_ref": "string",
      "price_list_code": "CODE1",
      "channel_code": "pos_generic"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/assign",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/assign/clear

Purpose: Clear price list assignment (draft)

Notes: Clear price list assignment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceListAssignClearRequest Response schema: PriceListAssignmentEnvelope

Sample request (schema-derived)

json
{
  "customer_ref": "string",
  "price_list_code": "CODE1",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "customer_ref": "string",
      "price_list_code": "CODE1",
      "channel_code": "pos_generic"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/assign/clear",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/assignments

Purpose: List price list assignments (draft)

Notes: List price list assignments (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 300ms).

Request schema: PriceListAssignmentsRequest Response schema: PriceListAssignmentListEnvelope

Sample request (schema-derived)

json
{
  "customer_ref": "string",
  "price_list_code": "CODE1",
  "limit": 8
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignments": [
      {
        "customer_ref": "string",
        "price_list_code": "CODE1",
        "channel_code": "pos_generic"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/assignments",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/get

Purpose: Get price list (draft)

Notes: Get price list (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceListGetRequest Response schema: PriceListEnvelope

Sample request (schema-derived)

json
{
  "price_list_code": "CODE1"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_list": {
      "price_list_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/list

Purpose: List price lists (draft)

Notes: List price lists (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: PriceListListRequest Response schema: PriceListListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "limit": 8,
  "next_token": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_lists": [
      {
        "price_list_code": "CODE1",
        "status": "active",
        "name": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/resolve

Purpose: Resolve price list assignment (draft)

Notes: Resolve price list assignment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceListResolveRequest Response schema: PriceListAssignmentEnvelope

Sample request (schema-derived)

json
{
  "customer_ref": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "customer_ref": "string",
      "price_list_code": "CODE1",
      "channel_code": "pos_generic"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/resolve",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/set

Purpose: Create or update price list (draft)

Notes: Create or update price list (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceListSetRequest Response schema: PriceListEnvelope

Sample request (schema-derived)

json
{
  "price_list": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "price_list_code": "CODE1",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ]
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_list": {
      "price_list_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-list/status/set

Purpose: Set price list status (draft)

Notes: Set price list status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceListStatusSetRequest Response schema: PriceListEnvelope

Sample request (schema-derived)

json
{
  "price_list_code": "CODE1",
  "status": "active",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_list": {
      "price_list_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-list/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/assign

Purpose: Assign logical facility to price zone (draft)

Notes: Assign logical facility to price zone (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceZoneAssignRequest Response schema: PriceZoneAssignmentEnvelope

Sample request (schema-derived)

json
{
  "logical_guid": "LOGICAL_GUID",
  "price_zone_code": "CODE1",
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "logical_guid": "LOGICAL_GUID",
      "price_zone_code": "CODE1",
      "status": "active"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/assign",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/assign/clear

Purpose: Clear price zone assignment (draft)

Notes: Clear price zone assignment (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceZoneAssignClearRequest Response schema: PriceZoneAssignmentEnvelope

Sample request (schema-derived)

json
{
  "logical_guid": "LOGICAL_GUID",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "logical_guid": "LOGICAL_GUID",
      "price_zone_code": "CODE1",
      "status": "active"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/assign/clear",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/assignments

Purpose: List price zone assignments (draft)

Notes: List price zone assignments (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 300ms).

Request schema: PriceZoneAssignmentsRequest Response schema: PriceZoneAssignmentListEnvelope

Sample request (schema-derived)

json
{
  "logical_guid": "LOGICAL_GUID",
  "price_zone_code": "CODE1",
  "limit": 8
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignments": [
      {
        "logical_guid": "LOGICAL_GUID",
        "price_zone_code": "CODE1",
        "status": "active"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/assignments",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/get

Purpose: Get price zone (draft)

Notes: Get price zone (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceZoneGetRequest Response schema: PriceZoneEnvelope

Sample request (schema-derived)

json
{
  "price_zone_code": "CODE1"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_zone": {
      "price_zone_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/list

Purpose: List price zones (draft)

Notes: List price zones (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: PriceZoneListRequest Response schema: PriceZoneListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "limit": 8,
  "next_token": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_zones": [
      {
        "price_zone_code": "CODE1",
        "status": "active",
        "name": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/resolve

Purpose: Resolve price zone for logical facility (draft)

Notes: Resolve price zone for logical facility (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceZoneResolveRequest Response schema: PriceZoneAssignmentEnvelope

Sample request (schema-derived)

json
{
  "logical_guid": "LOGICAL_GUID"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "assignment": {
      "logical_guid": "LOGICAL_GUID",
      "price_zone_code": "CODE1",
      "status": "active"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/resolve",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/set

Purpose: Create or update price zone (draft)

Notes: Create or update price zone (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceZoneSetRequest Response schema: PriceZoneEnvelope

Sample request (schema-derived)

json
{
  "price_zone": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "price_zone_code": "CODE1",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ]
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_zone": {
      "price_zone_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price-zone/status/set

Purpose: Set price zone status (draft)

Notes: Set price zone status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceZoneStatusSetRequest Response schema: PriceZoneEnvelope

Sample request (schema-derived)

json
{
  "price_zone_code": "CODE1",
  "status": "active",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_zone": {
      "price_zone_code": "CODE1",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price-zone/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/approval/approve

Purpose: Approve price entry (draft)

Notes: Approve price entry (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 400ms).

Request schema: PriceApprovalApproveRequest Response schema: PriceEntryEnvelope

Sample request (schema-derived)

json
{
  "price_entry_id": "string",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entry": {
      "price_entry_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/approval/approve",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/approval/reject

Purpose: Reject price entry (draft)

Notes: Reject price entry (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 400ms).

Request schema: PriceApprovalRejectRequest Response schema: PriceEntryEnvelope

Sample request (schema-derived)

json
{
  "price_entry_id": "string",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entry": {
      "price_entry_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/approval/reject",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/approval/submit

Purpose: Submit price entry for approval (draft)

Notes: Submit price entry for approval (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 400ms).

Request schema: PriceApprovalSubmitRequest Response schema: PriceEntryEnvelope

Sample request (schema-derived)

json
{
  "price_entry_id": "string",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entry": {
      "price_entry_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/approval/submit",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/get

Purpose: Get price entry (draft)

Notes: Get price entry (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceEntryGetRequest Response schema: PriceEntryEnvelope

Sample request (schema-derived)

json
{
  "price_entry_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entry": {
      "price_entry_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/list

Purpose: List price entries (draft)

Notes: List price entries (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: PriceEntryListRequest Response schema: PriceEntryListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "variant_id": "VARIANT_ID",
  "sku": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entries": [
      {
        "price_entry_id": "string",
        "status": "active",
        "variant_id": "VARIANT_ID"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/resolve

Purpose: Resolve price (draft)

Notes: Resolve price (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier C (p95 150ms, p99 400ms).

Request schema: PriceResolveRequest Response schema: PriceResolveEnvelope

Sample request (schema-derived)

json
{
  "lines": [
    {
      "qty": {
        "qty": null,
        "uom": null
      }
    }
  ],
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "items": [
      {
        "qty": {
          "qty": null,
          "uom": null
        }
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/resolve",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /price/set

Purpose: Create or update price entry (draft)

Notes: Create or update price entry (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceEntrySetRequest Response schema: PriceEntryEnvelope

Sample request (schema-derived)

json
{
  "price_entry": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ]
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "price_entry": {
      "price_entry_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /price/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /promotion/create

Purpose: Create promotion (draft)

Notes: Create promotion (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PromotionCreateRequest Response schema: PromotionEnvelope

Sample request (schema-derived)

json
{
  "promotion": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ]
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "promotion": {
      "promotion_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /promotion/create",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /promotion/end

Purpose: End promotion (draft)

Notes: End promotion (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: PromotionEndRequest Response schema: PromotionEnvelope

Sample request (schema-derived)

json
{
  "promotion_id": "string",
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "promotion": {
      "promotion_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /promotion/end",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /promotion/get

Purpose: Get promotion (draft)

Notes: Get promotion (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PromotionGetRequest Response schema: PromotionEnvelope

Sample request (schema-derived)

json
{
  "promotion_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "promotion": {
      "promotion_id": "string",
      "status": "active",
      "name": "string"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /promotion/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /promotion/list

Purpose: List promotions (draft)

Notes: List promotions (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: PromotionListRequest Response schema: PromotionListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "code": "CODE1",
  "active_at": "2026-01-01T00:00:00Z"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "promotions": [
      {
        "promotion_id": "string",
        "status": "active",
        "name": "string"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /promotion/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /recommendation/get

Purpose: Get price recommendation (draft)

Notes: Get price recommendation (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: PriceRecommendationGetRequest Response schema: PriceRecommendationEnvelope

Sample request (schema-derived)

json
{
  "recommendation_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "recommendation": {
      "recommendation_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID",
      "recommended_price": {
        "currency": "string",
        "amount": 0
      }
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /recommendation/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /recommendation/list

Purpose: List price recommendations (draft)

Notes: List price recommendations (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: PriceRecommendationListRequest Response schema: PriceRecommendationListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "variant_id": "VARIANT_ID",
  "channel_code": "pos_generic"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "recommendations": [
      {
        "recommendation_id": "string",
        "status": "active",
        "variant_id": "VARIANT_ID",
        "recommended_price": {
          "currency": null,
          "amount": null
        }
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /recommendation/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /recommendation/set

Purpose: Create or update price recommendation (draft)

Notes: Create or update price recommendation (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceRecommendationSetRequest Response schema: PriceRecommendationEnvelope

Sample request (schema-derived)

json
{
  "recommendation": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ],
    "variant_id": "VARIANT_ID",
    "recommended_price": {
      "currency": "string",
      "amount": 0
    }
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "recommendation": {
      "recommendation_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID",
      "recommended_price": {
        "currency": "string",
        "amount": 0
      }
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /recommendation/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /recommendation/status/set

Purpose: Set price recommendation status (draft)

Notes: Set price recommendation status (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier A (p95 500ms).

Request schema: PriceRecommendationStatusSetRequest Response schema: PriceRecommendationEnvelope

Sample request (schema-derived)

json
{
  "recommendation_id": "string",
  "status": "active",
  "expected_revision": 0,
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "recommendation": {
      "recommendation_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID",
      "recommended_price": {
        "currency": "string",
        "amount": 0
      }
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /recommendation/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /rental-rate/get

Purpose: Get a rental rate by ID

Request schema: RentalRateGetRequest Response schema: RentalRateEnvelope

Sample request (schema-derived)

json
{
  "rate_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "rental_rate": {
      "rate_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /rental-rate/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /rental-rate/list

Purpose: List rental rates

Notes: Paginated; use limit and next_token.

Request schema: RentalRateListRequest Response schema: RentalRateListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "limit": 8,
  "next_token": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "rental_rates": [
      {
        "rate_id": "string",
        "code": "CODE1",
        "caption": "Example caption"
      }
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /rental-rate/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /rental-rate/set

Purpose: Create or update a rental rate

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: RentalRateSetRequest Response schema: RentalRateEnvelope

Sample request (schema-derived)

json
{
  "rental_rate": {
    "daily_rate_minor": 0,
    "currency": "string"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "rental_rate": {
      "rate_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /rental-rate/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /rental-rate/status/set

Purpose: Update rental rate status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: RentalRateStatusSetRequest Response schema: RentalRateEnvelope

Sample request (schema-derived)

json
{
  "rate_id": "string",
  "status": "draft",
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "rental_rate": {
      "rate_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /rental-rate/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

GET /stat

Purpose: Health check

Notes: Health check. Tenant routes require x-orgcode; /stat health checks do not. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier A (p95 500ms).

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "service": "string",
    "status": "active"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "GET /stat",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/cancel

Purpose: Cancel subscription instance (L4)

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/cancel",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/create

Purpose: Create subscription instance (L4)

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/create",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/get

Purpose: Get subscription instance (L4)

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/list

Purpose: List subscription instances (L4)

Notes: Paginated; use limit and next_token.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/pause

Purpose: Pause subscription instance (L4)

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/pause",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-instance/resume

Purpose: Resume subscription instance (L4)

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-instance/resume",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-plan/get

Purpose: Get a subscription plan by ID

Request schema: SubscriptionPlanGetRequest Response schema: SubscriptionPlanEnvelope

Sample request (schema-derived)

json
{
  "plan_id": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "subscription_plan": {
      "plan_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-plan/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-plan/list

Purpose: List subscription plans with optional status filter

Notes: Paginated; use limit and next_token.

Request schema: SubscriptionPlanListRequest Response schema: SubscriptionPlanListEnvelope

Sample request (schema-derived)

json
{
  "status": "active",
  "limit": 8,
  "next_token": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "subscription_plans": [
      {
        "plan_id": "string",
        "code": "CODE1",
        "caption": "Example caption"
      }
    ],
    "next_token": "string"
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-plan/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-plan/set

Purpose: Create or update a subscription plan

Notes: Upsert a subscription plan that defines recurring pricing contracts. Auth is via headers; org identity uses x-orgcode or body placement as documented. Route class Tier A (p95 500ms).

Request schema: SubscriptionPlanSetRequest Response schema: SubscriptionPlanEnvelope

Sample request (schema-derived)

json
{
  "subscription_plan": {
    "frequency": "daily",
    "price_minor": 0,
    "currency": "string"
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "subscription_plan": {
      "plan_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-plan/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /subscription-plan/status/set

Purpose: Update subscription plan status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: SubscriptionPlanStatusSetRequest Response schema: SubscriptionPlanEnvelope

Sample request (schema-derived)

json
{
  "plan_id": "string",
  "status": "draft",
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "subscription_plan": {
      "plan_id": "string",
      "code": "CODE1",
      "caption": "Example caption"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /subscription-plan/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /trade-agreement/get

Purpose: Fetch a trade agreement by ID

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /trade-agreement/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /trade-agreement/list

Purpose: List trade agreements with optional status filter

Notes: Paginated; use limit and next_token.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /trade-agreement/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /trade-agreement/set

Purpose: Create or update a trade agreement

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /trade-agreement/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /trade-agreement/status/set

Purpose: Update trade agreement status

Notes: If this updates a revisioned record, expected_revision is required.

Request schema: None Response schema: Envelope

Sample request (schema-derived)

json
{}

Sample response (shape-only)

json
{
  "success": true,
  "data": {},
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /trade-agreement/status/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /uom/get

Purpose: Get UoM conversion (draft)

Notes: Get UoM conversion (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Org-scoped reads may return 404 for non-associated callers (anti-enumeration). Route class Tier B (p95 300ms).

Request schema: UomConversionGetRequest Response schema: UomConversionEnvelope

Sample request (schema-derived)

json
{
  "variant_id": "VARIANT_ID",
  "from_uom": "string",
  "to_uom": "string"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "uom_conversion": {
      "conversion_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /uom/get",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /uom/list

Purpose: List UoM conversions (draft)

Notes: List UoM conversions (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. Paginated with limit/next_token (default 8; clamp 1–256). Route class Tier B (p95 300ms).

Request schema: UomConversionListRequest Response schema: UomConversionListEnvelope

Sample request (schema-derived)

json
{
  "variant_id": "VARIANT_ID"
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "uom_conversions": [
      {
        "conversion_id": "string",
        "status": "active",
        "variant_id": "VARIANT_ID"
      }
    ]
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /uom/list",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}

POST /uom/set

Purpose: Set UoM conversion (draft)

Notes: Set UoM conversion (draft). Auth is via headers; org identity uses x-orgcode or body placement as documented. If this updates a revisioned record, expected_revision is required (428 if missing; 409 on mismatch). Route class Tier B (p95 300ms).

Request schema: UomConversionSetRequest Response schema: UomConversionEnvelope

Sample request (schema-derived)

json
{
  "uom_conversion": {
    "request_context": {
      "orgcode": "ORGCODE",
      "actor": "string",
      "context_source": "session"
    },
    "reason": "example",
    "source_refs": [
      {
        "kind": null,
        "id": null
      }
    ]
  },
  "reason": "example",
  "source_refs": [
    {
      "kind": "string",
      "id": "string"
    }
  ]
}

Sample response (shape-only)

json
{
  "success": true,
  "data": {
    "uom_conversion": {
      "conversion_id": "string",
      "status": "active",
      "variant_id": "VARIANT_ID"
    }
  },
  "build": {
    "build_id": "MONDAY-0000000000"
  },
  "stats": {
    "call": "POST /uom/set",
    "service": "ppm",
    "timestamp_utc": "2026-01-01T00:00:00Z"
  }
}